MyBookmark/Modules.Library.Domain/Interactors/LanguageInteractor.cs
2024-09-04 23:08:56 +03:00

36 lines
1.5 KiB
C#

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<Guid> 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");
}
}