using Microsoft.Extensions.Logging; using DomainResults.Common; using MongoDB.Driver; using DataProviders.Abstractions; using MongoDB.Driver.GridFS; namespace DataProviders.Buckets { /// /// /// public abstract class SpecificBucketDataProviderBase : BucketDataProviderBase { private readonly string _bucketName; /// /// /// /// /// public SpecificBucketDataProviderBase( ILogger logger, IMongoClient client, string bucketName ) : base(logger, client) { _bucketName = bucketName; } /// /// /// /// /// /// /// public (Guid?, IDomainResult) Upload(Guid siteId, Guid userId, BucketFile file) => Upload(siteId, userId, file, _bucketName); /// /// /// /// /// /// /// public (List?, IDomainResult) UploadMany(Guid siteId, Guid userId, List files) => UploadMany(siteId, userId, files, _bucketName); /// /// /// /// /// /// public (BucketFile?, IDomainResult) Download(Guid siteId, Guid fileId) { var filter = Builders.Filter.And( Builders.Filter.Eq(x => x.Metadata["siteId"], $"{siteId}"), Builders.Filter.Eq(x => x.Metadata["private"], false), Builders.Filter.Eq(x => x.Filename, $"{fileId}") ); var (list, result) = Download(filter, _bucketName); if (!result.IsSuccess || list == null) return (null, result); return (list.First(), result); } /// /// /// /// /// /// /// public (BucketFile?, IDomainResult) Download(Guid siteId, Guid userId, Guid fileId) { var filter = Builders.Filter.And( Builders.Filter.Eq(x => x.Metadata["siteId"], $"{siteId}"), Builders.Filter.Eq(x => x.Metadata["userId"], $"{userId}"), Builders.Filter.Eq(x => x.Filename, $"{fileId}") ); var (list, result) = Download(filter, _bucketName); if (!result.IsSuccess || list == null) return (null, result); return (list.First(), result); } /// /// /// /// /// /// /// public IDomainResult DeleteOne(Guid siteId, Guid userId, Guid fileId) => DeleteOne(siteId, userId, fileId, _bucketName); /// /// /// /// /// /// public IDomainResult DeletMany(Guid siteId, Guid userId) => DeleteMany(siteId, userId, _bucketName); } }