using Microsoft.Extensions.Options; using MongoDB.Bson; using MongoDB.Driver; using SharpCompress.Common; using UGQDatabase.Models; using UGQDataAccess.Settings; using ServerCommon.UGQ; namespace UGQDataAccess.Repository; public class QuestDialogRepository : BaseRepository { private const string CollectionName = "QuestDialog"; public QuestDialogRepository(IMongoClient mongoClient, IOptions settings) : base(mongoClient, settings.Value.DatabaseName, CollectionName) { } public async Task<(ServerErrorCode, QuestDialogEntity)> add(QuestDialogEntity entity) { await Collection.InsertOneAsync(entity); return (ServerErrorCode.Success, entity); } public async Task get(string id) { var filter = Builders.Filter .Eq(x => x.Id, id); var entity = await Collection.Find(filter).FirstOrDefaultAsync(); return entity; } public async Task> get(IEnumerable ids) { var filter = Builders.Filter .In(x => x.Id, ids); return await Collection.Find(filter).ToListAsync(); } public async Task<(ServerErrorCode, QuestDialogEntity?)> updateSequences(string dialogId, List sequences) { var filter = Builders.Filter .Eq(x => x.Id, dialogId); var update = Builders.Update .Set(x => x.Sequences, sequences) .Set(x => x.UpdatedAt, DateTime.UtcNow); var options = new FindOneAndUpdateOptions { ReturnDocument = ReturnDocument.After, }; var updated = await Collection.FindOneAndUpdateAsync(filter, update, options); return (ServerErrorCode.Success, updated); } }