2022-02-27 23:01:57 +00:00
|
|
|
using VoidCat.Model;
|
|
|
|
using VoidCat.Services.Abstractions;
|
|
|
|
|
|
|
|
namespace VoidCat.Services.Users;
|
|
|
|
|
2022-06-10 20:42:36 +00:00
|
|
|
/// <inheritdoc />
|
2022-06-13 15:11:58 +00:00
|
|
|
public class CacheUserUploadStore : IUserUploadsStore
|
2022-02-27 23:01:57 +00:00
|
|
|
{
|
|
|
|
private readonly ICache _cache;
|
|
|
|
|
2022-06-13 15:11:58 +00:00
|
|
|
public CacheUserUploadStore(ICache cache)
|
2022-02-27 23:01:57 +00:00
|
|
|
{
|
|
|
|
_cache = cache;
|
|
|
|
}
|
|
|
|
|
2022-06-10 20:42:36 +00:00
|
|
|
/// <inheritdoc />
|
|
|
|
public async ValueTask<PagedResult<Guid>> ListFiles(Guid user, PagedRequest request)
|
2022-02-27 23:01:57 +00:00
|
|
|
{
|
|
|
|
var ids = (await _cache.GetList(MapKey(user))).Select(Guid.Parse);
|
|
|
|
ids = (request.SortBy, request.SortOrder) switch
|
|
|
|
{
|
|
|
|
(PagedSortBy.Id, PageSortOrder.Asc) => ids.OrderBy(a => a),
|
|
|
|
(PagedSortBy.Id, PageSortOrder.Dsc) => ids.OrderByDescending(a => a),
|
|
|
|
_ => ids
|
|
|
|
};
|
|
|
|
|
2022-06-10 20:42:36 +00:00
|
|
|
var idsRendered = ids.ToList();
|
|
|
|
async IAsyncEnumerable<Guid> EnumerateResults(IEnumerable<Guid> page)
|
2022-02-27 23:01:57 +00:00
|
|
|
{
|
2022-06-10 20:42:36 +00:00
|
|
|
foreach (var id in page)
|
2022-02-27 23:01:57 +00:00
|
|
|
{
|
2022-06-10 20:42:36 +00:00
|
|
|
yield return id;
|
2022-02-27 23:01:57 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return new()
|
|
|
|
{
|
|
|
|
Page = request.Page,
|
|
|
|
PageSize = request.PageSize,
|
2022-06-10 20:42:36 +00:00
|
|
|
TotalResults = idsRendered.Count,
|
2023-08-24 10:53:12 +00:00
|
|
|
Data = EnumerateResults(idsRendered.Skip(request.Page * request.PageSize).Take(request.PageSize))
|
2022-02-27 23:01:57 +00:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2022-06-10 20:42:36 +00:00
|
|
|
/// <inheritdoc />
|
2022-06-13 15:11:58 +00:00
|
|
|
public async ValueTask AddFile(Guid user, Guid file)
|
2022-02-27 23:01:57 +00:00
|
|
|
{
|
2022-06-13 15:11:58 +00:00
|
|
|
await _cache.AddToList(MapKey(user), file.ToString());
|
|
|
|
await _cache.Set(MapUploader(file), user);
|
2022-06-10 20:42:36 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/// <inheritdoc />
|
|
|
|
public ValueTask<Guid?> Uploader(Guid file)
|
|
|
|
{
|
|
|
|
return _cache.Get<Guid?>(MapUploader(file));
|
2022-02-27 23:01:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
private static string MapKey(Guid id) => $"user:{id}:uploads";
|
2022-06-10 20:42:36 +00:00
|
|
|
private static string MapUploader(Guid file) => $"file:{file}:uploader";
|
2022-06-06 21:51:25 +00:00
|
|
|
}
|