BotSharp/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.Stats.cs

63 lines
2.1 KiB
C#
Raw Normal View History

2025-01-24 05:45:43 +00:00
using BotSharp.Abstraction.Statistics.Models;
2024-01-29 04:18:40 +00:00
2025-01-24 05:45:43 +00:00
namespace BotSharp.Plugin.MongoStorage.Repository;
public partial class MongoRepository
2024-01-29 04:18:40 +00:00
{
2025-01-24 19:42:17 +00:00
public BotSharpStats? GetGlobalStats(string category, string group, DateTime recordTime)
2025-01-24 05:45:43 +00:00
{
2025-01-24 19:42:17 +00:00
var time = BuildRecordTime(recordTime);
2025-01-24 05:45:43 +00:00
var builder = Builders<GlobalStatisticsDocument>.Filter;
var filters = new List<FilterDefinition<GlobalStatisticsDocument>>()
{
builder.Eq(x => x.Category, category),
builder.Eq(x => x.Group, group),
2025-01-24 19:42:17 +00:00
builder.Eq(x => x.RecordTime, time)
2025-01-24 05:45:43 +00:00
};
var filterDef = builder.And(filters);
var found = _dc.GlobalStatistics.Find(filterDef).FirstOrDefault();
if (found == null) return null;
return new BotSharpStats
{
Category = found.Category,
Group = found.Group,
Data = found.Data,
2025-01-24 19:42:17 +00:00
RecordTime = found.RecordTime
2025-01-24 05:45:43 +00:00
};
}
public bool SaveGlobalStats(BotSharpStats body)
2024-01-29 04:18:40 +00:00
{
2025-01-24 19:42:17 +00:00
var time = BuildRecordTime(body.RecordTime);
2025-01-24 05:45:43 +00:00
var builder = Builders<GlobalStatisticsDocument>.Filter;
var filters = new List<FilterDefinition<GlobalStatisticsDocument>>()
2024-01-29 04:18:40 +00:00
{
2025-01-24 05:45:43 +00:00
builder.Eq(x => x.Category, body.Category),
builder.Eq(x => x.Group, body.Group),
2025-01-24 19:42:17 +00:00
builder.Eq(x => x.RecordTime, time)
2025-01-24 05:45:43 +00:00
};
var filterDef = builder.And(filters);
var updateDef = Builders<GlobalStatisticsDocument>.Update
.SetOnInsert(x => x.Id, Guid.NewGuid().ToString())
.Set(x => x.Category, body.Category)
.Set(x => x.Group, body.Group)
.Set(x => x.Data, body.Data)
2025-01-24 19:42:17 +00:00
.Set(x => x.RecordTime, time);
2025-01-24 05:45:43 +00:00
_dc.GlobalStatistics.UpdateOne(filterDef, updateDef, _options);
return true;
}
#region Private methods
2025-01-24 19:42:17 +00:00
private DateTime BuildRecordTime(DateTime date)
2025-01-24 05:45:43 +00:00
{
2025-01-24 19:42:17 +00:00
var recordDate = new DateTime(date.Year, date.Month, date.Day, date.Hour, 0, 0);
return DateTime.SpecifyKind(recordDate, DateTimeKind.Utc);
2024-01-29 04:18:40 +00:00
}
2025-01-24 05:45:43 +00:00
#endregion
2024-01-29 04:18:40 +00:00
}