64 lines
2.0 KiB
TypeScript
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');
|
|
}
|
|
}
|
|
}
|