diff --git a/api/Services/PersonService.cs b/api/Services/PersonService.cs new file mode 100644 index 0000000..318a13e --- /dev/null +++ b/api/Services/PersonService.cs @@ -0,0 +1,69 @@ +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; + } + } +} \ No newline at end of file