Skip to content

Project developed along the book Let's Go, by Alex Edwards.

Notifications You must be signed in to change notification settings

RafaelClaumann/snippetbox

Repository files navigation

Snippetbox

About

Snippetbox is a project developed along with the book "Let's Go" by Alex Edwards. It is a web application built using the Go programming language and follows best practices in web development. The project covers various aspects of building a web application, such as routing, middleware, database integration, and authentication.

Table of Contents

Demo

Features

  • User authentication and authorization
  • Create, view, and manage code snippets
  • Secure password handling
  • Middleware implementation for enhanced functionality
  • Database integration with MySQL
  • Graceful error handling and logging

Installation

To set up Snippetbox locally, follow these steps:

  1. Clone the repository:

    git clone https://github.com/RafaelClaumann/snippetbox.git
    cd snippetbox
  2. Run the MySQL container using Docker Compose:

    Ensure you have Docker and Docker Compose installed on your machine.

    docker-compose up -d

    This command will start the MySQL database in detached mode (-d).

  3. Build and run the application:

    go build ./cmd/web
    ./web
    
    # or
    
    go run ./cmd/web
  4. To run integrated tests you need to create 'test_snippetbox' database:

    CREATE DATABASE test_snippetbox CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  5. Running application tests:

    go test -v ./...

Usage

Once the application is running, you can access it via https://localhost:4000. The following routes are available:

Routes

Method URL Function Description Access
GET / app.home Displays the home page of the application. Public
GET /about app.about Displays the "About" page of the application. Public
GET /snippet/view/:id app.snippetView Displays a specific snippet based on the provided ID in the URL. Public
GET /user/signup app.userSignup Displays the user signup form. Public
POST /user/signup app.userSignupPost Processes the user signup form data. Public
GET /user/login app.userLogin Displays the user login form. Public
POST /user/login app.userLoginPost Processes the user login form data. Public
GET /account/password/update app.updatePassword Displays the form to update the user's password. Protected
POST /account/password/update app.updatePasswordPost Processes the password update form data. Protected
GET /account/view app.accountView Displays the user's account information. Protected
GET /snippet/create app.snippetCreate Displays the form to create a new snippet. Protected
POST /snippet/create app.snippetCreatePost Processes the new snippet creation form data. Protected
POST /user/logout app.userLogoutPost Processes the user logout, ending the session. Protected

Technologies Used

  • Go: The main programming language used for the backend.
  • MySQL: Used for storing user and snippet data.
  • HTML/CSS/JavaScript: For the front-end interface.
  • Docker: To facilitate containerization and deployment.
  • GitHub Actions: To create CI(Continuous Integration).

Contributing

Contributions are welcome! If you have any improvements or new features you'd like to add, please fork the repository, create a new branch, and submit a pull request. Ensure your code follows the existing style and includes tests where appropriate.


For more information, visit the repository on GitHub.

About

Project developed along the book Let's Go, by Alex Edwards.

Topics

Resources

Stars

Watchers

Forks