From f80b8cb81c7a6de8e5e3c12924870788a31b6da2 Mon Sep 17 00:00:00 2001 From: Tetardtek Date: Sun, 15 Mar 2026 00:18:37 +0100 Subject: [PATCH] =?UTF-8?q?fix:=20instrument=20bare=20catch=20blocks=20?= =?UTF-8?q?=E2=80=94=20logger.error=20sur=20stream/admin/user?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/middleware/admin.middleware.ts | 4 +- backend/src/routes/stream.routes.ts | 7 +- backend/src/routes/user.routes.ts | 125 +++++++++++---------- 3 files changed, 76 insertions(+), 60 deletions(-) diff --git a/backend/src/middleware/admin.middleware.ts b/backend/src/middleware/admin.middleware.ts index 72c75fb..dd30439 100644 --- a/backend/src/middleware/admin.middleware.ts +++ b/backend/src/middleware/admin.middleware.ts @@ -3,6 +3,7 @@ import { AppDataSource } from "../config/data-source"; import { User } from "../entities/User"; import { UserRole } from "../entities/UserRole"; import { AuthenticatedRequest } from "./auth.middleware"; +import logger from "../utils/logger"; /** * Middleware requireAdmin — s'exécute APRÈS requireAuth. @@ -39,7 +40,8 @@ export const requireAdmin = async ( } next(); - } catch { + } catch (err) { + logger.error("requireAdmin — DB error", { err }); res.status(500).json({ success: false, error: "INTERNAL_ERROR" }); } }; diff --git a/backend/src/routes/stream.routes.ts b/backend/src/routes/stream.routes.ts index 9ca029b..f7cfa74 100644 --- a/backend/src/routes/stream.routes.ts +++ b/backend/src/routes/stream.routes.ts @@ -5,6 +5,7 @@ import { AppDataSource } from "../config/data-source"; import { Video } from "../entities/Video"; import { User } from "../entities/User"; import { UserSubscription } from "../entities/UserSubscription"; +import logger from "../utils/logger"; const router = Router(); @@ -41,7 +42,8 @@ async function getUserLevel(token: string | undefined): Promise { }); return sub?.plan.level ?? 0; - } catch { + } catch (err) { + logger.warn("getUserLevel — auth/DB error", { err }); return 0; } } @@ -128,7 +130,8 @@ router.get("/:key(*)", async (req: Request, res: Response): Promise => { }); fs.createReadStream(resolved).pipe(res); } - } catch { + } catch (err) { + logger.error("GET /stream/:key — unexpected error", { err }); res.status(500).json({ success: false, error: "INTERNAL_ERROR" }); } }); diff --git a/backend/src/routes/user.routes.ts b/backend/src/routes/user.routes.ts index 7e527c2..86069d1 100644 --- a/backend/src/routes/user.routes.ts +++ b/backend/src/routes/user.routes.ts @@ -3,6 +3,7 @@ import { AppDataSource } from "../config/data-source"; import { User } from "../entities/User"; import { UserSubscription } from "../entities/UserSubscription"; import { requireAuth, AuthenticatedRequest } from "../middleware/auth.middleware"; +import logger from "../utils/logger"; const router = Router(); @@ -27,45 +28,50 @@ async function getActiveSub(userId: string) { router.get("/me/profile", requireAuth, async (req: Request, res: Response): Promise => { const { user } = req as AuthenticatedRequest; - const localUser = await AppDataSource.getRepository(User).findOne({ - where: { superOAuthId: user.id }, - relations: ["userRoles", "userRoles.role"], - }); + try { + const localUser = await AppDataSource.getRepository(User).findOne({ + where: { superOAuthId: user.id }, + relations: ["userRoles", "userRoles.role"], + }); - if (!localUser) { - res.status(404).json({ success: false, error: "USER_NOT_FOUND" }); - return; + if (!localUser) { + res.status(404).json({ success: false, error: "USER_NOT_FOUND" }); + return; + } + + const roles = localUser.userRoles.map((ur) => ur.role.slug); + const activeSub = await getActiveSub(localUser.id); + + const plan = activeSub + ? { slug: activeSub.plan.slug, name: activeSub.plan.name, level: activeSub.plan.level } + : null; + + const subscription = activeSub + ? { + status: activeSub.status, + startsAt: activeSub.startsAt.toISOString(), + endsAt: activeSub.endsAt ? activeSub.endsAt.toISOString() : null, + } + : null; + + res.json({ + success: true, + data: { + id: localUser.id, + superOAuthId: localUser.superOAuthId, + email: localUser.email, + nickname: localUser.nickname, + avatar: localUser.avatar, + roles, + plan, + subscription, + createdAt: localUser.createdAt.toISOString(), + }, + }); + } catch (err) { + logger.error("GET /users/me/profile — DB error", { err }); + res.status(500).json({ success: false, error: "INTERNAL_ERROR" }); } - - const roles = localUser.userRoles.map((ur) => ur.role.slug); - const activeSub = await getActiveSub(localUser.id); - - const plan = activeSub - ? { slug: activeSub.plan.slug, name: activeSub.plan.name, level: activeSub.plan.level } - : null; - - const subscription = activeSub - ? { - status: activeSub.status, - startsAt: activeSub.startsAt.toISOString(), - endsAt: activeSub.endsAt ? activeSub.endsAt.toISOString() : null, - } - : null; - - res.json({ - success: true, - data: { - id: localUser.id, - superOAuthId: localUser.superOAuthId, - email: localUser.email, - nickname: localUser.nickname, - avatar: localUser.avatar, - roles, - plan, - subscription, - createdAt: localUser.createdAt.toISOString(), - }, - }); }); /** @@ -95,33 +101,38 @@ router.patch("/me", requireAuth, async (req: Request, res: Response): Promise