Skip to content

Commit

Permalink
init with review
Browse files Browse the repository at this point in the history
  • Loading branch information
tiffjai committed Aug 27, 2024
1 parent 454a169 commit 085b29c
Show file tree
Hide file tree
Showing 4 changed files with 131 additions and 0 deletions.
1 change: 1 addition & 0 deletions app.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@ app.use(cors());
app.use(express.json());

module.exports = app;

41 changes: 41 additions & 0 deletions controllers/review.js
Original file line number Diff line number Diff line change
@@ -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 };

75 changes: 75 additions & 0 deletions models/Review.js
Original file line number Diff line number Diff line change
@@ -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;
14 changes: 14 additions & 0 deletions routes/reviewRouter.js
Original file line number Diff line number Diff line change
@@ -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;

0 comments on commit 085b29c

Please sign in to comment.