Add Scene 7 claim report workflow
This commit is contained in:
+13
-3
@@ -8,7 +8,8 @@ import { fileURLToPath } from 'node:url'
|
||||
import multer from 'multer'
|
||||
import pg from 'pg'
|
||||
import type { CaseState } from '../src/types.js'
|
||||
import { authenticateJwt, createDevelopmentAdminToken, hasAdminClaim, requireAdmin, resolveUserId } from './auth.js'
|
||||
import { authenticateJwt, createDevelopmentAdminToken, hasAdminClaim, requireAdmin, resolvePlayerName, resolveUserId } from './auth.js'
|
||||
import { submitCaseReport } from './caseReports.js'
|
||||
import { createLevelRepository } from './levelRepository.js'
|
||||
import { createEvidenceJudgeFromEnv } from './evidenceJudge.js'
|
||||
import { createNarrativeRepository } from './narrativeRepository.js'
|
||||
@@ -57,7 +58,7 @@ app.get('/api/health', async (_req, res) => {
|
||||
evidenceJudge: evidenceJudge.enabled ? evidenceJudge.provider : 'disabled', schema: 'osint', editingEnabled }) }
|
||||
catch { res.status(503).json({ ok: false, database: 'unavailable' }) }
|
||||
})
|
||||
app.get('/api/session', (req, res) => res.json({ authenticated: Boolean(req.authClaims), isAdmin: hasAdminClaim(req) }))
|
||||
app.get('/api/session', (req, res) => res.json({ authenticated: Boolean(req.authClaims), isAdmin: hasAdminClaim(req), playerName:resolvePlayerName(req) }))
|
||||
if (process.env.NODE_ENV !== 'production') app.get('/api/dev/admin-session', (req, res) => {
|
||||
const requestedReturn = String(req.query.returnTo || '/')
|
||||
const returnTo = requestedReturn.startsWith('/') && !requestedReturn.startsWith('//') ? requestedReturn : '/'
|
||||
@@ -176,6 +177,15 @@ app.post('/api/levels/:id/reset', async (req, res, next) => {
|
||||
level ? res.json(level) : res.status(404).json({ error: 'Level not found' })
|
||||
} catch (error) { next(error) }
|
||||
})
|
||||
app.post('/api/levels/:id/report/submissions', async (req, res, next) => {
|
||||
try {
|
||||
const report = await submitCaseReport(pool,String(req.params.id),{
|
||||
investigatorName:String(req.body?.investigatorName || resolvePlayerName(req)),
|
||||
evidence:Array.isArray(req.body?.evidence) ? req.body.evidence : [],
|
||||
})
|
||||
report ? res.status(201).json(report) : res.status(404).json({ error:'Level not found' })
|
||||
} catch (error) { next(error) }
|
||||
})
|
||||
|
||||
// Admin authoring panel: NPC template library and mystery listing. Reads require an
|
||||
// admin claim; writes additionally require editing to be enabled on this deployment.
|
||||
@@ -471,7 +481,7 @@ app.get('/api/playthroughs/current', async (req, res, next) => {
|
||||
app.post('/api/playthroughs/:id/advance', async (req, res, next) => {
|
||||
try {
|
||||
const result = await narrative.advancePlaythrough(resolveUserId(req), String(req.params.id), req.body?.terminalKey)
|
||||
result.ok ? res.json(result.state ?? null) : res.status(result.error === 'Playthrough not found' ? 404 : result.errorCode === 'goals_incomplete' ? 409 : 400)
|
||||
result.ok ? res.json(result.state ?? null) : res.status(result.error === 'Playthrough not found' ? 404 : result.errorCode ? 409 : 400)
|
||||
.json({ error: result.error, errorCode: result.errorCode, pendingGoals: result.pendingGoals })
|
||||
} catch (error) { next(error) }
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user