reactredux/webapi/DataProviders/CategoryDataProvider.cs

71 lines
2.4 KiB
C#

using Microsoft.Extensions.Logging;
using MongoDB.Driver;
using MongoDB.Bson.Serialization;
using DomainResults.Common;
using DataProviders.Abstractions;
using Core.DomainObjects;
namespace DataProviders {
public interface ICategoryDataProvider {
(Guid?, IDomainResult) Insert(Category obj);
(Category?, IDomainResult) Get(Guid siteId, Guid categoryId);
(Category?, IDomainResult) Get(Guid siteId, string slug);
(Category?, IDomainResult) Get(Guid siteId, List<string> slugs);
(List<Category>?, IDomainResult) GetAll(Guid siteId);
(Guid?, IDomainResult) Update(Category obj);
IDomainResult Delete(Guid id);
IDomainResult DeleteAll(Guid siteId);
}
public class CategoryDataProvider : DataProviderBase<Category>, ICategoryDataProvider {
private const string _collectionName = "categories";
public CategoryDataProvider(
ILogger<DataProviderBase<Category>> logger,
IMongoClient client,
IIdGenerator idGenerator,
ISessionService sessionService) : base(logger, client, idGenerator, sessionService) {
}
public (Guid?, IDomainResult) Insert(Category obj) =>
Insert(obj, _collectionName);
public (Category?, IDomainResult) Get(Guid siteId, Guid categoryId) {
var (list, result) = GetWithPredicate(x => x.SiteId == siteId && x.Id == categoryId, _collectionName);
if (!result.IsSuccess || list == null)
return (null, result);
return (list.First(), result);
}
public (Category?, IDomainResult) Get(Guid siteId, string slug) =>
Get(siteId, new List<string> { slug });
public (Category?, IDomainResult) Get(Guid siteId, List<string> slugs) {
var (list, result) = GetWithPredicate(x => x.SiteId == siteId && x.L10n.Any(y => slugs.Contains(y.Slug)), _collectionName);
if (!result.IsSuccess || list == null)
return (null, result);
return (list.First(), result);
}
public (List<Category>?, IDomainResult) GetAll(Guid siteId) =>
GetWithPredicate(x => x.SiteId == siteId, _collectionName);
public (Guid?, IDomainResult) Update(Category obj) =>
UpdateWithPredicate(obj, x => x.Id == obj.Id, _collectionName);
public IDomainResult Delete(Guid id) =>
DeleteWithPredicate(x => x.Id == id, _collectionName);
public IDomainResult DeleteAll(Guid siteId) =>
DeleteWithPredicate(x => x.SiteId == siteId, _collectionName);
}
}