feat(api): ship + research endpoints queue tasks with lead + helpers; mission accept is instant and free (#44)
CI / build + unit + e2e (pull_request) Failing after 3m58s
CI / build + unit + e2e (pull_request) Failing after 3m58s
This commit is contained in:
@@ -531,6 +531,20 @@ export async function saveTaskRow(db: GameDb, task: Omit<Task, 'id' | 'saveId'>)
|
||||
return row.id
|
||||
}
|
||||
|
||||
// The route's DB-boundary hold write (the route→save pattern): queueTask's deducted inventory
|
||||
// replaces the save's rows — array order = oldest first = id order, so spendItems' oldest-row-
|
||||
// first consumption and the id-ordered reads stay consistent after the rewrite. Persists so
|
||||
// the deduction survives a crash; the queueing routes call it with queueTask's result.
|
||||
export async function saveInventory(db: GameDb, items: InventoryItemDto[]): Promise<void> {
|
||||
await ensureSave(db)
|
||||
const [save] = await db.db.select().from(schema.saves).limit(1)
|
||||
await db.db.delete(schema.inventoryItems).where(eq(schema.inventoryItems.saveId, save.id))
|
||||
for (const item of items) {
|
||||
await db.db.insert(schema.inventoryItems).values({ saveId: save.id, kind: item.kind, name: item.name, qty: item.qty })
|
||||
}
|
||||
await persist(db)
|
||||
}
|
||||
|
||||
export async function runTurn(db: GameDb): Promise<TickResult> {
|
||||
await ensureSave(db)
|
||||
const [save] = await db.db.select().from(schema.saves).limit(1)
|
||||
|
||||
Reference in New Issue
Block a user