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);
}
}