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 { constructor(private readonly listRepository: IListRepository) {} public async execute(dto: ToggleListItemDto): Promise> { 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); } }