step 7.3: done
This commit is contained in:
@@ -67,6 +67,7 @@ function createApp() {
|
||||
app.post('/api/shop/sell', requireAuth, shopRoutes.postSell);
|
||||
|
||||
// Expedition routes (require session)
|
||||
app.get('/api/expeditions/defs', requireAuth, expeditionRoutes.getDefs);
|
||||
app.post('/api/expeditions/start', requireAuth, expeditionRoutes.postStart);
|
||||
app.get('/api/expeditions/active', requireAuth, expeditionRoutes.getActive);
|
||||
app.post('/api/expeditions/claim', requireAuth, expeditionRoutes.postClaim);
|
||||
|
||||
@@ -3,7 +3,7 @@ const zod = require('zod');
|
||||
const { AppError } = require('../utils/errors');
|
||||
const { requireAuth } = require('../middleware/session');
|
||||
const { getCharacterIdForUser } = require('../services/characterService');
|
||||
const { startExpedition, getActive, claimExpedition } = require('../services/expeditionService');
|
||||
const { startExpedition, getActive, claimExpedition, listDefinitions } = require('../services/expeditionService');
|
||||
|
||||
function wrap(fn) {
|
||||
return (req, res, next) => Promise.resolve(fn(req, res, next)).catch(next);
|
||||
@@ -52,10 +52,19 @@ async function handleClaim(req, res) {
|
||||
res.json({ ok: true, data: result });
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /api/expeditions/defs — list all expedition definitions.
|
||||
*/
|
||||
async function handleDefs(_req, res) {
|
||||
const result = listDefinitions();
|
||||
res.json({ ok: true, data: result });
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
routes: {
|
||||
postStart: wrap(handleStart),
|
||||
getActive: wrap(handleActive),
|
||||
postClaim: wrap(handleClaim),
|
||||
getDefs: wrap(handleDefs),
|
||||
},
|
||||
};
|
||||
|
||||
@@ -77,6 +77,11 @@ function getStmts(db) {
|
||||
updateCharacterXp: db.prepare(
|
||||
'UPDATE characters SET xp = ?, level = ?, unspent_points = ? WHERE id = ?'
|
||||
),
|
||||
|
||||
// List all expedition definitions.
|
||||
listDefs: db.prepare(
|
||||
'SELECT * FROM expedition_defs ORDER BY min_level, id'
|
||||
),
|
||||
};
|
||||
stmtCache.set(db, s);
|
||||
}
|
||||
@@ -255,4 +260,27 @@ function claimExpedition(characterId, expeditionId) {
|
||||
};
|
||||
}
|
||||
|
||||
module.exports = { startExpedition, getActive, claimExpedition };
|
||||
/**
|
||||
* List all expedition definitions (public, no auth needed but called behind requireAuth).
|
||||
* @returns {Array<object>} expedition definitions ordered by min_level, id.
|
||||
*/
|
||||
function listDefinitions() {
|
||||
const db = getDb();
|
||||
const s = getStmts(db);
|
||||
|
||||
const rows = s.listDefs.all();
|
||||
return rows.map((row) => ({
|
||||
id: row.id,
|
||||
slug: row.slug,
|
||||
name: row.name,
|
||||
description: row.description,
|
||||
minLevel: row.min_level,
|
||||
durationSec: row.duration_sec,
|
||||
energyCost: row.energy_cost,
|
||||
xpReward: row.xp_reward,
|
||||
goldMin: row.gold_min,
|
||||
goldMax: row.gold_max,
|
||||
}));
|
||||
}
|
||||
|
||||
module.exports = { startExpedition, getActive, claimExpedition, listDefinitions };
|
||||
|
||||
Reference in New Issue
Block a user