/
Saypi
/
task-manager-test
Обзор
Документация
Войти
/
Saypi
/
task-manager-test
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/domain/tasks/task.entity.ts
67 строк
2 KB
Saipykurbanov
first_commit
05 ноя 2025, 21:19
05 ноя 2025, 21:19
ed9bfce
Код
Авторство
О чём код?
import { BadRequestError } from "../common/errors"; import { TypeTask, TypeTaskStatus } from "../common/types"; export class Task { id?: number; title: string; description?: string | null; dueDate?: Date | null; status: TypeTaskStatus; constructor(props: TypeTask) { this.id = props.id; this.title = props.title; this.description = props.description; this.dueDate = props.dueDate ? new Date(props.dueDate) : undefined; this.status = props.status ?? 'pending'; } //INFO: Проверка поля title validateTitle() { if(!this.title) throw new BadRequestError('Заполните обязательное поле "title"') if(this.title?.length < 3) throw new BadRequestError('Поле "title" не может быть меньше 3х символов') } //INFO: Проверка даты validateDueDate() { if (this.dueDate && this.dueDate < new Date()) throw new BadRequestError('Дата завершения не может быть в прошлом') } //INFO: Проверка статуса validateStatus() { const allowedStatuses = ['pending', 'active', 'completed'] as const; if(!this.status) this.status = 'pending' if(!allowedStatuses.includes(this.status)) throw new BadRequestError('Неправильный статус') } //INFO: Отметить задачу как завершённую complete() { if (this.status === 'completed') throw new BadRequestError('Задача уже завершена') this.status = 'completed' } //INFO: Проверка, наступает ли срок задачи в ближайшие 24 часа isDueSoon(): boolean { if (!this.dueDate) return false; const diff = this.dueDate.getTime() - Date.now(); return diff > 0 && diff <= 24 * 60 * 60 * 1000; } //INFO: Обновление данных update(props: Partial<Omit<TypeTask, 'id'>>) { if (props.title !== undefined) { this.title = props.title this.validateTitle() } if (props.description !== undefined) this.description = props.description; if (props.dueDate !== undefined) { this.dueDate = new Date(props.dueDate) this.validateDueDate() } if (props.status !== undefined) { this.status = props.status this.validateStatus() } } }