AdminWorkingScopeCache.cs 1.75 KB
using Microsoft.Extensions.Caching.Distributed;
using Volo.Abp.Caching;

namespace FoodLabeling.Application.Helpers;

/// <summary>
/// 管理员(或级联选店流程)当前工作门店缓存项。
/// </summary>
public class AdminWorkingScopeCacheItem
{
    public string LocationId { get; set; } = string.Empty;

    public string PartnerId { get; set; } = string.Empty;

    public string GroupId { get; set; } = string.Empty;
}

/// <summary>
/// 按用户 Id 缓存当前选中的工作门店。
/// </summary>
public class AdminWorkingScopeCacheKey
{
    public AdminWorkingScopeCacheKey(Guid userId)
    {
        UserId = userId;
    }

    public Guid UserId { get; }
}

/// <summary>
/// 读写 <see cref="AdminWorkingScopeCacheItem"/>(选店后与 App <c>my-locations</c> 行为对齐)。
/// </summary>
public static class AdminWorkingScopeCacheHelper
{
    private static readonly DistributedCacheEntryOptions DefaultOptions = new()
    {
        AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(24)
    };

    public static async Task<AdminWorkingScopeCacheItem?> GetAsync(
        IDistributedCache<AdminWorkingScopeCacheItem, AdminWorkingScopeCacheKey> cache,
        Guid userId)
    {
        return await cache.GetAsync(new AdminWorkingScopeCacheKey(userId));
    }

    public static Task SetAsync(
        IDistributedCache<AdminWorkingScopeCacheItem, AdminWorkingScopeCacheKey> cache,
        Guid userId,
        AdminWorkingScopeCacheItem item) =>
        cache.SetAsync(new AdminWorkingScopeCacheKey(userId), item, DefaultOptions);

    public static Task RemoveAsync(
        IDistributedCache<AdminWorkingScopeCacheItem, AdminWorkingScopeCacheKey> cache,
        Guid userId) =>
        cache.RemoveAsync(new AdminWorkingScopeCacheKey(userId));
}