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

Review Result ?

solutionbowl/super-admin · 317403f1
This commit adds comprehensive handling for multiple profit-loss event aliases in the socket listener, improving coverage and robustness. It includes normalization and checks for event names, along with appropriate callbacks to refresh the reports. Logging is added for visibility. However, the implementation could benefit from improved code comments, input validation, and better error handling to reduce risk further.
Quality ?
80%
Security ?
70%
Business Value ?
85%
Maintainability ?
80%
Issues & Suggested Fixes ?
1AI detects the issue
2Shows file, line, or evidence
3Suggests the fix to apply
Lack Of Code Comments
Where src/hooks/useReportSocket.tsx:17
Issue / Evidence lack of code comments
Suggested Fix add comments to explain the purpose of PROFIT_LOSS_EVENT_ALIASES and normalization functions
Normalizeeventname Assumes String Input
Where src/hooks/useReportSocket.tsx:259
Issue / Evidence normalizeEventName assumes string input
Suggested Fix add input type checks or validation to avoid runtime errors with unexpected types
Handleprofitloss Function
Where src/hooks/useReportSocket.tsx:116
Issue / Evidence handleProfitLoss function
Suggested Fix add error handling/logging for unexpected payloads to reduce bug risk
Socket.on Subscriptions
Where src/hooks/useReportSocket.tsx:123
Issue / Evidence socket.on subscriptions
Suggested Fix ensure proper cleanup of listeners when component unmounts to avoid memory leaks or duplicate handlers
Very Brief And Vague
Where commit message
Issue / Evidence very brief and vague
Suggested Fix expand to clearly explain the problem fixed, and any impacts or related changes
Code Change Preview · src/hooks/useReportSocket.tsx ?
Removed / Before Commit
- diff --git a/src/hooks/useReportSocket.tsx b/src/hooks/useReportSocket.tsx
- index 1c5ac8c..aad973a 100644
- const PROFIT_LOSS_EVENT = "profitLoss";
- const BETS_EVENT = "bets";
- const SESSION_INVALID = "SESSION_INVALID";
- 
- export function useReportSocket({
- enabled = true,
- console.info("[report-socket] reconnected", attempt);
- });
- 
-     socket.on(PROFIT_LOSS_EVENT, (...args) => {
- const payload = getSocketPayload(args);
- console.info("[report-socket] profitLoss event received", payload);
- onProfitLossRef.current?.();
- });
- 
- socket.on(BETS_EVENT, (...args) => {
Added / After Commit
+ diff --git a/src/hooks/useReportSocket.tsx b/src/hooks/useReportSocket.tsx
+ index 1c5ac8c..aad973a 100644
+ const PROFIT_LOSS_EVENT = "profitLoss";
+ const BETS_EVENT = "bets";
+ const SESSION_INVALID = "SESSION_INVALID";
+ const PROFIT_LOSS_EVENT_ALIASES = [
+   "profitLoss",
+   "ProfitLoss",
+   "profitloss",
+   "profit_loss",
+   "profit-loss",
+   "profit loss",
+ ];
+ 
+ export function useReportSocket({
+ enabled = true,
+ console.info("[report-socket] reconnected", attempt);
+ });
Removed / Before Commit
- diff --git a/src/routes/pl-by-agent.tsx b/src/routes/pl-by-agent.tsx
- index 3df2694..940a3d9 100644
- const csvRows = useMemo(() => flattenCsvRows(report), [report]);
- const refetchReport = reportQuery.refetch;
- 
-   const refreshAppliedReport = (force = false) => {
-     if (!force && !isRefreshEnabled) return;
-     refetchReport();
- setRefreshCountdown(refreshIntervalSeconds);
- };
- useReportSocket({ onProfitLoss: refreshAppliedReport });
- }, [isRefreshEnabled, refreshCountdown, refetchReport]);
- 
- const handleManualRefresh = () => {
-     refreshAppliedReport(true);
- };
- const csvExportRows = useMemo(
- () => [
Added / After Commit
+ diff --git a/src/routes/pl-by-agent.tsx b/src/routes/pl-by-agent.tsx
+ index 3df2694..940a3d9 100644
+ const csvRows = useMemo(() => flattenCsvRows(report), [report]);
+ const refetchReport = reportQuery.refetch;
+ 
+   const refreshAppliedReport = () => {
+     console.info("[pl-by-agent] profitLoss refresh callback", {
+       isRefreshEnabled,
+       filters: appliedFilters,
+     });
+     void refetchReport();
+ setRefreshCountdown(refreshIntervalSeconds);
+ };
+ useReportSocket({ onProfitLoss: refreshAppliedReport });
+ }, [isRefreshEnabled, refreshCountdown, refetchReport]);
+ 
+ const handleManualRefresh = () => {
+     refreshAppliedReport();
Removed / Before Commit
- diff --git a/src/routes/pl-by-market.tsx b/src/routes/pl-by-market.tsx
- index e50b929..63f4500 100644
- const csvRows = useMemo(() => flattenCsvRows(report), [report]);
- const refetchReport = reportQuery.refetch;
- 
-   useReportSocket({
-     onProfitLoss: () => {
-       if (!isRefreshEnabled) return;
-       refetchReport();
-       setRefreshCountdown(refreshIntervalSeconds);
-     },
-   });
- 
- 
- useEffect(() => {
Added / After Commit
+ diff --git a/src/routes/pl-by-market.tsx b/src/routes/pl-by-market.tsx
+ index e50b929..63f4500 100644
+ const csvRows = useMemo(() => flattenCsvRows(report), [report]);
+ const refetchReport = reportQuery.refetch;
+ 
+   const refreshFromSocket = () => {
+     console.info("[pl-by-market] profitLoss socket callback", {
+       isRefreshEnabled,
+       filters: appliedFilters,
+     });
+     void refetchReport();
+     setRefreshCountdown(refreshIntervalSeconds);
+   };
+ 
+   useReportSocket({ onProfitLoss: refreshFromSocket });
+ 
+ 
+ useEffect(() => {