Files
SkyArtShop/variant-api/server.js

74 lines
1.7 KiB
JavaScript
Raw Normal View History

#!/usr/bin/env node
const http = require("http");
const { Client } = require("pg");
const PORT = 5001;
const client = new Client({
host: "localhost",
port: 5432,
database: "skyartshop",
user: "skyartapp",
password: "SkyArt2025Pass!"
});
client.connect().catch(err => {
console.error("Database connection error:", err);
process.exit(1);
});
const server = http.createServer(async (req, res) => {
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader("Access-Control-Allow-Methods", "GET, OPTIONS");
res.setHeader("Access-Control-Allow-Headers", "Content-Type");
res.setHeader("Content-Type", "application/json");
if (req.method === "OPTIONS") {
res.writeHead(200);
res.end();
return;
}
const match = req.url.match(/^\/api\/variants\/([a-f0-9-]+)$/i);
if (!match) {
res.writeHead(404);
res.end(JSON.stringify({ error: "Not found" }));
return;
}
const productId = match[1];
try {
const result = await client.query(
"SELECT variants FROM products WHERE id = $1",
[productId]
);
if (result.rows.length === 0) {
res.writeHead(404);
res.end(JSON.stringify({ error: "Product not found" }));
return;
}
const variants = result.rows[0].variants || [];
res.writeHead(200);
res.end(JSON.stringify(variants));
} catch (error) {
console.error("Query error:", error);
res.writeHead(500);
res.end(JSON.stringify({ error: "Internal server error" }));
}
});
server.listen(PORT, "127.0.0.1", () => {
console.log(`Variant API running on http://127.0.0.1:${PORT}`);
});
process.on("SIGTERM", () => {
server.close(() => {
client.end();
process.exit(0);
});
});