diff --git a/apps/server/src/task/controller/task.controller.ts b/apps/server/src/task/controller/task.controller.ts index a246a70..979bb50 100644 --- a/apps/server/src/task/controller/task.controller.ts +++ b/apps/server/src/task/controller/task.controller.ts @@ -87,4 +87,13 @@ export class TaskController { await this.taskService.updateAssignees(user.id, id, body.assignees) ); } + + @Get(':id/detail') + async getTaskDetail(@AuthUser() user: Account, @Param('id') id: number) { + return new BaseResponse( + 200, + '태스크 상세 정보 조회 완료했습니다.', + await this.taskService.getTaskDetail(user.id, id) + ); + } } diff --git a/apps/server/src/task/dto/task-details-response.dto.ts b/apps/server/src/task/dto/task-details-response.dto.ts new file mode 100644 index 0000000..1d42b78 --- /dev/null +++ b/apps/server/src/task/dto/task-details-response.dto.ts @@ -0,0 +1,49 @@ +import { Task } from '@/task/domain/task.entity'; +import { SprintDetailsResponse } from '@/project/dto/sprint-details-response.dto'; +import { AssigneeDetailsResponse } from '@/task/dto/assignee-details-response.dto'; +import { LabelDetailsResponse } from '@/project/dto/label-details-response.dto'; +import { CreateSubTaskResponse } from '@/task/dto/create-subTask-response.dto'; + +export class TaskDetailsResponse { + id: number; + + title: string; + + description: string; + + priority: number; + + estimate: number; + + sprint: SprintDetailsResponse; + + assignees: AssigneeDetailsResponse[]; + + labels: LabelDetailsResponse[]; + + subtasks: CreateSubTaskResponse[]; + + constructor(task: Task) { + this.id = task.id; + this.title = task.title; + this.description = task.description; + this.priority = task.priority; + this.estimate = task.estimate; + } + + setSprint(sprintDetails: SprintDetailsResponse) { + this.sprint = sprintDetails; + } + + setAssignees(assigneeDetails: AssigneeDetailsResponse[]) { + this.assignees = assigneeDetails; + } + + setLabels(labelDetails: LabelDetailsResponse[]) { + this.labels = labelDetails; + } + + setSubtasks(subtaskDetails: CreateSubTaskResponse[]) { + this.subtasks = subtaskDetails; + } +} diff --git a/apps/server/src/task/service/task.service.ts b/apps/server/src/task/service/task.service.ts index d0a8657..d478c56 100644 --- a/apps/server/src/task/service/task.service.ts +++ b/apps/server/src/task/service/task.service.ts @@ -28,7 +28,11 @@ import { Label } from '@/project/entity/label.entity'; import { TaskLabel } from '@/task/domain/task-label.entity'; import { LabelDetailsResponse } from '@/project/dto/label-details-response.dto'; import { TaskAssignee } from '@/task/domain/task-assignee.entity'; -import { AssigneeDetailsResponse } from '../dto/assignee-details-response.dto'; +import { AssigneeDetailsResponse } from '@/task/dto/assignee-details-response.dto'; +import { TaskDetailsResponse } from '@/task/dto/task-details-response.dto'; +import { SprintDetailsResponse } from '@/project/dto/sprint-details-response.dto'; +import { SubTask } from '@/task/domain/subTask.entity'; +import { CreateSubTaskResponse } from '@/task/dto/create-subTask-response.dto'; const { defaultType: json0 } = ShareDB.types; @@ -49,6 +53,12 @@ export class TaskService { private sprintRepository: Repository, @InjectRepository(Label) private labelRepository: Repository