Showing AI reviews for website
Project AI Score ?
71%
Quality Avg ?
72%
Security Avg ?
74%
Reviews ?
123

Review Result ?

solutionbowl/website · 62e9fe5e
This commit adds exposure and exposureProfit fields to multi-race detail pages and updates the Sidebar component and data fetching logic to handle and display exposure-related information. It includes proper optional chaining and error handling when refreshing multi-bet races and maps nullable values gracefully.
Quality ?
85%
Security ?
85%
Business Value ?
90%
Maintainability ?
85%
Issues & Suggested Fixes ?
1AI detects the issue
2Shows file, line, or evidence
3Suggests the fix to apply
Add More Granular Error Handling Instead O...
Where src/pages/MultiRaceDetail.tsx:653
Issue / Evidence add more granular error handling instead of a generic catch to improve debugging and possibly prevent silent failures
Suggested Fix Review and simplify this section.
Change Console.error To A More User Notifi...
Where src/pages/MultiRaceDetail.tsx:667
Issue / Evidence change console.error to a more user-notifiable error reporting mechanism to enhance reliability and user trust
Suggested Fix Review and simplify this section.
Improve Detail And Clarity
Where commit message
Issue / Evidence improve detail and clarity
Suggested Fix expand the commit message to explain what exposure issue was fixed and how it benefits the system
Code Change Preview · src/components/layout/Sidebar.tsx ?
Removed / Before Commit
- diff --git a/src/components/layout/Sidebar.tsx b/src/components/layout/Sidebar.tsx
- index f74d745..197de03 100644
- import SelectedRaceSidebarMenu from "./SelectedRaceSidebarMenu";
- import SelectedMultiRaceSidebarMenu from "./SelectedMultiRaceSidebarMenu";
- 
- const racingMenuItems = [
-   {
-     name: "Horse Racing",
-     icon: "/images/horses.png",
-     path: "/horse-racing",
-     sportId: 3,
-     dynamicChildren: "racing" as const,
-   },
- ];
- 
- interface SidebarProps {
- isOpen: boolean;
- onClose: () => void;
Added / After Commit
+ diff --git a/src/components/layout/Sidebar.tsx b/src/components/layout/Sidebar.tsx
+ index f74d745..197de03 100644
+ import SelectedRaceSidebarMenu from "./SelectedRaceSidebarMenu";
+ import SelectedMultiRaceSidebarMenu from "./SelectedMultiRaceSidebarMenu";
+ 
+ interface SidebarProps {
+ isOpen: boolean;
+ onClose: () => void;
+ 
+ {/* Sidebar */}
+ <aside
+         style={{
+           backgroundColor: colors.background,
+           scrollbarColor: `${colors.primary} transparent`,
+         }}
+         className={`overflow-y-auto [scrollbar-width:thin] [&::-webkit-scrollbar]:w-[4px] [&::-webkit-scrollbar-track]:bg-transparent [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-thumb]:bg-white/25 fixed top-0 left-0 h-full w-[270px] z-50 transform transition-transform duration-300 lg:sticky lg:translate-x-0 ${
+ isOpen ? "translate-x-0" : "-translate-x-full lg:translate-x-0"
+ }`}
Removed / Before Commit
- diff --git a/src/pages/MultiRaceDetail.tsx b/src/pages/MultiRaceDetail.tsx
- index ef34745..7a6d71d 100644
- import { useSearchParams, useLocation } from "react-router-dom"
- import {
- getMultiBetRaces,
-   getRaceExposure,
- placeMultiBet,
- type MultiBetRace,
- type PlaceMultiBetRequest,
-   type ExposureData,
- } from "../services/racing"
- // import { betService } from "../services/betService"
- import { useThemeColors } from "../hooks/useThemeColors"
- marketId: race.market?.marketId || "",
- runners: (race.market?.runners || []).map((runner, runnerIndex) => {
- const horseNumber = toNullableNumber(runner.horse_number)
- 
- return {
Added / After Commit
+ diff --git a/src/pages/MultiRaceDetail.tsx b/src/pages/MultiRaceDetail.tsx
+ index ef34745..7a6d71d 100644
+ import { useSearchParams, useLocation } from "react-router-dom"
+ import {
+ getMultiBetRaces,
+ placeMultiBet,
+ type MultiBetRace,
+ type PlaceMultiBetRequest,
+ } from "../services/racing"
+ // import { betService } from "../services/betService"
+ import { useThemeColors } from "../hooks/useThemeColors"
+ marketId: race.market?.marketId || "",
+ runners: (race.market?.runners || []).map((runner, runnerIndex) => {
+ const horseNumber = toNullableNumber(runner.horse_number)
+       const exposure = toNullableNumber(
+         runner.exposure ?? runner.runner?.exposure
+       )
+       const exposureProfit = toNullableNumber(
Removed / Before Commit
- diff --git a/src/services/racing.ts b/src/services/racing.ts
- index 2e0e311..04ac647 100644
- back_static_volume: number | null
- back_volume: number | null
- lay_volume: number | null
- jersey?: string
- runner?: {
- runnerId: string
- gateNo: number
- jockey: string
- trainer: string
- }
- }
Added / After Commit
+ diff --git a/src/services/racing.ts b/src/services/racing.ts
+ index 2e0e311..04ac647 100644
+ back_static_volume: number | null
+ back_volume: number | null
+ lay_volume: number | null
+   exposure?: number | null
+   exposureProfit?: number | null
+   exposure_profit?: number | null
+ jersey?: string
+ runner?: {
+ runnerId: string
+ gateNo: number
+ jockey: string
+ trainer: string
+     exposure?: number | null
+     exposureProfit?: number | null
+     exposure_profit?: number | null
+ }