Skip to content

rbarbalat/Gulp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Gulp

Gulp is a soft clone of Yelp. Gulp allows users to create businesses, review the businesses of other users, reply as a business owner to user reviews of your business and favorite individual businesses.

Check out Gulp
Contact me on LinkedIn

Technologies Used

Visual Studio Code JavaScript Python Flask SQLAlchemy React Redux React Router Postgres SQLite HTML5 CSS3 Render Git GitHub Node.js npm Amazon AWS WTForms Werkzeug

Landing Page

Screenshot of the top of Gulp's Landing Page Screenshot of the bottom of Gulp's Landing Page

List of Businesses (portion)

Screenshot of the bottom of Gulp's Landing Page

Individual Business Page (top)

Screenshot of the bottom of Gulp's Landing Page

Individual Business Page (reviews and replies)

Screenshot of the bottom of Gulp's Landing Page

User Profile

Screenshot of the bottom of Gulp's Landing Page

Features

Businesses

  • Users can create businesses.
  • Users can view all of the businesses on the site with multiple sort options.
  • Users can update their business.
  • Users can delete their business.

Reviews

  • Users can review businesses.
  • Users can view all of the reviews of a business with multiple sort options.
  • Users can update their reviews.
  • Users can delete their reviews.

Replies

  • Business owners can reply to individual reviews.
  • Users can view the replies of business owners.
  • Business owners can update their replies.
  • Business owners an delete their replies.

Favorites

  • Users can favorite individual businesses.
  • Users can their favorites on their user profiles and on the individual pages of favorites.
  • Users can unfavorite businesses that they have favorited.

AWS

  • All images are submitted as files and those files are stored in an S3 bucket.

Search and Filter

  • Users can search for businesses by name.
  • Users can filter businesses by tag(s) by searching for particular tags(s).

API

Users

  • GET /api/users/

    • Returns a list of individual users as dictionaries.

      [
        {
          id: integer,
          username: string,
          email: string,
          hashed_password: string,
          url: string,
          created_at: string
        }
      ]
      
  • GET /api/users/:userId

    • Returns the specified user as a dictionary.

      {
        id: integer,
        username: string,
        email: string,
        hashed_password: string,
        url: string,
        created_at: string
      }
      
  • PATCH /api/users/image

    • Updates the logged in user's url (image) and returns the logged in user as a dictionary.

      {
        id: integer,
        username: string,
        email: string,
        hashed_password: string,
        url: string,
        created_at: string
      }
      
  • DELETE /api/users/image

    • Changes the logged in user's url to the default user avatar and returns the logged in user as a dictionary.

      {
        id: integer,
        username: string,
        email: string,
        hashed_password: string,
        url: string,
        created_at: string
      }
      

Auth

  • GET /api/auth/

    • If the user is logged in, a dictionary representing the user is returned.

      {
        id: integer,
        username: string,
        email: string,
        hashed_password: string,
        url: string,
        created_at: string,
        numBusinesses: integer,
        numReviews: integer,
        favorites: [ {} ]
      }
      
  • POST /api/auth/login

    • A logged out user is logged in and a dictionary representing the user is returned.

      {
        id: integer,
        username: string,
        email: string,
        hashed_password: string,
        url: string,
        created_at: string,
        numBusinesses: integer,
        numReviews: integer,
        favorites: [ {} ]
      }
      
  • GET /api/auth/logout

    • The logged in user is logged out and a dictionary representing a successful logout.

      {
        message: 'User logged out'
      }
      
  • POST /api/auth/signup

    • An account is created for the logged out user, the user is logged in and a dictionary representing the new user is returned.

      {
        id: integer,
        username: string,
        email: string,
        hashed_password: string,
        url: string,
        created_at: string,
        numBusinesses: integer,
        numReviews: integer,
        favorites: [ {} ]
      }
      
  • GET /api/auth/unauthorized

    • Returns a dictionary with an errors key when flask-login authentication fails.

      {
        errors: ['Unauthorized']
      }
      

