featuer change for calendar

This commit is contained in:
Matthias Hochmeister
2026-03-03 08:57:32 +01:00
parent ad069fde10
commit 146f79cf00
9 changed files with 617 additions and 64 deletions

View File

@@ -24,6 +24,14 @@ export const atemschutzApi = {
);
},
async getMyStatus(): Promise<AtemschutzUebersicht | null> {
const response = await api.get<{ success: boolean; data: AtemschutzUebersicht | null }>(
'/api/atemschutz/my-status'
);
// data can be null when the user has no atemschutz entry
return response.data?.data ?? null;
},
async getById(id: string): Promise<AtemschutzUebersicht> {
return unwrap(
api.get<{ success: boolean; data: AtemschutzUebersicht }>(`/api/atemschutz/${id}`)

View File

@@ -9,6 +9,19 @@ export interface AuthCallbackResponse {
user: User;
}
// The backend returns camelCase field names; map them to the snake_case User type.
function mapBackendUser(backendUser: Record<string, unknown>): User {
return {
id: backendUser.id as string,
email: backendUser.email as string,
name: backendUser.name as string,
given_name: (backendUser.given_name ?? backendUser.givenName) as string,
family_name: (backendUser.family_name ?? backendUser.familyName) as string,
preferred_username: (backendUser.preferred_username ?? backendUser.preferredUsername) as string | undefined,
groups: backendUser.groups as string[] | undefined,
};
}
export const authService = {
/**
* Generate Authentik authorization URL
@@ -31,14 +44,14 @@ export const authService = {
const response = await api.post<{
success: boolean;
message: string;
data: { accessToken: string; refreshToken: string; user: User };
data: { accessToken: string; refreshToken: string; user: Record<string, unknown> };
}>('/api/auth/callback', {
code,
redirect_uri: REDIRECT_URI,
});
return {
token: response.data.data.accessToken,
user: response.data.data.user,
user: mapBackendUser(response.data.data.user),
};
},
@@ -59,7 +72,7 @@ export const authService = {
* Get current user information
*/
async getCurrentUser(): Promise<User> {
const response = await api.get<User>('/api/user/me');
return response.data;
const response = await api.get<{ success: boolean; data: Record<string, unknown> }>('/api/user/me');
return mapBackendUser(response.data.data);
},
};