ForFarm/frontend/api/farm.ts

101 lines
2.7 KiB
TypeScript

import axiosInstance from "./config";
import type { Farm } from "@/types";
/**
* Fetch an array of farms.
* Calls GET /farms and returns fallback dummy data on failure.
*/
export async function fetchFarms(): Promise<Farm[]> {
return axiosInstance.get<Farm[]>("/farms").then((res) => res.data);
}
/**
* Create a new farm.
* Calls POST /farms with a payload that uses snake_case keys.
*/
export async function createFarm(data: Partial<Farm>): Promise<Farm> {
return axiosInstance.post<Farm>("/farms", data).then((res) => res.data);
}
/**
* Fetch a specific farm by ID.
* Calls GET /farms/{farm_id} and returns fallback data on failure.
*/
export async function getFarm(farmId: string): Promise<Farm> {
// Simulate a network delay.
await new Promise((resolve) => setTimeout(resolve, 600));
try {
const response = await axiosInstance.get<Farm>(`/farms/${farmId}`);
return response.data;
} catch (error: any) {
console.error(`Error fetching farm ${farmId}. Returning fallback data:`, error);
const dummyDate = new Date().toISOString();
return {
CreatedAt: dummyDate,
FarmType: "conventional",
Lat: 15.87,
Lon: 100.9925,
Name: "Fallback Farm",
OwnerID: "fallback_owner",
TotalSize: "40 hectares",
UUID: farmId,
UpdatedAt: dummyDate,
};
}
}
/**
* Update an existing farm.
* Calls PUT /farms/{farm_id} with a snake_case payload.
*/
export async function updateFarm(
farmId: string,
data: {
farm_type: string;
lat: number;
lon: number;
name: string;
total_size: string;
}
): Promise<Farm> {
// Simulate a network delay.
await new Promise((resolve) => setTimeout(resolve, 800));
try {
const response = await axiosInstance.put<Farm>(`/farms/${farmId}`, data);
return response.data;
} catch (error: any) {
console.error(`Error updating farm ${farmId}. Returning fallback data:`, error);
const now = new Date().toISOString();
return {
CreatedAt: now,
FarmType: data.farm_type,
Lat: data.lat,
Lon: data.lon,
Name: data.name,
OwnerID: "updated_owner",
TotalSize: data.total_size,
UUID: farmId,
UpdatedAt: now,
};
}
}
/**
* Delete a specific farm.
* Calls DELETE /farms/{farm_id} and returns a success message.
*/
export async function deleteFarm(farmId: string): Promise<{ message: string }> {
// Simulate a network delay.
await new Promise((resolve) => setTimeout(resolve, 500));
try {
await axiosInstance.delete(`/farms/${farmId}`);
return { message: "Farm deleted successfully" };
} catch (error: any) {
console.error(`Error deleting farm ${farmId}. Assuming deletion was successful:`, error);
return { message: "Farm deleted successfully (dummy)" };
}
}