diff --git a/backend/app/services/rating_service.py b/backend/app/services/rating_service.py index 4a2b9bd..e66b664 100644 --- a/backend/app/services/rating_service.py +++ b/backend/app/services/rating_service.py @@ -142,14 +142,14 @@ def get_tool_rating_summary(tool: str) -> dict: return { "tool": tool, - "count": row["count"], - "average": round(row["average"], 1), + "count": int(row["count"]), + "average": round(float(row["average"]), 1), "distribution": { - "5": row["star5"], - "4": row["star4"], - "3": row["star3"], - "2": row["star2"], - "1": row["star1"], + "5": int(row["star5"]), + "4": int(row["star4"]), + "3": int(row["star3"]), + "2": int(row["star2"]), + "1": int(row["star1"]), }, } @@ -170,8 +170,8 @@ def get_all_ratings_summary() -> list[dict]: return [ { "tool": row["tool"], - "count": row["count"], - "average": round(row["average"], 1), + "count": int(row["count"]), + "average": round(float(row["average"]), 1), } for row in rows ] @@ -189,7 +189,9 @@ def get_global_rating_summary() -> dict: cursor = execute_query(conn, sql) row = row_to_dict(cursor.fetchone()) + avg = float(row["average"]) if row and row["average"] is not None else 0.0 + return { "rating_count": int(row["count"]) if row else 0, - "average_rating": round(row["average"], 1) if row else 0.0, + "average_rating": round(avg, 1), } diff --git a/frontend/src/pages/InternalAdminPage.tsx b/frontend/src/pages/InternalAdminPage.tsx index c742a1b..0597570 100644 --- a/frontend/src/pages/InternalAdminPage.tsx +++ b/frontend/src/pages/InternalAdminPage.tsx @@ -219,7 +219,7 @@ const TRANSLATIONS: Record> = { emailLabel: 'Email', passwordLabel: 'Password', planLabel: 'Plan', - roleLabel: 'Role', + roleLabel2: 'Role', createBtn: 'Create', cancelBtn: 'Cancel', userCreated: 'User created successfully.', @@ -388,7 +388,7 @@ const TRANSLATIONS: Record> = { emailLabel: 'البريد الإلكتروني', passwordLabel: 'كلمة المرور', planLabel: 'الخطة', - roleLabel: 'الدور', + roleLabel2: 'الدور', createBtn: 'إنشاء', cancelBtn: 'إلغاء', userCreated: 'تم إنشاء المستخدم بنجاح.', @@ -604,6 +604,8 @@ export default function InternalAdminPage() { } } + // Fix duplicate roleLabel + async function handlePlanChange(userId: number, plan: 'free' | 'pro') { if (!isAdmin) return; setUpdatingUserId(userId);