diff --git a/controllers/maisondetreats/cakeOrder.controller.js b/controllers/maisondetreats/cakeOrder.controller.js index 0a4cd3d..2da2f47 100644 --- a/controllers/maisondetreats/cakeOrder.controller.js +++ b/controllers/maisondetreats/cakeOrder.controller.js @@ -1,39 +1,44 @@ import { CakeOrder } from "../../models/maisondetreats/cakeOrder.model.js"; import { sendCakeOrderMail } from "../../utils/mailer.js"; +// POST → Create new cake order export const createCakeOrder = async (req, res) => { - try { - const { order, email } = req.body; + try { + const { order, email, totalPieces, totalPrice } = req.body; - if (!order || typeof order !== "object") { - return res.status(400).json({ message: "Order data is required" }); - } - - const newOrder = await CakeOrder.create({ order, email }); - - // ✅ send confirmation email (non-blocking) - if (email) { - sendCakeOrderMail(email, order) - .then(() => console.log("Cake order email sent to", email)) - .catch((err) => console.error("Email send failed:", err)); - } - - res.status(201).json({ - message: "Cake order created successfully", - data: newOrder, - }); - } catch (err) { - console.error("Error creating cake order:", err); - res.status(500).json({ message: "Server error", error: err.message }); + if (!order || typeof order !== "object") { + return res.status(400).json({ message: "Order data is required" }); } + + if (!totalPieces || !totalPrice) { + return res.status(400).json({ message: "Total pieces and price are required" }); + } + + const newOrder = await CakeOrder.create({ order, email, totalPieces, totalPrice }); + + if (email) { + sendCakeOrderMail(email, order, totalPieces, totalPrice) + .then(() => console.log("Cake order email sent to", email)) + .catch((err) => console.error("Email send failed:", err)); + } + + res.status(201).json({ + message: "Cake order created successfully", + data: newOrder, + }); + } catch (err) { + console.error("Error creating cake order:", err); + res.status(500).json({ message: "Server error", error: err.message }); + } }; -// GET /api/cake-orders → List all orders + +// GET → Fetch all cake orders export const getAllCakeOrders = async (_req, res) => { - try { - const orders = await CakeOrder.find().sort({ createdAt: -1 }); - res.json({ data: orders }); - } catch (err) { - console.error("Error fetching cake orders:", err); - res.status(500).json({ message: "Server error", error: err.message }); - } + try { + const orders = await CakeOrder.find().sort({ createdAt: -1 }); + res.json({ data: orders }); + } catch (err) { + console.error("Error fetching cake orders:", err); + res.status(500).json({ message: "Server error", error: err.message }); + } }; diff --git a/models/maisondetreats/cakeOrder.model.js b/models/maisondetreats/cakeOrder.model.js index f7569c2..236e7d4 100644 --- a/models/maisondetreats/cakeOrder.model.js +++ b/models/maisondetreats/cakeOrder.model.js @@ -1,16 +1,24 @@ import mongoose from "mongoose"; +// Each flavour item schema +const FlavourSchema = new mongoose.Schema({ + flavour: { type: String, required: true }, + pieces: { type: Number, required: true }, + unitPrice: { type: Number, required: true }, + totalPrice: { type: Number, required: true }, +}); + +// Main Cake Order schema const CakeOrderSchema = new mongoose.Schema( { + email: { type: String, required: true }, order: { - type: Object, + type: Map, + of: [FlavourSchema], // Each category has an array of flavour objects required: true, - // Example format: - // { - // "Mini Cakes": { "Thandai Cake": 1, "Mango Cardamom": 1 }, - // "Mithai-Inspired Macarons": { "Mango macarons (pack of 6)": 1, "Pista (pack of 6)": 10 } - // } }, + totalPieces: { type: Number, required: true }, + totalPrice: { type: Number, required: true }, }, { timestamps: true } ); diff --git a/utils/mailer.js b/utils/mailer.js index 3cef212..fdcc9d4 100644 --- a/utils/mailer.js +++ b/utils/mailer.js @@ -62,8 +62,9 @@ export async function sendResetPasswordMail(email, token) { } } -// Send cake order email -export const sendCakeOrderMail = async (toEmail, orderData) => { + + +export const sendCakeOrderMail = async (email, order, totalPieces, totalPrice) => { try { const transporter = nodemailer.createTransport({ host: "mail.metatron-admin-backend.metatronhost.com", @@ -78,35 +79,37 @@ export const sendCakeOrderMail = async (toEmail, orderData) => { // Build table rows let orderRows = ""; - Object.entries(orderData).forEach(([category, flavours]) => { - Object.entries(flavours).forEach(([flavour, qty]) => { + Object.entries(order).forEach(([category, items]) => { + items.forEach(({ flavour, pieces, unitPrice, totalPrice: lineTotal }) => { orderRows += `