Files
caliverse_server/UGQDataAccess/Repository/QuestIdSequenceRepository.cs
2025-05-01 07:20:41 +09:00

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