diff --git a/src/common/enums/message.enum.ts b/src/common/enums/message.enum.ts index f6c39f5..8759cba 100755 --- a/src/common/enums/message.enum.ts +++ b/src/common/enums/message.enum.ts @@ -919,7 +919,8 @@ export const enum AccessLogMessage { export const enum WorkSpaceMessage { WORKSPACE_EXISTS = "فضای کار با این اسم وجود دارد!", WORKSPACE_NOT_FOUND = "فضای کار مورد نظر شما وجود ندارد!", - USERS_DONT_BELONG_TO_THIS_WORKSPACE = "کاربران تعیین شده برای این فضای کاری نیستند!" + USERS_DONT_BELONG_TO_THIS_WORKSPACE = "کاربران تعیین شده برای این فضای کاری نیستند!", + WORKSPACE_SAME_NAME_EXISTS = "فضای کاری با این اسم از قبل وجود دارد!" } export const enum ProjectMessage { diff --git a/src/modules/task-manager/providers/workspace.service.ts b/src/modules/task-manager/providers/workspace.service.ts index 8ea8257..73940fc 100644 --- a/src/modules/task-manager/providers/workspace.service.ts +++ b/src/modules/task-manager/providers/workspace.service.ts @@ -1,6 +1,6 @@ import { BadRequestException, Injectable, NotFoundException } from "@nestjs/common"; import { InjectRepository } from "@nestjs/typeorm"; -import { In, Repository } from "typeorm"; +import { In, Not, Repository } from "typeorm"; import { WorkspaceRepository } from "../repositories/workspace.repository"; import { TMWorkspace } from "../entities/workspace.entity"; import { CreateWorkspaceDto } from "../dto/workspace/create-workspace.dto"; @@ -17,22 +17,20 @@ export class WorkspaceService { ) {} findAll(): Promise { - return this.workspaceRepository.find({ - relations: ["projects", "users"], - }); + return this.workspaceRepository.find({}); } async findOneOrFail(id: string): Promise { - const workspace = await this.workspaceRepository.findOne({ where: { id } }); - if (!workspace) throw new NotFoundException(`Workspace #${id} not found`); + const workspace = await this.workspaceRepository.findOneWorkSpace(id); + if (!workspace) throw new NotFoundException(WorkSpaceMessage.WORKSPACE_NOT_FOUND); return workspace; } async create(dto: CreateWorkspaceDto): Promise { const { userIds, ...rest } = dto; - const existingWorkspace = await this.workspaceRepository.findOne({where: {name: rest.name}}); - if(existingWorkspace) { + const existingWorkspace = await this.workspaceRepository.findOne({ where: { name: rest.name } }); + if (existingWorkspace) { throw new BadRequestException(WorkSpaceMessage.WORKSPACE_EXISTS); } @@ -49,6 +47,11 @@ export class WorkspaceService { const workspace = await this.findOneOrFail(id); const { userIds, ...rest } = dto; + if (rest.name) { + const existingWorkSpaceWithTheSameName = await this.workspaceRepository.findOne({ where: { name: rest.name, id: Not(id) } }); + if (existingWorkSpaceWithTheSameName) throw new BadRequestException(WorkSpaceMessage.WORKSPACE_SAME_NAME_EXISTS); + } + Object.assign(workspace, rest); if (userIds) { diff --git a/src/modules/task-manager/repositories/workspace.repository.ts b/src/modules/task-manager/repositories/workspace.repository.ts index df73f29..04b4697 100644 --- a/src/modules/task-manager/repositories/workspace.repository.ts +++ b/src/modules/task-manager/repositories/workspace.repository.ts @@ -1,7 +1,7 @@ import { Injectable } from "@nestjs/common"; import { InjectRepository } from "@nestjs/typeorm"; -import { Repository } from "typeorm"; -import { TMWorkspace } from "../entities/workspace.entity"; +import { Repository } from 'typeorm'; +import { TMWorkspace } from '../entities/workspace.entity'; @Injectable() export class WorkspaceRepository extends Repository { @@ -9,6 +9,18 @@ export class WorkspaceRepository extends Repository { super(workspaceRepository.target, workspaceRepository.manager, workspaceRepository.queryRunner); } + async findOneWorkSpace(workspaceId: string): Promise { + return this.createQueryBuilder("workspace") + .leftJoinAndSelect('workspace.users', 'user') + .select([ + 'workspace', + 'user.id', + 'user.firstName', + 'user.lastName' + ]).where('workspace.id = :workspaceId', {workspaceId}) + .getOne(); + } + async findByUser(userId: string): Promise { return this.createQueryBuilder("workspace") .innerJoin("workspace.users", "users")