From 085b29c21634560f1d6079137322923cceb6ea92 Mon Sep 17 00:00:00 2001 From: tiffjai Date: Tue, 27 Aug 2024 15:37:12 +0100 Subject: [PATCH] init with review --- app.js | 1 + controllers/review.js | 41 +++++++++++++++++++++++ models/Review.js | 75 ++++++++++++++++++++++++++++++++++++++++++ routes/reviewRouter.js | 14 ++++++++ 4 files changed, 131 insertions(+) create mode 100644 controllers/review.js create mode 100644 models/Review.js create mode 100644 routes/reviewRouter.js diff --git a/app.js b/app.js index 820dbfa..330f5b9 100644 --- a/app.js +++ b/app.js @@ -7,3 +7,4 @@ app.use(cors()); app.use(express.json()); module.exports = app; + diff --git a/controllers/review.js b/controllers/review.js new file mode 100644 index 0000000..8c18ad8 --- /dev/null +++ b/controllers/review.js @@ -0,0 +1,41 @@ +const Review = require('../models/review'); + +// Create a new review +async function create(req, res) { + try { + const data = req.body; + const newReview = await Review.create(data); // Call the static create method on the Review class + res.status(201).json(newReview); + } catch (err) { + console.error("Error creating review:", err); // Log the error to the console + res.status(400).json({ error: err.message }); + } +} + + +// Get all reviews by user_id +async function show(req, res) { + try { + const userId = parseInt(req.params.user_id); + const reviews = await Review.getByUserId(userId); + res.status(200).json(reviews); + } catch (err) { + res.status(404).json({ error: err.message }); + } +} + +// Delete a review by review_id +async function destroy(req, res) { + try { + const reviewId = parseInt(req.params.review_id); + const review = await Review.getById(reviewId); + await review.destroy(); + res.status(204).end(); + } catch (err) { + res.status(404).json({ error: err.message }); + } +} + +// Export the controller functions +module.exports = { create, show, destroy }; + diff --git a/models/Review.js b/models/Review.js new file mode 100644 index 0000000..0f4cd7b --- /dev/null +++ b/models/Review.js @@ -0,0 +1,75 @@ +const db = require('../db/connect'); + +class Review { + constructor({ review_id, rating, message, user_id, submitted_by }) { + this.review_id = review_id; + this.rating = rating; + this.message = message; + this.user_id = user_id; + this.submitted_by = submitted_by; + } + + // Get all reviews + static async getAll() { + const response = await db.query("SELECT * FROM user_reviews;"); + if (response.rows.length === 0) { + throw new Error("No reviews available."); + } + return response.rows.map(r => new Review(r)); + } + + // Get all reviews by a specific user_id + static async getByUserId(user_id) { + const response = await db.query("SELECT * FROM user_reviews WHERE user_id = $1;", [user_id]); + if (response.rows.length === 0) { + throw new Error("No reviews found for this user."); + } + return response.rows.map(r => new Review(r)); + } + + // Create a new review + static async create(data) { + const { rating, message, user_id, submitted_by } = data; + const response = await db.query( + "INSERT INTO user_reviews (rating, message, user_id, submitted_by) VALUES ($1, $2, $3, $4) RETURNING *;", + [rating, message, user_id, submitted_by] + ); + return new Review(response.rows[0]); + } + + // Update an existing review + async update(data) { + const response = await db.query( + "UPDATE user_reviews SET rating = $1, message = $2 WHERE review_id = $3 RETURNING *;", + [data.rating, data.message, this.review_id] + ); + if (response.rows.length !== 1) { + throw new Error("Unable to update review."); + } + return new Review(response.rows[0]); + } + + // Delete a review by review_id + async destroy() { + const response = await db.query( + "DELETE FROM user_reviews WHERE review_id = $1 RETURNING *;", + [this.review_id] + ); + if (response.rows.length !== 1) { + throw new Error("Unable to delete review."); + } + return new Review(response.rows[0]); + } + + // Get a review by its ID + static async getById(review_id) { + const response = await db.query("SELECT * FROM user_reviews WHERE review_id = $1;", [review_id]); + if (response.rows.length === 0) { + throw new Error("Review not found."); + } + return new Review(response.rows[0]); + } + +} + +module.exports = Review; diff --git a/routes/reviewRouter.js b/routes/reviewRouter.js new file mode 100644 index 0000000..fd5894a --- /dev/null +++ b/routes/reviewRouter.js @@ -0,0 +1,14 @@ +const { Router } = require('express'); +const reviewController = require('../controllers/review'); +const reviewRouter = Router(); + +// Route to create a new review +reviewRouter.post('/', reviewController.create); + +// Route to get all reviews by user_id +reviewRouter.get('/user/:user_id', reviewController.show); + +// Route to delete a review by review_id +reviewRouter.delete('/:review_id', reviewController.destroy); + +module.exports = reviewRouter;