116 lines
2.8 KiB
TypeScript
116 lines
2.8 KiB
TypeScript
import axios from "axios"
|
|
import type { Device } from "@/types/device"
|
|
import { getApiUrl } from "@/config/api"
|
|
|
|
interface ApiDevice {
|
|
id: number
|
|
device_name: string
|
|
device_type: string
|
|
manufacturer_name: string
|
|
serial: string
|
|
comment: string
|
|
created: string
|
|
}
|
|
|
|
interface ApiCapture {
|
|
id: number
|
|
filename: string
|
|
upload: string
|
|
firmware_version: string
|
|
ip: string
|
|
}
|
|
|
|
interface ApiManufacturer {
|
|
id: number
|
|
name: string
|
|
}
|
|
|
|
interface ApiDeviceType {
|
|
id: number
|
|
device_type: string
|
|
}
|
|
|
|
export const getAllDevices = async (): Promise<Device[]> => {
|
|
try {
|
|
const response = await axios.get(getApiUrl("get_all_devices"))
|
|
const devices = await Promise.all(
|
|
response.data.map(async (device: ApiDevice) => {
|
|
const filesResponse = await axios.get(getApiUrl(`get_file_by_device/${device.id}`))
|
|
const filesData: ApiCapture[] = filesResponse.data
|
|
return {
|
|
id: String(device.id),
|
|
name: device.device_name,
|
|
type: device.device_type,
|
|
manufacturer: device.manufacturer_name,
|
|
serialNumber: device.serial,
|
|
comment: device.comment,
|
|
ipAddress: "",
|
|
lastScanned: new Date(device.created).toLocaleDateString("en-GB"),
|
|
files: filesData.map((file) => ({
|
|
id: String(file.id),
|
|
name: file.filename,
|
|
uploadedAt: file.upload,
|
|
status: "scanned" as const,
|
|
firmwareVersion: file.firmware_version,
|
|
ipAddress: file.ip,
|
|
})),
|
|
}
|
|
}),
|
|
)
|
|
return devices
|
|
} catch (error) {
|
|
console.error("Failed to fetch devices:", error)
|
|
return []
|
|
}
|
|
}
|
|
|
|
export const getManufacturers = async () => {
|
|
try {
|
|
const response = await axios.get(getApiUrl("get_all_manufacturers"))
|
|
return response.data.map((type: ApiManufacturer) => ({
|
|
value: String(type.id),
|
|
label: type.name,
|
|
}))
|
|
} catch (error) {
|
|
console.error("Failed to fetch manufacturers:", error)
|
|
return []
|
|
}
|
|
}
|
|
|
|
export const getDeviceTypes = async () => {
|
|
try {
|
|
const response = await axios.get(getApiUrl("get_all_devicetypes"))
|
|
return response.data.map((type: ApiDeviceType) => ({
|
|
value: String(type.id),
|
|
label: type.device_type,
|
|
}))
|
|
} catch (error) {
|
|
console.error("Failed to fetch device types:", error)
|
|
return []
|
|
}
|
|
}
|
|
|
|
export const addDevice = async (newDevice: {
|
|
device_name: string
|
|
device_type_id: string
|
|
manufacturer_id: string
|
|
serial: string
|
|
comment: string
|
|
}) => {
|
|
try {
|
|
await axios.post(getApiUrl("create_device"), newDevice)
|
|
} catch (error) {
|
|
console.error("Failed to add device:", error)
|
|
throw error
|
|
}
|
|
}
|
|
|
|
export const deleteDevice = async (deviceId: string) => {
|
|
try {
|
|
await axios.delete(getApiUrl(`delete_device/${deviceId}`))
|
|
} catch (error) {
|
|
console.error("Failed to delete device:", error)
|
|
throw error
|
|
}
|
|
}
|