add now features

This commit is contained in:
Matthias Hochmeister
2026-03-01 14:41:45 +01:00
parent e76946ed8a
commit 5b8f40ab9a
14 changed files with 2044 additions and 84 deletions

View File

@@ -0,0 +1,64 @@
import { api } from './api';
import type {
AtemschutzUebersicht,
AtemschutzTraeger,
AtemschutzStats,
CreateAtemschutzPayload,
UpdateAtemschutzPayload,
} from '../types/atemschutz.types';
async function unwrap<T>(
promise: ReturnType<typeof api.get<{ success: boolean; data: T }>>
): Promise<T> {
const response = await promise;
if (response.data?.data === undefined || response.data?.data === null) {
throw new Error('Invalid API response');
}
return response.data.data;
}
export const atemschutzApi = {
async getAll(): Promise<AtemschutzUebersicht[]> {
return unwrap(
api.get<{ success: boolean; data: AtemschutzUebersicht[] }>('/api/atemschutz')
);
},
async getById(id: string): Promise<AtemschutzUebersicht> {
return unwrap(
api.get<{ success: boolean; data: AtemschutzUebersicht }>(`/api/atemschutz/${id}`)
);
},
async getStats(): Promise<AtemschutzStats> {
return unwrap(
api.get<{ success: boolean; data: AtemschutzStats }>('/api/atemschutz/stats')
);
},
async create(payload: CreateAtemschutzPayload): Promise<AtemschutzTraeger> {
const response = await api.post<{ success: boolean; data: AtemschutzTraeger }>(
'/api/atemschutz',
payload
);
if (response.data?.data === undefined || response.data?.data === null) {
throw new Error('Invalid API response');
}
return response.data.data;
},
async update(id: string, payload: UpdateAtemschutzPayload): Promise<AtemschutzTraeger> {
const response = await api.patch<{ success: boolean; data: AtemschutzTraeger }>(
`/api/atemschutz/${id}`,
payload
);
if (response.data?.data === undefined || response.data?.data === null) {
throw new Error('Invalid API response');
}
return response.data.data;
},
async delete(id: string): Promise<void> {
await api.delete(`/api/atemschutz/${id}`);
},
};