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, 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 { return this.tasksRepository.find(); } async findOneById(id: number): Promise { return this.tasksRepository.findOne({ where: { id } }); } async findByProjectId(projectId: number): Promise { 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'); } } }