/** * Application Use Case: GetSponsorUseCase * * Retrieves a single sponsor by ID. */ import { Result } from '@core/shared/domain/Result'; import type { ApplicationErrorCode } from '@core/shared/errors/ApplicationErrorCode'; import type { Sponsor } from '../../domain/entities/sponsor/Sponsor'; import type { SponsorRepository } from '../../domain/repositories/SponsorRepository'; export type GetSponsorInput = { sponsorId: string; }; export type GetSponsorResult = { sponsor: Sponsor; }; export type GetSponsorErrorCode = 'SPONSOR_NOT_FOUND' | 'REPOSITORY_ERROR'; export class GetSponsorUseCase { constructor( private readonly sponsorRepository: SponsorRepository, ) {} async execute(input: GetSponsorInput): Promise>> { try { const sponsor = await this.sponsorRepository.findById(input.sponsorId); if (!sponsor) { return Result.err({ code: 'SPONSOR_NOT_FOUND', details: { message: 'Sponsor not found', }, }); } const result: GetSponsorResult = { sponsor, }; return Result.ok(result); } catch (error: unknown) { const message = error instanceof Error && typeof error.message === 'string' ? error.message : 'Failed to load sponsor'; return Result.err({ code: 'REPOSITORY_ERROR', details: { message, }, }); } } }