215 lines
8.9 KiB
JavaScript
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;
|