airpredict/apps/web/src/api/materials.ts

81 lines
1.8 KiB
TypeScript

import type { EmissionParams, Pollutant } from '@airpredict/shared';
import { http } from './http';
export interface Material {
id: string;
name: string;
category: string;
brand?: string;
manufacturer?: string;
spec?: string;
envGrade?: string;
healthGrade?: string;
usageUnit: string;
sortOrder: number;
emissionParams: Record<Pollutant, EmissionParams>;
isPublic: boolean;
ownerOrgId?: string;
updatedAt: string;
favorited: boolean;
}
export interface MaterialQuery {
id?: string;
name?: string;
category?: string;
brand?: string;
manufacturer?: string;
spec?: string;
envGrade?: string;
healthGrade?: string;
scope?: 'public' | 'self';
favorited?: string;
page?: number;
pageSize?: number;
sort?: string;
}
export interface Paged<T> {
total: number;
page: number;
pageSize: number;
items: T[];
}
export interface MaterialInput {
name: string;
category: string;
brand?: string;
manufacturer?: string;
spec?: string;
envGrade?: string;
healthGrade?: string;
usageUnit?: string;
sortOrder?: number;
emissionParams: Record<Pollutant, EmissionParams>;
}
export function listMaterials(q: MaterialQuery) {
return http.get<any, Paged<Material>>('/materials', { params: q });
}
export function getMaterial(id: string) {
return http.get<any, Material>(`/materials/${id}`);
}
export function createMaterial(input: MaterialInput) {
return http.post<any, Material>('/materials', input);
}
export function bulkCreateMaterials(items: MaterialInput[]) {
return http.post<any, { created: number }>('/materials/bulk', { items });
}
export function updateMaterial(id: string, input: Partial<MaterialInput>) {
return http.patch<any, Material>(`/materials/${id}`, input);
}
export function deleteMaterial(id: string) {
return http.delete<any, { success: boolean }>(`/materials/${id}`);
}