void.cat/VoidCat/Services/Users/CacheUserUploadStore.cs

60 lines
1.7 KiB
C#
Raw Normal View History

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 />
public class CacheUserUploadStore : IUserUploadsStore
2022-02-27 23:01:57 +00:00
{
private readonly ICache _cache;
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 />
public async ValueTask AddFile(Guid user, Guid file)
2022-02-27 23:01:57 +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
}