-
-
Notifications
You must be signed in to change notification settings - Fork 104
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feat/contactus page #404
Feat/contactus page #404
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,84 @@ | ||||||||||||||
const { z } = require("zod"); | ||||||||||||||
const nodemailer = require("nodemailer"); | ||||||||||||||
const logger = require("../utils/logger"); | ||||||||||||||
require("dotenv").config(); | ||||||||||||||
|
||||||||||||||
const requiredEnvVars = ["EMAIL_USER", "EMAIL_PASS"]; | ||||||||||||||
const missingEnvVars = requiredEnvVars.filter((envVar) => !process.env[envVar]); | ||||||||||||||
|
||||||||||||||
if (missingEnvVars.length > 0) { | ||||||||||||||
throw new Error( | ||||||||||||||
`Missing required environment variables: ${missingEnvVars.join(", ")}` | ||||||||||||||
); | ||||||||||||||
} | ||||||||||||||
|
||||||||||||||
// Define the Zod schema for contact form validation | ||||||||||||||
const contactSchema = z.object({ | ||||||||||||||
mail: z.string().email(), | ||||||||||||||
subject: z.string().min(5, "Subject must be at least 5 characters long."), | ||||||||||||||
message: z.string().min(5, "Message must be at least 5 characters long."), | ||||||||||||||
}); | ||||||||||||||
|
||||||||||||||
const createContactUs = async (req, res) => { | ||||||||||||||
const validation = contactSchema.safeParse(req.body); | ||||||||||||||
|
||||||||||||||
if (!validation.success) { | ||||||||||||||
console.error("Error at validation"); | ||||||||||||||
return res.status(400).json({ | ||||||||||||||
status: "error", | ||||||||||||||
errors: validation.error.errors, | ||||||||||||||
}); | ||||||||||||||
} | ||||||||||||||
|
||||||||||||||
const { mail, subject, message } = req.body; | ||||||||||||||
|
||||||||||||||
try { | ||||||||||||||
const transporter = nodemailer.createTransport({ | ||||||||||||||
service: "gmail", | ||||||||||||||
host: "smtp.gmail.com", | ||||||||||||||
port: 587, | ||||||||||||||
secure: false, | ||||||||||||||
auth: { | ||||||||||||||
user: process.env.EMAIL_USER, | ||||||||||||||
pass: process.env.EMAIL_PASS, | ||||||||||||||
}, | ||||||||||||||
tls: { | ||||||||||||||
rejectUnauthorized: false, // Disable strict SSL verification | ||||||||||||||
}, | ||||||||||||||
}); | ||||||||||||||
|
||||||||||||||
const sanitizeInput = (str) => { | ||||||||||||||
return str.replace(/[<>]/g, "").trim(); | ||||||||||||||
}; | ||||||||||||||
|
||||||||||||||
const mailOptions = { | ||||||||||||||
from: `"Contact Form" <${process.env.EMAIL_USER}>`, | ||||||||||||||
replyTo: sanitizeInput(mail), | ||||||||||||||
to: process.env.EMAIL_USER, | ||||||||||||||
subject: sanitizeInput(subject), | ||||||||||||||
text: sanitizeInput(message), | ||||||||||||||
}; | ||||||||||||||
|
||||||||||||||
// Use built-in promise interface | ||||||||||||||
await transporter.sendMail(mailOptions); | ||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Missing success response after sending email After successfully sending the email, the function does not send a response back to the client, which may cause the client to hang or timeout. Apply this diff to send a success response: 63 await transporter.sendMail(mailOptions);
+ res.status(200).json({
+ status: "success",
+ message: "Your message has been sent successfully.",
+ }); 📝 Committable suggestion
Suggested change
|
||||||||||||||
} catch (err) { | ||||||||||||||
logger.error("Validation failed", { | ||||||||||||||
errors: validation.error.errors, | ||||||||||||||
requestId: req.id, | ||||||||||||||
}); | ||||||||||||||
Comment on lines
+65
to
+68
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Incorrect logging of validation errors in error handler In the error handler, logging Consider logging the actual error message instead. Apply this diff to correct the logging: 65 logger.error("Validation failed", {
- errors: validation.error.errors,
+ error: err.message,
requestId: req.id,
});
|
||||||||||||||
|
||||||||||||||
const statusCode = err.code === "EAUTH" ? 401 : 500; | ||||||||||||||
const errorMessage = | ||||||||||||||
process.env.NODE_ENV === "production" | ||||||||||||||
? "There was an error sending your message. Please try again later." | ||||||||||||||
: err.message; | ||||||||||||||
|
||||||||||||||
res.status(statusCode).json({ | ||||||||||||||
status: "error", | ||||||||||||||
message: errorMessage, | ||||||||||||||
requestId: req.id, | ||||||||||||||
}); | ||||||||||||||
} | ||||||||||||||
}; | ||||||||||||||
|
||||||||||||||
module.exports = { createContactUs }; |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,46 @@ | ||||||||||||||||||||||||||||||||||||||||||||||
const express = require("express"); | ||||||||||||||||||||||||||||||||||||||||||||||
const router = express.Router(); | ||||||||||||||||||||||||||||||||||||||||||||||
const { createContactUs } = require("../controller/contact.controller"); | ||||||||||||||||||||||||||||||||||||||||||||||
const rateLimit = require("express-rate-limit"); | ||||||||||||||||||||||||||||||||||||||||||||||
const { body } = require("express-validator"); | ||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+1
to
+5
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Add missing import for The Add the following import: -const { body } = require("express-validator");
+const { body, validationResult } = require("express-validator"); 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
// Error handling middleware | ||||||||||||||||||||||||||||||||||||||||||||||
router.use((err, req, res, next) => { | ||||||||||||||||||||||||||||||||||||||||||||||
console.error(err.stack); | ||||||||||||||||||||||||||||||||||||||||||||||
const statusCode = err.statusCode || 500; | ||||||||||||||||||||||||||||||||||||||||||||||
const errorType = err.type || "InternalServerError"; | ||||||||||||||||||||||||||||||||||||||||||||||
res.status(500).json({ | ||||||||||||||||||||||||||||||||||||||||||||||
status: "error", | ||||||||||||||||||||||||||||||||||||||||||||||
message: err.message || "An error occurred processing your request", | ||||||||||||||||||||||||||||||||||||||||||||||
type: errorType, | ||||||||||||||||||||||||||||||||||||||||||||||
...(process.env.NODE_ENV === "development" && { stack: err.stack }), | ||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+8
to
+18
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fix inconsistent HTTP status code usage The middleware captures a dynamic Apply this fix: - res.status(500).json({
+ res.status(statusCode).json({ 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
const contactFormLimiter = rateLimit({ | ||||||||||||||||||||||||||||||||||||||||||||||
windowMs: 15 * 60 * 1000, // 15 minutes | ||||||||||||||||||||||||||||||||||||||||||||||
max: 5, // limit each IP to 5 requests per window | ||||||||||||||||||||||||||||||||||||||||||||||
message: { | ||||||||||||||||||||||||||||||||||||||||||||||
status: "error", | ||||||||||||||||||||||||||||||||||||||||||||||
message: "Too many requests, please try again later", | ||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
router.post( | ||||||||||||||||||||||||||||||||||||||||||||||
"/", | ||||||||||||||||||||||||||||||||||||||||||||||
contactFormLimiter, | ||||||||||||||||||||||||||||||||||||||||||||||
[ | ||||||||||||||||||||||||||||||||||||||||||||||
body("email").isEmail().normalizeEmail(), | ||||||||||||||||||||||||||||||||||||||||||||||
body("name").trim().isLength({ min: 2 }).escape(), | ||||||||||||||||||||||||||||||||||||||||||||||
body("message").trim().isLength({ min: 10, max: 1000 }).escape(), | ||||||||||||||||||||||||||||||||||||||||||||||
], | ||||||||||||||||||||||||||||||||||||||||||||||
async (req, res, next) => { | ||||||||||||||||||||||||||||||||||||||||||||||
const errors = validationResult(req); | ||||||||||||||||||||||||||||||||||||||||||||||
if (!errors.isEmpty()) { | ||||||||||||||||||||||||||||||||||||||||||||||
return res.status(400).json({ status: "error", errors: errors.array() }); | ||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||
await createContactUs(req, res, next); | ||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+37
to
+43
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Add proper error handling for async route The async route handler lacks try-catch block for error handling, which could lead to unhandled promise rejections. Implement proper error handling: async (req, res, next) => {
- const errors = validationResult(req);
- if (!errors.isEmpty()) {
- return res.status(400).json({ status: "error", errors: errors.array() });
- }
- await createContactUs(req, res, next);
+ try {
+ const errors = validationResult(req);
+ if (!errors.isEmpty()) {
+ return res.status(400).json({ status: "error", errors: errors.array() });
+ }
+ await createContactUs(req, res, next);
+ } catch (error) {
+ next(error);
+ }
} 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
module.exports = router; | ||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+1
to
+46
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 💡 Codebase verification Add request size limits and CSRF protection The codebase has proper CORS configuration with specific allowed origins, but still needs additional security measures:
Example implementation: app.use(express.json({ limit: '10kb' })); 🔗 Analysis chainConsider adding additional security measures While the current implementation includes rate limiting and input sanitization, consider these security enhancements:
Let's check if CORS is configured in the main app: 🏁 Scripts executedThe following scripts were executed for the analysis: Script: #!/bin/bash
# Search for CORS configuration
rg -l 'cors' --type js
Length of output: 39 Script: #!/bin/bash
# Check the CORS configuration in index.js
rg 'cors' -A 5 -B 5 backend/index.js
Length of output: 1178 Script: #!/bin/bash
# Check for request size limits configuration
rg -i 'limit|bodyparser|express.json' -A 5 -B 5 backend/index.js
# Check for CSRF protection
rg -i 'csrf|csurf' --type js
Length of output: 279 |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -1,57 +1,99 @@ | ||||||||||||||||||||||||||||||||||||||||||||||||||||
const express = require("express"); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
const logger = require("../config/logger"); // Import your Winston logger | ||||||||||||||||||||||||||||||||||||||||||||||||||||
const logger = require("../config/logger"); // Import Winston logger | ||||||||||||||||||||||||||||||||||||||||||||||||||||
require("dotenv").config(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
const config = { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
JWT_SECRET: process.env.JWT_SECRET, | ||||||||||||||||||||||||||||||||||||||||||||||||||||
GOOGLE_CLIENT_ID: process.env.GOOGLE_CLIENT_ID, | ||||||||||||||||||||||||||||||||||||||||||||||||||||
GOOGLE_CLIENT_SECRET: process.env.GOOGLE_CLIENT_SECRET, | ||||||||||||||||||||||||||||||||||||||||||||||||||||
const router = express.Router(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
// Utility function to safely load modules and handle errors | ||||||||||||||||||||||||||||||||||||||||||||||||||||
const safeRequire = (modulePath, fallbackMessage) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
try { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
return require(modulePath); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
} catch (error) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
const errorDetails = { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
module: modulePath.split("/").pop(), | ||||||||||||||||||||||||||||||||||||||||||||||||||||
message: error.message, | ||||||||||||||||||||||||||||||||||||||||||||||||||||
stack: process.env.NODE_ENV === "development" ? error.stack : undefined, | ||||||||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
logger.error("Module loading error:", errorDetails); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
// Return a pre-defined handler to avoid creating closures | ||||||||||||||||||||||||||||||||||||||||||||||||||||
return safeRequire.errorHandler(fallbackMessage); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
const router = express.Router(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
// Pre-defined error handler to avoid creating closures | ||||||||||||||||||||||||||||||||||||||||||||||||||||
safeRequire.errorHandler = (message) => (req, res) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
res.status(503).json({ | ||||||||||||||||||||||||||||||||||||||||||||||||||||
status: "error", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
message: | ||||||||||||||||||||||||||||||||||||||||||||||||||||
process.env.NODE_ENV === "production" | ||||||||||||||||||||||||||||||||||||||||||||||||||||
? message | ||||||||||||||||||||||||||||||||||||||||||||||||||||
: `Service unavailable: ${message}`, | ||||||||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+7
to
+33
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Consider enhancing error handling flexibility. While the
Consider this enhanced implementation: const safeRequire = (modulePath, fallbackMessage) => {
try {
return require(modulePath);
} catch (error) {
const errorDetails = {
module: modulePath.split("/").pop(),
message: error.message,
- stack: process.env.NODE_ENV === "development" ? error.stack : undefined,
+ // Log stack trace but don't include in error details
};
+ if (process.env.NODE_ENV === "development") {
+ logger.debug("Stack trace:", error.stack);
+ }
logger.error("Module loading error:", errorDetails);
return safeRequire.errorHandler(fallbackMessage);
}
};
-safeRequire.errorHandler = (message) => (req, res) => {
+safeRequire.errorHandler = (message, statusCode = 500) => (req, res) => {
res.status(503).json({
status: "error",
message:
process.env.NODE_ENV === "production"
? message
: `Service unavailable: ${message}`,
});
};
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
let feedbackRouter; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
try { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
feedbackRouter = require("./feedbackRouter"); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
} catch (error) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
logger.error("Error loading feedbackRouter:", error); // Log the error with Winston | ||||||||||||||||||||||||||||||||||||||||||||||||||||
feedbackRouter = (req, res) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
res | ||||||||||||||||||||||||||||||||||||||||||||||||||||
.status(500) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
.json({ error: "Feedback functionality is currently unavailable" }); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
let eventRouter; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
try { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
eventRouter = require("./eventRouter"); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
} catch (error) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
logger.error("Error loading eventRouter:", error); // Log the error with Winston | ||||||||||||||||||||||||||||||||||||||||||||||||||||
eventRouter = (req, res) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
res | ||||||||||||||||||||||||||||||||||||||||||||||||||||
.status(500) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
.json({ error: "Event functionality is currently unavailable" }); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||
// Safely load routers with error handling | ||||||||||||||||||||||||||||||||||||||||||||||||||||
const feedbackRouter = safeRequire( | ||||||||||||||||||||||||||||||||||||||||||||||||||||
"./feedbackRouter", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
"Feedback functionality is currently unavailable" | ||||||||||||||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
const contactUsRouter = safeRequire( | ||||||||||||||||||||||||||||||||||||||||||||||||||||
"./contactUsRouter", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
"Contact Us functionality is currently unavailable" | ||||||||||||||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
const eventRouter = safeRequire( | ||||||||||||||||||||||||||||||||||||||||||||||||||||
"./eventRouter", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
"Event functionality is currently unavailable" | ||||||||||||||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
router.get("/", (req, res) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
return res.json({ | ||||||||||||||||||||||||||||||||||||||||||||||||||||
message: "Welcome to the restaurant API!", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
version: "1.0.0", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
endpoints: { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Reservation: "/reservation", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Feedback: "/feedback", // Added feedback endpoint documentation | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Feedback: "/feedback", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||
documentation: "https://api-docs-url.com", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
48
to
60
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Update API documentation to include new endpoints. The API documentation is missing the newly added contact endpoint. Please update the endpoints object to include it. endpoints: {
Reservation: "/reservation",
Feedback: "/feedback",
+ Contact: "/contact",
}, 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
// Authentication routes | ||||||||||||||||||||||||||||||||||||||||||||||||||||
router.use( | ||||||||||||||||||||||||||||||||||||||||||||||||||||
"/admin", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
safeRequire("./adminRouter", "Admin functionality is currently unavailable") | ||||||||||||||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
router.use( | ||||||||||||||||||||||||||||||||||||||||||||||||||||
"/user", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
safeRequire("./customerRouter", "User functionality is currently unavailable") | ||||||||||||||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
router.use( | ||||||||||||||||||||||||||||||||||||||||||||||||||||
"/forgot", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
safeRequire( | ||||||||||||||||||||||||||||||||||||||||||||||||||||
"./forgotRouter", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
"Forgot password functionality is currently unavailable" | ||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
// Core feature routes | ||||||||||||||||||||||||||||||||||||||||||||||||||||
router.use( | ||||||||||||||||||||||||||||||||||||||||||||||||||||
"/reservation", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
safeRequire( | ||||||||||||||||||||||||||||||||||||||||||||||||||||
"./reservationRouter", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
"Reservation functionality is currently unavailable" | ||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
router.use("/event", eventRouter); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
router.use("/admin", require("./adminRouter")); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
// Feedback and communication routes | ||||||||||||||||||||||||||||||||||||||||||||||||||||
router.use("/feedback", feedbackRouter); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
router.use("/user", require("./customerRouter")); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
router.use("/reservation", require("./reservationRouter")); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
router.use("/newsletter", require("./newsletterRoute")); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
router.use("/forgot", require("./forgotRouter")); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
router.use("/contact", contactUsRouter); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
router.use( | ||||||||||||||||||||||||||||||||||||||||||||||||||||
"/newsletter", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
safeRequire( | ||||||||||||||||||||||||||||||||||||||||||||||||||||
"./newsletterRoute", | ||||||||||||||||||||||||||||||||||||||||||||||||||||
"Newsletter functionality is currently unavailable" | ||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+61
to
+97
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 💡 Codebase verification Found validation inconsistency in contact route implementation There are a few issues in the implementation that need to be addressed:
🔗 Analysis chainLGTM! Route organization is clean and consistent. The routes are well-organized into logical groups (authentication, core features, communication) with consistent error handling. The new contact route is properly integrated. Let's verify the contact route implementation: Let me verify the implementation details of these files to ensure everything is properly connected. 🏁 Scripts executedThe following scripts were executed for the analysis: Script: #!/bin/bash
# Verify the contact route implementation and dependencies
# Check if the referenced contact router exists
echo "Checking for contactUsRouter..."
fd -t f "contactUsRouter.js" backend/routes
# Check for the controller implementation
echo "Checking for contact controller..."
fd -t f "contact.controller.js" backend/controller
# Look for contact-related middleware
echo "Checking for validation middleware..."
rg -l "contact.*validation" backend/
Length of output: 486 Script: #!/bin/bash
# Check the implementation of contactUsRouter and its controller
# Check contactUsRouter implementation
echo "=== Contact Router Implementation ==="
cat backend/routes/contactUsRouter.js
# Check controller implementation
echo -e "\n=== Contact Controller Implementation ==="
cat backend/controller/contact.controller.js
# Check for any validation middleware imports
echo -e "\n=== Checking Validation Imports ==="
rg "require.*validation" backend/routes/contactUsRouter.js backend/controller/contact.controller.js
Length of output: 4142 |
||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
module.exports = router; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Use logger instead of console.error for consistent logging
Replace
console.error
withlogger.error
to maintain consistent logging practices throughout the application.Apply this diff: