Updatweb
This commit is contained in:
@@ -1,220 +1,179 @@
|
||||
const express = require("express");
|
||||
const { query } = require("../config/database");
|
||||
const logger = require("../config/logger");
|
||||
const { asyncHandler } = require("../middleware/errorHandler");
|
||||
const {
|
||||
sendSuccess,
|
||||
sendError,
|
||||
sendNotFound,
|
||||
} = require("../utils/responseHelpers");
|
||||
const router = express.Router();
|
||||
|
||||
const handleDatabaseError = (res, error, context) => {
|
||||
logger.error(`${context} error:`, error);
|
||||
sendError(res);
|
||||
};
|
||||
|
||||
// Get all products
|
||||
router.get("/products", async (req, res) => {
|
||||
try {
|
||||
router.get(
|
||||
"/products",
|
||||
asyncHandler(async (req, res) => {
|
||||
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"
|
||||
`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" });
|
||||
}
|
||||
});
|
||||
sendSuccess(res, { products: result.rows });
|
||||
})
|
||||
);
|
||||
|
||||
// Get featured products
|
||||
router.get("/products/featured", async (req, res) => {
|
||||
try {
|
||||
router.get(
|
||||
"/products/featured",
|
||||
asyncHandler(async (req, res) => {
|
||||
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",
|
||||
`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" });
|
||||
}
|
||||
});
|
||||
sendSuccess(res, { products: result.rows });
|
||||
})
|
||||
);
|
||||
|
||||
// Get single product
|
||||
router.get("/products/:id", async (req, res) => {
|
||||
try {
|
||||
router.get(
|
||||
"/products/:id",
|
||||
asyncHandler(async (req, res) => {
|
||||
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" });
|
||||
return sendNotFound(res, "Product");
|
||||
}
|
||||
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" });
|
||||
}
|
||||
});
|
||||
|
||||
sendSuccess(res, { product: result.rows[0] });
|
||||
})
|
||||
);
|
||||
|
||||
// Get site settings
|
||||
router.get("/settings", async (req, res) => {
|
||||
try {
|
||||
router.get(
|
||||
"/settings",
|
||||
asyncHandler(async (req, res) => {
|
||||
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: {} });
|
||||
}
|
||||
});
|
||||
sendSuccess(res, { settings: result.rows[0] || {} });
|
||||
})
|
||||
);
|
||||
|
||||
// Get homepage sections
|
||||
router.get("/homepage/sections", async (req, res) => {
|
||||
try {
|
||||
router.get(
|
||||
"/homepage/sections",
|
||||
asyncHandler(async (req, res) => {
|
||||
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" });
|
||||
}
|
||||
});
|
||||
sendSuccess(res, { sections: result.rows });
|
||||
})
|
||||
);
|
||||
|
||||
// Get portfolio projects
|
||||
router.get("/portfolio/projects", async (req, res) => {
|
||||
try {
|
||||
router.get(
|
||||
"/portfolio/projects",
|
||||
asyncHandler(async (req, res) => {
|
||||
const result = await query(
|
||||
"SELECT id, title, description, featuredimage, images, category, categoryid, isactive, createdat FROM portfolioprojects WHERE isactive = true ORDER BY displayorder ASC, createdat DESC"
|
||||
`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" });
|
||||
}
|
||||
});
|
||||
sendSuccess(res, { projects: result.rows });
|
||||
})
|
||||
);
|
||||
|
||||
// Get blog posts
|
||||
router.get("/blog/posts", async (req, res) => {
|
||||
try {
|
||||
router.get(
|
||||
"/blog/posts",
|
||||
asyncHandler(async (req, res) => {
|
||||
const result = await query(
|
||||
"SELECT id, title, slug, excerpt, content, imageurl, ispublished, createdat FROM blogposts WHERE ispublished = true ORDER BY createdat DESC"
|
||||
`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" });
|
||||
}
|
||||
});
|
||||
sendSuccess(res, { posts: result.rows });
|
||||
})
|
||||
);
|
||||
|
||||
// Get single blog post by slug
|
||||
router.get("/blog/posts/:slug", async (req, res) => {
|
||||
try {
|
||||
router.get(
|
||||
"/blog/posts/:slug",
|
||||
asyncHandler(async (req, res) => {
|
||||
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" });
|
||||
return sendNotFound(res, "Blog post");
|
||||
}
|
||||
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" });
|
||||
}
|
||||
});
|
||||
|
||||
sendSuccess(res, { post: result.rows[0] });
|
||||
})
|
||||
);
|
||||
|
||||
// Get custom pages
|
||||
router.get("/pages", async (req, res) => {
|
||||
try {
|
||||
router.get(
|
||||
"/pages",
|
||||
asyncHandler(async (req, res) => {
|
||||
const result = await query(
|
||||
"SELECT id, title, slug, content, metatitle, metadescription, isactive, createdat FROM pages WHERE isactive = true ORDER BY createdat DESC"
|
||||
`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" });
|
||||
}
|
||||
});
|
||||
sendSuccess(res, { pages: result.rows });
|
||||
})
|
||||
);
|
||||
|
||||
// Get single page by slug
|
||||
router.get("/pages/:slug", async (req, res) => {
|
||||
try {
|
||||
router.get(
|
||||
"/pages/:slug",
|
||||
asyncHandler(async (req, res) => {
|
||||
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" });
|
||||
return sendNotFound(res, "Page");
|
||||
}
|
||||
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" });
|
||||
}
|
||||
});
|
||||
|
||||
sendSuccess(res, { page: result.rows[0] });
|
||||
})
|
||||
);
|
||||
|
||||
// Get menu items for frontend navigation
|
||||
router.get("/menu", async (req, res) => {
|
||||
try {
|
||||
router.get(
|
||||
"/menu",
|
||||
asyncHandler(async (req, res) => {
|
||||
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: [] });
|
||||
}
|
||||
});
|
||||
sendSuccess(res, { items: visibleItems });
|
||||
})
|
||||
);
|
||||
|
||||
// Get homepage settings for frontend
|
||||
router.get("/homepage/settings", async (req, res) => {
|
||||
try {
|
||||
router.get(
|
||||
"/homepage/settings",
|
||||
asyncHandler(async (req, res) => {
|
||||
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: {} });
|
||||
}
|
||||
});
|
||||
sendSuccess(res, { settings });
|
||||
})
|
||||
);
|
||||
|
||||
module.exports = router;
|
||||
|
||||
Reference in New Issue
Block a user