65 lines
1.9 KiB
C#
65 lines
1.9 KiB
C#
using CommonDomain;
|
|
using Microsoft.Extensions.Logging;
|
|
using MongoRepository;
|
|
using RedisService;
|
|
|
|
namespace UserService.GameConfigs
|
|
{
|
|
public class ActivityConfigService : IActivityConfigService
|
|
{
|
|
private readonly IMongoBaseRepository<ActivityConfig> _mongo;
|
|
private readonly IRedisService _redis;
|
|
|
|
public ActivityConfigService(IMongoBaseRepository<ActivityConfig> mongo, IRedisService redis)
|
|
{
|
|
_mongo = mongo;
|
|
_redis = redis;
|
|
}
|
|
|
|
public async Task<ActivityConfig> 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);
|
|
}
|
|
}
|
|
}
|