From a6c93e021cdb71b67c631058c53212a25970b697 Mon Sep 17 00:00:00 2001 From: kangjuhyup Date: Wed, 6 Nov 2024 20:49:50 +0900 Subject: [PATCH] =?UTF-8?q?feat=20:=20=EC=B4=88=EB=8C=80=EC=9E=A5=20id=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C,=20=EC=B4=88=EB=8C=80=EC=9E=A5=20=EC=83=81?= =?UTF-8?q?=EC=84=B8=20=EC=A1=B0=ED=9A=8C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/letter/dto/response/get.detail.ts | 44 ------------- .../domain/letter/dto/response/get.letter.ts | 65 +++++++++++++++++++ .../src/domain/letter/letter.controller.ts | 26 ++++++-- .../domain/letter/service/letter.service.ts | 17 ++++- 4 files changed, 102 insertions(+), 50 deletions(-) create mode 100644 packages/server/src/domain/letter/dto/response/get.letter.ts diff --git a/packages/server/src/domain/letter/dto/response/get.detail.ts b/packages/server/src/domain/letter/dto/response/get.detail.ts index efc082b..9555b54 100644 --- a/packages/server/src/domain/letter/dto/response/get.detail.ts +++ b/packages/server/src/domain/letter/dto/response/get.detail.ts @@ -93,40 +93,6 @@ class Image { ang: number; } -class Text { - @ApiProperty({ - description: '텍스트 본문', - example: 'MOCK', - }) - @IsNotEmpty() - @IsString() - body: string; - - @ApiProperty({ - description: '텍스트 크기', - example: 18, - }) - @IsNotEmpty() - @IsNumber() - size: number; - - @ApiProperty({ - description: '텍스트의 X 좌표', - example: 200, - }) - @IsNotEmpty() - @IsNumber() - x: number; - - @ApiProperty({ - description: '텍스트의 Y 좌표', - example: 600, - }) - @IsNotEmpty() - @IsNumber() - y: number; -} - export class GetLetterDetailResponse { @IsNotEmpty() @IsString() @@ -154,14 +120,4 @@ export class GetLetterDetailResponse { @ValidateNested({ each: true }) @Type(() => Image) components?: Image[]; - - @ApiPropertyOptional({ - description: '텍스트 정보 배열', - type: [Text], - }) - @IsOptional() - @IsArray() - @ValidateNested({ each: true }) - @Type(() => Text) - text?: Text[]; } diff --git a/packages/server/src/domain/letter/dto/response/get.letter.ts b/packages/server/src/domain/letter/dto/response/get.letter.ts new file mode 100644 index 0000000..17edbe8 --- /dev/null +++ b/packages/server/src/domain/letter/dto/response/get.letter.ts @@ -0,0 +1,65 @@ +import { ApiProperty } from "@nestjs/swagger"; +import { Type } from "class-transformer"; +import { IsNotEmpty, IsNumber, IsString, ValidateNested } from "class-validator"; + +class Letter { + @ApiProperty({ + description: '이미지 경로', + example: 'https://example.com/img.png', + }) + @IsNotEmpty() + @IsString() + path: string; + + @ApiProperty({ + description: '이미지 너비', + example: 100, + }) + @IsNotEmpty() + @IsNumber() + width: number; + + @ApiProperty({ + description: '이미지 높이', + example: 80, + }) + @IsNotEmpty() + @IsNumber() + height: number; + +} + +class Comment { + @IsNotEmpty() + @IsString() + name : string + @IsNotEmpty() + @IsString() + body : string +} + +export class GetLetterResponse { + @ApiProperty({ + description : '초대장 ID', + }) + @IsNotEmpty() + @IsNumber() + letterId : number; + @ApiProperty({ + description: '배경 이미지 정보', + type: Letter, + }) + @ValidateNested() + @Type(() => Letter) + @IsNotEmpty() + letter : Letter + + @ApiProperty({ + description : '댓글 목록', + type : Array + }) + @ValidateNested({each:true}) + @Type(() => Comment) + @IsNotEmpty() + comments : Array +} \ No newline at end of file diff --git a/packages/server/src/domain/letter/letter.controller.ts b/packages/server/src/domain/letter/letter.controller.ts index c1d9592..eba654a 100644 --- a/packages/server/src/domain/letter/letter.controller.ts +++ b/packages/server/src/domain/letter/letter.controller.ts @@ -15,13 +15,14 @@ import { GetLetterPageRequest } from './dto/request/get.page'; import { GetLetterPageResponse } from './dto/response/get.page'; import { LetterService } from './service/letter.service'; import { PrepareResponse } from './dto/response/prepare'; -import { MetaDefault, MetaDetail, PrepareRequest } from './dto/request/prepare'; +import { PrepareRequest } from './dto/request/prepare'; import { AddLetterRequest } from './dto/request/add.letter'; import { AddLetterResponse } from './dto/response/add.letter'; import { GetLetterDetailRequest } from './dto/request/get.detail'; import { GetLetterDetailResponse } from './dto/response/get.detail'; import { ResponseValidationInterceptor } from '@app/interceptor/response.validation'; import { UserGuard } from '@app/jwt/guard/user.guard'; +import { GetLetterResponse } from './dto/response/get.letter'; @Controller('letter') export class LetterController { @@ -91,10 +92,7 @@ export class LetterController { }; } - @Get('share/:id') - @ApiOperation({ summary: '공유된 초대장 페이지' }) - // @UseInterceptors(new ResponseValidationInterceptor(ShareLetterResponse)) - @Get(':id') + @Get('detail/:id') @ApiOperation({ summary: '초대장 상세 정보 조회' }) @ApiOkResponse({ status: 200, @@ -110,4 +108,22 @@ export class LetterController { data: await this.letterService.getLetterDetail(dto.id), }; } + + @Get(':id') + @ApiOperation({ summary: '공유된 초대장 페이지' }) + @ApiOkResponse({ + status : 200, + description : '성공', + type : GetLetterPageResponse + }) + @UseInterceptors(new ResponseValidationInterceptor(GetLetterResponse)) + async getLetter( + @Param() dto : GetLetterDetailRequest + ): Promise> { + return { + result : true, + data : await this.letterService.getLetter(dto.id) + } + } + } diff --git a/packages/server/src/domain/letter/service/letter.service.ts b/packages/server/src/domain/letter/service/letter.service.ts index f02399f..e3c367f 100644 --- a/packages/server/src/domain/letter/service/letter.service.ts +++ b/packages/server/src/domain/letter/service/letter.service.ts @@ -7,7 +7,6 @@ import { AddLetterResponse } from '../dto/response/add.letter'; import { InsertLetterTransaction } from '../transaction/insert.letter'; import { GetLetterPageRequest } from '../dto/request/get.page'; import { GetLetterPageResponse } from '../dto/response/get.page'; -import { GetLetterDetailRequest } from '../dto/request/get.detail'; import { GetLetterDetailResponse } from '../dto/response/get.detail'; import { LetterBaseService } from './letter.base.service'; import { LetterAttachmentService } from './letter.attachment.service'; @@ -18,6 +17,7 @@ import { StorageService } from '@app/storage/storage.service'; import { LetterAttachmentCode } from '@app/util/attachment'; import { randomString } from '@app/util/random'; import { booleanToYN } from '@app/util/yn'; +import { GetLetterResponse } from '../dto/response/get.letter'; @Injectable() export class LetterService extends LetterBaseService { @@ -54,6 +54,21 @@ export class LetterService extends LetterBaseService { }; } + async getLetter(id:number) : Promise { + const letter = await this.letterRepository.selectLetterFromId({letterId:id}) + const lt = letter.letterAttachment.find((la) => la.attachmentCode === LetterAttachmentCode.LETTER); + + return { + letterId : letter.letterId, + letter : { + path : lt.attachment.attachmentPath, + width : lt.width, + height : lt.height + }, + comments : [] + } + } + async getLetterDetail(id: number): Promise { const letter = await this.letterRepository.selectLetterFromId({ letterId: id,