diff --git a/apps/api/src/module-registry/module-registry.controller.ts b/apps/api/src/module-registry/module-registry.controller.ts index e10e22c..87240f6 100644 --- a/apps/api/src/module-registry/module-registry.controller.ts +++ b/apps/api/src/module-registry/module-registry.controller.ts @@ -46,7 +46,7 @@ export class ModuleRegistryController { */ @Get('active') async findActive(@Req() req: Request) { - const tenantId = (req as any).tenantId; + const tenantId = (req as any).tenantId ?? (req as any).user?.tenantId; if (!tenantId) { throw new ForbiddenException('No tenant context'); } @@ -66,7 +66,7 @@ export class ModuleRegistryController { @Param('moduleId') moduleId: string, @Req() req: Request, ) { - const tenantId = (req as any).tenantId; + const tenantId = (req as any).tenantId ?? (req as any).user?.tenantId; if (!tenantId) { throw new ForbiddenException('No tenant context'); } @@ -85,7 +85,7 @@ export class ModuleRegistryController { @Param('moduleId') moduleId: string, @Req() req: Request, ) { - const tenantId = (req as any).tenantId; + const tenantId = (req as any).tenantId ?? (req as any).user?.tenantId; if (!tenantId) { throw new ForbiddenException('No tenant context'); } diff --git a/apps/web/src/app/(portal)/admin/modules/page.tsx b/apps/web/src/app/(portal)/admin/modules/page.tsx index 381a100..fa7ad70 100644 --- a/apps/web/src/app/(portal)/admin/modules/page.tsx +++ b/apps/web/src/app/(portal)/admin/modules/page.tsx @@ -32,6 +32,7 @@ export default function AdminModulesPage() { const [activations, setActivations] = useState>(new Map()); const [loading, setLoading] = useState(true); const [toggling, setToggling] = useState(null); + const [error, setError] = useState(null); const isAdmin = currentUser?.role === 'ADMIN' || currentUser?.role === 'SUPER_ADMIN'; @@ -72,6 +73,7 @@ export default function AdminModulesPage() { const toggleModule = async (moduleId: string, currentlyActive: boolean) => { setToggling(moduleId); + setError(null); try { const action = currentlyActive ? 'deactivate' : 'activate'; const res = await fetch(`${API_URL}/modules/${moduleId}/${action}`, { @@ -89,9 +91,12 @@ export default function AdminModulesPage() { } return next; }); + } else { + const body = await res.text().catch(() => ''); + setError(`${res.status}: ${body}`); } - } catch { - // silently fail + } catch (err) { + setError(String(err)); } finally { setToggling(null); } @@ -117,6 +122,12 @@ export default function AdminModulesPage() {

{t('description')}

+ {error && ( +
+ {error} +
+ )} + {loading ? (

{tCommon('loading')}

) : modules.length === 0 ? (