Skip to content

🔧 On the backend of our Labs project I used Node.js, PostgreSQL and Knex. I was particularly proud of the work I did to enable the search functionality on the app, the endpoints I wrote to provide the frontend with local company recommendations and the endpoint to provide the average user rating of each business.

Notifications You must be signed in to change notification settings

LABS-EU3/lambdaDoor_backend

Repository files navigation

LambdaDoor API

Build Status Coverage Status

About

The one-stop portal for Lambda graduates looking for company information in the quest for a job.

Features

  • View and post interview reviews
  • View and post salary reviews
  • View and post work culture reviews

Application Links

NPM Scripts

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

Technologies

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.

Why Express.js

  • Express is fast.
  • Express is efficient.
  • Express is scalable.
  • Express is a lightweight framework.

Supporting Packages

Linter

  • ESLint - The pluggable linting utility for JavaScript and JSX

Test Tools

  • Jest - Jest is a delightful JavaScript Testing Framework with a focus on simplicity.
  • Supertest

API Documentation

Database Model

Lambda Door Database Illustration

The API endpoints for the server is on Heroku and can be found here.

USERS

User Routes

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
}

Actions

Add a new user [POST]

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
}

Edit User[PATCH]

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,
  },
];

Get a user [GET]

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
}

INTEREST

Interest Routes

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

Get all interests [GET]

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',
  },
];

Actions

Get a single interest by ID [GET]

URL: https://lambdadoor.herokuapp.com/interests/:id

Returns: An object of a chosen interest.

{
    "id": 8,
    "interest": "Mobile Development"
}

Get user's interests [GET]

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,
  },
];

Get interests [GET]

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
}

Post User interest [POST]

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,
  },
];

delete User interest [DELETE]

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
    }
}

COMPANIES

Company Routes

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
}

Actions

Get all companies [GET]

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"
    },

   ...
]

Get top-rated companies [GET]

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"
    },

  ...
]

Get closest companies to the user's location [GET]

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
    },

    ...
]

Get a company by Id [GET]

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"
}

Update a company Info by Id [PATCH]

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"
}

Adds a new Company [POST]

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': '',
}

COMPANY REVIEWS

Company Review Routes

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
}

Actions

Get all of the user's reviews [GET]

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,
  },
];

Get a review by review id [GET]

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,
  },
];

Update an individual review [PATCH]

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,
  },
];

Delete a user's review [DELETE]

URL: https://lambdadoor.herokuapp.com/companyreviews/:id

Returns: A 204 status

Add a user's review [POST]

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,
  },
];

Get a single company's reviews [GET]

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: '[email protected]',
  },
  {
    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: '[email protected]',
  },
];

Salary Review Routes

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.

SALARY REVIEWS


Actions

Get all salary reviews [GET]

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,
  },
];

Get all of the user's salary reviews [GET]

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',
  },
];

Get a salary review by review id [GET]

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',
  },
];

Get the average salaries for job types for a particular company using company id [GET]

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,
  },
];

Update a single review of the user[PATCH]

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,
  },
];

Delete a user's salary review [DELETE]

URL: https://lambdadoor.herokuapp.com/salaryreviews/:id

Returns: A 204 status

Add a user's salary review [POST]

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,
  },
];

Get a company's salary reviews [GET]

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: '[email protected]',
  },
  {
    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: '[email protected]',
  },
];

INTERVIEW REVIEWS

Interview Review Routes

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.

Actions

Get all of the user's interview reviews [GET]

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',
  },
];

Get an interview review by review id [GET]

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": "[email protected]",
    "interest": "Data Science"
}

Update a single review of the user[PATCH]

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": "[email protected]",
    "interest": "Frontend"

Delete a user's interview review [DELETE]

URL: https://lambdadoor.herokuapp.com/interviewreviews/:id

Returns: A 204 status

Add a user's interview review [POST]

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"
}

Get a company with its interview reviews [GET]

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: '[email protected]',
    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: '[email protected]',
    interest: 'BackEnd',
  },
];

DATA VISUALIZATION

Data Visualization Routes

Method Endpoint Access Control Description
GET /dataDisplay all users Returns an Array of reviewed Job roles.

Actions

Get all of the user's reviews [GET]

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',
  },
];

REQUEST REFERRAL

Request Referral Routes

Method Endpoint Access Control Description
POST /referral all users Returns text that request is successful

Actions

Request Refferal [POST]

URL: https://lambdadoor.herokuapp.com/referral

Returns: Returns text that request is successful.

Returns

  Referral sent successfully!

SEARCH

Search Routes

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.

Actions

Search companies [GET]

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,
  },
];

Search salary reviews [GET]

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: '',
  },
];

Search interview reviews [GET]

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",
  },
];

Environment Variables

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.

Contributing

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.

Issue/Bug Request

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.

Feature Requests

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.

Pull Requests

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.

Pull Request Guidelines

  • 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.

Attribution

These contribution guidelines have been adapted from this good-Contributing.md-template.

Documentation

See Frontend Documentation for details on the frontend of our project.

About

🔧 On the backend of our Labs project I used Node.js, PostgreSQL and Knex. I was particularly proud of the work I did to enable the search functionality on the app, the endpoints I wrote to provide the frontend with local company recommendations and the endpoint to provide the average user rating of each business.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published