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