Skip to content

JavierHernan/airbnb-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

airbnb-api

Database Schema Design

<insert database schema design here>

API Documentation

USER AUTHENTICATION/AUTHORIZATION

All endpoints that require authentication

All endpoints that require a current user to be logged in.

  • Request: endpoints that require authentication
  • Error Response: Require authentication
    • Status Code: 401

    • Headers:

      • Content-Type: application/json
    • Body:

      {
        "message": "Authentication required"
      }

      { "endpoint": "require a current user to be logged in", "request": { "method": "GET", "URL": "/login", } }

All endpoints that require proper authorization

All endpoints that require authentication and the current user does not have the correct role(s) or permission(s).

  • Request: endpoints that require proper authorization

  • Error Response: Require proper authorization

    • Status Code: 403

    • Headers:

      • Content-Type: application/json
    • Body:

      {
        "message": "Forbidden"
      }
      

    { "endpoint": "requires authentification and user does not have correct permissions", "request": { "method": "GET", "URL": "/error"

    } }

Get the Current User

Returns the information about the current user that is logged in.

  • Require Authentication: false

  • Request

    • Method: "GET"
    • URL: "/:current"
    • Route path: /api/session
    • Body: none
  • Successful Response when there is a logged in user

    • Status Code: 200

    • Headers:

      • Content-Type: application/json
    • Body:

      {
        "user": {
          "id": 1,
          "firstName": "John",
          "lastName": "Smith",
          "email": "[email protected]",
          "username": "JohnSmith"
        }
      }
  • Successful Response when there is no logged in user

    • Status Code: 200

    • Headers:

      • Content-Type: application/json
    • Body:

      {
        "user": null
      }

Log In a User

Logs in a current user with valid credentials and returns the current user's information.

  • Require Authentication: false

  • Request

    • Method: "POST"

    • URL: "/session"

    • Route path: /api/session

    • Headers:

      • Content-Type: application/json
    • Body:

      {
        "credential": "[email protected]",
        "password": "secret password"
      }
  • Successful Response

    • Status Code: 200

    • Headers:

      • Content-Type: application/json
    • Body:

      {
        "user": {
          "id": 1,
          "firstName": "John",
          "lastName": "Smith",
          "email": "[email protected]",
          "username": "JohnSmith"
        }
      }
  • Error Response: Invalid credentials

    • Status Code: 401

    • Headers:

      • Content-Type: application/json
    • Body:

      {
        "message": "Invalid credentials"
      }
  • Error response: Body validation errors

    • Status Code: 400

    • Headers:

      • Content-Type: application/json
    • Body:

      {
        "message": "Bad Request", // (or "Validation error" if generated by Sequelize),
        "errors": {
          "credential": "Email or username is required",
          "password": "Password is required"
        }
      }

Sign Up a User

Creates a new user, logs them in as the current user, and returns the current user's information.

  • Require Authentication: false

  • Request

    • Method: "POST"

    • URL: "/users"

    • Route path: /api/users

    • Headers:

      • Content-Type: application/json
    • Body:

      {
        "firstName": "John",
        "lastName": "Smith",
        "email": "[email protected]",
        "username": "JohnSmith",
        "password": "secret password"
      }
  • Successful Response

    • Status Code: 200

    • Headers:

      • Content-Type: application/json
    • Body:

      {
        "user": {
          "id": 1,
          "firstName": "John",
          "lastName": "Smith",
          "email": "[email protected]",
          "username": "JohnSmith"
        }
      }
  • Error response: User already exists with the specified email

    • Status Code: 500

    • Headers:

      • Content-Type: application/json
    • Body:

      {
        "message": "User already exists",
        "errors": {
          "email": "User with that email already exists"
        }
      }
  • Error response: User already exists with the specified username

    • Status Code: 500

    • Headers:

      • Content-Type: application/json
    • Body:

      {
        "message": "User already exists",
        "errors": {
          "username": "User with that username already exists"
        }
      }
  • Error response: Body validation errors

    • Status Code: 400

    • Headers:

      • Content-Type: application/json
    • Body:

      {
        "message": "Bad Request", // (or "Validation error" if generated by Sequelize),
        "errors": {
          "email": "Invalid email",
          "username": "Username is required",
          "firstName": "First Name is required",
          "lastName": "Last Name is required"
        }
      }

