new features
This commit is contained in:
80
frontend/src/services/ausruestungsanfrage.ts
Normal file
80
frontend/src/services/ausruestungsanfrage.ts
Normal file
@@ -0,0 +1,80 @@
|
||||
import { api } from './api';
|
||||
import type {
|
||||
AusruestungArtikel,
|
||||
AusruestungArtikelFormData,
|
||||
AusruestungAnfrage,
|
||||
AusruestungAnfrageDetailResponse,
|
||||
AusruestungAnfrageFormItem,
|
||||
AusruestungOverview,
|
||||
} from '../types/ausruestungsanfrage.types';
|
||||
|
||||
export const ausruestungsanfrageApi = {
|
||||
// ── Catalog Items ──
|
||||
getItems: async (filters?: { kategorie?: string; aktiv?: boolean }): Promise<AusruestungArtikel[]> => {
|
||||
const params = new URLSearchParams();
|
||||
if (filters?.kategorie) params.set('kategorie', filters.kategorie);
|
||||
if (filters?.aktiv !== undefined) params.set('aktiv', String(filters.aktiv));
|
||||
const r = await api.get(`/api/ausruestungsanfragen/items?${params.toString()}`);
|
||||
return r.data.data;
|
||||
},
|
||||
getItem: async (id: number): Promise<AusruestungArtikel> => {
|
||||
const r = await api.get(`/api/ausruestungsanfragen/items/${id}`);
|
||||
return r.data.data;
|
||||
},
|
||||
createItem: async (data: AusruestungArtikelFormData): Promise<AusruestungArtikel> => {
|
||||
const r = await api.post('/api/ausruestungsanfragen/items', data);
|
||||
return r.data.data;
|
||||
},
|
||||
updateItem: async (id: number, data: Partial<AusruestungArtikelFormData>): Promise<AusruestungArtikel> => {
|
||||
const r = await api.patch(`/api/ausruestungsanfragen/items/${id}`, data);
|
||||
return r.data.data;
|
||||
},
|
||||
deleteItem: async (id: number): Promise<void> => {
|
||||
await api.delete(`/api/ausruestungsanfragen/items/${id}`);
|
||||
},
|
||||
getCategories: async (): Promise<string[]> => {
|
||||
const r = await api.get('/api/ausruestungsanfragen/categories');
|
||||
return r.data.data;
|
||||
},
|
||||
|
||||
// ── Requests ──
|
||||
getRequests: async (filters?: { status?: string }): Promise<AusruestungAnfrage[]> => {
|
||||
const params = new URLSearchParams();
|
||||
if (filters?.status) params.set('status', filters.status);
|
||||
const r = await api.get(`/api/ausruestungsanfragen/requests?${params.toString()}`);
|
||||
return r.data.data;
|
||||
},
|
||||
getMyRequests: async (): Promise<AusruestungAnfrage[]> => {
|
||||
const r = await api.get('/api/ausruestungsanfragen/requests/my');
|
||||
return r.data.data;
|
||||
},
|
||||
getRequest: async (id: number): Promise<AusruestungAnfrageDetailResponse> => {
|
||||
const r = await api.get(`/api/ausruestungsanfragen/requests/${id}`);
|
||||
return r.data.data;
|
||||
},
|
||||
createRequest: async (items: AusruestungAnfrageFormItem[], notizen?: string): Promise<AusruestungAnfrage> => {
|
||||
const r = await api.post('/api/ausruestungsanfragen/requests', { items, notizen });
|
||||
return r.data.data;
|
||||
},
|
||||
updateRequestStatus: async (id: number, status: string, admin_notizen?: string): Promise<AusruestungAnfrage> => {
|
||||
const r = await api.patch(`/api/ausruestungsanfragen/requests/${id}/status`, { status, admin_notizen });
|
||||
return r.data.data;
|
||||
},
|
||||
deleteRequest: async (id: number): Promise<void> => {
|
||||
await api.delete(`/api/ausruestungsanfragen/requests/${id}`);
|
||||
},
|
||||
|
||||
// ── Linking ──
|
||||
linkToOrder: async (anfrageId: number, bestellungId: number): Promise<void> => {
|
||||
await api.post(`/api/ausruestungsanfragen/requests/${anfrageId}/link`, { bestellung_id: bestellungId });
|
||||
},
|
||||
unlinkFromOrder: async (anfrageId: number, bestellungId: number): Promise<void> => {
|
||||
await api.delete(`/api/ausruestungsanfragen/requests/${anfrageId}/link/${bestellungId}`);
|
||||
},
|
||||
|
||||
// ── Overview ──
|
||||
getOverview: async (): Promise<AusruestungOverview> => {
|
||||
const r = await api.get('/api/ausruestungsanfragen/overview');
|
||||
return r.data.data;
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user