using CommonDomain; using Microsoft.Extensions.Logging; using MongoRepository; using RedisService; namespace UserService.GameConfigs { public class ActivityConfigService : IActivityConfigService { private readonly IMongoBaseRepository _mongo; private readonly IRedisService _redis; public ActivityConfigService(IMongoBaseRepository mongo, IRedisService redis) { _mongo = mongo; _redis = redis; } public async Task Get() { var config = _redis.GetActivityConfig(); if (config == null) { config = await _mongo.FindOneAsync(c => true); if (config != null) _redis.SetActivityConfig(config); } if (config != null && config.AutoStopExpired(DateTimeOffset.UtcNow.ToUnixTimeSeconds())) { _redis.SetActivityConfig(config); var result = await _mongo.ReplaceOneAsync(config); } return config; } public async Task<(bool isok, string msg)> Update(ActivityConfig config) { var existing = await Get(); if (existing == null) { config.Id = Guid.NewGuid().ToString("N"); } else { config.Id = existing.Id; } _redis.SetActivityConfig(config); var killConfig = _redis.GetFishingKillConfig(); if (killConfig != null) { killConfig.BattleOrderIsOpen = config.BattleOrderConfig?.IsOpen ?? false; _redis.SetFishingKillConfig(killConfig); } if (existing == null) return await _mongo.InsertOneAsync(config); else return await _mongo.ReplaceOneAsync(config); } } }