diff --git a/database/1783244654421-migrations.ts b/database/1783244654421-migrations.ts deleted file mode 100644 index ffb3d29..0000000 --- a/database/1783244654421-migrations.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { MigrationInterface, QueryRunner } from "typeorm"; - -export class Migrations1783244654421 implements MigrationInterface { - - public async up(queryRunner: QueryRunner): Promise { - } - - public async down(queryRunner: QueryRunner): Promise { - } - -} diff --git a/database/migrations/1783150384434-taskmanager.ts b/database/migrations/1783150384434-taskmanager.ts deleted file mode 100644 index e69de29..0000000 diff --git a/database/migrations/1783150480192-taskmanager.ts b/database/migrations/1783150480192-taskmanagerRemoveWorkspaceType.ts similarity index 100% rename from database/migrations/1783150480192-taskmanager.ts rename to database/migrations/1783150480192-taskmanagerRemoveWorkspaceType.ts diff --git a/database/migrations/1783244669371-taskmanager3.ts b/database/migrations/1783244669371-taskmanagerMakeWorkspaceNameUnique.ts similarity index 100% rename from database/migrations/1783244669371-taskmanager3.ts rename to database/migrations/1783244669371-taskmanagerMakeWorkspaceNameUnique.ts diff --git a/database/migrations/1783324039378-taskmanagerAddingNewEnumValueForPermissionEnumType.ts b/database/migrations/1783324039378-taskmanagerAddingNewEnumValueForPermissionEnumType.ts new file mode 100644 index 0000000..4f0e81a --- /dev/null +++ b/database/migrations/1783324039378-taskmanagerAddingNewEnumValueForPermissionEnumType.ts @@ -0,0 +1,20 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class TaskmanagerAddingNewEnumValueForPermissionEnumType1783324039378 implements MigrationInterface { + name = 'TaskmanagerAddingNewEnumValueForPermissionEnumType1783324039378' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TYPE "public"."permission_name_enum" RENAME TO "permission_name_enum_old"`); + await queryRunner.query(`CREATE TYPE "public"."permission_name_enum" AS ENUM('services', 'customers', 'agents', 'developers', 'invoices', 'transactions', 'discounts', 'admins', 'tickets', 'criticisms', 'contacts_us', 'advertisements', 'announcements', 'blogs', 'learnings', 'logs', 'settings', 'bank_accounts', 'payments', 'manage_sso_clients', 'support_plan', 'dmenu', 'dkala', 'dpage', 'dmail', 'reseller', 'workspace', 'project')`); + await queryRunner.query(`ALTER TABLE "permission" ALTER COLUMN "name" TYPE "public"."permission_name_enum" USING "name"::"text"::"public"."permission_name_enum"`); + await queryRunner.query(`DROP TYPE "public"."permission_name_enum_old"`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`CREATE TYPE "public"."permission_name_enum_old" AS ENUM('services', 'customers', 'agents', 'developers', 'invoices', 'transactions', 'discounts', 'admins', 'tickets', 'criticisms', 'contacts_us', 'advertisements', 'announcements', 'blogs', 'learnings', 'logs', 'settings', 'bank_accounts', 'payments', 'manage_sso_clients', 'support_plan', 'dmenu', 'dkala', 'dpage', 'dmail', 'reseller', 'workspace')`); + await queryRunner.query(`ALTER TABLE "permission" ALTER COLUMN "name" TYPE "public"."permission_name_enum_old" USING "name"::"text"::"public"."permission_name_enum_old"`); + await queryRunner.query(`DROP TYPE "public"."permission_name_enum"`); + await queryRunner.query(`ALTER TYPE "public"."permission_name_enum_old" RENAME TO "permission_name_enum"`); + } + +} diff --git a/src/modules/task-manager/controllers/project.controller.ts b/src/modules/task-manager/controllers/project.controller.ts index 2c0d43e..fd712c5 100644 --- a/src/modules/task-manager/controllers/project.controller.ts +++ b/src/modules/task-manager/controllers/project.controller.ts @@ -8,7 +8,10 @@ import { TMProject } from "../entities/project.entity"; import { AdminRoute } from "../../../common/decorators/admin.decorator"; import { PermissionsDec } from "../../../common/decorators/permission.decorator"; import { PermissionEnum } from "../../users/enums/permission.enum"; +import { UserDec } from "../../../common/decorators/user.decorator"; +import { AuthGuards } from "../../../common/decorators/auth-guard.decorator"; +@AuthGuards() @AdminRoute() @ApiTags("Task Manager - Projects") @Controller("task-manager/projects") @@ -76,4 +79,14 @@ export class ProjectController { ): Promise<{ projects: TMProject[]; count: number; paginate: true }> { return this.projectService.findByWorkspace(wsId, pagination); } + + @Get("/user") + @ApiOperation({ summary: "Get user projects!" }) + @ApiResponse({ status: 200, description: "Got user projects successfully!" }) + findUserProjects( + @UserDec("id") userId: string, + @Query() pagination: PaginationDto, + ): Promise<{ projects: TMProject[]; count: number; paginate: true }> { + return this.projectService.findUserProjects(userId, pagination); + } } diff --git a/src/modules/task-manager/providers/project.service.ts b/src/modules/task-manager/providers/project.service.ts index 523fd15..c9875cd 100644 --- a/src/modules/task-manager/providers/project.service.ts +++ b/src/modules/task-manager/providers/project.service.ts @@ -140,8 +140,8 @@ export class ProjectService { }, }); - if(!project) throw new NotFoundException(ProjectMessage.PROJECT_NOT_FOUND); - + if (!project) throw new NotFoundException(ProjectMessage.PROJECT_NOT_FOUND); + const taskPhases = project.taskPhases; if (taskPhases !== undefined && taskPhases.length) { throw new BadRequestException(ProjectMessage.PROJECT_CONTAINS_TASK_PHASES); @@ -149,4 +149,14 @@ export class ProjectService { await this.projectRepository.delete(id); return project; } + + async findUserProjects(userId: string, pagination: PaginationDto): Promise<{ projects: TMProject[]; count: number; paginate: true }> { + const page = pagination.page ?? 1; + const limit = pagination.limit ?? 10; + const skip = (page - 1) * limit; + + const [projects, count] = await this.projectRepository.findUserProjects(userId, skip, limit); + + return { projects, count, paginate: true }; + } } diff --git a/src/modules/task-manager/repositories/project.repository.ts b/src/modules/task-manager/repositories/project.repository.ts index 8f11e27..addeea8 100644 --- a/src/modules/task-manager/repositories/project.repository.ts +++ b/src/modules/task-manager/repositories/project.repository.ts @@ -10,4 +10,13 @@ export class ProjectRepository extends Repository { ) { super(projectRepository.target, projectRepository.manager, projectRepository.queryRunner); } + + async findUserProjects(userId: string, skip?: number, take?: number): Promise<[TMProject[], number]> { + return this.createQueryBuilder('project') + .innerJoin('project.users', 'user') + .where('user.id = :userId', {userId}) + .skip(skip ?? 0) + .take(take ?? 0) + .getManyAndCount(); + } }