import { Result } from '@core/shared/application/Result'; import type { ApplicationErrorCode } from '@core/shared/errors/ApplicationErrorCode'; import type { IDriverRepository } from '../../domain/repositories/IDriverRepository'; import type { DriverDTO } from '../dto/DriverDTO'; import { EntityMappers } from '../mappers/EntityMappers'; export interface UpdateDriverProfileInput { driverId: string; bio?: string; country?: string; } /** * Application use case responsible for updating basic driver profile details. * Encapsulates domain entity mutation and mapping to a DriverDTO. */ export class UpdateDriverProfileUseCase { constructor(private readonly driverRepository: IDriverRepository) {} async execute(input: UpdateDriverProfileInput): Promise>> { const { driverId, bio, country } = input; const existing = await this.driverRepository.findById(driverId); if (!existing) { return Result.err({ code: 'DRIVER_NOT_FOUND' }); } const updated = existing.update({ ...(bio !== undefined ? { bio } : {}), ...(country !== undefined ? { country } : {}), }); const persisted = await this.driverRepository.update(updated); const dto = EntityMappers.toDriverDTO(persisted); return Result.ok(dto!); } }