refactor page to use services

This commit is contained in:
2025-12-18 17:02:48 +01:00
parent fc386db06a
commit 9814d9682c
27 changed files with 434 additions and 282 deletions

View File

@@ -8,8 +8,7 @@ import Button from '@/components/ui/Button';
import Card from '@/components/ui/Card';
import Heading from '@/components/ui/Heading';
import { useEffectiveDriverId } from '@/hooks/useEffectiveDriverId';
import { ServiceFactory } from '@/lib/services/ServiceFactory';
import { LeagueMembershipService } from '@/lib/services/leagues/LeagueMembershipService';
import { useServices } from '@/lib/services/ServiceProvider';
import { LeagueMembershipUtility } from '@/lib/utilities/LeagueMembershipUtility';
import type { RaceDetailViewModel } from '@/lib/view-models/RaceDetailViewModel';
import {
@@ -38,6 +37,7 @@ export default function RaceDetailPage() {
const router = useRouter();
const params = useParams();
const raceId = params.id as string;
const { raceService, leagueMembershipService } = useServices();
const [viewModel, setViewModel] = useState<RaceDetailViewModel | null>(null);
const [loading, setLoading] = useState(true);
@@ -57,15 +57,13 @@ export default function RaceDetailPage() {
setLoading(true);
setError(null);
try {
const serviceFactory = new ServiceFactory(process.env.NEXT_PUBLIC_API_BASE_URL || 'http://localhost:3001');
const raceService = serviceFactory.createRaceService();
const vm = await raceService.getRaceDetail(raceId, currentDriverId);
setViewModel(vm);
// Fetch league membership for admin controls
if (vm.league) {
await LeagueMembershipService.fetchLeagueMemberships(vm.league.id);
const leagueMembership = LeagueMembershipService.getMembership(vm.league.id, currentDriverId);
await leagueMembershipService.fetchLeagueMemberships(vm.league.id);
const leagueMembership = leagueMembershipService.getMembership(vm.league.id, currentDriverId);
setMembership(leagueMembership);
}
@@ -123,8 +121,6 @@ export default function RaceDetailPage() {
setCancelling(true);
try {
const serviceFactory = new ServiceFactory(process.env.NEXT_PUBLIC_API_BASE_URL || 'http://localhost:3001');
const raceService = serviceFactory.createRaceService();
await raceService.cancelRace(race.id);
await loadRaceData();
} catch (err) {
@@ -147,8 +143,6 @@ export default function RaceDetailPage() {
setRegistering(true);
try {
const serviceFactory = new ServiceFactory(process.env.NEXT_PUBLIC_API_BASE_URL || 'http://localhost:3001');
const raceService = serviceFactory.createRaceService();
await raceService.registerForRace(race.id, league.id, currentDriverId);
await loadRaceData();
} catch (err) {
@@ -171,8 +165,6 @@ export default function RaceDetailPage() {
setRegistering(true);
try {
const serviceFactory = new ServiceFactory(process.env.NEXT_PUBLIC_API_BASE_URL || 'http://localhost:3001');
const raceService = serviceFactory.createRaceService();
await raceService.withdrawFromRace(race.id, currentDriverId);
await loadRaceData();
} catch (err) {
@@ -973,8 +965,6 @@ export default function RaceDetailPage() {
raceName={race.track}
onConfirm={async () => {
try {
const serviceFactory = new ServiceFactory(process.env.NEXT_PUBLIC_API_BASE_URL || 'http://localhost:3001');
const raceService = serviceFactory.createRaceService();
await raceService.completeRace(race.id);
await loadRaceData();
setShowEndRaceModal(false);