MyBookmark/Modules.Library.Database/GatewaysImplementations/GenreGateway.cs
2024-09-23 03:00:50 +03:00

66 lines
2.1 KiB
C#

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<List<Application.Models.Genre>> GetList()
{
var list = await repository.GetAllAsync();
return list.Select(GenreConverter.Convert).ToList();
}
public async Task<Guid> 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<Genre> 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<Genre> GetGenreById(Guid id)
{
var dbGenre = await repository.GetByIdAsync(id);
return new GenreBuilder(dbGenre.Name).SetId(dbGenre.Id).Build();
}
public Task<bool> IsGenreExists(Guid id) => repository.AnyWhere(q => q.Id == id && !q.Deleted);
public Task<bool> IsGenreExists(string name, Guid? selfId) =>
repository.AnyWhere(q => q.Id != selfId && q.Name == name.Trim() && !q.Deleted);
}