Files
MapMil/centers/analytics/frontend/src/api/objects.ts
T
gitrusprusandCursor 2c16bc0b56 Add CA admin UI and extend admin API for the unified platform.
Deliver parsers, events, analytics, and PI management in Vue; fix Telegram session mount and map navigation to events by eventId.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-30 14:40:59 +03:00

57 lines
1.6 KiB
TypeScript

import { request } from "./client";
import type { MapObject, MapObjectCreate, MapObjectUpdate, ObjectMedia } from "../types/object";
export function fetchObjects(): Promise<MapObject[]> {
return request<MapObject[]>("/objects");
}
export function fetchObject(id: number): Promise<MapObject> {
return request<MapObject>(`/objects/${id}`);
}
export function createObject(payload: MapObjectCreate): Promise<MapObject> {
return request<MapObject>("/objects", {
method: "POST",
body: JSON.stringify(payload),
});
}
export function updateObject(id: number, payload: MapObjectUpdate): Promise<MapObject> {
return request<MapObject>(`/objects/${id}`, {
method: "PATCH",
body: JSON.stringify(payload),
});
}
export function deleteObject(id: number): Promise<void> {
return request<void>(`/objects/${id}`, {
method: "DELETE",
});
}
export function fetchObjectMedia(objectId: number): Promise<ObjectMedia[]> {
return request<ObjectMedia[]>(`/objects/${objectId}/media`);
}
export function uploadObjectMedia(objectId: number, file: File): Promise<ObjectMedia> {
const form = new FormData();
form.append("file", file);
return request<ObjectMedia>(`/objects/${objectId}/media`, {
method: "POST",
body: form,
});
}
export function deleteObjectMedia(mediaId: number): Promise<void> {
return request<void>(`/media/${mediaId}`, {
method: "DELETE",
});
}
export function formatFileSize(bytes: number): string {
if (bytes < 1024) return `${bytes} Б`;
if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} КБ`;
return `${(bytes / (1024 * 1024)).toFixed(1)} МБ`;
}