diff --git a/frontend/modules/directory/services/addresses.ts b/frontend/modules/directory/services/addresses.ts new file mode 100644 index 0000000..3676e8f --- /dev/null +++ b/frontend/modules/directory/services/addresses.ts @@ -0,0 +1,32 @@ +import type { Address, AddressWrite } from './dto/address' +import type { HydraCollection } from '~/utils/api' +import { extractHydraMembers } from '~/utils/api' + +type Owner = { client?: string, prospect?: string } + +export function useAddressService() { + const api = useApi() + + async function getByOwner(owner: Owner): Promise { + const data = await api.get>('/addresses', owner as Record) + return extractHydraMembers(data) + } + + async function create(payload: AddressWrite): Promise
{ + return api.post
('/addresses', payload as Record, { + toastSuccessKey: 'directory.addresses.saved', + }) + } + + async function update(id: number, payload: Partial): Promise
{ + return api.patch
(`/addresses/${id}`, payload as Record, { + toastSuccessKey: 'directory.addresses.saved', + }) + } + + async function remove(id: number): Promise { + await api.delete(`/addresses/${id}`, {}, { toastSuccessKey: 'directory.addresses.deleted' }) + } + + return { getByOwner, create, update, remove } +} diff --git a/frontend/modules/directory/services/commercial-reports.ts b/frontend/modules/directory/services/commercial-reports.ts new file mode 100644 index 0000000..4f27deb --- /dev/null +++ b/frontend/modules/directory/services/commercial-reports.ts @@ -0,0 +1,32 @@ +import type { CommercialReport, CommercialReportWrite } from './dto/commercial-report' +import type { HydraCollection } from '~/utils/api' +import { extractHydraMembers } from '~/utils/api' + +type Owner = { client?: string, prospect?: string } + +export function useCommercialReportService() { + const api = useApi() + + async function getByOwner(owner: Owner): Promise { + const data = await api.get>('/commercial_reports', owner as Record) + return extractHydraMembers(data) + } + + async function create(payload: CommercialReportWrite): Promise { + return api.post('/commercial_reports', payload as Record, { + toastSuccessKey: 'directory.reports.saved', + }) + } + + async function update(id: number, payload: Partial): Promise { + return api.patch(`/commercial_reports/${id}`, payload as Record, { + toastSuccessKey: 'directory.reports.saved', + }) + } + + async function remove(id: number): Promise { + await api.delete(`/commercial_reports/${id}`, {}, { toastSuccessKey: 'directory.reports.deleted' }) + } + + return { getByOwner, create, update, remove } +} diff --git a/frontend/modules/directory/services/contacts.ts b/frontend/modules/directory/services/contacts.ts new file mode 100644 index 0000000..551b3d2 --- /dev/null +++ b/frontend/modules/directory/services/contacts.ts @@ -0,0 +1,32 @@ +import type { Contact, ContactWrite } from './dto/contact' +import type { HydraCollection } from '~/utils/api' +import { extractHydraMembers } from '~/utils/api' + +type Owner = { client?: string, prospect?: string } + +export function useContactService() { + const api = useApi() + + async function getByOwner(owner: Owner): Promise { + const data = await api.get>('/contacts', owner as Record) + return extractHydraMembers(data) + } + + async function create(payload: ContactWrite): Promise { + return api.post('/contacts', payload as Record, { + toastSuccessKey: 'directory.contacts.saved', + }) + } + + async function update(id: number, payload: Partial): Promise { + return api.patch(`/contacts/${id}`, payload as Record, { + toastSuccessKey: 'directory.contacts.saved', + }) + } + + async function remove(id: number): Promise { + await api.delete(`/contacts/${id}`, {}, { toastSuccessKey: 'directory.contacts.deleted' }) + } + + return { getByOwner, create, update, remove } +} diff --git a/frontend/modules/directory/services/report-documents.ts b/frontend/modules/directory/services/report-documents.ts new file mode 100644 index 0000000..3306496 --- /dev/null +++ b/frontend/modules/directory/services/report-documents.ts @@ -0,0 +1,39 @@ +import type { ReportDocument } from './dto/report-document' +import type { HydraCollection } from '~/utils/api' +import { extractHydraMembers } from '~/utils/api' +import { $fetch } from 'ofetch' + +export function useReportDocumentService() { + const api = useApi() + const config = useRuntimeConfig() + const baseURL = config.public.apiBase || '/api' + + async function getByReport(reportId: number): Promise { + const data = await api.get>('/report_documents', { + commercialReport: `/api/commercial_reports/${reportId}`, + }) + return extractHydraMembers(data) + } + + async function upload(reportId: number, file: File): Promise { + const formData = new FormData() + formData.append('file', file) + formData.append('commercialReport', `/api/commercial_reports/${reportId}`) + + return $fetch(`${baseURL}/report_documents`, { + method: 'POST', + body: formData, + credentials: 'include', + }) + } + + async function remove(id: number): Promise { + await api.delete(`/report_documents/${id}`, {}, { toastSuccessKey: 'directory.documents.deleted' }) + } + + function getDownloadUrl(id: number): string { + return `${baseURL}/report_documents/${id}/download` + } + + return { getByReport, upload, remove, getDownloadUrl } +}