using api.Domain; using api.DTOs; using api.Repositories; namespace api.Services { public class PersonService(IPersonRepository PersonRepository) : IPersonService { private readonly IPersonRepository _personRepository = PersonRepository; public async Task AddPersonAsync(PersonDto personDto) { Person person = Person.Create( username: personDto.Username, realName: personDto.RealName, birthday: personDto.Birthday ); await _personRepository.AddAsync(person); } public async Task> GetAllPersonsAsync() { IEnumerable persons = await _personRepository.GetAllAsync(); return persons.Select(p => new PersonDto { Username = p.Username, RealName = p.RealName, Birthday = p.Birthday }); } public async Task GetPersonByUsernameAsync(string username) { Person person = await PersonExists(username); return new PersonDto { Username = person.Username, RealName = person.RealName, Birthday = person.Birthday }; } public async Task UpdatePersonAsync(string username, PersonDto personDto) { Person person = await PersonExists(username); string updatedName = string.IsNullOrWhiteSpace(personDto.RealName) ? person.RealName : personDto.RealName; person.Update(realName: updatedName, birthday: personDto.Birthday); await _personRepository.UpdateAsync(person); } public async Task DeletePersonAsync(string username) { await PersonExists(username); await _personRepository.DeleteAsync(username); } private async Task PersonExists(string username) { username = Person.NormalizeUsername(username); Person person = await _personRepository.GetByUsernameAsync(username); return person; } } }