fix reserved turn queue concurrency

This commit is contained in:
2026-07-26 18:32:52 +00:00
parent ab6ed3553a
commit 3cd1ad3b7f
18 changed files with 613 additions and 106 deletions
+23 -1
View File
@@ -70,7 +70,10 @@ const buildTurnListFromRows = (
const buildNationKey = (nationId: number, officerLevel: number): string => `${nationId}:${officerLevel}`;
type ReservedTurnDatabaseClient = Pick<TurnEngineDatabaseClient, 'generalTurn' | 'nationTurn'>;
type ReservedTurnDatabaseClient = Pick<TurnEngineDatabaseClient, 'generalTurn' | 'nationTurn'> & {
generalTurnRevision?: Pick<NonNullable<TurnEngineDatabaseClient['generalTurnRevision']>, 'upsert'>;
nationTurnRevision?: Pick<NonNullable<TurnEngineDatabaseClient['nationTurnRevision']>, 'upsert'>;
};
export interface ReservedTurnChanges {
generalIds: number[];
@@ -281,6 +284,13 @@ export class InMemoryReservedTurnStore {
arg: asJson(normalizeArgs(entry.args)),
})),
});
if (prisma.generalTurnRevision) {
await prisma.generalTurnRevision.upsert({
where: { generalId },
create: { generalId, revision: 1 },
update: { revision: { increment: 1 } },
});
}
}
for (const generalId of changes.generalInitializationIds) {
@@ -316,6 +326,18 @@ export class InMemoryReservedTurnStore {
arg: asJson(normalizeArgs(entry.args)),
})),
});
if (prisma.nationTurnRevision) {
await prisma.nationTurnRevision.upsert({
where: {
nationId_officerLevel: {
nationId,
officerLevel,
},
},
create: { nationId, officerLevel, revision: 1 },
update: { revision: { increment: 1 } },
});
}
}
for (const key of changes.nationInitializationKeys) {