reactredux/webapi/DataProviders/BlogCatalogDataProvider.cs

60 lines
2.0 KiB
C#

using Core.DomainObjects.Documents;
using DataProviders.Abstractions;
using DomainResults.Common;
using Microsoft.Extensions.Logging;
using MongoDB.Bson.Serialization;
using MongoDB.Driver;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DataProviders {
public interface IBlogCatalogDataProvider {
(Guid?, IDomainResult) Insert(BlogItem blogItem);
(BlogItem?, IDomainResult) Get(Guid siteId, string slug);
(List<BlogItem>?, IDomainResult) GetAll(Guid siteId, int skip, int take);
(Guid?, IDomainResult) Update(BlogItem blogItem);
IDomainResult Delete(Guid id);
IDomainResult DeleteAll(Guid siteId);
}
public class BlogCatalogDataProvider : DataProviderBase<BlogItem>, IBlogCatalogDataProvider {
private const string _collectionName = "blogcatalog";
public BlogCatalogDataProvider(
ILogger<DataProviderBase<BlogItem>> logger,
IMongoClient client,
IIdGenerator idGenerator,
ISessionService sessionService) : base(logger, client, idGenerator, sessionService) {
}
public (Guid?, IDomainResult) Insert(BlogItem blogItem) =>
Insert(blogItem, _collectionName);
public (BlogItem?, IDomainResult) Get(Guid siteId, string slug) {
var (list, result) = GetWithPredicate(x => x.SiteId == siteId && x.L10n.Where(y => y.Slug == slug).Count() > 0, _collectionName);
if (!result.IsSuccess || list == null)
return (null, result);
return (list.First(), result);
}
public (List<BlogItem>?, IDomainResult) GetAll(Guid siteId, int skip, int take) =>
GetWithPredicate(x => x.SiteId == siteId, 0, 0, _collectionName);
public (Guid?, IDomainResult) Update(BlogItem blogItem) =>
UpdateWithPredicate(blogItem, x => x.Id == blogItem.Id, _collectionName);
public IDomainResult Delete(Guid id) =>
DeleteWithPredicate(x => x.Id == id, _collectionName);
public IDomainResult DeleteAll(Guid siteId) =>
DeleteManyWithPredicate(x => x.SiteId == siteId, _collectionName);
}
}