UNPKG

ruch

Version:

Revolutionary React TypeScript CLI with hexagonal architecture & AI-powered development assistance. Create maintainable, scalable applications with domain-driven design and integrated AI tooling.

69 lines (62 loc) 2.31 kB
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import type { PaymentCreationData, PaymentUpdateData } from '../entities/Payment'; import { PaymentService } from '../services/PaymentService'; import type { PaymentPort } from '../ports/PaymentPort'; const QUERY_KEYS = { all: ['payment'] as const, lists: () => [...QUERY_KEYS.all, 'list'] as const, list: (filters: string) => [...QUERY_KEYS.lists(), { filters }] as const, details: () => [...QUERY_KEYS.all, 'detail'] as const, detail: (id: string) => [...QUERY_KEYS.details(), id] as const, }; export function usePaymentService(port: PaymentPort) { return new PaymentService(port); } export function usePaymentList(port: PaymentPort) { const service = usePaymentService(port); return useQuery({ queryKey: QUERY_KEYS.lists(), queryFn: () => service.getAll(), }); } export function usePaymentDetail(port: PaymentPort, id: string) { const service = usePaymentService(port); return useQuery({ queryKey: QUERY_KEYS.detail(id), queryFn: () => service.getById(id), enabled: !!id, }); } export function usePaymentCreate(port: PaymentPort) { const queryClient = useQueryClient(); const service = usePaymentService(port); return useMutation({ mutationFn: (data: PaymentCreationData) => service.create(data), onSuccess: () => { queryClient.invalidateQueries({ queryKey: QUERY_KEYS.lists() }); }, }); } export function usePaymentUpdate(port: PaymentPort) { const queryClient = useQueryClient(); const service = usePaymentService(port); return useMutation({ mutationFn: ({ id, data }: { id: string; data: PaymentUpdateData }) => service.update(id, data), onSuccess: (_, { id }) => { queryClient.invalidateQueries({ queryKey: QUERY_KEYS.lists() }); queryClient.invalidateQueries({ queryKey: QUERY_KEYS.detail(id) }); }, }); } export function usePaymentDelete(port: PaymentPort) { const queryClient = useQueryClient(); const service = usePaymentService(port); return useMutation({ mutationFn: (id: string) => service.delete(id), onSuccess: (_, id) => { queryClient.invalidateQueries({ queryKey: QUERY_KEYS.lists() }); queryClient.invalidateQueries({ queryKey: QUERY_KEYS.detail(id) }); }, }); }