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
|
|
|
}
|