utp_service/frontend/src/api/racks.ts
2026-04-07 11:55:28 +03:00

49 lines
1.6 KiB
TypeScript

import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'
import { api } from './client'
export interface RackItem {
id: number
object_id: number
name: string
description: string | null
location: string | null
zone_id: number | null
zone_name: string | null
created_at: string
}
export const useRacks = (objId: number) =>
useQuery({
queryKey: ['racks', objId],
queryFn: () =>
api.get<RackItem[]>(`/api/v1/objects/${objId}/racks`).then((r) => r.data),
})
export const useCreateRack = (objId: number) => {
const qc = useQueryClient()
return useMutation({
mutationFn: (body: { name: string; description?: string; location?: string; zone_id?: number | null }) =>
api.post<RackItem>(`/api/v1/objects/${objId}/racks`, body).then((r) => r.data),
onSuccess: () => qc.invalidateQueries({ queryKey: ['racks', objId] }),
})
}
export const useUpdateRack = (objId: number) => {
const qc = useQueryClient()
return useMutation({
mutationFn: ({ id, body }: { id: number; body: Partial<{ name: string; description: string; location: string; zone_id: number | null }> }) =>
api.patch<RackItem>(`/api/v1/objects/${objId}/racks/${id}`, body).then((r) => r.data),
onSuccess: () => qc.invalidateQueries({ queryKey: ['racks', objId] }),
})
}
export const useDeleteRack = (objId: number) => {
const qc = useQueryClient()
return useMutation({
mutationFn: (id: number) => api.delete(`/api/v1/objects/${objId}/racks/${id}`),
onSuccess: () => {
qc.invalidateQueries({ queryKey: ['racks', objId] })
qc.invalidateQueries({ queryKey: ['devices', objId] })
},
})
}