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
149 lines
4.2 KiB
TypeScript
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)
|
|
},
|
|
})
|