58 lines
1.8 KiB
C#
58 lines
1.8 KiB
C#
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<QuestIdSequenceEntity>
|
|
{
|
|
private const string CollectionName = "QuestIdSequence";
|
|
|
|
public QuestIdSequenceRepository(IMongoClient mongoClient, IOptions<UGQDatabaseSettings> 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<long> getNextSequence()
|
|
{
|
|
var filter = Builders<QuestIdSequenceEntity>.Filter.Eq(x => x.Id, "QuestId");
|
|
var update = Builders<QuestIdSequenceEntity>.Update
|
|
.Inc(x => x.Sequence, 1)
|
|
.Set(x => x.UpdatedAt, DateTime.UtcNow);
|
|
|
|
var options = new FindOneAndUpdateOptions<QuestIdSequenceEntity>()
|
|
{
|
|
ReturnDocument = ReturnDocument.After
|
|
};
|
|
|
|
var result = await Collection.FindOneAndUpdateAsync(filter, update, options);
|
|
|
|
return result.Sequence;
|
|
}
|
|
}
|
|
}
|