From 256631144b9e7e154b38c3cc2b683aaab1a0c906 Mon Sep 17 00:00:00 2001 From: Devheun <86945971+Devheun@users.noreply.github.com> Date: Fri, 14 Mar 2025 23:59:09 +0900 Subject: [PATCH 1/3] =?UTF-8?q?refactor::=20=EC=B9=9C=EA=B5=AC=20=EC=8B=9C?= =?UTF-8?q?=EA=B0=84=ED=91=9C=20=EC=97=86=EC=9D=84=20=EB=95=8C=20=EC=97=90?= =?UTF-8?q?=EB=9F=AC=20=EC=95=88=20=EB=8D=98=EC=A7=80=EA=B2=8C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 승준씨와 협의 후 사이드 이펙트 최소화를 위해 해당 엔드포인트만 반환값에 { timetable: null } 추가하였습니다. - 배포 후에 여유로울 때 DTO 손 봐주기로 결정했습니다. --- src/decorators/docs/friendship.decorator.ts | 1 - src/friendship/friendship.controller.ts | 2 +- src/friendship/friendship.service.ts | 8 +++++--- src/timetable/timetable.service.ts | 6 ++---- src/utils/exception.util.ts | 6 ------ 5 files changed, 8 insertions(+), 15 deletions(-) diff --git a/src/decorators/docs/friendship.decorator.ts b/src/decorators/docs/friendship.decorator.ts index f167404..80b1fdd 100644 --- a/src/decorators/docs/friendship.decorator.ts +++ b/src/decorators/docs/friendship.decorator.ts @@ -86,7 +86,6 @@ const FriendshipDocsMap: Record = { 'USER_NOT_FOUND', 'FRIENDSHIP_NOT_FOUND', 'FRIENDSHIP_REQUEST_NOT_ACCEPTED', - 'FRIEND_TIMETABLE_NOT_FOUND', ]), ], sendFriendshipRequest: [ diff --git a/src/friendship/friendship.controller.ts b/src/friendship/friendship.controller.ts index 59bd45e..8343cd6 100644 --- a/src/friendship/friendship.controller.ts +++ b/src/friendship/friendship.controller.ts @@ -64,7 +64,7 @@ export class FriendshipController { async getFriendTimetable( @User() user: AuthorizedUserDto, @Query() getFriendTimetableRequestDto: GetFriendTimetableRequestDto, - ): Promise { + ): Promise { return await this.friendshipService.getFriendTimetable( user.id, getFriendTimetableRequestDto, diff --git a/src/friendship/friendship.service.ts b/src/friendship/friendship.service.ts index 6d8bc99..bdcb992 100644 --- a/src/friendship/friendship.service.ts +++ b/src/friendship/friendship.service.ts @@ -367,7 +367,7 @@ export class FriendshipService { async getFriendTimetable( userId: number, getFriendTimetableRequestDto: GetFriendTimetableRequestDto, - ): Promise { + ): Promise { // username으로 친구정보 가져오기 const friend = await this.userService.findUserByUsername( getFriendTimetableRequestDto.username, @@ -397,9 +397,11 @@ export class FriendshipService { getFriendTimetableRequestDto.year, ); - if (!friendTimetable) { - throwKukeyException('FRIEND_TIMETABLE_NOT_FOUND'); + // friendTimetable이 없을 경우 DTO에 맞게 빈 배열 던져주기 + if (friendTimetable === null) { + return { timetable: null }; } + return friendTimetable; } } diff --git a/src/timetable/timetable.service.ts b/src/timetable/timetable.service.ts index 041cdec..c5c64b9 100644 --- a/src/timetable/timetable.service.ts +++ b/src/timetable/timetable.service.ts @@ -326,7 +326,7 @@ export class TimetableService { friendId: number, semester: string, year: string, - ): Promise { + ): Promise { const timetable = await this.timetableRepository.findOne({ where: { userId: friendId, @@ -337,9 +337,7 @@ export class TimetableService { }); // 시간표가 없을 경우 - if (!timetable) { - throwKukeyException('TIMETABLE_NOT_FOUND'); - } + if (!timetable) return null; // 시간표 id 추출 후 구현해놓은 함수 사용 const friendTimetableId = timetable.id; diff --git a/src/utils/exception.util.ts b/src/utils/exception.util.ts index 8b33203..0ced9ba 100644 --- a/src/utils/exception.util.ts +++ b/src/utils/exception.util.ts @@ -466,12 +466,6 @@ export const kukeyExceptions = createKukeyExceptions({ errorCode: 3409, statusCode: 500, }, - FRIEND_TIMETABLE_NOT_FOUND: { - name: 'FRIEND_TIMETABLE_NOT_FOUND', - message: "Friend's timetable not found.", - errorCode: 3410, - statusCode: 404, - }, // 4xxx : 커뮤니티 관련 예외 // - 40xx : Board BOARD_NOT_FOUND: { From 81fb5ef7255007468f446efa694efb201d85acc2 Mon Sep 17 00:00:00 2001 From: Devheun <86945971+Devheun@users.noreply.github.com> Date: Mon, 17 Mar 2025 22:29:59 +0900 Subject: [PATCH 2/3] =?UTF-8?q?refactor:=20=EC=B9=9C=EA=B5=AC=20=EC=8B=9C?= =?UTF-8?q?=EA=B0=84=ED=91=9C=20DTO=20schema=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/decorators/docs/friendship.decorator.ts | 4 ++-- .../dto/get-friend-timetable-response.dto.ts | 15 +++++++++++++++ src/friendship/friendship.controller.ts | 4 ++-- src/friendship/friendship.service.ts | 9 +++++---- 4 files changed, 24 insertions(+), 8 deletions(-) create mode 100644 src/friendship/dto/get-friend-timetable-response.dto.ts diff --git a/src/decorators/docs/friendship.decorator.ts b/src/decorators/docs/friendship.decorator.ts index 80b1fdd..7b28f3c 100644 --- a/src/decorators/docs/friendship.decorator.ts +++ b/src/decorators/docs/friendship.decorator.ts @@ -18,6 +18,7 @@ import { FriendshipController } from 'src/friendship/friendship.controller'; import { GetTimetableByTimetableIdDto } from 'src/timetable/dto/get-timetable-timetable.dto'; import { ApiKukeyExceptionResponse } from '../api-kukey-exception-response'; import { GetReceivedFriendshipRequestCountDto } from 'src/friendship/dto/get-received-friendship-request-count.dto'; +import { GetFriendTimetableResponseDto } from 'src/friendship/dto/get-friend-timetable-response.dto'; type FriendshipEndPoints = MethodNames; @@ -79,8 +80,7 @@ const FriendshipDocsMap: Record = { }), ApiOkResponse({ description: '친구 시간표 반환', - type: GetTimetableByTimetableIdDto, - isArray: true, + type: GetFriendTimetableResponseDto, }), ApiKukeyExceptionResponse([ 'USER_NOT_FOUND', diff --git a/src/friendship/dto/get-friend-timetable-response.dto.ts b/src/friendship/dto/get-friend-timetable-response.dto.ts new file mode 100644 index 0000000..affd004 --- /dev/null +++ b/src/friendship/dto/get-friend-timetable-response.dto.ts @@ -0,0 +1,15 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { GetTimetableByTimetableIdDto } from 'src/timetable/dto/get-timetable-timetable.dto'; + +export class GetFriendTimetableResponseDto { + @ApiProperty({ + description: '친구 시간표 정보', + type: GetTimetableByTimetableIdDto, + nullable: true, + }) + timetable: GetTimetableByTimetableIdDto | null; + + constructor(timetable: GetTimetableByTimetableIdDto | null) { + this.timetable = timetable; + } +} diff --git a/src/friendship/friendship.controller.ts b/src/friendship/friendship.controller.ts index 8343cd6..1072d5d 100644 --- a/src/friendship/friendship.controller.ts +++ b/src/friendship/friendship.controller.ts @@ -23,13 +23,13 @@ import { DeleteFriendshipResponseDto } from './dto/delete-friendship-response.dt import { SearchUserResponseDto } from './dto/search-user-response.dto'; import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; import { GetFriendTimetableRequestDto } from './dto/get-friend-timetable.dto'; -import { GetTimetableByTimetableIdDto } from 'src/timetable/dto/get-timetable-timetable.dto'; import { TransactionInterceptor } from 'src/common/interceptors/transaction.interceptor'; import { TransactionManager } from 'src/decorators/manager.decorator'; import { EntityManager } from 'typeorm'; import { SearchUserRequestDto } from './dto/search-user-query.dto'; import { FriendshipDocs } from 'src/decorators/docs/friendship.decorator'; import { GetReceivedFriendshipRequestCountDto } from './dto/get-received-friendship-request-count.dto'; +import { GetFriendTimetableResponseDto } from './dto/get-friend-timetable-response.dto'; @Controller('friendship') @ApiTags('friendship') @@ -64,7 +64,7 @@ export class FriendshipController { async getFriendTimetable( @User() user: AuthorizedUserDto, @Query() getFriendTimetableRequestDto: GetFriendTimetableRequestDto, - ): Promise { + ): Promise { return await this.friendshipService.getFriendTimetable( user.id, getFriendTimetableRequestDto, diff --git a/src/friendship/friendship.service.ts b/src/friendship/friendship.service.ts index bdcb992..950fdb8 100644 --- a/src/friendship/friendship.service.ts +++ b/src/friendship/friendship.service.ts @@ -19,6 +19,7 @@ import { Notice } from 'src/notice/enum/notice.enum'; import { AuthorizedUserDto } from 'src/auth/dto/authorized-user-dto'; import { SearchUserRequestDto } from './dto/search-user-query.dto'; import { throwKukeyException } from 'src/utils/exception.util'; +import { GetFriendTimetableResponseDto } from './dto/get-friend-timetable-response.dto'; @Injectable() export class FriendshipService { @@ -367,7 +368,7 @@ export class FriendshipService { async getFriendTimetable( userId: number, getFriendTimetableRequestDto: GetFriendTimetableRequestDto, - ): Promise { + ): Promise { // username으로 친구정보 가져오기 const friend = await this.userService.findUserByUsername( getFriendTimetableRequestDto.username, @@ -397,11 +398,11 @@ export class FriendshipService { getFriendTimetableRequestDto.year, ); - // friendTimetable이 없을 경우 DTO에 맞게 빈 배열 던져주기 + // friendTimetable이 없을 경우 { timetable: null } 반환 if (friendTimetable === null) { - return { timetable: null }; + return new GetFriendTimetableResponseDto(null); } - return friendTimetable; + return new GetFriendTimetableResponseDto(friendTimetable); } } From 7cb57b3caa027094c265b573299d0c9b9cb351c7 Mon Sep 17 00:00:00 2001 From: Devheun <86945971+Devheun@users.noreply.github.com> Date: Tue, 25 Mar 2025 22:13:24 +0900 Subject: [PATCH 3/3] =?UTF-8?q?refactor::=20=EC=8B=9C=EA=B0=84=ED=91=9C=20?= =?UTF-8?q?=EB=B0=98=ED=99=98=20=EA=B0=92=20=EC=88=98=EC=A0=95=EC=97=90=20?= =?UTF-8?q?=EB=94=B0=EB=A5=B8=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 조회 관련 로직만 null 허용하고, 기존의 업데이트 혹은 생성 로직은 에러 던지도록 --- src/decorators/docs/friendship.decorator.ts | 5 ++--- src/decorators/docs/timetable.decorator.ts | 19 ++++++++++++----- src/friendship/friendship.controller.ts | 4 ++-- src/friendship/friendship.service.ts | 12 +++-------- .../get-nullable-timetable-response.dto.ts} | 6 +++--- src/timetable/timetable.controller.ts | 4 ++-- src/timetable/timetable.service.ts | 21 ++++++++++++------- 7 files changed, 40 insertions(+), 31 deletions(-) rename src/{friendship/dto/get-friend-timetable-response.dto.ts => timetable/dto/get-nullable-timetable-response.dto.ts} (60%) diff --git a/src/decorators/docs/friendship.decorator.ts b/src/decorators/docs/friendship.decorator.ts index 7b28f3c..d006422 100644 --- a/src/decorators/docs/friendship.decorator.ts +++ b/src/decorators/docs/friendship.decorator.ts @@ -15,10 +15,9 @@ import { SendFriendshipRequestDto } from 'src/friendship/dto/send-friendship-req import { SendFriendshipResponseDto } from 'src/friendship/dto/send-friendship-response.dto'; import { UpdateFriendshipResponseDto } from 'src/friendship/dto/update-friendship-response.dto'; import { FriendshipController } from 'src/friendship/friendship.controller'; -import { GetTimetableByTimetableIdDto } from 'src/timetable/dto/get-timetable-timetable.dto'; import { ApiKukeyExceptionResponse } from '../api-kukey-exception-response'; import { GetReceivedFriendshipRequestCountDto } from 'src/friendship/dto/get-received-friendship-request-count.dto'; -import { GetFriendTimetableResponseDto } from 'src/friendship/dto/get-friend-timetable-response.dto'; +import { GetNullableTimetableResponseDto } from 'src/timetable/dto/get-nullable-timetable-response.dto'; type FriendshipEndPoints = MethodNames; @@ -80,7 +79,7 @@ const FriendshipDocsMap: Record = { }), ApiOkResponse({ description: '친구 시간표 반환', - type: GetFriendTimetableResponseDto, + type: GetNullableTimetableResponseDto, }), ApiKukeyExceptionResponse([ 'USER_NOT_FOUND', diff --git a/src/decorators/docs/timetable.decorator.ts b/src/decorators/docs/timetable.decorator.ts index 47edf2c..638d88d 100644 --- a/src/decorators/docs/timetable.decorator.ts +++ b/src/decorators/docs/timetable.decorator.ts @@ -10,7 +10,6 @@ import { CommonDeleteResponseDto } from 'src/timetable/dto/common-delete-respons import { CommonTimetableResponseDto } from 'src/timetable/dto/common-timetable-response.dto'; import { CreateTimetableCourseResponseDto } from 'src/timetable/dto/create-timetable-course-response.dto'; import { CreateTimetableDto } from 'src/timetable/dto/create-timetable.dto'; -import { GetTimetableByTimetableIdDto } from 'src/timetable/dto/get-timetable-timetable.dto'; import { TimetableDto } from 'src/timetable/dto/timetable.dto'; import { UpdateTimetableColorDto } from 'src/timetable/dto/update-timetable-color.dto'; import { UpdateTimetableNameDto } from 'src/timetable/dto/update-timetable-name.dto'; @@ -18,6 +17,7 @@ import { GetTimetableByUserIdResponseDto } from 'src/timetable/dto/userId-timeta import { TimetableController } from 'src/timetable/timetable.controller'; import { ApiKukeyExceptionResponse } from '../api-kukey-exception-response'; import { GetTodayTimetableResponse } from 'src/timetable/dto/get-today-timetable-response.dto'; +import { GetNullableTimetableResponseDto } from 'src/timetable/dto/get-nullable-timetable-response.dto'; type TimetableEndPoints = MethodNames; @@ -48,7 +48,9 @@ const TimetableDocsMap: Record = { ApiKukeyExceptionResponse([ 'TIMETABLE_NOT_FOUND', 'COURSE_NOT_FOUND', + 'TIMETABLE_COURSE_MISMATCH', 'COURSE_ALREADY_EXIST', + 'COURSE_CONFLICT', ]), ], createTimetable: [ @@ -89,7 +91,6 @@ const TimetableDocsMap: Record = { description: '대표 시간표 조회 성공 시', type: CommonTimetableResponseDto, }), - ApiKukeyExceptionResponse(['TIMETABLE_NOT_FOUND']), ], getTimetableByUserId: [ ApiOperation({ @@ -103,7 +104,6 @@ const TimetableDocsMap: Record = { type: GetTimetableByUserIdResponseDto, isArray: true, }), - ApiKukeyExceptionResponse(['TIMETABLE_NOT_FOUND']), ], getTodayTimetable: [ ApiOperation({ @@ -136,14 +136,15 @@ const TimetableDocsMap: Record = { }), ApiParam({ name: 'timetableId', + type: 'number', + required: true, description: '특정 시간표 ID', }), ApiResponse({ status: 200, description: '특정 시간표 ID로 조회 성공 시', - type: GetTimetableByTimetableIdDto, + type: GetNullableTimetableResponseDto, }), - ApiKukeyExceptionResponse(['TIMETABLE_NOT_FOUND']), ], deleteTimetableCourse: [ ApiOperation({ @@ -177,6 +178,8 @@ const TimetableDocsMap: Record = { }), ApiParam({ name: 'timetableId', + type: 'number', + required: true, description: '삭제할 시간표 ID', }), ApiResponse({ @@ -193,6 +196,8 @@ const TimetableDocsMap: Record = { }), ApiParam({ name: 'timetableId', + type: 'number', + required: true, description: '변경할 시간표 ID', }), ApiBody({ @@ -212,6 +217,8 @@ const TimetableDocsMap: Record = { }), ApiParam({ name: 'timetableId', + type: 'number', + required: true, description: '변경할 시간표 ID', }), ApiBody({ @@ -232,6 +239,8 @@ const TimetableDocsMap: Record = { }), ApiParam({ name: 'timetableId', + type: 'number', + required: true, description: '대표 시간표로 변경할 시간표 ID', }), ApiBody({ diff --git a/src/friendship/friendship.controller.ts b/src/friendship/friendship.controller.ts index 1072d5d..4699e01 100644 --- a/src/friendship/friendship.controller.ts +++ b/src/friendship/friendship.controller.ts @@ -29,7 +29,7 @@ import { EntityManager } from 'typeorm'; import { SearchUserRequestDto } from './dto/search-user-query.dto'; import { FriendshipDocs } from 'src/decorators/docs/friendship.decorator'; import { GetReceivedFriendshipRequestCountDto } from './dto/get-received-friendship-request-count.dto'; -import { GetFriendTimetableResponseDto } from './dto/get-friend-timetable-response.dto'; +import { GetNullableTimetableResponseDto } from 'src/timetable/dto/get-nullable-timetable-response.dto'; @Controller('friendship') @ApiTags('friendship') @@ -64,7 +64,7 @@ export class FriendshipController { async getFriendTimetable( @User() user: AuthorizedUserDto, @Query() getFriendTimetableRequestDto: GetFriendTimetableRequestDto, - ): Promise { + ): Promise { return await this.friendshipService.getFriendTimetable( user.id, getFriendTimetableRequestDto, diff --git a/src/friendship/friendship.service.ts b/src/friendship/friendship.service.ts index 950fdb8..7719e6b 100644 --- a/src/friendship/friendship.service.ts +++ b/src/friendship/friendship.service.ts @@ -11,7 +11,6 @@ import { FriendshipEntity } from 'src/entities/friendship.entity'; import { UserService } from 'src/user/user.service'; import { TimetableService } from 'src/timetable/timetable.service'; import { GetFriendTimetableRequestDto } from './dto/get-friend-timetable.dto'; -import { GetTimetableByTimetableIdDto } from 'src/timetable/dto/get-timetable-timetable.dto'; import { GetWaitingFriendResponseDto } from './dto/get-waiting-friend-response.dto'; import { EntityManager } from 'typeorm'; import { NoticeService } from 'src/notice/notice.service'; @@ -19,7 +18,7 @@ import { Notice } from 'src/notice/enum/notice.enum'; import { AuthorizedUserDto } from 'src/auth/dto/authorized-user-dto'; import { SearchUserRequestDto } from './dto/search-user-query.dto'; import { throwKukeyException } from 'src/utils/exception.util'; -import { GetFriendTimetableResponseDto } from './dto/get-friend-timetable-response.dto'; +import { GetNullableTimetableResponseDto } from 'src/timetable/dto/get-nullable-timetable-response.dto'; @Injectable() export class FriendshipService { @@ -368,7 +367,7 @@ export class FriendshipService { async getFriendTimetable( userId: number, getFriendTimetableRequestDto: GetFriendTimetableRequestDto, - ): Promise { + ): Promise { // username으로 친구정보 가져오기 const friend = await this.userService.findUserByUsername( getFriendTimetableRequestDto.username, @@ -398,11 +397,6 @@ export class FriendshipService { getFriendTimetableRequestDto.year, ); - // friendTimetable이 없을 경우 { timetable: null } 반환 - if (friendTimetable === null) { - return new GetFriendTimetableResponseDto(null); - } - - return new GetFriendTimetableResponseDto(friendTimetable); + return friendTimetable; } } diff --git a/src/friendship/dto/get-friend-timetable-response.dto.ts b/src/timetable/dto/get-nullable-timetable-response.dto.ts similarity index 60% rename from src/friendship/dto/get-friend-timetable-response.dto.ts rename to src/timetable/dto/get-nullable-timetable-response.dto.ts index affd004..1294bb1 100644 --- a/src/friendship/dto/get-friend-timetable-response.dto.ts +++ b/src/timetable/dto/get-nullable-timetable-response.dto.ts @@ -1,9 +1,9 @@ import { ApiProperty } from '@nestjs/swagger'; -import { GetTimetableByTimetableIdDto } from 'src/timetable/dto/get-timetable-timetable.dto'; +import { GetTimetableByTimetableIdDto } from './get-timetable-timetable.dto'; -export class GetFriendTimetableResponseDto { +export class GetNullableTimetableResponseDto { @ApiProperty({ - description: '친구 시간표 정보', + description: '특정 시간표 정보', type: GetTimetableByTimetableIdDto, nullable: true, }) diff --git a/src/timetable/timetable.controller.ts b/src/timetable/timetable.controller.ts index f39c507..413e097 100644 --- a/src/timetable/timetable.controller.ts +++ b/src/timetable/timetable.controller.ts @@ -22,13 +22,13 @@ import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; import { CreateTimetableCourseResponseDto } from './dto/create-timetable-course-response.dto'; import { CommonTimetableResponseDto } from './dto/common-timetable-response.dto'; import { CommonDeleteResponseDto } from './dto/common-delete-response.dto'; -import { GetTimetableByTimetableIdDto } from './dto/get-timetable-timetable.dto'; import { UpdateTimetableColorDto } from './dto/update-timetable-color.dto'; import { TransactionInterceptor } from 'src/common/interceptors/transaction.interceptor'; import { TransactionManager } from 'src/decorators/manager.decorator'; import { EntityManager } from 'typeorm'; import { TimetableDocs } from 'src/decorators/docs/timetable.decorator'; import { GetTodayTimetableResponse } from './dto/get-today-timetable-response.dto'; +import { GetNullableTimetableResponseDto } from './dto/get-nullable-timetable-response.dto'; @Controller('timetable') @ApiTags('timetable') @@ -98,7 +98,7 @@ export class TimetableController { async getTimetableByTimetableId( @Param('timetableId') timetableId: number, @User() user: AuthorizedUserDto, - ): Promise { + ): Promise { return await this.timetableService.getTimetableByTimetableId( timetableId, user.id, diff --git a/src/timetable/timetable.service.ts b/src/timetable/timetable.service.ts index c5c64b9..abc5b26 100644 --- a/src/timetable/timetable.service.ts +++ b/src/timetable/timetable.service.ts @@ -19,6 +19,7 @@ import { DayType } from 'src/common/types/day-type.utils'; import { throwKukeyException } from 'src/utils/exception.util'; import { DeleteTimetableResponseDto } from './dto/delete-timetable-response.dto'; import { GetTodayTimetableResponse } from './dto/get-today-timetable-response.dto'; +import { GetNullableTimetableResponseDto } from './dto/get-nullable-timetable-response.dto'; @Injectable() export class TimetableService { @@ -226,7 +227,7 @@ export class TimetableService { async getTimetableByTimetableId( timetableId: number, userId: number, - ): Promise { + ): Promise { const timetable = await this.timetableRepository.findOne({ where: { id: timetableId, userId }, relations: [ @@ -235,8 +236,9 @@ export class TimetableService { 'timetableCourses.course.courseDetails', ], }); + if (!timetable) { - throwKukeyException('TIMETABLE_NOT_FOUND'); + return new GetNullableTimetableResponseDto(null); } const schedules = @@ -306,7 +308,9 @@ export class TimetableService { }); }); - return getTimetableByTimetableIdResponse; + return new GetNullableTimetableResponseDto( + getTimetableByTimetableIdResponse, + ); } async getTimetableByUserId( @@ -315,7 +319,11 @@ export class TimetableService { const userTimetable = await this.timetableRepository.find({ where: { userId }, }); - if (!userTimetable) throwKukeyException('TIMETABLE_NOT_FOUND'); + + if (!userTimetable) { + return []; + } + return userTimetable.map( (table) => new GetTimetableByUserIdResponseDto(table), ); @@ -326,7 +334,7 @@ export class TimetableService { friendId: number, semester: string, year: string, - ): Promise { + ): Promise { const timetable = await this.timetableRepository.findOne({ where: { userId: friendId, @@ -336,8 +344,7 @@ export class TimetableService { }, }); - // 시간표가 없을 경우 - if (!timetable) return null; + if (!timetable) return new GetNullableTimetableResponseDto(null); // 시간표 id 추출 후 구현해놓은 함수 사용 const friendTimetableId = timetable.id;