From e310411a4d7b6b5abcbe5309015e5670bbb196b6 Mon Sep 17 00:00:00 2001 From: realrafi Date: Mon, 6 Jul 2026 16:17:02 +0330 Subject: [PATCH] refactor: refactored the getProjectDetail function to include more values --- .../task-manager/entities/task.entity.ts | 5 ++ .../repositories/project.repository.ts | 50 ++++++++++++++----- 2 files changed, 43 insertions(+), 12 deletions(-) diff --git a/src/modules/task-manager/entities/task.entity.ts b/src/modules/task-manager/entities/task.entity.ts index bf18fe2..5461d83 100644 --- a/src/modules/task-manager/entities/task.entity.ts +++ b/src/modules/task-manager/entities/task.entity.ts @@ -57,4 +57,9 @@ export class TMTask extends BaseEntity { inverseJoinColumn: { name: "userId", referencedColumnName: "id" }, }) users: User[]; + + // deriven(calculated) attributes. not database columns + attachmentCount?: number; + checkListItemCount?: number; + completedCheckListItemCount?: number; } diff --git a/src/modules/task-manager/repositories/project.repository.ts b/src/modules/task-manager/repositories/project.repository.ts index 4175ab4..a7bfbf4 100644 --- a/src/modules/task-manager/repositories/project.repository.ts +++ b/src/modules/task-manager/repositories/project.repository.ts @@ -23,17 +23,43 @@ export class ProjectRepository extends Repository { } async getProjectDetail(projectId: string): Promise { - return this.createQueryBuilder('project') - .leftJoinAndSelect('project.taskPhases', 'taskPhase') - .leftJoinAndSelect('taskPhase.tasks', 'task') - .where('project.id = :projectId', {projectId}) - .select([ - "project.id", - "project.name", - "taskPhase.id", - "taskPhase.name", - "task.id", - "task.title" - ]).getOne(); + return this.createQueryBuilder("project") + .leftJoinAndSelect("project.taskPhases", "taskPhase") + .leftJoinAndSelect("taskPhase.tasks", "task") + .leftJoinAndSelect("task.remarks", "remark") + + .loadRelationCountAndMap( + "task.attachmentCount", + "task.attachments", + ) + + .loadRelationCountAndMap( + "task.checkListItemCount", + "task.checkListItems", + ) + + .loadRelationCountAndMap( + "task.completedCheckListItemCount", + "task.checkListItems", + "completedCheckListItems", + (qb) => qb.where("completedCheckListItems.isDone = :isDone", { isDone: true }), + ) + + .where("project.id = :projectId", { projectId }) + + .select([ + "project.id", + "project.name", + "taskPhase.id", + "taskPhase.name", + "task.id", + "task.title", + "task.startDate", + "task.endDate", + "remark.title", + "remark.color", + ]) + + .getOne(); } }