using Dpz.Core.MessageQueue.Abstractions;
using Dpz.Core.MessageQueue.Models;
using Dpz.Core.Public.ViewModel.Messages;

namespace Dpz.Core.Web.EventHandlers;

public class RefreshUserProfileMessageHandler(
    IFusionCache fusionCache,
    ILogger<RefreshUserProfileMessageHandler> logger
) : IMessageHandler<RefreshUserProfileMessage>
{
    public async Task<MessageHandlerResult> HandleAsync(
        RefreshUserProfileMessage message,
        CancellationToken cancellationToken = default
    )
    {
        if (string.IsNullOrWhiteSpace(message.Account))
        {
            logger.LogWarning("RefreshUserProfileMessage: Account is null or empty");
            return MessageHandlerResult.Ok();
        }

        await fusionCache.SetAsync(
            UserSessionKeys.ChangedAtKey(message.Account),
            message.ChangedAt,
            TimeSpan.FromDays(30),
            token: cancellationToken
        );

        logger.LogInformation(
            "User profile refresh marker updated: Account={Account}, Version={Version}, ChangedAt={ChangedAt}",
            message.Account,
            message.Version,
            message.ChangedAt
        );
        return MessageHandlerResult.Ok();
    }
}
评论加载中...