From 655601dddbd3df6c287d0b075b5bde00d5ea1d80 Mon Sep 17 00:00:00 2001 From: florianfederspiel Date: Sat, 8 Nov 2025 18:53:56 +0100 Subject: [PATCH] Time Composable --- composables/useStaffTime.ts | 54 +++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 composables/useStaffTime.ts diff --git a/composables/useStaffTime.ts b/composables/useStaffTime.ts new file mode 100644 index 0000000..749166a --- /dev/null +++ b/composables/useStaffTime.ts @@ -0,0 +1,54 @@ +interface StaffTimeEntry { + id: string + started_at: string + stopped_at?: string | null + duration_minutes?: number | null + type: string + description?: string | null + created_at?: string +} + +export function useStaffTime() { + const { $api } = useNuxtApp() + + + + async function list(params?: { user_id?: string }) { + const query = new URLSearchParams() + if (params?.user_id) query.append("user_id", params.user_id) + + return await $api(`/api/staff/time${query.toString() ? `?${query}` : ''}`, { method: 'GET' }) + } + + async function start(description?: string) { + return await $api('/api/staff/time', { + method: 'POST', + body: { + started_at: new Date().toISOString(), + type: 'work', + description, + }, + }) + } + + async function stop(id: string) { + return await $api(`/api/staff/time/${id}/stop`, { + method: 'PUT', + body: { stopped_at: new Date().toISOString() }, + }) + } + + async function get(id: string) { + return await $api(`/api/staff/time/${id}`, { method: 'GET' }) + } + + async function create(data: Record) { + return await $api('/api/staff/time', { method: 'POST', body: data }) + } + + async function update(id: string, data: Record) { + return await $api(`/api/staff/time/${id}`, { method: 'PUT', body: data }) + } + + return { list, start, stop, get, create, update } +}