Files
cloudflare-domain-manager/apps/web/src/queries/index.ts
T
Denozordec 5f7b3ac388
Build, Test, and Push CFDM Docker Image / test (push) Failing after 16h45m4s
Build, Test, and Push CFDM Docker Image / create-release (push) Has been cancelled
Build, Test, and Push CFDM Docker Image / build-and-push (push) Has been cancelled
Build, Test, and Push CFDM Docker Image / update-wiki (push) Has been cancelled
Update pnpm-lock.yaml to include new dependencies for @dnd-kit packages; enhance frontend documentation with MCP patterns and shadcn guidelines; refactor route handling for groups and services; implement new DataTableCard and KanbanBoard components for better domain and service management; add service binding functionality and improve DNS record management with new schemas and queries.
2026-06-15 16:41:10 +07:00

149 lines
4.2 KiB
TypeScript

import { queryOptions } from '@tanstack/react-query'
import { api } from '@/lib/api-client'
import {
certificateSchema,
dnsRecordSchema,
domainListItemSchema,
domainSchema,
groupSchema,
groupWithStatsSchema,
serviceBindingSchema,
serviceSchema,
} from '@/lib/schemas'
import { subdomainSchema } from '@/lib/schemas-ext'
import { z } from 'zod'
export const groupKeys = {
all: ['groups'] as const,
detail: (id: number) => [...groupKeys.all, 'detail', id] as const,
}
export const groupsQueryOptions = () =>
queryOptions({
queryKey: groupKeys.all,
queryFn: async () => {
const data = await api.get<unknown[]>('/api/v1/groups')
return z.array(groupSchema).parse(data)
},
})
export const groupDetailQueryOptions = (id: number) =>
queryOptions({
queryKey: groupKeys.detail(id),
queryFn: async () => {
const data = await api.get<unknown>(`/api/v1/groups/${id}`)
return groupWithStatsSchema.parse(data)
},
})
export const serviceKeys = {
all: ['services'] as const,
}
export const servicesQueryOptions = () =>
queryOptions({
queryKey: serviceKeys.all,
queryFn: async () => {
const data = await api.get<unknown[]>('/api/v1/services')
return z.array(serviceSchema).parse(data)
},
})
export const serviceBindingKeys = {
all: ['service-bindings'] as const,
byDomain: (domainId: number) => [...serviceBindingKeys.all, 'domain', domainId] as const,
}
export const serviceBindingsQueryOptions = () =>
queryOptions({
queryKey: serviceBindingKeys.all,
queryFn: async () => {
const data = await api.get<unknown[]>('/api/v1/service-bindings')
return z.array(serviceBindingSchema).parse(data)
},
})
export const domainServiceBindingsQueryOptions = (domainId: number) =>
queryOptions({
queryKey: serviceBindingKeys.byDomain(domainId),
queryFn: async () => {
const data = await api.get<unknown[]>(`/api/v1/domains/${domainId}/service-bindings`)
return z.array(serviceBindingSchema).parse(data)
},
})
export const domainKeys = {
all: ['domains'] as const,
list: (groupId?: number) => [...domainKeys.all, 'list', groupId] as const,
detail: (id: number) => [...domainKeys.all, 'detail', id] as const,
}
export const domainsListQueryOptions = (groupId?: number) =>
queryOptions({
queryKey: domainKeys.list(groupId),
queryFn: async () => {
const qs = groupId ? `?group_id=${groupId}` : ''
const data = await api.get<unknown[]>(`/api/v1/domains${qs}`)
return z.array(domainListItemSchema).parse(data)
},
})
export const domainDetailQueryOptions = (id: number) =>
queryOptions({
queryKey: domainKeys.detail(id),
queryFn: async () => {
const data = await api.get<unknown>(`/api/v1/domains/${id}`)
return domainSchema.parse(data)
},
})
export const dnsKeys = {
all: ['dns'] as const,
list: (domainId: number) => [...dnsKeys.all, domainId] as const,
}
export const dnsListQueryOptions = (domainId: number) =>
queryOptions({
queryKey: dnsKeys.list(domainId),
queryFn: async () => {
const data = await api.get<unknown[]>(`/api/v1/domains/${domainId}/dns`)
return z.array(dnsRecordSchema).parse(data)
},
staleTime: 1000 * 30,
})
export const certKeys = {
all: ['certificates'] as const,
summary: ['certificates', 'summary'] as const,
}
export const certificatesQueryOptions = () =>
queryOptions({
queryKey: certKeys.all,
queryFn: async () => {
const data = await api.get<unknown[]>('/api/v1/certificates')
return z.array(certificateSchema).parse(data)
},
staleTime: 1000 * 60 * 5,
})
export const certSummaryQueryOptions = () =>
queryOptions({
queryKey: certKeys.summary,
queryFn: () => api.get<[string, number][]>('/api/v1/certificates/summary'),
})
export const subdomainKeys = {
all: ['subdomains'] as const,
list: (domainId: number) => [...subdomainKeys.all, domainId] as const,
}
export const subdomainsListQueryOptions = (domainId: number) =>
queryOptions({
queryKey: subdomainKeys.list(domainId),
queryFn: async () => {
const data = await api.get<unknown[]>(`/api/v1/domains/${domainId}/subdomains`)
return z.array(subdomainSchema).parse(data)
},
})