import { API_ENDPOINTS } from "@/api/config"; import { requestJson } from "@/api/http"; export type Entity = { id: string; name: string; slug?: string | null; description?: string | null; type_id?: string | null; status?: number | null; geometry_count?: number; created_at?: string; updated_at?: string; }; export type CreateEntityPayload = { name: string; slug?: string | null; description?: string | null; type_id?: string | null; status?: number | null; }; export async function fetchEntities(query?: { q?: string }): Promise { const params = new URLSearchParams(); if (query?.q) { params.set("q", query.q); } const suffix = params.toString(); const url = suffix ? `${API_ENDPOINTS.entities}?${suffix}` : API_ENDPOINTS.entities; return requestJson(url); } export async function searchEntitiesByName( name: string, options?: { limit?: number } ): Promise { const keyword = name.trim(); if (!keyword.length) return []; const params = new URLSearchParams({ name: keyword }); if (options?.limit && Number.isFinite(options.limit)) { params.set("limit", String(Math.trunc(options.limit))); } return requestJson(`${API_ENDPOINTS.entities}/search?${params.toString()}`); } export async function createEntity(payload: CreateEntityPayload): Promise { return requestJson(API_ENDPOINTS.entities, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload), }); } export async function updateEntity(id: string, payload: CreateEntityPayload): Promise { return requestJson(`${API_ENDPOINTS.entities}/${id}`, { method: "PUT", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload), }); }