refactor use cases
This commit is contained in:
80
apps/website/hooks/useDriverService.ts
Normal file
80
apps/website/hooks/useDriverService.ts
Normal file
@@ -0,0 +1,80 @@
|
||||
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
import { useServices } from '@/lib/services/ServiceProvider';
|
||||
import { CompleteOnboardingInputDTO } from '@/lib/types/generated/CompleteOnboardingInputDTO';
|
||||
import { DriverLeaderboardViewModel } from '@/lib/view-models/DriverLeaderboardViewModel';
|
||||
import { DriverViewModel } from '@/lib/view-models/DriverViewModel';
|
||||
import { DriverProfileViewModel } from '@/lib/view-models/DriverProfileViewModel';
|
||||
import type { DriverDTO } from '@/lib/types/generated/DriverDTO';
|
||||
|
||||
export function useDriverLeaderboard() {
|
||||
const { driverService } = useServices();
|
||||
|
||||
return useQuery({
|
||||
queryKey: ['driverLeaderboard'],
|
||||
queryFn: () => driverService.getDriverLeaderboard(),
|
||||
});
|
||||
}
|
||||
|
||||
export function useCurrentDriver() {
|
||||
const { driverService } = useServices();
|
||||
|
||||
return useQuery({
|
||||
queryKey: ['currentDriver'],
|
||||
queryFn: () => driverService.getCurrentDriver(),
|
||||
});
|
||||
}
|
||||
|
||||
export function useDriverProfile(driverId: string) {
|
||||
const { driverService } = useServices();
|
||||
|
||||
return useQuery({
|
||||
queryKey: ['driverProfile', driverId],
|
||||
queryFn: () => driverService.getDriverProfile(driverId),
|
||||
enabled: !!driverId,
|
||||
});
|
||||
}
|
||||
|
||||
export function useCompleteDriverOnboarding() {
|
||||
const { driverService } = useServices();
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
return useMutation({
|
||||
mutationFn: (input: CompleteOnboardingInputDTO) => driverService.completeDriverOnboarding(input),
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({ queryKey: ['currentDriver'] });
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
export function useUpdateDriverProfile() {
|
||||
const { driverService } = useServices();
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
return useMutation({
|
||||
mutationFn: (updates: { bio?: string; country?: string }) => driverService.updateProfile(updates),
|
||||
onSuccess: (data, variables) => {
|
||||
queryClient.invalidateQueries({ queryKey: ['driverProfile', data.currentDriver?.id] });
|
||||
queryClient.invalidateQueries({ queryKey: ['currentDriver'] });
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
export function useFindDriverById(id: string) {
|
||||
const { driverService } = useServices();
|
||||
|
||||
return useQuery({
|
||||
queryKey: ['driver', id],
|
||||
queryFn: () => driverService.findById(id),
|
||||
enabled: !!id,
|
||||
});
|
||||
}
|
||||
|
||||
export function useFindDriversByIds(ids: string[]) {
|
||||
const { driverService } = useServices();
|
||||
|
||||
return useQuery({
|
||||
queryKey: ['drivers', ids],
|
||||
queryFn: () => driverService.findByIds(ids),
|
||||
enabled: ids.length > 0,
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user