- POST /api/v1/lobbies creates a lobby with a Crockford-Base32 6-char code, retrying on unique violation up to 5 times - POST /api/v1/lobbies/:code/join validates lobby state then calls the model's atomic addPlayer, idempotent for repeat joins from the same user - Routes require authentication via requireAuth
37 lines
931 B
TypeScript
37 lines
931 B
TypeScript
import type { Request, Response, NextFunction } from "express";
|
|
import { createLobby, joinLobby } from "../services/lobbyService.js";
|
|
|
|
export const createLobbyHandler = async (
|
|
req: Request,
|
|
res: Response,
|
|
next: NextFunction,
|
|
) => {
|
|
try {
|
|
const userId = req.session!.user.id;
|
|
const lobby = await createLobby(userId);
|
|
res.json({ success: true, data: lobby });
|
|
} catch (error) {
|
|
next(error);
|
|
}
|
|
};
|
|
|
|
export const joinLobbyHandler = async (
|
|
req: Request,
|
|
res: Response,
|
|
next: NextFunction,
|
|
) => {
|
|
try {
|
|
const userId = req.session!.user.id;
|
|
const code = req.params["code"];
|
|
if (!code) {
|
|
return next(new Error("Missing code param"));
|
|
}
|
|
if (typeof code !== "string") {
|
|
return next(new Error("Missing or invalid code param"));
|
|
}
|
|
const lobby = await joinLobby(code, userId);
|
|
res.json({ success: true, data: lobby });
|
|
} catch (error) {
|
|
next(error);
|
|
}
|
|
};
|