158 lines
3.7 KiB
JavaScript
158 lines
3.7 KiB
JavaScript
const express = require("express");
|
|
const multer = require("multer");
|
|
const { authenticateToken } = require("../middleware/auth");
|
|
const ConditionCheckService = require("../services/conditionCheckService");
|
|
const logger = require("../utils/logger");
|
|
|
|
const router = express.Router();
|
|
|
|
// Configure multer for photo uploads
|
|
const upload = multer({
|
|
dest: "uploads/condition-checks/",
|
|
limits: {
|
|
fileSize: 10 * 1024 * 1024, // 10MB limit
|
|
files: 20, // Maximum 20 files
|
|
},
|
|
fileFilter: (req, file, cb) => {
|
|
// Accept only image files
|
|
if (file.mimetype.startsWith("image/")) {
|
|
cb(null, true);
|
|
} else {
|
|
cb(new Error("Only image files are allowed"), false);
|
|
}
|
|
},
|
|
});
|
|
|
|
// Submit a condition check
|
|
router.post(
|
|
"/:rentalId",
|
|
authenticateToken,
|
|
upload.array("photos"),
|
|
async (req, res) => {
|
|
try {
|
|
const { rentalId } = req.params;
|
|
const { checkType, notes } = req.body;
|
|
const userId = req.user.id;
|
|
|
|
// Get uploaded file paths
|
|
const photos = req.files ? req.files.map((file) => file.path) : [];
|
|
|
|
const conditionCheck = await ConditionCheckService.submitConditionCheck(
|
|
rentalId,
|
|
checkType,
|
|
userId,
|
|
photos,
|
|
notes
|
|
);
|
|
|
|
const reqLogger = logger.withRequestId(req.id);
|
|
reqLogger.info("Condition check submitted", {
|
|
rentalId,
|
|
checkType,
|
|
userId,
|
|
photoCount: photos.length,
|
|
});
|
|
|
|
res.status(201).json({
|
|
success: true,
|
|
conditionCheck,
|
|
});
|
|
} catch (error) {
|
|
const reqLogger = logger.withRequestId(req.id);
|
|
reqLogger.error("Error submitting condition check", {
|
|
error: error.message,
|
|
rentalId: req.params.rentalId,
|
|
userId: req.user?.id,
|
|
});
|
|
|
|
res.status(400).json({
|
|
success: false,
|
|
error: error.message,
|
|
});
|
|
}
|
|
}
|
|
);
|
|
|
|
// Get condition checks for a rental
|
|
router.get("/:rentalId", authenticateToken, async (req, res) => {
|
|
try {
|
|
const { rentalId } = req.params;
|
|
|
|
const conditionChecks = await ConditionCheckService.getConditionChecks(
|
|
rentalId
|
|
);
|
|
|
|
res.json({
|
|
success: true,
|
|
conditionChecks,
|
|
});
|
|
} catch (error) {
|
|
const reqLogger = logger.withRequestId(req.id);
|
|
reqLogger.error("Error fetching condition checks", {
|
|
error: error.message,
|
|
rentalId: req.params.rentalId,
|
|
});
|
|
|
|
res.status(500).json({
|
|
success: false,
|
|
error: "Failed to fetch condition checks",
|
|
});
|
|
}
|
|
});
|
|
|
|
// Get condition check timeline for a rental
|
|
router.get("/:rentalId/timeline", authenticateToken, async (req, res) => {
|
|
try {
|
|
const { rentalId } = req.params;
|
|
|
|
const timeline = await ConditionCheckService.getConditionCheckTimeline(
|
|
rentalId
|
|
);
|
|
|
|
res.json({
|
|
success: true,
|
|
timeline,
|
|
});
|
|
} catch (error) {
|
|
const reqLogger = logger.withRequestId(req.id);
|
|
reqLogger.error("Error fetching condition check timeline", {
|
|
error: error.message,
|
|
rentalId: req.params.rentalId,
|
|
});
|
|
|
|
res.status(500).json({
|
|
success: false,
|
|
error: error.message,
|
|
});
|
|
}
|
|
});
|
|
|
|
// Get available condition checks for current user
|
|
router.get("/", authenticateToken, async (req, res) => {
|
|
try {
|
|
const userId = req.user.id;
|
|
|
|
const availableChecks = await ConditionCheckService.getAvailableChecks(
|
|
userId
|
|
);
|
|
|
|
res.json({
|
|
success: true,
|
|
availableChecks,
|
|
});
|
|
} catch (error) {
|
|
const reqLogger = logger.withRequestId(req.id);
|
|
reqLogger.error("Error fetching available checks", {
|
|
error: error.message,
|
|
userId: req.user?.id,
|
|
});
|
|
|
|
res.status(500).json({
|
|
success: false,
|
|
error: "Failed to fetch available checks",
|
|
});
|
|
}
|
|
});
|
|
|
|
module.exports = router;
|