KI-AGENT: Mobile Termine und Kalender ergänzen
This commit is contained in:
@@ -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 || [];
|
||||
|
||||
Reference in New Issue
Block a user