# Boxes API

## Overview

This is a back-end application written in Go that provides an API for managing boxes and items stored within those boxes. It uses SQLite3 as its database and supports JWT-based authentication.

## Features

- **Box Management:** Create, retrieve, and delete boxes.
- **Item Management:** Add, retrieve, update, and delete items within boxes.
- **Image Storage:** Store images associated with items.
- **JWT Authentication:** Secure API access with JSON Web Tokens.
- **Configuration:** Manage settings via a `config.yaml` file.
- **Logging:** Logs user logins and box/item actions to a file.

## API Documentation

See the [API Specification](api_specification.md) for detailed information on endpoints, request/response formats, and authentication.

## Getting Started

1. **Clone the repository:**

   ```bash

   git clone https://github.com/your-username/boxes-api.git

   ```

2. Configuration:

    - Create a config.yaml file in the project root directory.
    - Refer to the config.yaml.example file for available settings.

3. Database Setup:

    - The database will be automatically created if it doesn't exist.
    - Configure the database path in the config.yaml file.

4. Running the Application:

    - Build and run the Go application:

   ```bash

   go run boxes-api .

   ```

5. Run the test script:

   ``` bash

   ./tests.bash

   ```

## Podman Support

Build the podman image:

   ```bash

   podman build -t boxes-api  .

   ```

Run the podman container:

   ```bash

   podman run  \       
     -e CONFIG="/app/config/config.yaml" \
     -v /Users/stwhite/CODE/boxes/data:/app/data \
     -v /Users/stwhite/CODE/boxes/images:/app/images \
     -v /Users/stwhite/CODE/boxes/config:/app/config \
     -p 8080:8080 \
     --name boxes-api-container \
     localhost/boxes-api
     
     ```
