Skip to content

Commit 5026834

Browse files
Merge pull request #227 from boostcampwm-2024/feature-be-#224
페이지에 이모지 필드 추가
2 parents a3049af + 3a32d22 commit 5026834

File tree

8 files changed

+44
-6
lines changed

8 files changed

+44
-6
lines changed

apps/backend/src/page/dtos/createPage.dto.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { ApiProperty } from '@nestjs/swagger';
2-
import { IsString, IsNumber, IsJSON } from 'class-validator';
2+
import { IsString, IsNumber, IsJSON, IsOptional } from 'class-validator';
33

44
export class CreatePageDto {
55
@ApiProperty({
@@ -29,4 +29,13 @@ export class CreatePageDto {
2929
})
3030
@IsNumber()
3131
y: number;
32+
33+
@ApiProperty({
34+
example: '📝',
35+
description: '페이지 이모지',
36+
required: false,
37+
})
38+
@IsString()
39+
@IsOptional()
40+
emoji?: string;
3241
}

apps/backend/src/page/dtos/updatePage.dto.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { IsString, IsJSON } from 'class-validator';
1+
import { IsString, IsJSON, IsOptional } from 'class-validator';
22
import { ApiProperty } from '@nestjs/swagger';
33

44
export class UpdatePageDto {
@@ -15,4 +15,13 @@ export class UpdatePageDto {
1515
})
1616
@IsJSON()
1717
content: JSON;
18+
19+
@ApiProperty({
20+
example: '📝',
21+
description: '페이지 이모지',
22+
required: false,
23+
})
24+
@IsString()
25+
@IsOptional()
26+
emoji?: string;
1827
}

apps/backend/src/page/page.controller.spec.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ describe('PageController', () => {
5858
updatedAt: newDate,
5959
version: 1,
6060
node: null,
61+
emoji: null,
6162
});
6263
const result = await controller.createPage(dto);
6364

@@ -141,6 +142,7 @@ describe('PageController', () => {
141142
createdAt: new Date(),
142143
updatedAt: new Date(),
143144
version: 1,
145+
emoji: null,
144146
};
145147

146148
jest.spyOn(pageService, 'findPageById').mockResolvedValue(expectedPage);

apps/backend/src/page/page.entity.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ export class Page {
3030
@VersionColumn()
3131
version: number;
3232

33+
@Column({ nullable: true })
34+
emoji: string | null;
35+
3336
// TODO:추가적인 메타데이터 컬럼들(user 기능 추가할때)
3437
// @Column('created_by')
3538
// createdBy: string;

apps/backend/src/page/page.repository.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ export class PageRepository extends Repository<Page> {
1414
select: {
1515
id: true,
1616
title: true,
17+
emoji: true,
1718
},
1819
});
1920
}

apps/backend/src/page/page.service.spec.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ describe('PageService', () => {
6868
updatedAt: newDate,
6969
version: 1,
7070
node: null,
71+
emoji: null,
7172
};
7273

7374
// 노드 엔티티
@@ -121,6 +122,7 @@ describe('PageService', () => {
121122
const dto: UpdatePageDto = {
122123
title: 'Updated Title',
123124
content: {} as JSON,
125+
emoji: '📝',
124126
};
125127
const originDate = new Date();
126128
const originPage: Page = {
@@ -131,6 +133,7 @@ describe('PageService', () => {
131133
createdAt: originDate,
132134
updatedAt: originDate,
133135
version: 1,
136+
emoji: null,
134137
};
135138
const newDate = new Date();
136139
const newPage: Page = {
@@ -141,6 +144,7 @@ describe('PageService', () => {
141144
createdAt: newDate,
142145
updatedAt: newDate,
143146
version: 1,
147+
emoji: '📝',
144148
};
145149

146150
jest.spyOn(pageRepository, 'findOneBy').mockResolvedValue(originPage);
@@ -177,6 +181,7 @@ describe('PageService', () => {
177181
createdAt: newDate,
178182
updatedAt: newDate,
179183
version: 1,
184+
emoji: null,
180185
};
181186
jest.spyOn(pageRepository, 'findOneBy').mockResolvedValue(expectedPage);
182187

apps/backend/src/page/page.service.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@ export class PageService {
1414
) {}
1515

1616
async createPage(dto: CreatePageDto): Promise<Page> {
17-
const { title, x, y } = dto;
17+
const { title, x, y, emoji } = dto;
1818

1919
// 노드부터 생성한다.
2020
const node = await this.nodeRepository.save({ title, x, y });
2121

2222
// 페이지를 생성한다.
23-
const page = await this.pageRepository.save({ title, content: {} });
23+
const page = await this.pageRepository.save({ title, content: {}, emoji });
2424

2525
// 페이지와 노드를 서로 연결하여 저장한다.
2626
node.page = page;
@@ -58,9 +58,12 @@ export class PageService {
5858
throw new PageNotFoundException();
5959
}
6060
// 페이지 정보를 갱신한다.
61-
const { title, content } = dto;
61+
const { title, content, emoji } = dto;
6262
page.title = title;
6363
page.content = content;
64+
if (emoji !== undefined) {
65+
page.emoji = emoji;
66+
}
6467

6568
return await this.pageRepository.save(page);
6669
}

apps/backend/src/yjs/yjs.service.spec.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import { Test, TestingModule } from '@nestjs/testing';
2+
import { PageService } from '../page/page.service';
23
import { EdgeService } from '../edge/edge.service';
34
import { NodeService } from '../node/node.service';
45
import { YjsService } from './yjs.service';
5-
import { PageService } from '../page/page.service';
6+
67
import { NodeCacheService } from '../node-cache/node-cache.service';
78

89
describe('PageService', () => {
@@ -272,6 +273,10 @@ describe('PageService', () => {
272273
provide: NodeCacheService,
273274
useValue: {},
274275
},
276+
{
277+
provide: NodeCacheService,
278+
useValue: {},
279+
},
275280
],
276281
}).compile();
277282

@@ -287,6 +292,7 @@ describe('PageService', () => {
287292
expect(pageService).toBeDefined();
288293
expect(nodeService).toBeDefined();
289294
expect(edgeService).toBeDefined();
295+
expect(nodeCacheService).toBeDefined();
290296
});
291297

292298
it('모든 페이지 목록을 조회할 수 있다.', async () => {});

0 commit comments

Comments
 (0)