feat(catalog): add homaroma attribute definitions JSON schema and API import script
This commit is contained in:
1 parent
1f7bc0e01c
commit
e7fc0e2848
2 files changed
+399
No files matched your search
@@ -0,0 +1,75 @@
|
||||
import * as fs from "fs";
|
||||
import * as path from "path";
|
||||
|
||||
const API_BASE = process.env.API_BASE || "https://api.homaroma.shop/api";
|
||||
const ADMIN_USER = process.env.ADMIN_USER || "admin";
|
||||
const ADMIN_PASS = process.env.ADMIN_PASS || "homaroma123";
|
||||
|
||||
async function main() {
|
||||
console.log(`=== Importing Attribute Definitions via API (${API_BASE}) ===`);
|
||||
|
||||
// 1. Read JSON definitions
|
||||
const jsonPath = path.resolve(__dirname, "../data/homaroma_attribute_definitions.json");
|
||||
if (!fs.existsSync(jsonPath)) {
|
||||
throw new Error(`File not found: ${jsonPath}`);
|
||||
}
|
||||
const definitions = JSON.parse(fs.readFileSync(jsonPath, "utf-8"));
|
||||
console.log(`✓ Loaded ${definitions.length} definitions from data/homaroma_attribute_definitions.json`);
|
||||
|
||||
// 2. Login to get JWT Token
|
||||
console.log(`2. Logging in as '${ADMIN_USER}' to obtain JWT token...`);
|
||||
const loginRes = await fetch(`${API_BASE}/auth/login`, {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ username: ADMIN_USER, password: ADMIN_PASS }),
|
||||
});
|
||||
|
||||
if (!loginRes.ok) {
|
||||
const errorText = await loginRes.text();
|
||||
throw new Error(`Login failed (${loginRes.status}): ${errorText}`);
|
||||
}
|
||||
|
||||
const loginData = (await loginRes.json()) as { success: boolean; token: string };
|
||||
if (!loginData.token) {
|
||||
throw new Error("No token returned from login API");
|
||||
}
|
||||
const token = loginData.token;
|
||||
console.log("✓ Successfully authenticated. JWT token acquired.");
|
||||
|
||||
// 3. Post bulk-import
|
||||
console.log("3. Sending bulk-import payload to /product-attributes/definitions/bulk-import...");
|
||||
const importRes = await fetch(`${API_BASE}/product-attributes/definitions/bulk-import`, {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
Authorization: `Bearer ${token}`,
|
||||
},
|
||||
body: JSON.stringify(definitions),
|
||||
});
|
||||
|
||||
if (!importRes.ok) {
|
||||
const errorText = await importRes.text();
|
||||
throw new Error(`Bulk import failed (${importRes.status}): ${errorText}`);
|
||||
}
|
||||
|
||||
const importResult = await importRes.json();
|
||||
console.log("✓ Bulk import response:", JSON.stringify(importResult, null, 2));
|
||||
|
||||
// 4. Fetch all definitions to verify
|
||||
console.log("4. Verifying active attribute definitions from API...");
|
||||
const listRes = await fetch(`${API_BASE}/product-attributes/definitions?lang=th`);
|
||||
const listData = await listRes.json();
|
||||
console.log(`✓ Total active attribute definitions on API: ${Array.isArray(listData) ? listData.length : 'N/A'}`);
|
||||
|
||||
return importResult;
|
||||
}
|
||||
|
||||
main()
|
||||
.then(() => {
|
||||
console.log("\n✅ Completed successfully.");
|
||||
process.exit(0);
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error("\n❌ Error:", err.message || err);
|
||||
process.exit(1);
|
||||
});
|
||||
Reference in new issue
Block a user