Files
gridpilot.gg/apps/website/hooks/useLeagueService.ts
2025-12-21 01:31:31 +01:00

125 lines
4.3 KiB
TypeScript

import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
import { useServices } from '@/lib/services/ServiceProvider';
import { CreateLeagueInputDTO } from '@/lib/types/generated/CreateLeagueInputDTO';
import { LeagueSummaryViewModel } from '@/lib/view-models/LeagueSummaryViewModel';
import { LeagueStandingsViewModel } from '@/lib/view-models/LeagueStandingsViewModel';
import { LeagueStatsViewModel } from '@/lib/view-models/LeagueStatsViewModel';
import { LeagueScheduleViewModel } from '@/lib/view-models/LeagueScheduleViewModel';
import { LeagueMembershipsViewModel } from '@/lib/view-models/LeagueMembershipsViewModel';
import { RemoveMemberViewModel } from '@/lib/view-models/RemoveMemberViewModel';
import { LeagueDetailViewModel } from '@/lib/view-models/LeagueDetailViewModel';
import { LeagueDetailPageViewModel } from '@/lib/view-models/LeagueDetailPageViewModel';
export function useAllLeagues() {
const { leagueService } = useServices();
return useQuery({
queryKey: ['allLeagues'],
queryFn: () => leagueService.getAllLeagues(),
});
}
export function useLeagueStandings(leagueId: string, currentUserId: string) {
const { leagueService } = useServices();
return useQuery({
queryKey: ['leagueStandings', leagueId, currentUserId],
queryFn: () => leagueService.getLeagueStandings(leagueId, currentUserId),
enabled: !!leagueId && !!currentUserId,
});
}
export function useLeagueStats() {
const { leagueService } = useServices();
return useQuery({
queryKey: ['leagueStats'],
queryFn: () => leagueService.getLeagueStats(),
});
}
export function useLeagueSchedule(leagueId: string) {
const { leagueService } = useServices();
return useQuery({
queryKey: ['leagueSchedule', leagueId],
queryFn: () => leagueService.getLeagueSchedule(leagueId),
enabled: !!leagueId,
});
}
export function useLeagueMemberships(leagueId: string, currentUserId: string) {
const { leagueService } = useServices();
return useQuery({
queryKey: ['leagueMemberships', leagueId, currentUserId],
queryFn: () => leagueService.getLeagueMemberships(leagueId, currentUserId),
enabled: !!leagueId && !!currentUserId,
});
}
export function useCreateLeague() {
const { leagueService } = useServices();
const queryClient = useQueryClient();
return useMutation({
mutationFn: (input: CreateLeagueInputDTO) => leagueService.createLeague(input),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['allLeagues'] });
},
});
}
export function useRemoveLeagueMember() {
const { leagueService } = useServices();
const queryClient = useQueryClient();
return useMutation({
mutationFn: ({ leagueId, performerDriverId, targetDriverId }: {
leagueId: string;
performerDriverId: string;
targetDriverId: string;
}) => leagueService.removeMember(leagueId, performerDriverId, targetDriverId),
onSuccess: (data, variables) => {
queryClient.invalidateQueries({ queryKey: ['leagueMemberships', variables.leagueId] });
queryClient.invalidateQueries({ queryKey: ['leagueStandings', variables.leagueId] });
},
});
}
export function useUpdateLeagueMemberRole() {
const { leagueService } = useServices();
const queryClient = useQueryClient();
return useMutation({
mutationFn: ({ leagueId, performerDriverId, targetDriverId, newRole }: {
leagueId: string;
performerDriverId: string;
targetDriverId: string;
newRole: string;
}) => leagueService.updateMemberRole(leagueId, performerDriverId, targetDriverId, newRole),
onSuccess: (data, variables) => {
queryClient.invalidateQueries({ queryKey: ['leagueMemberships', variables.leagueId] });
},
});
}
export function useLeagueDetail(leagueId: string, currentDriverId: string) {
const { leagueService } = useServices();
return useQuery({
queryKey: ['leagueDetail', leagueId, currentDriverId],
queryFn: () => leagueService.getLeagueDetail(leagueId, currentDriverId),
enabled: !!leagueId && !!currentDriverId,
});
}
export function useLeagueDetailPageData(leagueId: string) {
const { leagueService } = useServices();
return useQuery({
queryKey: ['leagueDetailPageData', leagueId],
queryFn: () => leagueService.getLeagueDetailPageData(leagueId),
enabled: !!leagueId,
});
}