From a4aba43bc1a65fb8e67fac2aa97869d16de59c2a Mon Sep 17 00:00:00 2001 From: realrafi Date: Tue, 30 Jun 2026 16:37:45 +0330 Subject: [PATCH] refactor: add validation to workspace create --- .../providers/workspace.service.ts | 36 +++++++++++-------- .../repositories/workspace.repository.ts | 1 - .../task-manager/task-manager.module.ts | 2 +- 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/modules/task-manager/providers/workspace.service.ts b/src/modules/task-manager/providers/workspace.service.ts index b6d408e..06e68f4 100644 --- a/src/modules/task-manager/providers/workspace.service.ts +++ b/src/modules/task-manager/providers/workspace.service.ts @@ -1,16 +1,18 @@ -import { Injectable, NotFoundException } from '@nestjs/common'; -import { InjectRepository } from '@nestjs/typeorm'; -import { In, Repository } from 'typeorm'; -import { WorkspaceRepository } from '../repositories/workspace.repository'; -import { TMWorkspace } from '../entities/workspace.entity'; -import { CreateWorkspaceDto } from '../dto/workspace/create-workspace.dto'; -import { UpdateWorkspaceDto } from '../dto/workspace/update-workspace.dto'; -import { User } from '../../users/entities/user.entity'; +import { Injectable, NotFoundException } from "@nestjs/common"; +import { InjectRepository } from "@nestjs/typeorm"; +import { In, Repository } from "typeorm"; +import { WorkspaceRepository } from "../repositories/workspace.repository"; +import { TMWorkspace } from "../entities/workspace.entity"; +import { CreateWorkspaceDto } from "../dto/workspace/create-workspace.dto"; +import { UpdateWorkspaceDto } from "../dto/workspace/update-workspace.dto"; +import { User } from "../../users/entities/user.entity"; +import { WorkspaceTypeRepository } from "../repositories/workspace-type.repository"; @Injectable() export class WorkspaceService { constructor( private readonly workspaceRepository: WorkspaceRepository, + private readonly workspaceTypeRepository: WorkspaceTypeRepository, @InjectRepository(User) private readonly userRepository: Repository, ) {} @@ -26,7 +28,10 @@ export class WorkspaceService { } async create(dto: CreateWorkspaceDto): Promise { - const { userIds, ...rest } = dto; + const { userIds, workspaceTypeId, ...rest } = dto; + + const workspaceType = await this.workspaceTypeRepository.findOneById(workspaceTypeId); + if (!workspaceType) throw new NotFoundException(`WorkSpaceType #${workspaceTypeId} not found!`); const workspace = this.workspaceRepository.create(rest); @@ -39,14 +44,17 @@ export class WorkspaceService { async update(id: string, dto: UpdateWorkspaceDto): Promise { const workspace = await this.findOneOrFail(id); - const { userIds, ...rest } = dto; + const { userIds, workspaceTypeId, ...rest } = dto; + + if (workspaceTypeId) { + const workspaceType = await this.workspaceTypeRepository.findOneById(workspaceTypeId); + if (!workspaceType) throw new NotFoundException(`WorkSpaceType #${workspaceTypeId} not found!`); + } Object.assign(workspace, rest); if (userIds) { - workspace.users = userIds.length - ? await this.userRepository.findBy({ id: In(userIds) }) - : []; + workspace.users = userIds.length ? await this.userRepository.findBy({ id: In(userIds) }) : []; } return this.workspaceRepository.save(workspace); @@ -58,4 +66,4 @@ export class WorkspaceService { return workspace; } -} \ No newline at end of file +} diff --git a/src/modules/task-manager/repositories/workspace.repository.ts b/src/modules/task-manager/repositories/workspace.repository.ts index fd38d40..2d63626 100644 --- a/src/modules/task-manager/repositories/workspace.repository.ts +++ b/src/modules/task-manager/repositories/workspace.repository.ts @@ -19,7 +19,6 @@ export class WorkspaceRepository { findOneById(id: string) { return this.repository.findOne({ where: { id }, - relations: ["workspaceType", "projects", "users"], }); } diff --git a/src/modules/task-manager/task-manager.module.ts b/src/modules/task-manager/task-manager.module.ts index 86007d4..35a1c5c 100644 --- a/src/modules/task-manager/task-manager.module.ts +++ b/src/modules/task-manager/task-manager.module.ts @@ -39,6 +39,6 @@ import { WorkspaceTypeController } from "./controllers/workspace-type.controller // TaskPhaseService, // TaskService, ], - exports: [WorkspaceService, WorkspaceRepository], + exports: [WorkspaceService, WorkspaceRepository, WorkspaceTypeService, WorkspaceTypeRepository], }) export class TaskManagerModule {}