feat: create product for flowAccount service
This commit is contained in:
parent
c774e9f44c
commit
250bbca226
1 changed files with 184 additions and 0 deletions
|
|
@ -3,6 +3,7 @@ import config from "../config.json";
|
|||
import { CustomerType, PayCondition } from "@prisma/client";
|
||||
import { convertTemplate } from "../utils/string-template";
|
||||
import { htmlToText } from "html-to-text";
|
||||
import { JsonObject } from "@prisma/client/runtime/library";
|
||||
|
||||
if (!process.env.FLOW_ACCOUNT_URL) throw new Error("Require FLOW_ACCOUNT_URL");
|
||||
if (!process.env.FLOW_ACCOUNT_CLIENT_ID) throw new Error("Require FLOW_ACCOUNT_CLIENT_ID");
|
||||
|
|
@ -388,6 +389,189 @@ const flowAccount = {
|
|||
}
|
||||
return null;
|
||||
},
|
||||
|
||||
// flowAccount GET Product list
|
||||
async getProducts() {
|
||||
const { token } = await flowAccountAPI.auth();
|
||||
|
||||
const res = await fetch(api + "/products", {
|
||||
method: "GET",
|
||||
headers: {
|
||||
["Content-Type"]: `application/json`,
|
||||
["Authorization"]: `Bearer ${token}`,
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
ok: res.ok,
|
||||
status: res.status,
|
||||
body: await res.json(),
|
||||
};
|
||||
},
|
||||
|
||||
// flowAccount GET Product by id
|
||||
async getProductsById(recordId: string) {
|
||||
const { token } = await flowAccountAPI.auth();
|
||||
|
||||
const res = await fetch(api + `/products/${recordId}`, {
|
||||
method: "GET",
|
||||
headers: {
|
||||
["Content-Type"]: `application/json`,
|
||||
["Authorization"]: `Bearer ${token}`,
|
||||
},
|
||||
});
|
||||
|
||||
const data = await res.json();
|
||||
|
||||
return {
|
||||
ok: res.ok,
|
||||
status: res.status,
|
||||
list: data.data.list,
|
||||
total: data.data.total,
|
||||
};
|
||||
},
|
||||
|
||||
// flowAccount POST create Product
|
||||
async createProducts(body: JsonObject) {
|
||||
const { token } = await flowAccountAPI.auth();
|
||||
|
||||
const commonBody = {
|
||||
productStructureType: null,
|
||||
type: "3",
|
||||
name: body.name,
|
||||
sellDescription: body.detail,
|
||||
sellVatType: 3,
|
||||
unitName: "Unit",
|
||||
categoryName: "Car",
|
||||
}; // helper function สำหรับสร้าง product
|
||||
|
||||
const createProduct = async (price: any, vatIncluded: boolean) => {
|
||||
try {
|
||||
const res = await fetch(api + "/products", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
Authorization: `Bearer ${token}`,
|
||||
},
|
||||
body: JSON.stringify({
|
||||
...commonBody,
|
||||
sellPrice: price,
|
||||
sellVatType: vatIncluded ? 1 : 3,
|
||||
}),
|
||||
});
|
||||
|
||||
if (!res.ok) {
|
||||
throw new Error(`Request failed with status ${res.status}`);
|
||||
} // ป้องกัน response ที่ไม่ใช่ JSON หรือว่าง
|
||||
|
||||
let json: any = null;
|
||||
try {
|
||||
json = await res.json();
|
||||
} catch {
|
||||
throw new Error("Response is not valid JSON");
|
||||
}
|
||||
|
||||
return json?.data?.list?.[0]?.id ?? null;
|
||||
} catch (err) {
|
||||
console.error("createProduct error:", err);
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
const [sellId, agentId] = await Promise.all([
|
||||
createProduct(body.price, /true/.test(`${body.vatIncluded}`)),
|
||||
createProduct(body.agentPrice, /true/.test(`${body.agentPriceVatIncluded}`)),
|
||||
]);
|
||||
|
||||
return {
|
||||
ok: !!(agentId && sellId),
|
||||
status: agentId && sellId ? 200 : 500,
|
||||
data: {
|
||||
productIdAgentPrice: agentId,
|
||||
productIdSellPrice: sellId,
|
||||
},
|
||||
};
|
||||
},
|
||||
|
||||
// flowAccount PUT edit Product
|
||||
async editProducts(sellPriceId: String, agentPriceId: String, body: JsonObject) {
|
||||
console.log("body: ", body);
|
||||
const { token } = await flowAccountAPI.auth();
|
||||
|
||||
const commonBody = {
|
||||
productStructureType: null,
|
||||
type: "3",
|
||||
name: body.name,
|
||||
sellDescription: body.detail,
|
||||
sellVatType: 3,
|
||||
unitName: "Unit",
|
||||
categoryName: "Car",
|
||||
}; // helper function สำหรับสร้าง product
|
||||
|
||||
const editProduct = async (id: String, price: any, vatIncluded: boolean) => {
|
||||
try {
|
||||
const res = await fetch(api + `/products/${id}`, {
|
||||
method: "PUT",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
Authorization: `Bearer ${token}`,
|
||||
},
|
||||
body: JSON.stringify({
|
||||
...commonBody,
|
||||
sellPrice: price,
|
||||
sellVatType: vatIncluded ? 1 : 3,
|
||||
}),
|
||||
});
|
||||
|
||||
if (!res.ok) {
|
||||
throw new Error(`Request failed with status ${res.status}`);
|
||||
} // ป้องกัน response ที่ไม่ใช่ JSON หรือว่าง
|
||||
|
||||
let json: any = null;
|
||||
try {
|
||||
json = await res.json();
|
||||
} catch {
|
||||
throw new Error("Response is not valid JSON");
|
||||
}
|
||||
|
||||
return json?.data?.list?.[0]?.id ?? null;
|
||||
} catch (err) {
|
||||
console.error("createProduct error:", err);
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
const [agentId, sellId] = await Promise.all([
|
||||
editProduct(sellPriceId, body.price, /true/.test(`${body.vatIncluded}`)),
|
||||
editProduct(agentPriceId, body.agentPrice, /true/.test(`${body.agentPriceVatIncluded}`)),
|
||||
]);
|
||||
|
||||
return {
|
||||
ok: !!(agentId && sellId),
|
||||
status: agentId && sellId ? 200 : 500,
|
||||
data: {
|
||||
productIdAgentPrice: agentId,
|
||||
productIdSellPrice: sellId,
|
||||
},
|
||||
};
|
||||
},
|
||||
|
||||
// flowAccount DELETE Product
|
||||
async deleteProduct(recordId: string) {
|
||||
const { token } = await flowAccountAPI.auth();
|
||||
|
||||
const res = await fetch(api + `/products/${recordId}`, {
|
||||
method: "DELETE",
|
||||
headers: {
|
||||
["Authorization"]: `Bearer ${token}`,
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
ok: res.ok,
|
||||
status: res.status,
|
||||
};
|
||||
},
|
||||
};
|
||||
|
||||
export default flowAccount;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue