Showing AI reviews for super-admin
Project AI Score ?
72%
Quality Avg ?
77%
Security Avg ?
64%
Reviews ?
91

Review Result ?

solutionbowl/super-admin · 3846b61d
The commit adds a user details route and implements functionality to update the 'credit_ref' field of users in the downline users list. It includes UI components for editing credit references, validations to prevent empty or missing user IDs, and feedback via toast notifications. The route tree is updated to include the user details path. Overall, the code introduces meaningful business functionality with reasonable quality, but has some concerns about input sanitation and error handling.
Quality ?
85%
Security ?
60%
Business Value ?
80%
Maintainability ?
80%
Issues & Suggested Fixes ?
1AI detects the issue
2Shows file, line, or evidence
3Suggests the fix to apply
Lack Of Input Sanitation On Credit Ref
Where src/routes/downline-users.$userId.tsx:174
Issue / Evidence lack of input sanitation on credit_ref
Suggested Fix sanitize and validate the input to prevent injection or invalid data
Error Handling Sets Error State From Gener...
Where src/routes/downline-users.$userId.tsx:121
Issue / Evidence error handling sets error state from generic error.message
Suggested Fix add finer-grained error handling or logging for debugging
Clearing Of Creditreferror State Happens M...
Where src/routes/downline-users.$userId.tsx:179
Issue / Evidence clearing of creditRefError state happens multiple times manually
Suggested Fix consider centralizing error state management to reduce repetition
Displaying Credit Ref Or Name Without Esca...
Where src/routes/downline-users.$userId.tsx:460
Issue / Evidence displaying credit_ref or name without escaping
Suggested Fix ensure output is properly escaped to prevent XSS
Non Descriptive Commit Message
Where commit message
Issue / Evidence non-descriptive commit message
Suggested Fix improve commit message to briefly describe the added feature and files changed
Code Change Preview · src/config/auth.config.ts ?
Removed / Before Commit
- diff --git a/src/config/auth.config.ts b/src/config/auth.config.ts
- index 93abaf4..bb451a2 100644
- creditTransactions: "/credit/transactions",
- betBlock: "/auth/users",
- transferBlock: "/auth/users",
- },
- } as const;
Added / After Commit
+ diff --git a/src/config/auth.config.ts b/src/config/auth.config.ts
+ index 93abaf4..bb451a2 100644
+ creditTransactions: "/credit/transactions",
+ betBlock: "/auth/users",
+ transferBlock: "/auth/users",
+     updateUser: "/auth/update-user",
+ },
+ } as const;
Removed / Before Commit
- diff --git a/src/routes/downline-users.$userId.tsx b/src/routes/downline-users.$userId.tsx
- index 0c1350b..e7432c5 100644
- import { Card } from "@/components/ui/card";
- import { Button } from "@/components/ui/button";
- import { Badge } from "@/components/ui/badge";
- import {
- Table,
- TableBody,
- const queryClient = useQueryClient();
- const downlineQueryKey = ["downline", userId] as const;
- const [pendingBlockAction, setPendingBlockAction] = useState("");
- 
- const { data, isLoading, error } = useQuery({
- queryKey: downlineQueryKey,
- setPendingBlockAction("");
- },
- });
- const tableHeadings = [
Added / After Commit
+ diff --git a/src/routes/downline-users.$userId.tsx b/src/routes/downline-users.$userId.tsx
+ index 0c1350b..e7432c5 100644
+ import { Card } from "@/components/ui/card";
+ import { Button } from "@/components/ui/button";
+ import { Badge } from "@/components/ui/badge";
+ import { Input } from "@/components/ui/input";
+ import { Label } from "@/components/ui/label";
+ import {
+   Dialog,
+   DialogContent,
+   DialogHeader,
+   DialogTitle,
+ } from "@/components/ui/dialog";
+ import {
+ Table,
+ TableBody,
+ const queryClient = useQueryClient();
+ const downlineQueryKey = ["downline", userId] as const;
Removed / Before Commit
- diff --git a/src/routes/user-details.$userId.tsx b/src/routes/user-details.$userId.tsx
- new file mode 100644
- index 0000000..13b1ed3
Added / After Commit
+ diff --git a/src/routes/user-details.$userId.tsx b/src/routes/user-details.$userId.tsx
+ new file mode 100644
+ index 0000000..13b1ed3
+ import { createFileRoute } from "@tanstack/react-router";
+ import { useQuery } from "@tanstack/react-query";
+ import { useState } from "react";
+ import { motion } from "motion/react";
+ import { Card } from "@/components/ui/card";
+ import { Button } from "@/components/ui/button";
+ import { Input } from "@/components/ui/input";
+ import { Badge } from "@/components/ui/badge";
+ import {
+   Table,
+   TableBody,
+   TableCell,
+   TableHead,
+   TableHeader,
+   TableRow,
Removed / Before Commit
- diff --git a/src/routes/user-listing.tsx b/src/routes/user-listing.tsx
- index 4dd4478..860309d 100644
- const [creditFormError, setCreditFormError] = useState("");
- const [selectedDownlineTab, setSelectedDownlineTab] = useState<DownlineTab>("all");
- const [drillDownlineUserId, setDrillDownlineUserId] = useState<string | null>(null);
- const effectiveDownlineTab =
- downlineTabs.find((tab) => tab.value === selectedDownlineTab)?.value ??
- downlineTabs[0]?.value ??
- toast.error(message);
- },
- });
- const pageSize = 10;
- const creditSummary = useMemo(() => {
- const balanceDown = toNumber(user?.balanceDown);
- userId,
- });
- };
- const fmt = (n: number) =>
Added / After Commit
+ diff --git a/src/routes/user-listing.tsx b/src/routes/user-listing.tsx
+ index 4dd4478..860309d 100644
+ const [creditFormError, setCreditFormError] = useState("");
+ const [selectedDownlineTab, setSelectedDownlineTab] = useState<DownlineTab>("all");
+ const [drillDownlineUserId, setDrillDownlineUserId] = useState<string | null>(null);
+   const [editCreditRefUser, setEditCreditRefUser] = useState<DownlineUser | null>(null);
+   const [newCreditRefValue, setNewCreditRefValue] = useState("");
+   const [creditRefError, setCreditRefError] = useState("");
+ const effectiveDownlineTab =
+ downlineTabs.find((tab) => tab.value === selectedDownlineTab)?.value ??
+ downlineTabs[0]?.value ??
+ toast.error(message);
+ },
+ });
+   const updateCreditRefMutation = useMutation({
+     mutationFn: ({ userId, credit_ref }: { userId: string; credit_ref: string }) =>
+       internalServices.authUsers.updateUser(userId, { credit_ref }),
+     onSuccess: (updatedUser) => {
Removed / Before Commit
- diff --git a/src/routeTree.gen.ts b/src/routeTree.gen.ts
- index bca8707..3c32b04 100644
- import { Route as BalanceRouteImport } from './routes/balance'
- import { Route as AccountsRouteImport } from './routes/accounts'
- import { Route as IndexRouteImport } from './routes/index'
- import { Route as DownlineUsersUserIdRouteImport } from './routes/downline-users.$userId'
- import { Route as AgencyManagementUserDetailsUserIdRouteImport } from './routes/agency-management.user-details.$userId'
- 
- path: '/',
- getParentRoute: () => rootRouteImport,
- } as any)
- const DownlineUsersUserIdRoute = DownlineUsersUserIdRouteImport.update({
- id: '/downline-users/$userId',
- path: '/downline-users/$userId',
- '/users': typeof UsersRoute
- '/virtual-report': typeof VirtualReportRoute
- '/downline-users/$userId': typeof DownlineUsersUserIdRoute
- '/agency-management/user-details/$userId': typeof AgencyManagementUserDetailsUserIdRoute
Added / After Commit
+ diff --git a/src/routeTree.gen.ts b/src/routeTree.gen.ts
+ index bca8707..3c32b04 100644
+ import { Route as BalanceRouteImport } from './routes/balance'
+ import { Route as AccountsRouteImport } from './routes/accounts'
+ import { Route as IndexRouteImport } from './routes/index'
+ import { Route as UserDetailsUserIdRouteImport } from './routes/user-details.$userId'
+ import { Route as DownlineUsersUserIdRouteImport } from './routes/downline-users.$userId'
+ import { Route as AgencyManagementUserDetailsUserIdRouteImport } from './routes/agency-management.user-details.$userId'
+ 
+ path: '/',
+ getParentRoute: () => rootRouteImport,
+ } as any)
+ const UserDetailsUserIdRoute = UserDetailsUserIdRouteImport.update({
+   id: '/user-details/$userId',
+   path: '/user-details/$userId',
+   getParentRoute: () => rootRouteImport,
+ } as any)
+ const DownlineUsersUserIdRoute = DownlineUsersUserIdRouteImport.update({
Removed / Before Commit
- diff --git a/src/services/api/downlineTypes.ts b/src/services/api/downlineTypes.ts
- index 5c1bd32..8dcbd4c 100644
- isBetBlocked?: boolean;
- isTransferBlocked?: boolean;
- createdAt?: string;
- }
- 
- export interface DownlineResponse {
- downline?: DownlineUserItem[];
- };
- }
- \ No newline at end of file
Added / After Commit
+ diff --git a/src/services/api/downlineTypes.ts b/src/services/api/downlineTypes.ts
+ index 5c1bd32..8dcbd4c 100644
+ isBetBlocked?: boolean;
+ isTransferBlocked?: boolean;
+ createdAt?: string;
+   credit_ref?: string;
+ }
+ 
+ export interface DownlineResponse {
+ downline?: DownlineUserItem[];
+ };
+ }
+  
+ \ No newline at end of file
Removed / Before Commit
- diff --git a/src/services/api/internalServices.ts b/src/services/api/internalServices.ts
- index 4841d02..d73287e 100644
- ),
- );
- },
- },
- platformUsers: createResourceService<PanelUser>("/platform-users", "users"),
- banners: {
Added / After Commit
+ diff --git a/src/services/api/internalServices.ts b/src/services/api/internalServices.ts
+ index 4841d02..d73287e 100644
+ ),
+ );
+ },
+     async updateUser(userId: string, payload: {
+       password?: string;
+       repeatPassword?: string;
+       paymentThreshold?: number;
+       status?: string;
+       credit_ref?: string;
+     }) {
+       return unwrapData<DownlineUser>(
+         await authApiClient.put<unknown>(
+           `${authConfig.panelAuthEndpoints.updateUser}/${userId}`,
+           payload,
+         ),
+       );
Removed / Before Commit
- diff --git a/src/services/api/internalTypes.ts b/src/services/api/internalTypes.ts
- index e60f098..301b2d0 100644
- isBetBlocked?: boolean;
- isTransferBlocked?: boolean;
- createdAt?: string;
- }
- 
- export interface CreatePanelUserRequest {
Added / After Commit
+ diff --git a/src/services/api/internalTypes.ts b/src/services/api/internalTypes.ts
+ index e60f098..301b2d0 100644
+ isBetBlocked?: boolean;
+ isTransferBlocked?: boolean;
+ createdAt?: string;
+   credit_ref?: string;
+ }
+ 
+ export interface CreatePanelUserRequest {