refactor: refactored the taskphase

This commit is contained in:
2026-07-06 14:26:03 +03:30
parent 5964a9b20d
commit d9283e3a90
6 changed files with 48 additions and 53 deletions
@@ -0,0 +1,20 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class TMAddingTaskPhasePermissionToPermissionEnumType1783335279945 implements MigrationInterface {
name = 'TMAddingTaskPhasePermissionToPermissionEnumType1783335279945'
public async up(queryRunner: QueryRunner): Promise<void> {
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', 'task_phase')`);
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<void> {
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', 'project')`);
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"`);
}
}
+4
View File
@@ -930,4 +930,8 @@ export const enum ProjectMessage {
PROJECT_NOT_FOUND = "پروژه مورد نظر شما وجود ندارد!",
PROJECT_CONTAINS_TASK_PHASES = "پروژه شامل فاز تسک است. لطفا ابتدا فاز تسک های این پروژه را حذف کنید.",
NOT_MEMBER_OF_PROJECT = "شما عضو این پروژه نیستید!"
}
export const enum TaskPhaseMessage {
TASK_PHASE_NOT_FOUND = "فاز تسک مورد نظر پیدا نشد!"
}
@@ -4,7 +4,14 @@ import { TaskPhaseService } from "../providers/task-phase.service";
import { CreateTaskPhaseDto } from "../dto/task-phase/create-task-phase.dto";
import { UpdateTaskPhaseDto } from "../dto/task-phase/update-task-phase.dto";
import { TMTaskPhase } from "../entities/task-phase.entity";
import { AuthGuards } from "../../../common/decorators/auth-guard.decorator";
import { AdminRoute } from "../../../common/decorators/admin.decorator";
import { PermissionsDec } from "../../../common/decorators/permission.decorator";
import { PermissionEnum } from "../../users/enums/permission.enum";
@AuthGuards()
@AdminRoute()
@PermissionsDec(PermissionEnum.TASK_PHASE)
@ApiTags("Task Manager - Task Phases")
@Controller("task-manager/task-phases")
export class TaskPhaseController {
@@ -1,35 +1,36 @@
import { Injectable, NotFoundException } from "@nestjs/common";
import { TaskPhaseRepository } from "../repositories/task-phase.repository";
import { ProjectRepository } from "../repositories/project.repository";
import { TMTaskPhase } from "../entities/task-phase.entity";
import { CreateTaskPhaseDto } from "../dto/task-phase/create-task-phase.dto";
import { UpdateTaskPhaseDto } from "../dto/task-phase/update-task-phase.dto";
import { TaskPhaseMessage } from "../../../common/enums/message.enum";
import { ProjectService } from "./project.service";
@Injectable()
export class TaskPhaseService {
constructor(
private readonly taskPhaseRepository: TaskPhaseRepository,
private readonly projectRepository: ProjectRepository,
private readonly projectService: ProjectService
) {}
findAll(): Promise<TMTaskPhase[]> {
return this.taskPhaseRepository.findAll();
return this.taskPhaseRepository.find();
}
findByProject(projectId: string): Promise<TMTaskPhase[]> {
return this.taskPhaseRepository.findByProject(projectId);
return this.taskPhaseRepository.find({
where: {projectId}
});
}
async findOne(id: string): Promise<TMTaskPhase> {
const taskPhase = await this.taskPhaseRepository.findOneById(id);
if (!taskPhase) throw new NotFoundException(`TaskPhase #${id} not found`);
const taskPhase = await this.taskPhaseRepository.findOne({where: {id}});
if (!taskPhase) throw new NotFoundException(TaskPhaseMessage.TASK_PHASE_NOT_FOUND);
return taskPhase;
}
async create(dto: CreateTaskPhaseDto): Promise<TMTaskPhase> {
const project = await this.projectRepository.findOneById(dto.projectId);
if (!project) throw new NotFoundException(`Project #${dto.projectId} not found`);
await this.projectService.findOneOrFail(dto.projectId);
const taskPhase = this.taskPhaseRepository.create(dto);
return this.taskPhaseRepository.save(taskPhase);
}
@@ -38,8 +39,7 @@ export class TaskPhaseService {
const taskPhase = await this.findOne(id);
if (dto.projectId) {
const project = await this.projectRepository.findOneById(dto.projectId);
if (!project) throw new NotFoundException(`Project #${dto.projectId} not found`);
await this.projectService.findOneOrFail(dto.projectId);
}
Object.assign(taskPhase, dto);
@@ -4,47 +4,10 @@ import { Repository } from "typeorm";
import { TMTaskPhase } from "../entities/task-phase.entity";
@Injectable()
export class TaskPhaseRepository {
export class TaskPhaseRepository extends Repository<TMTaskPhase> {
constructor(
@InjectRepository(TMTaskPhase)
private readonly repository: Repository<TMTaskPhase>,
) {}
findAll() {
return this.repository.find({
relations: ["project", "tasks"],
order: { order: "ASC" },
});
}
findByProject(projectId: string) {
return this.repository.find({
where: { projectId },
relations: ["tasks"],
order: { order: "ASC" },
});
}
findOneById(id: string) {
return this.repository.findOne({
where: { id },
relations: ["project", "tasks"],
});
}
create(data: Partial<TMTaskPhase>) {
return this.repository.create(data);
}
save(taskPhase: TMTaskPhase) {
return this.repository.save(taskPhase);
}
update(id: string, data: Partial<TMTaskPhase>) {
return this.repository.update(id, data);
}
delete(id: string) {
return this.repository.delete(id);
@InjectRepository(TMTaskPhase) taskPhaseRepository: Repository<TMTaskPhase>,
) {
super(taskPhaseRepository.target, taskPhaseRepository.manager, taskPhaseRepository.queryRunner);
}
}
+2 -1
View File
@@ -26,5 +26,6 @@ export enum PermissionEnum {
DMAIL = 'dmail',
RESELLER="reseller",
WORKSPACE="workspace",
PROJECT="project"
PROJECT="project",
TASK_PHASE="task_phase"
}