using Modules.Library.Domain.Entities.Genre; using MongoDB.Driver; using Modules.Library.Application.Gateways; using Modules.Library.Domain.EntityBuilders; using Modules.Library.Database.Repositories; using Modules.Library.Database.GatewaysImplementations.Converters; namespace Modules.Library.Database.GatewaysImplementations; public class GenreGateway(GenreRepository repository) : IGenreGateway { public async Task> GetList() { var list = await repository.GetAllAsync(); return list.Select(GenreConverter.Convert).ToList(); } public async Task Create(string name) { return await repository.AddAsync(new Database.Models.Genre.Genre { //Id = genre.Id, //Name = genre.Name, //Deleted = genre.Deleted, Name = name, }); } public async Task Delete(Guid id) { var dbGenre = await repository.GetByIdAsync(id); dbGenre.Deleted = true; await repository.UpdateAsync(dbGenre); //await repository.DeleteAsync(dbGenre); } public async Task SetName(Guid id, string name) { var dbGenre = await repository.GetByIdAsync(id); dbGenre.Name = name.Trim(); await repository.UpdateAsync(dbGenre); } public async Task GetGenre(string name) { var dbGenre = await repository.GetFirstWhere(q => q.Name == name.Trim()); /* var builder = new GenreBuilder(dbGenre.Name); if (dbGenre.Deleted) builder.Deleted(); return builder.SetId(dbGenre.Id).Build(); */ return GenreConverter.ConvertToDomain(dbGenre); } public async Task GetGenreById(Guid id) { var dbGenre = await repository.GetByIdAsync(id); return new GenreBuilder(dbGenre.Name).SetId(dbGenre.Id).Build(); } public Task IsGenreExists(Guid id) => repository.AnyWhere(q => q.Id == id && !q.Deleted); public Task IsGenreExists(string name, Guid? selfId) => repository.AnyWhere(q => q.Id != selfId && q.Name.ToLower() == name.Trim().ToLower() && !q.Deleted); }