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) { await personExists(username); Person updatedPerson = Person.Create(username: personDto.Username, realName: personDto.RealName, birthday: personDto.Birthday); await _personRepository.UpdateAsync(updatedPerson); } public async Task DeletePersonAsync(string username) { await personExists(username); } private async Task personExists(string username) { Person? person = await _personRepository.GetByUsernameAsync(username); if (person == null) throw new KeyNotFoundException("Person not found"); return person; } } }