Boxes-api is an api server for a box management program.
Go to file
Steve White 188f09e5fe Fixed so that go serves static REACT files as well 2024-10-23 12:47:16 -05:00
config Fixed so that go serves static REACT files as well 2024-10-23 12:47:16 -05:00
data Removed DB from git and updated .gitignore again 2024-10-06 14:30:16 -05:00
scripts changed api endpoints to include /api/v1 for proxy magic 2024-10-21 11:28:30 -05:00
.gitignore Fixed so that go serves static REACT files as well 2024-10-23 12:47:16 -05:00
API_Ref.md working on updating items' box id 2024-10-14 08:20:04 -05:00
ApplicationDescription.md Initial commit 2024-10-08 17:50:10 -05:00
Dockerfile working on updating items' box id 2024-10-14 08:20:04 -05:00
README.md Updating readme 2024-10-15 17:37:16 -05:00
admin.go Encrypt passwords in the database 2024-10-17 10:03:07 -05:00
api_reference.md working on updating items' box id 2024-10-14 08:20:04 -05:00
api_specification.md Minor changes 2024-10-11 10:43:23 -05:00
boxes-api Updated to tests.bash, moved config.yaml to config/config.yaml for docker mount in /app/config/config.yaml 2024-10-07 10:28:16 -05:00
config.go Fixed so that go serves static REACT files as well 2024-10-23 12:47:16 -05:00
db.go enabled sqlite3 auto_vacuum 2024-10-17 10:07:12 -05:00
go.mod Encrypt passwords in the database 2024-10-17 10:03:07 -05:00
go.sum Encrypt passwords in the database 2024-10-17 10:03:07 -05:00
handlers.go Encrypt passwords in the database 2024-10-17 10:03:07 -05:00
main.go Fixed so that go serves static REACT files as well 2024-10-23 12:47:16 -05:00

README.md

Box and Item Management API

This project is a backend API built using Go, designed for managing boxes and the items stored in those boxes. The application is containerized using Docker and uses SQLite3 for data storage. It also supports JWT-based authentication and logs various activities such as logins and box/item operations.

Features

  • Manage boxes and items stored within them.
  • JWT-based authentication.
  • Automatic database creation if it doesn't exist.
  • Configurable using a config.yaml file.
  • Logs logins, box/item creation, and deletion.
  • Image upload and storage support for items.
  • Containerized using Docker.

Tech Stack

  • Language: Go
  • Database: SQLite3
  • Authentication: JWT
  • Containerization: Docker

API Endpoints

Authentication

  • POST /login
    Authenticates a user and returns a JWT.

Boxes

  • GET /boxes
    Retrieves all boxes.
  • POST /boxes
    Creates a new box.
  • DELETE /boxes/{id}
    Deletes a box by its ID.
  • GET /boxes/{id}/items
    Retrieves all items in a box by its ID.

Items

  • GET /items
    Retrieves all items, optionally searchable by description.
  • POST /items
    Adds a new item to a box.
  • GET /items/{id}
    Retrieves an item by its ID.
  • PUT /items/{id}
    Updates an existing item.
  • DELETE /items/{id}
    Deletes an item by its ID.
  • GET /items/{id}/image
    Retrieves the image of an item.
  • POST /items/{id}/upload
    Uploads an image for an item.

Configuration

The application uses a config.yaml file to manage configuration settings, such as:

database_path: "./data/database.db"
jwt_secret: "your_jwt_secret"
log_file: "./logs/app.log"
image_storage_directory: "./images"

Setup and Running

Prerequisites

  • Docker
  • Go (if running locally)
  • SQLite3

Running with Docker

  1. Build the Docker image:

    docker build -t box-management-api .
    
  2. Run the Docker container:

    docker run -p 8080:8080 box-management-api
    

Running Locally

  1. Clone the repository:

    git clone https://github.com/your-repo/box-management-api.git
    cd box-management-api
    
  2. Build the Go application:

    go build -o main .
    
  3. Run the application:

    ./main
    

Database Schema

The application creates the following SQLite3 tables:

  • boxes: Contains id (int) and name (text).
  • items: Contains id (int), name (text), description (text), box_id (int), and image_path (text).
  • users: Contains id (int), username (text), and password (hashed).

Authentication API

The API uses JWT-based authentication. A default user is created on startup:

  • Username: boxuser
  • Password: boxuser

Logs

The following events are logged to the file specified in the configuration:

  • User logins
  • Box creation/deletion
  • Item creation/deletion

License

This project is licensed under the MIT License.