using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.Extensions.Options; using MongoDB.Driver; using UGQDatabase.Models; using UGQDataAccess.Settings; using ServerCommon.UGQ; namespace UGQDataAccess.Repository { public class QuestIdSequenceRepository : BaseRepository { private const string CollectionName = "QuestIdSequence"; public QuestIdSequenceRepository(IMongoClient mongoClient, IOptions settings) : base(mongoClient, settings.Value.DatabaseName, CollectionName) { } public async Task init() { var found = await Collection.FindAsync(x => x.Id == "QuestId"); if(found.FirstOrDefault() == null) { QuestIdSequenceEntity entity = new () { Id = "QuestId", Sequence = 0, UpdatedAt = DateTime.UtcNow, CreatedAt = DateTime.UtcNow, }; await Collection.InsertOneAsync(entity); } } public async Task getNextSequence() { var filter = Builders.Filter.Eq(x => x.Id, "QuestId"); var update = Builders.Update .Inc(x => x.Sequence, 1) .Set(x => x.UpdatedAt, DateTime.UtcNow); var options = new FindOneAndUpdateOptions() { ReturnDocument = ReturnDocument.After }; var result = await Collection.FindOneAndUpdateAsync(filter, update, options); return result.Sequence; } } }