From 6882f95122fb63c3f8eb79614e8d2e8951057d4e Mon Sep 17 00:00:00 2001 From: Net Date: Tue, 27 Aug 2024 12:54:57 +0700 Subject: [PATCH] refactor: add Attachment --- src/stores/customer/index.ts | 121 +++++++++++++++++------------------ 1 file changed, 57 insertions(+), 64 deletions(-) diff --git a/src/stores/customer/index.ts b/src/stores/customer/index.ts index 2e4b0ae0..7d13fcfd 100644 --- a/src/stores/customer/index.ts +++ b/src/stores/customer/index.ts @@ -16,6 +16,7 @@ import { import axios from 'axios'; import useFlowStore from '../flow'; import { Employee } from '../employee/types'; +import { baseUrl } from '../utils'; const useCustomerStore = defineStore('api-customer', () => { const flowStore = useFlowStore(); @@ -208,6 +209,55 @@ const useCustomerStore = defineStore('api-customer', () => { return res.data; } + + async function putAttachment(opts: { + branchId: string; + file: File; + filename?: string; + }) { + await api.put( + `/customer-branch/${opts.branchId}/attachment/${opts.filename || opts.file.name}`, + opts.file, + { + headers: { 'X-Rtid': flowStore.rtid }, + onUploadProgress: (e) => console.log(e), + }, + ); + } + + async function deleteAttachment(id: string, filename: string) { + await api.delete(`/customer-branch/${id}/attachment/{${filename}}`); + } + + async function listAttachment(id: string) { + const res = await api.get(`/customer-branch/${id}/attachment`, { + headers: { 'X-Rtid': flowStore.rtid }, + }); + + if (res.status >= 400) return false; + + return res.data; + } + + async function getAttachment(id: string, filename: string, download = false) { + const url = `${baseUrl}/customer-branch/${id}/attachment/${filename}`; + const res = await api.get(url); + + if (download) { + fetch(res.data) + .then(async (res) => await res.blob()) + .then((blob) => { + let a = document.createElement('a'); + a.download = filename; + a.href = window.URL.createObjectURL(blob); + a.click(); + a.remove(); + }); + } + + return res.data; + } + async function create( data: CustomerCreate, flow?: { @@ -395,7 +445,7 @@ const useCustomerStore = defineStore('api-customer', () => { }); if (!res) return false; - if (file) await addBranchAttachment(res.data.id, { file }); + // if (file) await addBranchAttachment(res.data.id, { file }); return res.data; } @@ -443,7 +493,7 @@ const useCustomerStore = defineStore('api-customer', () => { }, ); - if (file) await addBranchAttachment(id, { file }); + // if (file) await addBranchAttachment(id, { file }); if (!res) return false; @@ -472,68 +522,6 @@ const useCustomerStore = defineStore('api-customer', () => { return false; } - async function addBranchAttachment( - branchId: string, - payload: BranchAttachmentCreate, - flow?: { - sessionId?: string; - refTransactionId?: string; - transactionId?: string; - }, - ) { - const list: { name: string; file: File }[] = []; - - payload.file.forEach((v) => { - let filename = v.name; - - if (list.some((v) => v.name === filename)) { - const dotIndex = filename.lastIndexOf('.'); - const originalName = - dotIndex !== -1 && !filename.startsWith('.') - ? filename.slice(0, dotIndex) - : filename; - const extension = - dotIndex !== -1 && !filename.startsWith('.') - ? filename.slice(dotIndex) - : ''; - - let i = 0; - - while (list.some((v) => v.name === filename)) { - filename = `${originalName} (${++i})`; - if (dotIndex !== -1) filename += extension; - } - } - - list.push({ name: filename, file: v }); - }); - - const res = await api.post<(BranchAttachment & { uploadUrl: string })[]>( - `/customer-branch/${branchId}/attachment`, - { file: list.map((v) => v.name) }, - { - headers: { - 'X-Session-Id': flow?.sessionId, - 'X-Rtid': flow?.refTransactionId || flowStore.rtid, - 'X-Tid': flow?.transactionId, - }, - }, - ); - - await Promise.all( - res.data.map(async (a) => { - const found = list.find((b) => b.name === a.name)!; - - await axios - .put(a.uploadUrl, found.file, { - headers: { 'Content-Type': found.file.type }, - onUploadProgress: (e) => console.log(e), - }) - .catch((e) => console.error(e)); - }), - ); - } - async function fetchListCustomeBranchById( branchId: string, flow?: { @@ -576,6 +564,11 @@ const useCustomerStore = defineStore('api-customer', () => { fetchListCustomeBranchById, fetchBranchEmployee, + + listAttachment, + getAttachment, + putAttachment, + deleteAttachment, }; });