forked from pedroavpereira/bookswap-api
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
131 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -7,3 +7,4 @@ app.use(cors()); | |
app.use(express.json()); | ||
|
||
module.exports = app; | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 }; | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; |