fix concurrency issue when adding a new step to the same tactic

tests
maxime 1 year ago
parent 9af2167c14
commit 461b3b3c20

@ -9,6 +9,7 @@ namespace DbServices;
public class DbTacticService(AppContext.AppContext context) : ITacticService public class DbTacticService(AppContext.AppContext context) : ITacticService
{ {
public Task<IEnumerable<Tactic>> ListTacticsOf(int userId) public Task<IEnumerable<Tactic>> ListTacticsOf(int userId)
{ {
return Task.FromResult( return Task.FromResult(
@ -111,25 +112,33 @@ public class DbTacticService(AppContext.AppContext context) : ITacticService
public async Task<int?> AddTacticStep(int tacticId, int parentStepId, string initialJson) public async Task<int?> AddTacticStep(int tacticId, int parentStepId, string initialJson)
{ {
if (!context.Tactics.Any(t => t.Id == tacticId))
var tactic = await context.Tactics.FirstOrDefaultAsync(t => t.Id == tacticId);
if (tactic == null)
{ {
return null; return null;
} }
var nextStepId = context.TacticSteps TacticStepEntity entity;
.Where(s => s.TacticId == tacticId) int nextStepId;
.Max(s => s.StepId) + 1; lock (tactic)
var entity = new TacticStepEntity
{ {
JsonContent = initialJson, nextStepId = context.TacticSteps
ParentId = parentStepId, .Where(s => s.TacticId == tacticId)
TacticId = tacticId, .Max(s => s.StepId) + 1;
StepId = nextStepId
}; entity = new TacticStepEntity
{
JsonContent = initialJson,
ParentId = parentStepId,
TacticId = tacticId,
StepId = nextStepId
};
context.Add(entity);
context.SaveChanges();
}
await context.AddAsync(entity);
await context.SaveChangesAsync();
return entity.StepId; return entity.StepId;
} }

@ -54,5 +54,9 @@ Global
{465819A9-7158-4612-AC57-ED2C7A0F243E}.Debug|Any CPU.Build.0 = Debug|Any CPU {465819A9-7158-4612-AC57-ED2C7A0F243E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{465819A9-7158-4612-AC57-ED2C7A0F243E}.Release|Any CPU.ActiveCfg = Release|Any CPU {465819A9-7158-4612-AC57-ED2C7A0F243E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{465819A9-7158-4612-AC57-ED2C7A0F243E}.Release|Any CPU.Build.0 = Release|Any CPU {465819A9-7158-4612-AC57-ED2C7A0F243E}.Release|Any CPU.Build.0 = Release|Any CPU
{9C5EAD2F-FA50-43C2-BB86-1065ED661C52}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9C5EAD2F-FA50-43C2-BB86-1065ED661C52}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9C5EAD2F-FA50-43C2-BB86-1065ED661C52}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9C5EAD2F-FA50-43C2-BB86-1065ED661C52}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
EndGlobal EndGlobal

Loading…
Cancel
Save