From e586662c19866aaa197b3eb1143dc4339d33c1ec Mon Sep 17 00:00:00 2001 From: echo Date: Thu, 19 Mar 2026 05:04:12 +0100 Subject: [PATCH] reports fully implemented --- apps/admin/data/fitai.db | Bin 253952 -> 258048 bytes .../src/components/reports/ReportFilters.tsx | 109 ++++++++++++------ 2 files changed, 74 insertions(+), 35 deletions(-) diff --git a/apps/admin/data/fitai.db b/apps/admin/data/fitai.db index ccd543a8aed2cae07d2e22d803b651c8a75f3768..77add3ce5326d5ac3d052ed4a797f4e4495f48cb 100644 GIT binary patch delta 2055 zcma)7O>9(E6n?KWt^J{Msfb8`a#|sDn$9@CowmVL`;(SPV`FJp2!T8A-I=+}`x)+g zuXQ#~S*Vc(sFUzwB56!aj4NU$QhpZV8loFxNW{M`2nz{;g)St~bKlU0ouuh|x%b?A z&Ue1=J8xEQkd@!bN4r{YDvC1xF^sD>zdrfJrAUZ8#0_Pf{6qdC4;y`3e`ss`ad~UU z0o)vX4j#`Muu}*Y;;6tIZE>*=}fl0vHpF(x+Tfx*G?7IiRYY4gJ?P zHG5`T+qStmCH9Jpnp6J=0&8omJ(xQgY3;hJka*-+_t`C1y6z&SKXxU~ zyxH2ZI5%@j+o)K>ZO zF@8@WkICQU5xGz9t@W&^KatjOr~~8o&#OByKBcX-u%3xcd*=EIHF1L!{mKY=xWfKJIy}nY%nB{QCWtI!9P_Tsy+<`Ky zf@=fSN}MgpYgOA5fjwdy_JE>IjXpS9;s%3?u#18@4wR?^dB$q!CBt4G0<5~e@~Hy_ zTk{+Vr6{QGQNySLw=@LlY-UG5mR#tFM*0${rOQLMsMzR88FE~~tfE^2S5O`tMv!@r z8+y=}#Wch~MHOnB?hdk41Y42~a_f{QICJ7~lp!p`cygJ7X$uCz&U=mv6@yx`duBNv z?mD=K)oA{yKI2DhomQXf3^~K*0w@ybixl$IVc50+!?ub{NWL9^c2eC_o2pvW(Pr_3AR?#gYpPr#|0s%gsZ9fH<(Mj0K7w(v2J>iqSyMy8Z3;-BRviRBC_Nv$PV%<<0pyd9(iNwccG# zVN0jrdYLgC zGux%E9hhpffTR?UP%H>}VQZRga0viAL1Rug2a@Vcnt(y6s>=@p3gnj1#Kn@0faC`b vXEPWn%FSQ|(WVBYaTI0*iUxHYDQf|iF^P!NO5jhOUq5}B<4;KQefsi$SH7WF delta 389 zcmXYs%}WAN6vf{iUuiZoS0jm#Xsk@A2!p6aVnG|D{0}k&burLT^sx-xRM0}xS!!9{sjx)RI$xI57-@4}A7MlsU=sAkGhm_^<1m^UH^a4XV2wa&S@f2t8m z!i a.isActive) - .map((a: any) => a.clientId); + const userData = await userResponse.json(); + setCurrentUser(userData.user); - if (assignedClientIds.length > 0) { - // Fetch assigned clients - const clientsRes = await fetch( - `/api/users?role=client&ids=${assignedClientIds.join(",")}`, - ); - if (clientsRes.ok) { - const clientsData = await clientsRes.json(); - setUsers(clientsData.data?.users || []); - } - } else { - setUsers([]); + const currentRole = userData.user.role; + let allUsers: (User & { client?: Client | null })[] = []; + + if (currentRole === "client") { + setUsers([userData.user]); + onUserChange(userData.user.id); + setLoading(false); + return; + } + + if (currentRole === "trainer") { + allUsers.push(userData.user); + const assignmentsRes = await fetch("/api/trainer-client"); + if (assignmentsRes.ok) { + const assignmentsData = await assignmentsRes.json(); + const assignedClientIds = (assignmentsData.assignments || []) + .filter((a: any) => a.isActive) + .map((a: any) => a.clientId); + + if (assignedClientIds.length > 0) { + const clientsRes = await fetch( + `/api/users?role=client&ids=${assignedClientIds.join(",")}`, + ); + if (clientsRes.ok) { + const clientsData = await clientsRes.json(); + allUsers = [...allUsers, ...(clientsData.data?.users || [])]; } } - } else { - // Admins and superadmins can view all clients - const clientsRes = await fetch("/api/users?role=client"); - if (clientsRes.ok) { - const clientsData = await clientsRes.json(); - setUsers(clientsData.data?.users || []); + } + setUsers(allUsers); + setLoading(false); + return; + } + + if (currentRole === "admin") { + allUsers.push(userData.user); + } + + if (currentRole === "superAdmin" || currentRole === "admin") { + const [adminsRes, trainersRes, clientsRes] = await Promise.all([ + fetch("/api/users?role=admin"), + fetch("/api/users?role=trainer"), + fetch("/api/users?role=client"), + ]); + + const [adminsData, trainersData, clientsData] = await Promise.all([ + adminsRes.ok ? adminsRes.json() : { data: { users: [] } }, + trainersRes.ok ? trainersRes.json() : { data: { users: [] } }, + clientsRes.ok ? clientsRes.json() : { data: { users: [] } }, + ]); + + allUsers = [ + ...allUsers, + ...(adminsData.data?.users || []), + ...(trainersData.data?.users || []), + ...(clientsData.data?.users || []), + ]; + + if (currentRole === "superAdmin") { + const superAdminsRes = await fetch("/api/users?role=superAdmin"); + if (superAdminsRes.ok) { + const superAdminsData = await superAdminsRes.json(); + allUsers = [...(superAdminsData.data?.users || []), ...allUsers]; } } + + setUsers(allUsers); + setLoading(false); + return; } + + setUsers(allUsers); } catch (error) { log.error("Failed to fetch users:", error); } finally { @@ -120,7 +159,7 @@ export function ReportFilters({ {users.map((user) => ( - {user.firstName} {user.lastName} + {user.firstName} {user.lastName} ({user.role}) ))}