The one-stop portal for Lambda graduates looking for company information in the quest for a job.
- View and post interview reviews
- View and post salary reviews
- View and post work culture reviews
To get the server running locally:
- Clone this repo
- npm install to install all required dependencies
- npm run server to start the local server
- npm test to start server using testing environment
- npm run migrate to migrate the tables
- npm run seed to seed the tables
- npm run rollback to rollback all tables
NodeJS - is a JavaScript runtime built on Chrome's V8 JavaScript engine.
The Express.js backend framework was used to build the server. Fast, unopinionated, minimalist web framework for Node.js
Sentry - An exception monitoring tool used to track and resolve errors with the app.
- Express is fast.
- Express is efficient.
- Express is scalable.
- Express is a lightweight framework.
Linter
- ESLint - The pluggable linting utility for JavaScript and JSX
Test Tools
The API endpoints for the server is on Heroku and can be found here.
Method | Endpoint | Access Control | Description |
---|---|---|---|
POST | /users/ |
all users | Adds a new user if user doesn't exist. |
GET | /users/:id |
all users | Returns info for a user. |
PATCH | /users/:id |
all users | Edits information for a user. |
GET | /users/:id/logout |
all users | Logs out a user by deleting cookies. |
{
id int [pk, increment]
full_name varchar
username varchar
email_address varchar
password varchar
is_employed varchar
is_email_verified boolean
is_admin boolean [default: false]
profile_picture varchar
created_at timestamp
}
URL: https://lambdadoor.herokuapp.com/users
Returns: An object containing the user credentials.
Input
{
"slack_id": "slack_id",
"name": "name",
"email_address": "email_address",
"img_72": "image_url"
}
{
"id": 16,
"full_name": "name",
"slack_id": "slack_id",
"username": "name",
"email_address": "email_address",
"profile_picture": "image_url",
"location": null,
"longitude": null,
"latitude": null,
"created_at": null,
"updated_at": null
}
URL: https://lambdadoor.herokuapp.com/users/16
Returns: An array containing an object which holds the users credentials.
Input
{
"location": "earth"
}
Returns
[
{
id: 16,
full_name: 'name',
slack_id: 'slack_id',
username: 'name',
email_address: 'email_address',
profile_picture: 'image_url',
location: 'earth',
longitude: null,
latitude: null,
created_at: null,
updated_at: null,
},
];
URL: https://lambdadoor.herokuapp.com/users/16
Returns: An object with the user details
Returns
{
"id": 16,
"full_name": "name",
"slack_id": "slack_id",
"username": "name",
"email_address": "email_address",
"profile_picture": "image_url",
"location": "earth",
"longitude": null,
"latitude": null,
"created_at": null,
"updated_at": null
}
Method | Endpoint | Access Control | Description |
---|---|---|---|
POST | /interests/ |
all users | Adds an interest to a users list of interests. |
DELETE | /interests/ |
all users | Returns a message after successful deletion. |
GET | /interests/ |
all users | Returns an array of all interest in the DB. |
GET | /interests/:id/ |
all users | returns an object of a chosen interest |
GET | /interests/ui/:id/ |
all users | returns an object of a user interest with the id |
GET | /interests/user/:id/ |
all users | returns an array of all interest of the user |
URL: https://lambdadoor.herokuapp.com/interests
Returns: An Array with interest listed in the database
Returns
[
{
id: 1,
interest: 'AI Engineer',
},
{
id: 2,
interest: 'Front End',
},
{
id: 3,
interest: 'Back End',
},
{
id: 4,
interest: 'Full Stack',
},
{
id: 5,
interest: 'Data Science',
},
{
id: 6,
interest: 'Machine Learning',
},
{
id: 7,
interest: 'User Experience',
},
];
URL: https://lambdadoor.herokuapp.com/interests/:id
Returns: An object of a chosen interest.
{
"id": 8,
"interest": "Mobile Development"
}
URL: https://lambdadoor.herokuapp.com/interests/user/:id
Returns: An array of all interest of the user .
[
{
id: 1,
interest: 'AI Engineer',
user_id: 2,
},
{
id: 2,
interest: 'Front End',
user_id: 2,
},
{
id: 3,
interest: 'Back End',
user_id: 2,
},
];
URL: https://lambdadoor.herokuapp.com/interests/ui/:id
Returns: An object of interest with the name of the interest and the interest id linked to the user.
{
"id": 7,
"interest_id": 2,
"interest": "Front End",
"user_id": 3
}
URL: https://lambdadoor.herokuapp.com/interests/
Reaturn: An array of the users intersts along with the new addition.
Input
{
"interest_id": "9",
"user_id": 4
}
Output
[
{
id: 8,
interest: 'AI Engineer',
user_id: 4,
},
{
id: 12,
interest: 'Product Manager',
user_id: 4,
},
];
URL: https://lambdadoor.herokuapp.com/interests/
Reaturn: A message os successful deletion along with an an object of the deleted interest.
{
"message": "Successfully Deleted",
"deleted": {
"id": 3,
"interest_id": 3,
"interest": "Back End",
"user_id": 2
}
}
Method | Endpoint | Access Control | Description |
---|---|---|---|
GET | /companies/ |
all users | Returns all companies in the db. |
GET | /companies/top |
all users | Returns 10 top rated companies. |
GET | /companies/:id/closest |
all users | Returns the closest companies to the user's location. |
GET | /companies/:id |
all users | Returns a company by company ID. |
POST | /companies/ |
all users | Adds a single company to the db |
PATCH | /companies/:id/ |
admin | Edits Company info |
{
id int [pk, increment]
name varchar
website varchar
location varchar
latitude numeric
longitude numeric
type varchar
description varchar
logo varchar
created_at timestamp
}
URL: _https://lambdadoor.herokuapp.com/companies
Returns: An array of companies in the db with their details and average rating
Returns
[
{
"id": 1,
"name": "Accenture",
"website": "www.accenture.com.",
"location": "Atlanta, GA",
"type": "Business",
"logo": "",
"description": "",
"created_at": null,
"updated_at": null,
"latitude": 33.7537,
"longitude": -85,
"average_rating": "4.00000000000000000000"
},
...
]
URL: _https://lambdadoor.herokuapp.com/companies/top
Returns: An array of the five top-rated companies in the db and their average rating
Returns
[
{
"id": 5,
"name": "DoNotPay Inc",
"description": "",
"average_rating": "5.0000000000000000"
},
...
]
URL: _https://lambdadoor.herokuapp.com/companies/:id/closest
Returns: An array of the closest companies to the user's location
Returns
[
{
"id": 2,
"name": "Anthem, Inc.",
"website": "https://www.antheminc.com",
"description": "",
"latitude": 33.8,
"longitude": -84.5
},
...
]
URL: https://lambdadoor.herokuapp.com/companies/1
Returns: An object which holds the company details and average rating
Returns
{
"id": 1,
"name": "Accenture",
"description": "",
"website": "www.accenture.com.",
"location": "Atlanta, GA",
"type": "Business",
"logo": "",
"latitude": 33.7537,
"longitude": -85,
"average_rating": "4.5000000000000000"
}
URL: https://lambdadoor.herokuapp.com/companies/1 Headers : passcode = process.env.ADMIN_PREVILEGE_TOKEN
Returns: An object which holds the company details and average rating
Returns
{
"id": 1,
"name": "Accenture",
"description": "",
"website": "www.accenture.com.",
"location": "Atlanta, GA",
"type": "Business",
"logo": "",
"latitude": 33.7537,
"longitude": -85,
"average_rating": "4.5000000000000000"
}
URL: _https://lambdadoor.herokuapp.com/companies/
Returns: An object containing the company that was posted
Input
{
"name": 'Accenture',
'website': 'www.accenture.com.',
'location': 'Atlanta, GA',
'longitude': -85.0,
'latitude': 33.7537,
'type': 'Business',
'logo': '',
'description': '',
}
Returns
{
"id": 1,
"name": 'Accenture',
'website': 'www.accenture.com.',
'location': 'Atlanta, GA',
'longitude': -85.0,
'latitude': 33.7537,
'type': 'Business',
'logo': '',
'description': '',
}
Method | Endpoint | Access Control | Description |
---|---|---|---|
GET | /companyreviews/user/:id |
all users | Returns all of the user's reviews. |
GET | /companyreviews/:id |
all users | Returns the selected review. |
DELETE | /companyreviews/:id |
all users | Deletes the selected review. |
PATCH | /companyreviews/:id |
all users | Updates the selected review. |
POST | /companyreviews/:id |
all users | Add a new review. |
GET | /companyreviews/reviews/:id |
all users | An array of a selected company's various reviews |
{
id int [pk, increment]
user_id int
company_id int
ratings int
is_currently_employed boolean
review_headline varchar
pros varchar
cons varchar
is_accepting_questions boolean
created_at timestamp
updated_at timestamp
}
URL: https://lambdadoor.herokuapp.com/companyreviews/user/:id
Returns: An array of the user's reviews
Returns
[
{
id: 3,
user_id: 3,
company_id: 1,
ratings: 5,
is_currently_employed: true,
review_headline: 'Flexible Working Hours and Great Benefits.',
pros: 'They care about you',
cons: "There aren't many opportunities to progress your career",
is_accepting_questions: true,
created_at: null,
updated_at: null,
},
];
URL: https://lambdadoor.herokuapp.com/companyreviews/:id
Returns: The selected review.
Returns
[
{
id: 3,
user_id: 3,
company_id: 1,
ratings: 5,
is_currently_employed: true,
review_headline: 'Flexible Working Hours and Great Benefits.',
pros: 'They care about you.',
cons: "There aren't many opportunities to progress your career.",
is_accepting_questions: true,
created_at: null,
updated_at: null,
},
];
URL: https://lambdadoor.herokuapp.com/companyreviews/:id
Returns: The updated review.
[
{
id: 3,
user_id: 3,
company_id: 1,
ratings: 5,
is_currently_employed: true,
review_headline: 'Flexible Working Hours and Great Benefits.',
pros: 'They care about you. The pay is good.',
cons: "There aren't many opportunities to progress your career.",
is_accepting_questions: false,
created_at: null,
updated_at: null,
},
];
URL: https://lambdadoor.herokuapp.com/companyreviews/:id
Returns: A 204 status
URL: https://lambdadoor.herokuapp.com/companyreviews/:id
Returns: A 201 status and The added Review
[
{
id: 3,
user_id: 3,
company_id: 1,
ratings: 5,
is_currently_employed: true,
review_headline: 'Flexible Working Hours and Great Benefits.',
pros: 'They care about you. The pay is good.',
cons: "There aren't many opportunities to progress your career.",
is_accepting_questions: false,
created_at: date,
updated_at: null,
},
];
URL: _https://lambdadoor.herokuapp.com/companyreviews/reviews/:id
Returns: An array of a selected company's various reviews.
Returns
[
{
id: 3,
ratings: 5,
review_headline: 'Flexible Working Hours and Great Benefits.',
review: 'They care about you',
name: 'Accenture',
company_id: 1,
is_accepting_questions: true,
full_name: 'Victor Aworo',
user_id: 3,
email_address: 'vic@lambdaschool.com',
},
{
id: 4,
ratings: 4,
review_headline: 'Very good',
review: 'I work in Accenture',
name: 'Accenture',
company_id: 1,
is_accepting_questions: false,
full_name: 'Emily Abrahart',
user_id: 4,
email_address: 'emily@lambdaschool.com',
},
];
Method | Endpoint | Access Control | Description |
---|---|---|---|
GET | /salaryreviews |
all users | Returns all of the salary reviews. |
GET | /salaryreviews/user/:id |
all users | Returns all of the user's salary reviews. |
GET | /salaryreviews/:id |
all users | Returns the selected review. |
GET | /salaryreviews/avg/:id |
all users | Returns the average salaries by company id |
DELETE | /salaryreviews/:id |
all users | Deletes the selected review. |
PATCH | /salaryreviews/:id |
all users | Updates the selected review. |
POST | /salaryreviews/ |
all users | Add a new review. |
GET | /salaryreviews/reviews/:id |
all users | Returns a single company's various salary reviews. |
URL: https://lambdadoor.herokuapp.com/salaryreviews
Returns: An array of all salary reviews
Returns
[
{
id: 1,
user_id: 1,
company_id: 1,
text: null,
company_name: 'Accenture',
description: 'Software Engineer',
salary: 95000,
currency: 'USD',
is_accepting_questions: false,
is_anonymous: false,
job_title: 'Accenture Programmer',
interest_id: 2,
},
];
URL: https://lambdadoor.herokuapp.com/salaryreviews/user/:id
Returns: An array of the user's salary reviews
Returns
[
{
id: 1,
company_id: 1,
description: 'Software Engineer',
salary: 95000,
currency: 'USD',
interest: 'Front End',
'i.id': 2,
is_accepting_questions: false,
is_current_employee: false,
name: 'Accenture',
},
];
URL: https://lambdadoor.herokuapp.com/salaryreviews/:id
Returns: The selected salary review.
Returns
[
{
id: 1,
company_id: 1,
description: 'Software Engineer',
salary: 95000,
currency: 'USD',
interest: 'Front End',
'i.id': 2,
is_accepting_questions: false,
is_current_employee: false,
name: 'Accenture',
},
];
URL: https://lambdadoor.herokuapp.com/salaryreviews/avg/:id
Returns: An array of the average salaries within the company
Returns
[
{
interest_id: 2,
interest: 'Front End',
currency: 'USD',
avg: 95000,
},
{
interest_id: 4,
interest: 'Full Stack',
currency: 'USD',
avg: 67500,
},
];
URL: https://lambdadoor.herokuapp.com/salaryreviews/:id
Returns: The updated salary review.
[
{
id: 3,
description: 'Junior Data scientist',
salary: '3000000',
currency: 'NGN',
interest_id: 2,
},
];
URL: https://lambdadoor.herokuapp.com/salaryreviews/:id
Returns: A 204 status
URL: _https://lambdadoor.herokuapp.com/salaryreviews/
Returns: A 201 status and The added Review
[
{
id: 9,
description: 'Junior Data scientist',
salary: '3000000',
currency: 'NGN',
interest_id: 2,
},
];
URL: _https://lambdadoor.herokuapp.com/salaryreviews/reviews/:id
Returns: An array of a single company's various salary reviews.
Returns
[
{
id: 1,
description: 'Software Engineer',
salary: 95000,
currency: 'USD',
interest_id: 2,
interest: 'Front End',
name: 'Accenture',
is_accepting_questions: false,
is_anonymous: false,
email_address: 'lisa@lambdaschool.com',
},
{
id: 6,
description: 'Backend Engineer',
salary: 85000,
currency: 'USD',
interest_id: 4,
interest: 'Full Stack',
name: 'Accenture',
is_accepting_questions: true,
is_anonymous: null,
email_address: 'emily@lambdaschool.com',
},
];
Method | Endpoint | Access Control | Description |
---|---|---|---|
GET | /interviewreview/user/:id |
all users | Returns all of the user's interview reviews. |
GET | /interviewreview/:id |
all users | Returns the selected review. |
DELETE | /interviewreview/:id |
all users | Deletes the selected review. |
PATCH | /interviewreview/:id |
all users | Updates the selected review. |
POST | /interviewreview/ |
all users | Add a new review. |
GET | /interviewreview/reviews/:id |
all users | Returns a single company's various interview reviews. |
URL: https://lambdadoor.herokuapp.com/interviewreviews/user/:id
Returns: An array of the user's interview reviews
Returns
[
{
id: 2,
text:
'Very pleasant recruiters. First a phone interview that took about 15 minutes. Followed by two Skype interviews; first with a recruiter after that with a manager.Basic trouble shooting questions. They want to really get to know you as a person. Just be yourself and do not be afraid to be geeky/nerdy! Make sure you have a desk and dedicated home phone line.',
user_id: 2,
is_accepting_questions: false,
is_current_employee: false,
job_title: null,
company_id: 5,
name: 'DoNotPay Inc',
interest: 'Data Science',
},
];
URL: https://lambdadoor.herokuapp.com/interviewreviews/:id
Returns: The selected interview review.
Returns
{
"id": 2,
"text": "Very pleasant recruiters. First a phone interview that took about 15 minutes. Followed by two Skype interviews; first with a recruiter after that with a manager.Basic trouble shooting questions. They want to really get to know you as a person. Just be yourself and do not be afraid to be geeky/nerdy! Make sure you have a desk and dedicated home phone line.",
"user_id": 2,
"company_id": 5,
"is_accepting_questions": false,
"is_current_employee": false,
"job_title": null,
"name": "DoNotPay Inc",
"full_name": "Chioma Nkem-Eze",
"email_address": "chioma@lambdaschool.com",
"interest": "Data Science"
}
URL: https://lambdadoor.herokuapp.com/interviewreviews/:id
Returns: The updated interview review.
"id": 2,
"text": "Very pleasant recruiters. First a phone interview that took about 15 minutes. Followed by two Skype interviews; first with a recruiter after that with a manager.Basic trouble shooting questions. They want to really get to know you as a person. Just be yourself and do not be afraid to be geeky/nerdy! Make sure you have a desk and dedicated home phone line.",
"user_id": 2,
"company_id": 5,
"is_accepting_questions": true,
"is_current_employee": true,
"job_title": "Software Engineer",
"name": "DoNotPay Inc",
"full_name": "Chioma Nkem-Eze",
"email_address": "chioma@lambdaschool.com",
"interest": "Frontend"
URL: https://lambdadoor.herokuapp.com/interviewreviews/:id
Returns: A 204 status
URL: _https://lambdadoor.herokuapp.com/interviewreviews/
Returns: A 201 status and The added Review
{
"id": 6,
"text": "Six rounds of phone/tech interviews over a long time period. It seemed a bit scattered and could have been way more efficient. I felt like some of the interviews got repetitive.",
"user_id": 1,
"name": "Accenture"
}
URL: _https://lambdadoor.herokuapp.com/interviewreviews/reviews/:id
Returns: An array of a single company along with its various interview reviews.
Returns
[
{
id: 1,
text:
'Six rounds of phone/tech interviews over a long time period. It seemed a bit scattered and could have been way more efficient. I felt like some of the interviews got repetitive.',
user_id: 4,
company_id: 1,
job_title: null,
is_accepting_questions: true,
is_current_employee: false,
name: 'Accenture',
full_name: 'Emily Abrahart',
email_address: 'emily@lambdaschool.com',
interest: 'Front End',
},
{
id: 1,
text:
'Six rounds of phone/tech interviews over a long time period. It seemed a bit scattered and could have been way more efficient. I felt like some of the interviews got repetitive.',
user_id: 4,
company_id: 1,
job_title: null,
is_accepting_questions: true,
is_current_employee: false,
name: 'Accenture',
full_name: 'Emily Abrahart',
email_address: 'mato@lambdaschool.com',
interest: 'BackEnd',
},
];
Method | Endpoint | Access Control | Description |
---|---|---|---|
GET | /dataDisplay |
all users | Returns an Array of reviewed Job roles. |
URL: https://lambdadoor.herokuapp.com/dataDisplay
Returns: Returns an Array of all salary reviews, grouped by interest.
Returns
[
{
interest: 'Full Stack',
id: 4,
count: '1',
},
{
interest: 'Software Engineer',
id: 1,
count: '3',
},
{
interest: 'Front End',
id: 2,
count: '1',
},
];
Method | Endpoint | Access Control | Description |
---|---|---|---|
POST | /referral |
all users | Returns text that request is successful |
URL: https://lambdadoor.herokuapp.com/referral
Returns: Returns text that request is successful.
Returns
Referral sent successfully!
Method | Endpoint | Access Control | Description |
---|---|---|---|
GET | /search/companies?search_query=foo |
all users | Returns company search results by company name or location |
GET | /search/interviews?search_query=foo |
all users | Returns interview review search results by interest, job |
title or location. | |||
GET | /search/salaries?search_query=foo |
all users | Returns salary review search results by interest, job title |
or location. |
URL: https://lambdadoor.herokuapp.com/search/companies?search_query=acc
Returns: Returns an Array of all matching companies.
Returns
[
{
id: 1,
name: 'Accenture',
website: 'www.accenture.com.',
location: 'Atlanta, GA',
longitude: -85,
latitude: 33.7537,
type: 'Business',
logo: '',
description:
'We partner with our clients to drive real innovation—the kind that turns an idea into an industry.',
created_at: null,
updated_at: null,
},
];
URL: https://lambdadoor.herokuapp.com/search/salaries?search_query=dev
Returns: Returns an Array of all matching salary reviews.
Returns
[
{
id: 10,
user_id: 3,
company_id: 10,
text: null,
description:
'Paystack helps businesses in Africa get paid by anyone, anywhere in the world',
interest_id: 1,
salary: 3000000,
currency: 'Nigerian Naira',
is_accepting_questions: true,
is_current_employee: true,
created_at: null,
updated_at: null,
job_title: 'Junior Developer',
is_anonymous: false,
interest: 'Software Engineer',
name: 'Paystack',
website: 'https://paystack.com/',
location: 'Lagos, NG',
longitude: -80,
latitude: 31,
type: 'FinTech',
logo: '',
},
];
URL: https://lambdadoor.herokuapp.com/search/interviews?search_query=san
Returns: Returns an Array of all matching salary reviews.
Returns
[
{
id: 6,
user_id: 3,
company_id: 6,
text:
'There is one phone interview for an hour. If you clear this interview, you will be invited for an onsite interview. There are five interviews onsite, all in one day. Interviews are in a casual environment. After the first two interviews, you take a break and are escorted for lunch.',
created_at: null,
updated_at: null,
is_accepting_questions: false,
is_current_employee: false,
job_title: null,
interest_id: 2,
interest: 'Front End',
name: 'Newfront Insurance',
website: 'https://www.newfrontinsurance.com',
location: 'San Francisco, CA',
longitude: -80,
latitude: 31,
type: 'insurance',
logo: '',
description:
"We're are a modern brokerage innovating on behalf of our client",
},
];
In order for the app to function correctly, the user must set up their own environment variables.
Create a .env file that includes the following:
- PORT - The port the server will start on.
- DATABASE_URL - The PostgreSQL database url.
- ACCESS_TOKEN_SECRET - The test url.
When contributing to this repository, please first discuss the change you wish to make via issue, email, or any other method with the owners of this repository before making a change.
Please note we have a code of conduct. Please follow it in all your interactions with the project.
If you are having an issue with the existing project code, please submit a bug report under the following guidelines:
- Check first to see if your issue has already been reported.
- Check to see if the issue has recently been fixed by attempting to reproduce the issue using the latest master branch in the repository.
- Create a live example of the problem.
- Submit a detailed bug report including your environment & browser, steps to reproduce the issue, actual and expected outcomes, where you believe the issue is originating from, and any potential solutions you have considered.
We would love to hear from you about new features which would improve this app and further the aims of our project. Please provide as much detail and information as possible to show us why you think your new feature should be implemented.
If you have developed a patch, bug fix, or new feature that would improve this app, please submit a pull request. It is best to communicate your ideas with the developers first before investing a great deal of time into a pull request to ensure that it will mesh smoothly with the project.
Remember that this project is licensed under the MIT license, and by submitting a pull request, you agree that your work will be, too.
- Ensure any install or build dependencies are removed before the end of the layer when doing a build.
- Update the README.md with details of changes to the interface, including new plist variables, exposed ports, useful file locations and container parameters.
- Ensure that your code conforms to our existing code conventions and test coverage.
- Include the relevant issue number, if applicable.
- You may merge the Pull Request in once you have the sign-off of two other developers, or if you do not have permission to do that, you may request the second reviewer to merge it for you.
These contribution guidelines have been adapted from this good-Contributing.md-template.
See Frontend Documentation for details on the frontend of our project.