feat: client http do endpoint publico do chatwoot
This commit is contained in:
parent
118bde32f4
commit
1339a9d16a
69
src/lib/chatwootApi.ts
Normal file
69
src/lib/chatwootApi.ts
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
const API_URL = import.meta.env.VITE_CHATWOOT_API_URL
|
||||||
|
const API_TOKEN = import.meta.env.VITE_CHATWOOT_API_TOKEN
|
||||||
|
|
||||||
|
if (!API_URL || !API_TOKEN) {
|
||||||
|
console.warn('VITE_CHATWOOT_API_URL / VITE_CHATWOOT_API_TOKEN nao definidos')
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CreateReservationInput {
|
||||||
|
chatwoot_unit_id: number
|
||||||
|
category: string
|
||||||
|
stay_type: string
|
||||||
|
checkin_at: string // ISO
|
||||||
|
customer: {
|
||||||
|
name: string
|
||||||
|
phone: string
|
||||||
|
cpf: string
|
||||||
|
email?: string
|
||||||
|
}
|
||||||
|
total_cents: number
|
||||||
|
deposit_cents: number
|
||||||
|
notes?: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CreateReservationResponse {
|
||||||
|
reservation_id: number
|
||||||
|
conversation_id: number
|
||||||
|
pix: {
|
||||||
|
txid: string
|
||||||
|
copia_e_cola: string
|
||||||
|
qrcode_base64: string | null
|
||||||
|
expires_at: string
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface StatusResponse {
|
||||||
|
reservation_id: number
|
||||||
|
status: 'pending' | 'paid' | 'expired' | 'canceled'
|
||||||
|
}
|
||||||
|
|
||||||
|
async function request<T>(path: string, init: RequestInit = {}): Promise<T> {
|
||||||
|
const res = await fetch(`${API_URL}${path}`, {
|
||||||
|
...init,
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
'X-Reserva-Token': API_TOKEN,
|
||||||
|
...(init.headers ?? {}),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
if (!res.ok) {
|
||||||
|
const body = await res.text().catch(() => '')
|
||||||
|
throw new Error(`Chatwoot API ${res.status}: ${body || res.statusText}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
return (await res.json()) as T
|
||||||
|
}
|
||||||
|
|
||||||
|
export const chatwootApi = {
|
||||||
|
createReservation(input: CreateReservationInput): Promise<CreateReservationResponse> {
|
||||||
|
return request('/public/api/v1/captain/public_reservations', {
|
||||||
|
method: 'POST',
|
||||||
|
body: JSON.stringify(input),
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
getStatus(id: number): Promise<StatusResponse> {
|
||||||
|
return request(`/public/api/v1/captain/public_reservations/${id}/status`)
|
||||||
|
},
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user