Files
Avtex/apps/web/server/modules/notes-lists/application/ToggleListItemUseCase.ts
T

31 lines
1.1 KiB
TypeScript

import { IUseCase } from '../../../core/application/IUseCase';
import { Result } from '../../../core/domain/Result';
import { DomainError, NotFoundError, ValidationError } from '../../../core/domain/DomainError';
import { IListRepository } from '../domain/IListRepository';
import { ListItem } from '../domain/ListItem';
import { ToggleListItemDto } from './dtos/ListDtos';
export class ToggleListItemUseCase implements IUseCase<ToggleListItemDto, ListItem> {
constructor(private readonly listRepository: IListRepository) {}
public async execute(dto: ToggleListItemDto): Promise<Result<ListItem, DomainError>> {
if (!dto.itemId) {
return Result.fail(new ValidationError('Item ID is required'));
}
const item = await this.listRepository.findItemById(dto.itemId);
if (!item) {
return Result.fail(new NotFoundError(`Item with ID ${dto.itemId} not found`));
}
if (dto.status) {
item.updateStatus(dto.status);
} else {
item.toggleCompleted();
}
await this.listRepository.saveItem(item);
return Result.ok(item);
}
}