new features

This commit is contained in:
Matthias Hochmeister
2026-03-23 16:09:42 +01:00
parent e9a9478aac
commit 8c66492b27
40 changed files with 2016 additions and 117 deletions

View File

@@ -30,4 +30,5 @@ export const adminApi = {
getPingHistory: (serviceId: string) => api.get<ApiResponse<PingHistoryEntry[]>>(`/api/admin/services/${serviceId}/ping-history`).then(r => r.data.data),
fdiskSyncLogs: () => api.get<ApiResponse<FdiskSyncLogsResponse>>('/api/admin/fdisk-sync/logs').then(r => r.data.data),
fdiskSyncTrigger: (force = false) => api.post<ApiResponse<{ started: boolean }>>('/api/admin/fdisk-sync/trigger', { force }).then(r => r.data.data),
deleteUserProfile: (userId: string) => api.delete<ApiResponse<{ message: string }>>(`/api/admin/debug/user/${userId}/profile`).then(r => r.data),
};

View File

@@ -10,6 +10,7 @@ import type {
UpdateAusruestungPayload,
UpdateAusruestungStatusPayload,
CreateAusruestungWartungslogPayload,
UpdateAusruestungWartungslogPayload,
} from '../types/equipment.types';
async function unwrap<T>(
@@ -121,4 +122,19 @@ export const equipmentApi = {
);
return response.data.data ?? [];
},
async updateWartungslog(
equipmentId: string,
wartungId: string,
payload: UpdateAusruestungWartungslogPayload
): Promise<AusruestungWartungslog> {
const response = await api.patch<{ success: boolean; data: AusruestungWartungslog }>(
`/api/equipment/${equipmentId}/wartung/${wartungId}`,
payload
);
if (response.data?.data === undefined || response.data?.data === null) {
throw new Error('Invalid API response');
}
return response.data.data;
},
};

View File

@@ -0,0 +1,32 @@
import { api } from './api';
import type { Issue, IssueComment, CreateIssuePayload, UpdateIssuePayload } from '../types/issue.types';
export const issuesApi = {
getIssues: async (): Promise<Issue[]> => {
const r = await api.get('/api/issues');
return r.data.data;
},
getIssue: async (id: number): Promise<Issue> => {
const r = await api.get(`/api/issues/${id}`);
return r.data.data;
},
createIssue: async (data: CreateIssuePayload): Promise<Issue> => {
const r = await api.post('/api/issues', data);
return r.data.data;
},
updateIssue: async (id: number, data: UpdateIssuePayload): Promise<Issue> => {
const r = await api.patch(`/api/issues/${id}`, data);
return r.data.data;
},
deleteIssue: async (id: number): Promise<void> => {
await api.delete(`/api/issues/${id}`);
},
getComments: async (issueId: number): Promise<IssueComment[]> => {
const r = await api.get(`/api/issues/${issueId}/comments`);
return r.data.data;
},
addComment: async (issueId: number, inhalt: string): Promise<IssueComment> => {
const r = await api.post(`/api/issues/${issueId}/comments`, { inhalt });
return r.data.data;
},
};

View File

@@ -5,6 +5,7 @@ import type {
ShopAnfrage,
ShopAnfrageDetailResponse,
ShopAnfrageFormItem,
ShopOverview,
} from '../types/shop.types';
export const shopApi = {
@@ -70,4 +71,10 @@ export const shopApi = {
unlinkFromOrder: async (anfrageId: number, bestellungId: number): Promise<void> => {
await api.delete(`/api/shop/requests/${anfrageId}/link/${bestellungId}`);
},
// ── Overview ──
getOverview: async (): Promise<ShopOverview> => {
const r = await api.get('/api/shop/overview');
return r.data.data;
},
};

View File

@@ -9,6 +9,7 @@ import type {
UpdateFahrzeugPayload,
UpdateStatusPayload,
CreateWartungslogPayload,
UpdateWartungslogPayload,
StatusUpdateResponse,
} from '../types/vehicle.types';
@@ -94,6 +95,17 @@ export const vehiclesApi = {
return response.data.data;
},
async updateWartungslog(vehicleId: string, wartungId: string, payload: UpdateWartungslogPayload): Promise<FahrzeugWartungslog> {
const response = await api.patch<{ success: boolean; data: FahrzeugWartungslog }>(
`/api/vehicles/${vehicleId}/wartung/${wartungId}`,
payload
);
if (response.data?.data === undefined || response.data?.data === null) {
throw new Error('Invalid API response');
}
return response.data.data;
},
async exportAlerts(): Promise<Blob> {
const response = await api.get('/api/vehicles/alerts/export', {
responseType: 'blob',