2025-03-03 17:28:22 +03:00

64 lines
2.0 KiB
TypeScript

import { Injectable, NotFoundException } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Task } from './task.entity';
import { ProjectsService } from '../projects/projects.service';
@Injectable()
export class TasksService {
constructor(
@InjectRepository(Task)
private tasksRepository: Repository<Task>,
private projectsService: ProjectsService,
) {}
async create(data: { title: string; projectId: number; assignedUserId?: number; deadline?: Date }) {
const project = await this.projectsService.findOneById(data.projectId);
if (!project) throw new NotFoundException('Project not found');
const task = this.tasksRepository.create({
title: data.title,
project,
assignedUserId: data.assignedUserId,
deadline: data.deadline,
});
return this.tasksRepository.save(task);
}
async findAll(): Promise<Task[]> {
return this.tasksRepository.find();
}
async findOneById(id: number): Promise<Task | null> {
return this.tasksRepository.findOne({ where: { id } });
}
async findByProjectId(projectId: number): Promise<Task[]> {
return this.tasksRepository.find({
where: { project: { id: projectId } },
});
}
async update(id: number, data: { title?: string; status?: string; deadline?: Date; assignedUserId?: number }) {
const task = await this.findOneById(id);
if (!task) throw new NotFoundException('Task not found');
if (data.title !== undefined) task.title = data.title;
if (data.status !== undefined) task.status = data.status;
if (data.deadline !== undefined) task.deadline = data.deadline;
if (data.assignedUserId !== undefined) {
task.assignedUserId = data.assignedUserId;
}
return this.tasksRepository.save(task);
}
async delete(id: number) {
const result = await this.tasksRepository.delete(id);
if (result.affected === 0) {
throw new NotFoundException('Task not found');
}
}
}