Steve White 63dce0b348 | ||
---|---|---|
config | ||
data | ||
scripts | ||
.gitignore | ||
API_Ref.md | ||
ApplicationDescription.md | ||
Dockerfile | ||
README.md | ||
api_reference.md | ||
api_specification.md | ||
boxes-api | ||
config.go | ||
db.go | ||
go.mod | ||
go.sum | ||
handlers.go | ||
main.go |
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"
The server also expects the CONFIG environment variable to be set. e.g. export CONFIG=config/config.yaml
.
Setup and Running
Prerequisites
- Docker
- Go (if running locally)
- SQLite3
Running with Docker
-
Build the Docker image:
docker build -t box-management-api .
-
Run the Docker container:
docker run -p 8080:8080 box-management-api
Running Locally
-
Clone the repository:
git clone https://github.com/your-repo/box-management-api.git cd box-management-api
-
Build the Go application:
go build -o main .
-
Run the application:
./main
Database Schema
The application creates the following SQLite3 tables:
boxes
: Containsid
(int) andname
(text).items
: Containsid
(int),name
(text),description
(text),box_id
(int), andimage_path
(text).users
: Containsid
(int),username
(text), andpassword
(hashed).
Authentication
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.