2026-01-22 21:21:56 +05:30

215 lines
8.9 KiB
JavaScript

"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getKitchenOrders = exports.updateOrderStatus = exports.settleTable = exports.getOrders = exports.createOrder = exports.deleteTable = exports.updateTable = exports.createTable = exports.getTables = exports.deleteFloor = exports.updateFloor = exports.createFloor = exports.getFloors = void 0;
const Restaurant_1 = require("../models/Restaurant");
// --- Floos ---
const getFloors = (req, res) => __awaiter(void 0, void 0, void 0, function* () {
try {
const floors = yield Restaurant_1.Floor.find({});
res.json(floors);
}
catch (error) {
res.status(500).json({ message: 'Error fetching floors', error });
}
});
exports.getFloors = getFloors;
const createFloor = (req, res) => __awaiter(void 0, void 0, void 0, function* () {
try {
const { id, name } = req.body;
const newFloor = new Restaurant_1.Floor({ id, name });
yield newFloor.save();
res.status(201).json(newFloor);
}
catch (error) {
res.status(500).json({ message: 'Error creating floor', error });
}
});
exports.createFloor = createFloor;
const updateFloor = (req, res) => __awaiter(void 0, void 0, void 0, function* () {
try {
const { id } = req.params;
const { name } = req.body;
const updatedFloor = yield Restaurant_1.Floor.findOneAndUpdate({ id: Number(id) }, { name }, { new: true });
res.json(updatedFloor);
}
catch (error) {
res.status(500).json({ message: 'Error updating floor', error });
}
});
exports.updateFloor = updateFloor;
const deleteFloor = (req, res) => __awaiter(void 0, void 0, void 0, function* () {
try {
const { id } = req.params;
yield Restaurant_1.Floor.findOneAndDelete({ id: Number(id) });
// Also delete tables on this floor?
yield Restaurant_1.Table.deleteMany({ floorId: Number(id) });
res.json({ message: 'Floor deleted' });
}
catch (error) {
res.status(500).json({ message: 'Error deleting floor', error });
}
});
exports.deleteFloor = deleteFloor;
// --- Tables ---
const getTables = (req, res) => __awaiter(void 0, void 0, void 0, function* () {
try {
const tables = yield Restaurant_1.Table.find({});
// Map _id to id if frontend needs number id, but frontend seems to use number id.
// We might need to handle the ID difference.
// For simple sync, let's just return what we have.
// Frontend uses number IDs. We should probably stick to number IDs for simplicity if we want to match exactly,
// OR update frontend to use string _id.
// Given existing frontend `initialTables` has `id: number`, I should probably also store `id: number` in TableSchema or just map it.
// Let's modify the response to include `id` as `_id` or just pass `_id`.
// The frontend expects `id`.
// Let's just update the Table Schema to also have a custom `id` field like Floor for consistency with existing frontend logic?
// OR simpler: modify frontend to use _id.
// modifying frontend to use _id is better long term.
// But for now, to minimize friction, I will fetch tables.
res.json(tables);
}
catch (error) {
res.status(500).json({ message: 'Error fetching tables', error });
}
});
exports.getTables = getTables;
const createTable = (req, res) => __awaiter(void 0, void 0, void 0, function* () {
try {
const tableData = req.body;
// if tableData has id, we can store it if we added it to schema.
// Let's assume we want to store everything.
const newTable = new Restaurant_1.Table(tableData);
yield newTable.save();
res.status(201).json(newTable);
}
catch (error) {
res.status(500).json({ message: 'Error creating table', error });
}
});
exports.createTable = createTable;
const updateTable = (req, res) => __awaiter(void 0, void 0, void 0, function* () {
try {
const { id } = req.params;
// This id is likely the Mongoose _id if we switch to it, or our custom id.
// If frontend sends custom id number:
const updates = req.body;
// If we are using custom `id` field:
const updatedTable = yield Restaurant_1.Table.findOneAndUpdate({ id: Number(id) }, updates, { new: true });
// If we use _id:
// const updatedTable = await Table.findByIdAndUpdate(id, updates, { new: true });
res.json(updatedTable);
}
catch (error) {
res.status(500).json({ message: 'Error updating table', error });
}
});
exports.updateTable = updateTable;
const deleteTable = (req, res) => __awaiter(void 0, void 0, void 0, function* () {
try {
const { id } = req.params;
yield Restaurant_1.Table.findOneAndDelete({ id: Number(id) });
res.json({ message: 'Table deleted' });
}
catch (error) {
res.status(500).json({ message: 'Error deleting table', error });
}
});
exports.deleteTable = deleteTable;
// Special batch update for positions if needed, but updateTable works fine.
// --- Orders ---
const Order_1 = __importDefault(require("../models/Order"));
const createOrder = (req, res) => __awaiter(void 0, void 0, void 0, function* () {
try {
const orderData = req.body;
const newOrder = new Order_1.default(orderData);
yield newOrder.save();
res.status(201).json(newOrder);
}
catch (error) {
console.error("Error creating order:", error);
res.status(500).json({ message: 'Error creating order', error });
}
});
exports.createOrder = createOrder;
const getOrders = (req, res) => __awaiter(void 0, void 0, void 0, function* () {
try {
const { tableId, status, active } = req.query;
const query = {};
if (tableId)
query.tableId = Number(tableId);
if (status)
query.status = status;
if (active === 'true')
query.status = { $ne: 'PAID' };
const orders = yield Order_1.default.find(query).sort({ createdAt: -1 });
res.json(orders);
}
catch (error) {
res.status(500).json({ message: 'Error fetching orders', error });
}
});
exports.getOrders = getOrders;
const settleTable = (req, res) => __awaiter(void 0, void 0, void 0, function* () {
try {
const { tableId } = req.params;
const { paymentMethod, newItems, subtotal, tax, serviceCharge, total } = req.body;
if (newItems && newItems.length > 0) {
const closingOrder = new Order_1.default({
tableId: Number(tableId),
tableName: `Table ${tableId}`,
items: newItems,
subtotal,
tax,
serviceCharge,
total,
paymentMethod,
status: 'PAID'
});
yield closingOrder.save();
}
yield Order_1.default.updateMany({ tableId: Number(tableId), status: { $ne: 'PAID' } }, { $set: { status: 'PAID', paymentMethod } });
res.json({ message: 'Table settled' });
}
catch (error) {
console.error("Settle error:", error);
res.status(500).json({ message: 'Error settling table', error });
}
});
exports.settleTable = settleTable;
// Update Order Status
const updateOrderStatus = (req, res) => __awaiter(void 0, void 0, void 0, function* () {
try {
const { id } = req.params;
const { status } = req.body;
const updatedOrder = yield Order_1.default.findByIdAndUpdate(id, { status }, { new: true });
res.json(updatedOrder);
}
catch (error) {
res.status(500).json({ message: 'Error updating order status', error });
}
});
exports.updateOrderStatus = updateOrderStatus;
// Get Kitchen Orders
const getKitchenOrders = (req, res) => __awaiter(void 0, void 0, void 0, function* () {
try {
const orders = yield Order_1.default.find({ status: { $in: ['KITCHEN', 'READY', 'SERVED'] } }).sort({ createdAt: 1 });
res.json(orders);
}
catch (error) {
res.status(500).json({ message: 'Error fetching kitchen orders', error });
}
});
exports.getKitchenOrders = getKitchenOrders;