SPOTS

Get all Spots

Returns all the spots.

  • Require Authentication: false
  • Request
    • Method: "GET"
    • URL: "/spots"
    • Route path: /api/spots
    • Body: none
  • Successful Response
    • Status Code: 200

    • Headers:

      • Content-Type: application/json
    • Body:

      {
        "Spots": [
          {
            "id": 1,
            "ownerId": 1,
            "address": "123 Disney Lane",
            "city": "San Francisco",
            "state": "California",
            "country": "United States of America",
            "lat": 37.7645358,
            "lng": -122.4730327,
            "name": "App Academy",
            "description": "Place where web developers are created",
            "price": 123,
            "createdAt": "2021-11-19 20:39:36",
            "updatedAt": "2021-11-19 20:39:36",
            "avgRating": 4.5,
            "previewImage": "image url"
          }
        ]
      }

Get all Spots owned by the Current User

Returns all the spots owned (created) by the current user.

  • Require Authentication: true

  • Request

    • Method: "GET"

    • URL: "/spots/:current"

    • Route path: /api/spots/current

    • Body: none

    • Successful Response

      • Status Code: 200

      • Headers:

        • Content-Type: application/json
      • Body:

        {
          "Reviews": [
            {
              "id": 1,
              "userId": 1,
              "spotId": 1,
              "review": "This was an awesome spot!",
              "stars": 5,
              "createdAt": "2021-11-19 20:39:36",
              "updatedAt": "2021-11-19 20:39:36" ,
              "User": {
                "id": 1,
                "firstName": "John",
                "lastName": "Smith"
              },
              "ReviewImages": [
                {
                  "id": 1,
                  "url": "image url"
                }
              ],
            }
          ]
        }
    • Error response: Couldn't find a Spot with the specified id

      • Status Code: 404

      • Headers:

        • Content-Type: application/json
      • Body:

        {
          "message": "Spot couldn't be found"
        }

    Create a Review for a Spot based on the Spot's id

    Create and return a new review for a spot specified by id.

    • Require Authentication: true

    • Request

      • Method: "POST"

      • URL: "/:spot/reviews"

      • Route path: /api/spots/:spotId/reviews

      • Headers:

        • Content-Type: application/json
      • Body:

        {
          "review": "This was an awesome spot!",
          "stars": 5,
        }
    • Successful Response

      • Status Code: 201

      • Headers:

        • Content-Type: application/json
      • Body:

        {
          "id": 1,
          "userId": 1,
          "spotId": 1,
          "review": "This was an awesome spot!",
          "stars": 5,
          "createdAt": "2021-11-19 20:39:36",
          "updatedAt": "2021-11-19 20:39:36"
        }
    • Error Response: Body validation errors

      • Status Code: 400

      • Headers:

        • Content-Type: application/json
      • Body:

        {
          "message": "Bad Request", // (or "Validation error" if generated by Sequelize),
          "errors": {
            "review": "Review text is required",
            "stars": "Stars must be an integer from 1 to 5",
          }
        }
    • Error response: Couldn't find a Spot with the specified id

      • Status Code: 404

      • Headers:

        • Content-Type: application/json
      • Body:

        {
          "message": "Spot couldn't be found"
        }
    • Error response: Review from the current user already exists for the Spot

      • Status Code: 500

      • Headers:

        • Content-Type: application/json
      • Body:

        {
          "message": "User already has a review for this spot"
        }

    Add an Image to a Review based on the Review's id

    Create and return a new image for a review specified by id.

    • Require Authentication: true

    • Require proper authorization: Review must belong to the current user

    • Request

      • Method: "POST"

      • URL: "/:review/images"

      • Route path: /api/reviews/:reviewId/images

      • Headers:

        • Content-Type: application/json
      • Body:

        {
          "url": "image url"
        }

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published