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>
57 lines
1.6 KiB
TypeScript
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)} МБ`;
|
|
}
|