using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using WIDESEAWCS_Common; using WIDESEAWCS_Common.HttpEnum; using WIDESEAWCS_Core.Caches; namespace WIDESEAWCS_Server.HostedService { /// /// Preloads API route mappings into cache at application startup. /// public class ApiRouteCacheWarmupHostedService : IHostedService { private static readonly (string ConfigKey, string RoutePath)[] ApiRouteMappings = { (nameof(ConfigKey.CreateTaskInboundAsync), "Task/CreateTaskInbound"), (nameof(ConfigKey.GetTasksLocation), "Task/GetTasksLocation"), (nameof(ConfigKey.OutboundFinishTaskAsync), "Task/OutboundFinishTask"), (nameof(ConfigKey.InboundFinishTaskAsync), "Task/InboundFinishTask"), (nameof(ConfigKey.GetOutBoundTrayTaskAsync), "Task/GetOutBoundTrayTask"), (nameof(ConfigKey.CreateTaskInboundTrayAsync), "Task/CreateTaskInboundTray"), (nameof(ConfigKey.GroupPalletAsync), "Stock/GroupPalletAsync"), (nameof(ConfigKey.ChangePalletAsync), "Stock/ChangePalletAsync"), (nameof(ConfigKey.SplitPalletAsync), "Stock/SplitPalletAsync"), (nameof(ConfigKey.UpdateTaskByStatus), "Task/UpdateTaskByStatus"), (nameof(ConfigKey.TransferCheck), "LocationInfo/TransferCheck"), (nameof(ConfigKey.RelocationFinishTask), "Task/RelocationFinishTask"), (nameof(ConfigKey.CreateRobotGroupPalletTask), "Task/CreateRobotGroupPalletTask"), (nameof(ConfigKey.CreateRobotChangePalletTask), "Task/CreateRobotChangePalletTask"), (nameof(ConfigKey.CreateRobotSplitPalletTask), "Task/CreateRobotSplitPalletTask"), (nameof(ConfigKey.OutboundFinishTaskTray), "Task/OutboundFinishTaskTray") }; private readonly ICacheService _cache; private readonly ILogger _logger; public ApiRouteCacheWarmupHostedService( ICacheService cache, ILogger logger) { _cache = cache; _logger = logger; } public Task StartAsync(CancellationToken cancellationToken) { const string cacheKeyPrefix = $"{RedisPrefix.Code}:{RedisName.API}:"; int warmedCount = 0; foreach ((string configKey, string routePath) in ApiRouteMappings) { _cache.TryAdd($"{cacheKeyPrefix}{configKey}", routePath); warmedCount++; } _logger.LogInformation("£ºAPI·ÓÉ»º´æÔ¤ÈÈÍê³É¡£¼ÆÊý={Count}", warmedCount); return Task.CompletedTask; } public Task StopAsync(CancellationToken cancellationToken) { return Task.CompletedTask; } } }