fix reserved turn daemon api serialization

This commit is contained in:
2026-07-26 19:23:25 +00:00
parent d1e9d5fc75
commit 8f1fe73bad
12 changed files with 1003 additions and 74 deletions
+39 -20
View File
@@ -229,16 +229,25 @@ const claimGeneralRevision = async (
expectedRevision: number
): Promise<number> => {
const nextRevision = expectedRevision + 1;
const claimed =
expectedRevision === 0
? await db.generalTurnRevision.createMany({
data: [{ generalId, revision: nextRevision }],
skipDuplicates: true,
})
: await db.generalTurnRevision.updateMany({
where: { generalId, revision: expectedRevision },
data: { revision: nextRevision },
});
const now = new Date();
let claimed = await db.generalTurnRevision.updateMany({
where: {
generalId,
revision: expectedRevision,
OR: [{ leaseOwner: null }, { leaseExpiresAt: { lte: now } }],
},
data: {
revision: nextRevision,
leaseOwner: null,
leaseExpiresAt: null,
},
});
if (claimed.count === 0 && expectedRevision === 0) {
claimed = await db.generalTurnRevision.createMany({
data: [{ generalId, revision: nextRevision }],
skipDuplicates: true,
});
}
if (claimed.count === 1) {
return nextRevision;
}
@@ -253,16 +262,26 @@ const claimNationRevision = async (
expectedRevision: number
): Promise<number> => {
const nextRevision = expectedRevision + 1;
const claimed =
expectedRevision === 0
? await db.nationTurnRevision.createMany({
data: [{ nationId, officerLevel, revision: nextRevision }],
skipDuplicates: true,
})
: await db.nationTurnRevision.updateMany({
where: { nationId, officerLevel, revision: expectedRevision },
data: { revision: nextRevision },
});
const now = new Date();
let claimed = await db.nationTurnRevision.updateMany({
where: {
nationId,
officerLevel,
revision: expectedRevision,
OR: [{ leaseOwner: null }, { leaseExpiresAt: { lte: now } }],
},
data: {
revision: nextRevision,
leaseOwner: null,
leaseExpiresAt: null,
},
});
if (claimed.count === 0 && expectedRevision === 0) {
claimed = await db.nationTurnRevision.createMany({
data: [{ nationId, officerLevel, revision: nextRevision }],
skipDuplicates: true,
});
}
if (claimed.count === 1) {
return nextRevision;
}