93 lines
2.5 KiB
TypeScript

import {useToast} from 'vue-toast-notification'
const toast = useToast({
position: 'top-right',
duration: 3000,
dismissible: true,
queue: false,
pauseOnHover: true,
})
class ChatService {
async getChats() {
try {
const response = await fetch("/api/v1/conversations", {method: "GET"})
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`)
}
return await response.json()
} catch (error) {
console.error("Error fetching chats:", error)
toast.error("Error loading chats")
throw error
}
}
async createChat() {
try {
const response = await fetch("/api/v1/conversations", {
method: "POST",
})
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`)
}
return await response.json()
} catch (error) {
console.error("Error creating chat:", error)
toast.error("Could not create chat")
throw error
}
}
async deleteChat(chatId) {
try {
const response = await fetch(`/api/v1/conversations/${chatId}`, {
method: "DELETE",
})
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`)
}
return true
} catch (error) {
console.error("Error removing chat:", error)
toast.error("Could not removing chat")
throw error
}
}
async getChatMessages(chatId) {
try {
const response = await fetch(`/api/v1/conversations/${chatId}/messages`)
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`)
}
return await response.json()
} catch (error) {
console.error("Error fetching messages:", error)
toast.error("Failed to load messages")
throw error
}
}
async sendMessage(chatId, prompt) {
try {
const response = await fetch(`/api/v1/conversations/${chatId}/messages`, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({content: prompt}),
})
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`)
}
return await response.json()
} catch (error) {
console.error("Error sending message:", error)
toast.error("Message could not be sent")
throw error
}
}
}
export const chatService = new ChatService()