Businesses

  • GET /api/businesses/ (optional query)

    • Returns a list of all the individual businesses as dictionaries on the site.

      [
        {
          id: integer,
          name: string,
          description: string,
          tag_one: string,
          tag_two: string,
          tag_three: string,
          address: string,
          city: string,
          state, string
          owner_id: integer,
          preview_image: string,
          created_at: string,
          updated_at: string,
          images: [ {} ],
          owner: {},
          average: integer,
          numReviews: integer
        }
      ]
      
  • GET /api/businesses/recent/:count

    • Returns a list of the most recently added individual business dictionaries to the site with the route parameter specifying the count.

      [
        {
          id: integer,
          name: string,
          description: string,
          tag_one: string,
          tag_two: string,
          tag_three: string,
          address: string,
          city: string,
          state, string
          owner_id: integer,
          preview_image: string,
          created_at: string,
          updated_at: string,
          images: [ {} ],
          owner: {},
          average: integer,
          numReviews: integer
        }
      ]
      
  • GET /api/businesses/current

    • Returns a list of individual business dictionaries which are owned by the logged in user.

      [
        {
          id: integer,
          name: string,
          description: string,
          tag_one: string,
          tag_two: string,
          tag_three: string,
          address: string,
          city: string,
          state, string
          owner_id: integer,
          preview_image: string,
          created_at: string,
          updated_at: string,
          images: [ {} ],
          owner: {},
          average: integer,
          numReviews: integer
        }
      ]
      
  • GET /api/businesses/:id

    • Returns a dictionary of the businesses with the specified id.

      {
        id: integer,
        name: string,
        description: string,
        address: string,
        city: string,
        state: string,
        owner_id: integer,
        preview_image: string,
        average: integer,
        numReviews: integer,
        tag_one: string,
        tag_two: string,
        tag_three: string,
        created_at: string,
        updated_at: string,
        owner: {},
        images: [ {} ],
        reviewers: [],
        reviews: [ {} ]
      }
      
  • DELETE /api/businesses/:id

    • Deletes the business with the specified id if it exists and returns a dictionary confirming the deletion.

      {
        message: "Successfully deleted the business"
      }
      
  • POST /api/businesses/

    • Creates a new business and returns a dictionary of the new business.

      {
        id: integer,
        name: string,
        description: string,
        address: string,
        city: string,
        state: string,
        owner_id: integer,
        preview_image: string,
        average: integer,
        numReviews: integer,
        tag_one: string,
        tag_two: string,
        tag_three: string,
        created_at: string,
        updated_at: string,
        owner: {},
        images: [ {} ],
        reviews: []
      }
      
  • PUT /api/businesses/:id

    • Edits an existing business and returns a dictionary of the updated business.

      {
        id: integer,
        name: string,
        description: string,
        address: string,
        city: string,
        state: string,
        preview_image: string,
        tag_one: string,
        tag_two: string,
        tag_three: string,
        created_at: string,
        updated_at: string,
        owner: {},
        images: [ {} ],
      }
      
  • DELETE /api/businesses/images/:id

    • Deletes the optional business image with the specified id if it exists and returns a dictionary confirming the deletion.

      {
        message: "Successfully deleted the business image"
      }
      

Reviews

  • GET /api/reviews/current

    • Returns a list of individual review dictionaries associated with the logged in user.

      [
        {
          id: integer,
          review: string,
          rating: integer,
          reviewer_id: integer,
          business_id: string
          created_at: string,
          updated_at: string,
          business: {},
          images: [],
          reviewer: {}
        }
      ]
      
  • GET /api/reviews/:reviewId

    • Returns a dictionary of the specified review.

      {
        id: integer,
        review: string,
        rating: integer,
        reviewer_id: integer,
        business_id: string
        created_at: string,
        updated_at: string,
        business: {},
        images: [],
        reviewer: {}
      }
      
  • POST /api/businesses/:businessId/reviews

    • Creates a new review for the specified business and returns a dictionary of the new review.

      {
        id: integer,
        review: string,
        rating: integer,
        reviewer_id: integer,
        business_id: string
        created_at: string,
        updated_at: string,
        images: [],
        reviewer: {}
      }
      
  • PUT /api/reviews/:reviewId

    • Edits a specified review and returns a dictionary of the review.

      {
        id: integer,
        review: string,
        rating: integer,
        reviewer_id: integer,
        business_id: string
        created_at: string,
        updated_at: string,
        images: []
      }
      
  • DELETE /api/reviews/:id

    • Deletes the review with the specified id if it exists and returns a dictionary confirming the deletion.

      {
        message: "Successfully deleted the review"
      }
      
  • DELETE /api/reviews/images/:id

    • Deletes the optional review image with the specified id if it exists and returns a dictionary confirming the deletion.

      {
        message: "Successfully deleted the review image"
      }
      

Replies

  • POST /api/reviews/:reviewId/replies

    • Creates a new reply for the specified business and returns a dictionary of the new reply.

      {
        id: integer,
        reply: string
        review_id: intger,
        created_at: string,
        updated_at: string
      }
      
  • PUT /api/replies/:replyId

    • Edits a specified reply and returns a dictionary of the reply.

      {
        id: integer,
        reply: string,
        review_id: integer,
        created_at: string,
        updated_at: string
      }
      
  • DELETE /api/replies/:id

    • Deletes the reply with the specified id if it exists and returns a dictionary confirming the deletion.

      {
        message: "Successfully deleted the reply"
      }
      

Favorites

  • GET /api/businesses/current/favorites

    • Returns a list of individual business dictionaries which are favorites of the logged in the user.

      [
        {
          id: integer,
          name: string,
          description: string,
          tag_one: string,
          tag_two: string,
          tag_three: string,
          address: string,
          city: string,
          state, string
          owner_id: integer,
          preview_image: string,
          created_at: string,
          updated_at: string,
          images: [ {} ],
          owner: {},
          average: integer,
          numReviews: integer
        }
      ]
      
  • POST /api/businesses/:businessId/favorites

    • Creates a new favorite between the specified business and the logged in user and returns a dictionary of the new favorite.

      {
        id: integer,
        user_id: integer,
        business_id: string,
        super: boolean
        created_at: string,
        updated_at: string
      }
      
  • DELETE /api/favorites/:favoriteId

    • Deletes the favorite with the specified id if it exists and returns a dictionary confirming the deletion.

      {
        message: "Successfully deleted the favorite"
      }
      

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages