From 86c044058e0d1532f610cba4e579e82b461c2d58 Mon Sep 17 00:00:00 2001 From: N Nixon Date: Tue, 7 Jan 2025 13:55:44 -0500 Subject: [PATCH 01/11] get all company reviews #52 --- server/controllers/company.js | 15 ------ server/controllers/reviews.js | 90 +++++++---------------------------- server/routes/reviews.js | 20 +++----- 3 files changed, 23 insertions(+), 102 deletions(-) diff --git a/server/controllers/company.js b/server/controllers/company.js index 0b1facf..e69de29 100644 --- a/server/controllers/company.js +++ b/server/controllers/company.js @@ -1,15 +0,0 @@ -import Company from '../models/Company.js' - -const companyController = { - getAllCompanies: async (req, res, next) => { - try { - const companies = await Company.find({}) - console.log(companies) - res.json({ companies }) - } catch (error) { - next(error) - } - }, -} - -export default companyController diff --git a/server/controllers/reviews.js b/server/controllers/reviews.js index 0212bbd..385cb02 100644 --- a/server/controllers/reviews.js +++ b/server/controllers/reviews.js @@ -1,78 +1,22 @@ -const cloudinary = require('../middleware/cloudinary') -const Review = require('../models/Reviews') +const cloudinary = require("../middleware/cloudinary"); +const Review = require("../models/Reviews"); + const reviewController = { - getProfile: async (req, res) => { - try { - const posts = await Post.find({ user: req.user.id }) - res.render('profile.ejs', { posts: posts, user: req.user }) - } catch (err) { - console.log(err) - } - }, - getFeed: async (req, res) => { - try { - const posts = await Post.find().sort({ createdAt: 'desc' }).lean() - res.render('feed.ejs', { posts: posts }) - } catch (err) { - console.log(err) - } - }, - getPost: async (req, res) => { - try { - const post = await Post.findById(req.params.id) - res.render('post.ejs', { post: post, user: req.user }) - } catch (err) { - console.log(err) - } - }, - createPost: async (req, res) => { - try { - // Upload image to cloudinary - const result = await cloudinary.uploader.upload(req.file.path) + getAllCompanyReviews: async (req, res, next) => { + try { + //maybe need the company id and review id + //const { companyId } = req.params; + //get all reviews + const reviews = await Review.find({}) + console.log(reviews) + //display it in the componet for the reviews + res.json(reviews); // Send reviews as JSON response + } catch (error) { + next(error) + } + } - await Post.create({ - title: req.body.title, - image: result.secure_url, - cloudinaryId: result.public_id, - caption: req.body.caption, - likes: 0, - user: req.user.id, - }) - console.log('Post has been added!') - res.redirect('/profile') - } catch (err) { - console.log(err) - } - }, - likePost: async (req, res) => { - try { - await Post.findOneAndUpdate( - { _id: req.params.id }, - { - $inc: { likes: 1 }, - }, - ) - console.log('Likes +1') - res.redirect(`/post/${req.params.id}`) - } catch (err) { - console.log(err) - } - }, - deletePost: async (req, res) => { - try { - // Find post by id - let post = await Post.findById({ _id: req.params.id }) - // Delete image from cloudinary - await cloudinary.uploader.destroy(post.cloudinaryId) - // Delete post from db - await Post.remove({ _id: req.params.id }) - console.log('Deleted Post') - res.redirect('/profile') - } catch (err) { - res.redirect('/profile') - } - }, -} + } export default reviewController diff --git a/server/routes/reviews.js b/server/routes/reviews.js index 0ef5a4a..03eb4a0 100644 --- a/server/routes/reviews.js +++ b/server/routes/reviews.js @@ -1,17 +1,9 @@ -import express from 'express' -const reviewRouter = express.Router() -// const upload = require("../middleware/multer"); -// const postsController = require("../controllers/posts"); -// const { ensureAuth, ensureGuest } = require("../middleware/auth"); +import express from 'express'; +const reviewRouter = express.Router(); +const reviewsController = require('../controllers/reviews') -//Post Routes - simplified for now -// router.get("/:id", ensureAuth, postsController.getPost); +//ensure they are logged in aka clerk +reviewRouter.get('/allCompanyReviews', reviewsController.getAllCompanyReviews) -// router.post("/createPost", upload.single("file"), postsController.createPost); -// router.put("/likePost/:id", postsController.likePost); - -// router.delete("/deletePost/:id", postsController.deletePost); - -// module.exports = router; -export default reviewRouter +export default reviewRouter; From f04ee69ff19f601a08111d9a31d1991bdcc8c505 Mon Sep 17 00:00:00 2001 From: Nagiyd Date: Mon, 6 Jan 2025 17:13:29 -0500 Subject: [PATCH 02/11] "#46 initial commit to personal branch" --- server/controllers/company.js | 104 ++++++++++++++++++++++++++++++++++ server/routes/company.js | 5 +- 2 files changed, 108 insertions(+), 1 deletion(-) diff --git a/server/controllers/company.js b/server/controllers/company.js index e69de29..ff3a45e 100644 --- a/server/controllers/company.js +++ b/server/controllers/company.js @@ -0,0 +1,104 @@ +import Company from '../models/Company.js' + +const companyController = { + //fetches all companies: + getAllCompanies: async (req, res, next) => { + try { + const companies = await Company.find({}) + console.log(companies) + res.json({ companies }) + } catch (error) { + next(error) + } + }, + + //fetches a specfic company (and all of its data): + getCompany: async (req, res, next) => { + try { + const { id } = req.params // Get the company ID from the route parameters + const company = await Company.findById(id).populate('reviews') // Fetch company and populate reviews + + if (!company) { + return res.status(404).json({ message: 'Company not found' }) + } + + res.status(200).json(company) + } catch (error) { + next(error) + } + }, + + // fetches top 5 companies from DB with the highest review scores: + getBestCompanies: async (req, res, next) => { + try { + const companies = await Company.aggregate([ + { + //Joins the reviews collection with the Company collection + stores the matching documents in the 'reviewsData' array. + + $lookup: { + from: 'reviews', // Collection that we want data to join + localField: 'reviews', //first field in the current collection + foreignField: '_id', // Other field in the other collection + as: 'reviewsData', // New array field that is storing the joined data + }, + }, + { + $addFields: { + averageRating: { $avg: '$reviewsData.companyCulture' }, // Calculate the average rating + }, + }, + { + $sort: { averageRating: -1 }, // Sort by averageRating in descending order + }, + { + $limit: 5, // Limits to top 5 companies + }, + ]) + + res.status(200).json(companies) + } catch (error) { + next(error) + } + }, + + //Fetches 5 worst companies, sorted in ascending order + getWorstCompanies: async (req, res, next) => { + try { + const companies = await Company.aggregate([ + { + //Joins the reviews collection with the Company collection + stores the matching documents in the 'reviewsData' array. + + $lookup: { + from: 'reviews', // Collection that we want data to join + localField: 'reviews', //first field in the current collection + foreignField: '_id', // Other field in the other collection + as: 'reviewsData', // New array field that is storing the joined data + }, + }, + { + $addFields: { + averageRating: { $avg: '$reviewsData.companyCulture' }, // Calculate the average rating + }, + }, + { + $sort: { averageRating: 1 }, // Sort by averageRating in ascending order + }, + { + $limit: 5, // Limit to bottom 5 companies + }, + ]) + + res.status(200).json(companies) + } catch (error) { + next(error) + } + }, +} + +export default companyController + +// considerations: + +// do we want to add the ability to limit the number of results that return when a user searches for all companies? + +// Should we add query params so that we can filter through specfic companies returned based on specific atributes? diff --git a/server/routes/company.js b/server/routes/company.js index 6b7533f..bab0b65 100644 --- a/server/routes/company.js +++ b/server/routes/company.js @@ -2,6 +2,9 @@ import express from 'express' const companyRouter = express.Router() import companyController from '../controllers/company.js' -companyRouter.get('/', companyController.getAllCompanies) +companyRouter.get('/', companyController.getAllCompanies) // GET /company +companyRouter.get('/:id', companyController.getCompany) // GET /company/:id +companyRouter.get('/best', companyController.getBestCompanies) // GET /company/best +companyRouter.get('/worst', companyController.getWorstCompanies) // GET /company/worst export default companyRouter From fb59eddf8f21abc9b22943c4f931660045361684 Mon Sep 17 00:00:00 2001 From: Nagiyd Date: Tue, 7 Jan 2025 12:43:31 -0500 Subject: [PATCH 03/11] #46 updates to company controller and routes --- README.md | 26 ++++++++++++++++++++++++++ server/config/database.js | 4 ++++ 2 files changed, 30 insertions(+) diff --git a/README.md b/README.md index d3057f2..cba6d50 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,16 @@ +<<<<<<< HEAD # Kinfolx ## An app that allows you rate companies based on their diversity & company culture. +======= +Kinfolx: An app that allows you rate companies based on their diversity & company culture. + +Make sure to use npm install to install all Dependencies. +>>>>>>> 3ddd9d9 (company controller updates) View our app live : https://kinfolx-production.up.railway.app/ +<<<<<<< HEAD ## Instructions to run the code locally Make sure to use `npm install` to install all Dependencies. @@ -32,6 +39,25 @@ npm run dev The backend server is loading from `http://localhost:3000` ### Environment Variables +======= +1. Start the backend server: + +```bash +cd server +npm i +npm run dev +``` + +2. Start the frontend server: + +```bash +npm i +npm run dev +``` + +3. Open your browser and go to `http://localhost:5173` + The backend server is loading from `http://localhost:3000` +>>>>>>> 3ddd9d9 (company controller updates) One ENV goes inside of the config file inside the server and the other ENV is in the root diff --git a/server/config/database.js b/server/config/database.js index b7c6669..558fc2a 100644 --- a/server/config/database.js +++ b/server/config/database.js @@ -10,4 +10,8 @@ const connectDB = async () => { process.exit(1) } } +<<<<<<< HEAD export default connectDB +======= +export default connectDB +>>>>>>> 4d73f27 (#46) From a059cf1c0ef82d99f5c64cb7b4f642b4534f66af Mon Sep 17 00:00:00 2001 From: Nagiyd Date: Tue, 7 Jan 2025 10:54:58 -0500 Subject: [PATCH 04/11] #46 added psuedocode to controller --- server/controllers/company.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/controllers/company.js b/server/controllers/company.js index ff3a45e..2610e0b 100644 --- a/server/controllers/company.js +++ b/server/controllers/company.js @@ -1,7 +1,7 @@ import Company from '../models/Company.js' const companyController = { - //fetches all companies: + //fetches all companies: MIGHT NOT WORK WITHOUT FRONT END? getAllCompanies: async (req, res, next) => { try { const companies = await Company.find({}) @@ -61,7 +61,7 @@ const companyController = { } }, - //Fetches 5 worst companies, sorted in ascending order + //Fetches 5 worst companies, sorted in ascending order using mongoDB getWorstCompanies: async (req, res, next) => { try { const companies = await Company.aggregate([ From 2664d4d55141ead54f910ab3ce4594e219c1b12b Mon Sep 17 00:00:00 2001 From: Nagiyd Date: Tue, 7 Jan 2025 11:07:30 -0500 Subject: [PATCH 05/11] #46 updated branch name --- server/config/database.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/server/config/database.js b/server/config/database.js index 558fc2a..b7c6669 100644 --- a/server/config/database.js +++ b/server/config/database.js @@ -10,8 +10,4 @@ const connectDB = async () => { process.exit(1) } } -<<<<<<< HEAD export default connectDB -======= -export default connectDB ->>>>>>> 4d73f27 (#46) From 64ac389434702d824ec23ee260895dfb2c5dcbc1 Mon Sep 17 00:00:00 2001 From: Zaria Hallager <120356303+ZariaHallager@users.noreply.github.com> Date: Tue, 7 Jan 2025 14:49:09 -0500 Subject: [PATCH 06/11] Update README.md --- README.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/README.md b/README.md index cba6d50..108f08b 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,13 @@ -<<<<<<< HEAD # Kinfolx ## An app that allows you rate companies based on their diversity & company culture. -======= + Kinfolx: An app that allows you rate companies based on their diversity & company culture. Make sure to use npm install to install all Dependencies. ->>>>>>> 3ddd9d9 (company controller updates) View our app live : https://kinfolx-production.up.railway.app/ -<<<<<<< HEAD ## Instructions to run the code locally Make sure to use `npm install` to install all Dependencies. From 41f28da85cb13095bd47e5f9e64ca64e3d9f7602 Mon Sep 17 00:00:00 2001 From: N Nixon Date: Tue, 7 Jan 2025 18:13:31 -0500 Subject: [PATCH 07/11] get all company reviews #52 --- server/controllers/reviews.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/controllers/reviews.js b/server/controllers/reviews.js index 385cb02..3085784 100644 --- a/server/controllers/reviews.js +++ b/server/controllers/reviews.js @@ -10,7 +10,7 @@ const reviewController = { //get all reviews const reviews = await Review.find({}) console.log(reviews) - //display it in the componet for the reviews + //display it in the feed componet for the reviews res.json(reviews); // Send reviews as JSON response } catch (error) { next(error) From 9ce214211ba546b1fa1e66a5b8f6d72af117cdfc Mon Sep 17 00:00:00 2001 From: Niya Nixon Date: Tue, 7 Jan 2025 18:55:56 -0500 Subject: [PATCH 08/11] rebased with recent PR #52 --- server/controllers/reviews.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/controllers/reviews.js b/server/controllers/reviews.js index 3085784..848906d 100644 --- a/server/controllers/reviews.js +++ b/server/controllers/reviews.js @@ -10,7 +10,7 @@ const reviewController = { //get all reviews const reviews = await Review.find({}) console.log(reviews) - //display it in the feed componet for the reviews + //display it in the feed component for the reviews res.json(reviews); // Send reviews as JSON response } catch (error) { next(error) From 0d7f4e0ab0d81dc82d6a5c10b9f4d049ac95d07a Mon Sep 17 00:00:00 2001 From: TayunCodes Date: Tue, 7 Jan 2025 22:03:03 -0500 Subject: [PATCH 09/11] Merged README.md conflics --- README.md | 26 +------------------------- 1 file changed, 1 insertion(+), 25 deletions(-) diff --git a/README.md b/README.md index 108f08b..5abe647 100644 --- a/README.md +++ b/README.md @@ -2,10 +2,6 @@ ## An app that allows you rate companies based on their diversity & company culture. -Kinfolx: An app that allows you rate companies based on their diversity & company culture. - -Make sure to use npm install to install all Dependencies. - View our app live : https://kinfolx-production.up.railway.app/ ## Instructions to run the code locally @@ -36,26 +32,6 @@ npm run dev The backend server is loading from `http://localhost:3000` ### Environment Variables -======= -1. Start the backend server: - -```bash -cd server -npm i -npm run dev -``` - -2. Start the frontend server: - -```bash -npm i -npm run dev -``` - -3. Open your browser and go to `http://localhost:5173` - The backend server is loading from `http://localhost:3000` ->>>>>>> 3ddd9d9 (company controller updates) - One ENV goes inside of the config file inside the server and the other ENV is in the root ``` @@ -65,4 +41,4 @@ CLERK_SECRET_KEY=clerk_secret_key_here CLERK_PUBLISHABLE_KEY=clerk_publishable_key_here ``` -Front end needs "VITE\_" prefixing all keys +Front end needs "VITE_" prefixing all keys From 14643aee6394ae20cf313847019b1a604b9dbe9a Mon Sep 17 00:00:00 2001 From: TayunCodes Date: Tue, 7 Jan 2025 22:04:13 -0500 Subject: [PATCH 10/11] Update reviews.js es6 import syntax --- server/controllers/reviews.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/controllers/reviews.js b/server/controllers/reviews.js index 848906d..e36c1a8 100644 --- a/server/controllers/reviews.js +++ b/server/controllers/reviews.js @@ -1,5 +1,5 @@ -const cloudinary = require("../middleware/cloudinary"); -const Review = require("../models/Reviews"); +// import cloudinary from "../middleware/cloudinary"; +import Review from "../models/Reviews.js"; const reviewController = { From 7b7e0fec2e67f1a995e6e154ddc9179d93e127ea Mon Sep 17 00:00:00 2001 From: TayunCodes Date: Tue, 7 Jan 2025 22:04:59 -0500 Subject: [PATCH 11/11] Update reviews.js es6 import syntax --- server/routes/reviews.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/routes/reviews.js b/server/routes/reviews.js index 03eb4a0..3b5c2f6 100644 --- a/server/routes/reviews.js +++ b/server/routes/reviews.js @@ -1,6 +1,6 @@ import express from 'express'; const reviewRouter = express.Router(); -const reviewsController = require('../controllers/reviews') +import reviewsController from '../controllers/reviews' //ensure they are logged in aka clerk reviewRouter.get('/allCompanyReviews', reviewsController.getAllCompanyReviews)