70 lines
1.8 KiB
JavaScript
70 lines
1.8 KiB
JavaScript
const express = require("express");
|
|
const router = express.Router();
|
|
const db = require("../models");
|
|
const {
|
|
validateInput,
|
|
handleValidationErrorForAPI,
|
|
} = require("../services/ValidationService");
|
|
|
|
// Validation rules for booking
|
|
const bookingValidation = {
|
|
name: "required|string",
|
|
email: "required|email",
|
|
company: "required|string",
|
|
phone: "required|string",
|
|
notes: "required|string",
|
|
date: "required|string",
|
|
time: "required|string",
|
|
timezone: "required|string",
|
|
};
|
|
|
|
// POST /api/bookings - Create a new booking
|
|
router.post(
|
|
"/bookings",
|
|
validateInput(bookingValidation, {
|
|
"name.required": "Name is required",
|
|
"email.required": "Email is required",
|
|
"email.email": "Invalid email address",
|
|
"company.required": "Company is required",
|
|
"phone.required": "Phone is required",
|
|
"notes.required": "Notes are required",
|
|
"date.required": "Date is required",
|
|
"time.required": "Time is required",
|
|
"timezone.required": "Timezone is required",
|
|
}),
|
|
handleValidationErrorForAPI,
|
|
async (req, res) => {
|
|
try {
|
|
const { name, email, company, phone, notes, date, time, timezone } =
|
|
req.body;
|
|
const booking = await db.booking.create({
|
|
name,
|
|
email,
|
|
company,
|
|
phone,
|
|
notes,
|
|
date,
|
|
time,
|
|
timezone,
|
|
});
|
|
res.status(201).json({ success: true, booking });
|
|
} catch (err) {
|
|
res.status(500).json({ error: err.message });
|
|
}
|
|
}
|
|
);
|
|
|
|
// GET /api/bookings - List all bookings
|
|
router.get("/bookings", async (req, res) => {
|
|
try {
|
|
const bookings = await db.booking.findAll({
|
|
order: [["created_at", "DESC"]],
|
|
});
|
|
res.json({ bookings });
|
|
} catch (err) {
|
|
res.status(500).json({ error: err.message });
|
|
}
|
|
});
|
|
|
|
module.exports = router;
|