KI-AGENT: Mobile Termine und Kalender ergänzen

This commit is contained in:
2026-09-08 22:05:18 +02:00
parent 5e1631e2d3
commit 92c354c1b9
8 changed files with 1122 additions and 1 deletions

View File

@@ -54,6 +54,23 @@ export type Project = {
[key: string]: unknown;
};
export type CalendarEvent = {
id: number;
name: string;
startDate: string;
endDate?: string | null;
eventtype?: string | null;
state?: string | null;
repeatInterval?: string | null;
project?: number | { id?: number; name?: string } | null;
customer?: number | { id?: number; name?: string } | null;
notes?: string | null;
link?: string | null;
color?: string | null;
archived?: boolean;
[key: string]: unknown;
};
export type ProjectFile = {
id: string;
name?: string | null;
@@ -886,6 +903,49 @@ export async function createProject(
});
}
export async function fetchEvents(token: string, includeArchived = false): Promise<CalendarEvent[]> {
const events = await apiRequest<CalendarEvent[]>('/api/resource/events', { token });
if (includeArchived) return events || [];
return (events || []).filter((event) => !event.archived);
}
export async function createEvent(
token: string,
payload: {
name: string;
startDate: string;
endDate: string;
project?: number | null;
customer?: number | null;
notes?: string | null;
link?: string | null;
eventtype?: string;
state?: 'Entwurf' | 'Final';
repeatInterval?: string;
}
): Promise<CalendarEvent> {
return apiRequest<CalendarEvent>('/api/resource/events', {
method: 'POST',
token,
body: payload,
});
}
export async function fetchEventById(token: string, eventId: number): Promise<CalendarEvent> {
return apiRequest<CalendarEvent>(`/api/resource/events/${eventId}`, { token });
}
function resolveEventProjectId(event: CalendarEvent): number | null {
if (!event.project) return null;
if (typeof event.project === 'object') return event.project.id ? Number(event.project.id) : null;
return Number(event.project);
}
export async function fetchProjectEvents(token: string, projectId: number): Promise<CalendarEvent[]> {
const events = await fetchEvents(token);
return events.filter((event) => resolveEventProjectId(event) === Number(projectId));
}
export async function fetchCustomers(token: string, includeArchived = false): Promise<Customer[]> {
const customers = await apiRequest<Customer[]>('/api/resource/customers', { token });
if (includeArchived) return customers || [];