Files
SkyArtShop/backend/routes/public.js

221 lines
6.1 KiB
JavaScript
Raw Normal View History

const express = require("express");
const { query } = require("../config/database");
const router = express.Router();
// Get all products
router.get("/products", async (req, res) => {
try {
const result = await query(
"SELECT id, name, description, shortdescription, price, imageurl, images, category, color, stockquantity, isactive, createdat FROM products WHERE isactive = true ORDER BY createdat DESC"
);
res.json({
success: true,
products: result.rows,
});
} catch (error) {
console.error("Products API error:", error);
res.status(500).json({ success: false, message: "Server error" });
}
});
// Get featured products
router.get("/products/featured", async (req, res) => {
try {
const limit = parseInt(req.query.limit) || 4;
const result = await query(
"SELECT id, name, description, price, imageurl, images FROM products WHERE isactive = true ORDER BY createdat DESC LIMIT $1",
[limit]
);
res.json({
success: true,
products: result.rows,
});
} catch (error) {
console.error("Featured products error:", error);
res.status(500).json({ success: false, message: "Server error" });
}
});
// Get single product
router.get("/products/:id", async (req, res) => {
try {
const result = await query(
"SELECT * FROM products WHERE id = $1 AND isactive = true",
[req.params.id]
);
if (result.rows.length === 0) {
return res
.status(404)
.json({ success: false, message: "Product not found" });
}
res.json({
success: true,
product: result.rows[0],
});
} catch (error) {
console.error("Product detail error:", error);
res.status(500).json({ success: false, message: "Server error" });
}
});
// Get site settings
router.get("/settings", async (req, res) => {
try {
const result = await query("SELECT * FROM sitesettings LIMIT 1");
res.json({
success: true,
settings: result.rows[0] || {},
});
} catch (error) {
console.error("Settings error:", error);
res.json({ success: true, settings: {} });
}
});
// Get homepage sections
router.get("/homepage/sections", async (req, res) => {
try {
const result = await query(
"SELECT * FROM homepagesections ORDER BY displayorder ASC"
);
res.json({
success: true,
sections: result.rows,
});
} catch (error) {
console.error("Homepage sections error:", error);
res.status(500).json({ success: false, message: "Server error" });
}
});
// Get portfolio projects
router.get("/portfolio/projects", async (req, res) => {
try {
const result = await query(
2025-12-14 01:54:40 -06:00
"SELECT id, title, description, featuredimage, images, category, categoryid, isactive, createdat FROM portfolioprojects WHERE isactive = true ORDER BY displayorder ASC, createdat DESC"
);
res.json({
success: true,
projects: result.rows,
});
} catch (error) {
console.error("Portfolio error:", error);
res.status(500).json({ success: false, message: "Server error" });
}
});
// Get blog posts
router.get("/blog/posts", async (req, res) => {
try {
const result = await query(
"SELECT id, title, slug, excerpt, content, imageurl, ispublished, createdat FROM blogposts WHERE ispublished = true ORDER BY createdat DESC"
);
res.json({
success: true,
posts: result.rows,
});
} catch (error) {
console.error("Blog posts error:", error);
res.status(500).json({ success: false, message: "Server error" });
}
});
2025-12-14 01:54:40 -06:00
// Get single blog post by slug
router.get("/blog/posts/:slug", async (req, res) => {
try {
const result = await query(
"SELECT * FROM blogposts WHERE slug = $1 AND ispublished = true",
[req.params.slug]
);
if (result.rows.length === 0) {
return res
.status(404)
.json({ success: false, message: "Blog post not found" });
}
res.json({
success: true,
post: result.rows[0],
});
} catch (error) {
console.error("Blog post detail error:", error);
res.status(500).json({ success: false, message: "Server error" });
}
});
// Get custom pages
router.get("/pages", async (req, res) => {
try {
const result = await query(
"SELECT id, title, slug, content, metatitle, metadescription, isactive, createdat FROM pages WHERE isactive = true ORDER BY createdat DESC"
);
res.json({
success: true,
pages: result.rows,
});
} catch (error) {
console.error("Pages error:", error);
res.status(500).json({ success: false, message: "Server error" });
}
});
// Get single page by slug
router.get("/pages/:slug", async (req, res) => {
try {
const result = await query(
"SELECT * FROM pages WHERE slug = $1 AND isactive = true",
[req.params.slug]
);
if (result.rows.length === 0) {
return res
.status(404)
.json({ success: false, message: "Page not found" });
}
res.json({
success: true,
page: result.rows[0],
});
} catch (error) {
console.error("Page detail error:", error);
res.status(500).json({ success: false, message: "Server error" });
}
});
// Get menu items for frontend navigation
router.get("/menu", async (req, res) => {
try {
const result = await query(
"SELECT settings FROM site_settings WHERE key = 'menu'"
);
const items =
result.rows.length > 0 ? result.rows[0].settings.items || [] : [];
// Filter only visible items
const visibleItems = items.filter((item) => item.visible !== false);
res.json({
success: true,
items: visibleItems,
});
} catch (error) {
console.error("Menu error:", error);
res.json({ success: true, items: [] });
}
});
// Get homepage settings for frontend
router.get("/homepage/settings", async (req, res) => {
try {
const result = await query(
"SELECT settings FROM site_settings WHERE key = 'homepage'"
);
const settings = result.rows.length > 0 ? result.rows[0].settings : {};
res.json({
success: true,
settings,
});
} catch (error) {
console.error("Homepage settings error:", error);
res.json({ success: true, settings: {} });
}
});
module.exports = router;