Files
FEDEO/frontend/composables/useHelpdesk.ts
2026-01-06 12:09:31 +01:00

111 lines
3.1 KiB
TypeScript

// composables/useHelpdeskApi.ts
import { ref } from 'vue'
import { useNuxtApp } from '#app'
export function useHelpdeskApi() {
const { $api } = useNuxtApp()
const loading = ref(false)
const error = ref<string | null>(null)
const base = '/api/helpdesk'
// 🔹 Konversationen abrufen
async function getConversations(status?: string) {
loading.value = true
error.value = null
try {
const query = status ? `?status=${status}` : ''
const data = await $api(`${base}/conversations${query}`)
return data
} catch (err: any) {
error.value = err.message || 'Fehler beim Laden der Konversationen'
return []
} finally {
loading.value = false
}
}
// 🔹 Einzelne Konversation
async function getConversation(id: string) {
try {
return await $api(`${base}/conversations/${id}`)
} catch (err: any) {
error.value = err.message
return null
}
}
// 🔹 Nachrichten einer Konversation
async function getMessages(conversationId: string) {
try {
return await $api(`${base}/conversations/${conversationId}/messages`)
} catch (err: any) {
error.value = err.message
return []
}
}
// 🔹 Neue Nachricht senden
async function sendMessage(conversationId: string, text: string) {
try {
return await $api(`${base}/conversations/${conversationId}/messages`, {
method: 'POST',
body: { text },
})
} catch (err: any) {
error.value = err.message
throw err
}
}
async function replyMessage(conversationId: string, text: string) {
try {
return await $api(`${base}/conversations/${conversationId}/reply`, {
method: 'POST',
body: { text },
})
} catch (err: any) {
error.value = err.message
throw err
}
}
// 🔹 Neuen Kontakt (manuell) anlegen
async function createContact(payload: { email?: string; phone?: string; display_name?: string }) {
try {
return await $api(`${base}/contacts`, {
method: 'POST',
body: payload,
})
} catch (err: any) {
error.value = err.message
throw err
}
}
// 🔹 Konversation-Status ändern
async function updateConversationStatus(conversationId: string, status: string) {
try {
return await $api(`${base}/conversations/${conversationId}/status`, {
method: 'PATCH',
body: { status },
})
} catch (err: any) {
error.value = err.message
throw err
}
}
return {
loading,
error,
getConversations,
getConversation,
getMessages,
sendMessage,
createContact,
updateConversationStatus,
replyMessage,
}
}