feat(web): типизированный API-клиент, типы DTO, TanStack Query хуки
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"
|
||||
import { api } from "@/api/client"
|
||||
import type { CreateAccountInput, CreateTemplateInput, ApplyRequest } from "@/api/types"
|
||||
|
||||
export function useAccounts() {
|
||||
return useQuery({ queryKey: ["accounts"], queryFn: api.listAccounts })
|
||||
}
|
||||
export function useCreateAccount() {
|
||||
const qc = useQueryClient()
|
||||
return useMutation({
|
||||
mutationFn: (input: CreateAccountInput) => api.createAccount(input),
|
||||
onSuccess: () => qc.invalidateQueries({ queryKey: ["accounts"] }),
|
||||
})
|
||||
}
|
||||
export function useDeleteAccount() {
|
||||
const qc = useQueryClient()
|
||||
return useMutation({
|
||||
mutationFn: (id: string) => api.deleteAccount(id),
|
||||
onSuccess: () => qc.invalidateQueries({ queryKey: ["accounts"] }),
|
||||
})
|
||||
}
|
||||
|
||||
export function useTemplates() {
|
||||
return useQuery({ queryKey: ["templates"], queryFn: api.listTemplates })
|
||||
}
|
||||
export function useCreateTemplate() {
|
||||
const qc = useQueryClient()
|
||||
return useMutation({
|
||||
mutationFn: (input: CreateTemplateInput) => api.createTemplate(input),
|
||||
onSuccess: () => qc.invalidateQueries({ queryKey: ["templates"] }),
|
||||
})
|
||||
}
|
||||
export function useUpdateTemplate() {
|
||||
const qc = useQueryClient()
|
||||
return useMutation({
|
||||
mutationFn: ({ id, input }: { id: string; input: CreateTemplateInput }) => api.updateTemplate(id, input),
|
||||
onSuccess: () => qc.invalidateQueries({ queryKey: ["templates"] }),
|
||||
})
|
||||
}
|
||||
export function useDeleteTemplate() {
|
||||
const qc = useQueryClient()
|
||||
return useMutation({
|
||||
mutationFn: (id: string) => api.deleteTemplate(id),
|
||||
onSuccess: () => qc.invalidateQueries({ queryKey: ["templates"] }),
|
||||
})
|
||||
}
|
||||
|
||||
export function useDomains() {
|
||||
return useQuery({ queryKey: ["domains"], queryFn: api.listDomains })
|
||||
}
|
||||
export function useImportZones() {
|
||||
const qc = useQueryClient()
|
||||
return useMutation({
|
||||
mutationFn: (accountId: string) => api.importZones(accountId),
|
||||
onSuccess: () => qc.invalidateQueries({ queryKey: ["domains"] }),
|
||||
})
|
||||
}
|
||||
export function useSetDomainTemplate() {
|
||||
const qc = useQueryClient()
|
||||
return useMutation({
|
||||
mutationFn: ({ id, templateId }: { id: string; templateId: string | null }) => api.setDomainTemplate(id, templateId),
|
||||
onSuccess: () => qc.invalidateQueries({ queryKey: ["domains"] }),
|
||||
})
|
||||
}
|
||||
export function useDeleteDomain() {
|
||||
const qc = useQueryClient()
|
||||
return useMutation({
|
||||
mutationFn: (id: string) => api.deleteDomain(id),
|
||||
onSuccess: () => qc.invalidateQueries({ queryKey: ["domains"] }),
|
||||
})
|
||||
}
|
||||
export function useCheckDomain(id: string) {
|
||||
return useQuery({ queryKey: ["check", id], queryFn: () => api.checkDomain(id), enabled: !!id })
|
||||
}
|
||||
export function useApplyDomain(id: string) {
|
||||
const qc = useQueryClient()
|
||||
return useMutation({
|
||||
mutationFn: (body: ApplyRequest) => api.applyDomain(id, body),
|
||||
onSuccess: () => qc.invalidateQueries({ queryKey: ["check", id] }),
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user