80 lines
1.8 KiB
JavaScript
80 lines
1.8 KiB
JavaScript
import { Router } from 'express';
|
|
import { requireAuth } from '../middleware.js';
|
|
import {
|
|
listJackpotBattles,
|
|
getJackpotRound,
|
|
createJackpotBattle,
|
|
placeJackpotBet,
|
|
withdrawJackpotBet,
|
|
} from '../services/jackpot.js';
|
|
|
|
const router = Router();
|
|
|
|
function handleError(res, err) {
|
|
const status = err.status || 500;
|
|
if (status >= 500) console.error(err);
|
|
res.status(status).json({ error: err.message || 'Request failed' });
|
|
}
|
|
|
|
router.get('/', async (_req, res) => {
|
|
try {
|
|
const battles = await listJackpotBattles();
|
|
res.json({ battles });
|
|
} catch (err) {
|
|
handleError(res, err);
|
|
}
|
|
});
|
|
|
|
router.get('/:id', async (req, res) => {
|
|
try {
|
|
const round = await getJackpotRound(req.params.id);
|
|
if (!round) {
|
|
return res.status(404).json({ error: 'Battle not found' });
|
|
}
|
|
res.json({ round });
|
|
} catch (err) {
|
|
handleError(res, err);
|
|
}
|
|
});
|
|
|
|
/** Create a battle by placing the first bet (no round id). */
|
|
router.post('/bet', requireAuth, async (req, res) => {
|
|
try {
|
|
const state = await createJackpotBattle(
|
|
req.session.userId,
|
|
req.body.inventoryItemIds
|
|
);
|
|
res.json({ round: state });
|
|
} catch (err) {
|
|
handleError(res, err);
|
|
}
|
|
});
|
|
|
|
router.post('/:id/bet', requireAuth, async (req, res) => {
|
|
try {
|
|
const state = await placeJackpotBet(
|
|
req.params.id,
|
|
req.session.userId,
|
|
req.body.inventoryItemIds
|
|
);
|
|
res.json({ round: state });
|
|
} catch (err) {
|
|
handleError(res, err);
|
|
}
|
|
});
|
|
|
|
router.post('/:id/withdraw', requireAuth, async (req, res) => {
|
|
try {
|
|
const state = await withdrawJackpotBet(
|
|
req.params.id,
|
|
req.session.userId,
|
|
req.body.inventoryItemIds
|
|
);
|
|
res.json({ round: state });
|
|
} catch (err) {
|
|
handleError(res, err);
|
|
}
|
|
});
|
|
|
|
export default router;
|