using Modules.Library.Domain.Entities.Language; using Modules.Library.Domain.Exceptions.Language; using Modules.Library.Domain.Gateways; namespace Modules.Library.Domain.Interactors; public class LanguageInteractor(ILanguageGateway gateway) { public async Task Create(string codeIso2, string name, Guid? iconId) { if (string.IsNullOrWhiteSpace(name)) throw new ArgumentNullException(name); if (await gateway.GetFirstOrDefaultWhere(q => q.Name == name) != null) throw new LanguageIsAlreadyExistException(); var newLanguage = new Language(codeIso2, name, iconId); return await gateway.AddAsync(newLanguage); } public async Task Edit(Guid languageId, string name, Guid? iconId) { if (string.IsNullOrWhiteSpace(name)) throw new ArgumentNullException(name); var language = await gateway.GetByIdAsync(languageId); if (await gateway.GetFirstOrDefaultWhere(q => q.Name == name) != null) throw new LanguageWithSameNameIsAlreadyExistException(); language.SetName(name); language.SetIcon(iconId); if (!await gateway.UpdateAsync(language)) throw new Exception("Save unsuccessfull"); } public async Task Delete(Guid languageId) { var language = await gateway.GetByIdAsync(languageId); //await gateway.DeleteAsync(genre); if (language.Deleted) throw new Exception("AlreadyDeleted"); language.SetDeleted(); if (!await gateway.UpdateAsync(language)) throw new Exception("Save unsuccessfull"); } }