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

@@ -3,9 +3,9 @@
import { useState, useEffect } from 'react';
import { useParams } from 'next/navigation';
import Card from '@/components/ui/Card';
import { LeagueScoringConfigPresenter } from '@/lib/presenters/LeagueScoringConfigPresenter';
import type { LeagueScoringConfigDTO } from '@core/racing/application/dto/LeagueScoringConfigDTO';
import type { League } from '@core/racing/domain/entities/League';
import { useServices } from '@/lib/services/ServiceProvider';
import type { LeagueWithCapacityDTO } from '@/lib/types/generated/LeagueWithCapacityDTO';
type RulebookSection = 'scoring' | 'conduct' | 'protests' | 'penalties';
@@ -13,7 +13,7 @@ export default function LeagueRulebookPage() {
const params = useParams();
const leagueId = params.id as string;
const [league, setLeague] = useState<League | null>(null);
const [league, setLeague] = useState<LeagueWithCapacityDTO | null>(null);
const [scoringConfig, setScoringConfig] = useState<LeagueScoringConfigDTO | null>(null);
const [loading, setLoading] = useState(true);
const [activeSection, setActiveSection] = useState<RulebookSection>('scoring');
@@ -21,21 +21,15 @@ export default function LeagueRulebookPage() {
useEffect(() => {
async function loadData() {
try {
const leagueRepo = getLeagueRepository();
const scoringUseCase = getGetLeagueScoringConfigUseCase();
const leagueData = await leagueRepo.findById(leagueId);
if (!leagueData) {
const { leagueService } = useServices();
const viewModel = await leagueService.getLeagueDetailPageData(leagueId);
if (!viewModel) {
setLoading(false);
return;
}
setLeague(leagueData);
const scoringPresenter = new LeagueScoringConfigPresenter();
await scoringUseCase.execute({ leagueId }, scoringPresenter);
const scoringViewModel = scoringPresenter.getViewModel();
setScoringConfig(scoringViewModel as unknown as LeagueScoringConfigDTO);
setLeague(viewModel.league);
setScoringConfig(viewModel.scoringConfig);
} catch (err) {
console.error('Failed to load scoring config:', err);
} finally {