Files
spore-registry/docs/ARCHITECTURE.md
2025-10-27 15:18:55 +01:00

85 lines
2.1 KiB
Markdown

# Architecture
## Overview
The refactored code follows a clean architecture pattern with clear separation of concerns:
### 1. **Models** (`internal/models/`)
- Contains all data structures and types
- `FirmwareMetadata`, `FirmwareRecord`, `GroupedFirmware`, etc.
- Pure data structures with JSON tags
### 2. **Config** (`internal/config/`)
- Configuration management
- Environment variable handling
- Default values and validation
### 3. **Database** (`internal/database/`)
- Database connection management
- Table creation and schema management
- Connection lifecycle handling
### 4. **Repository** (`internal/repository/`)
- Data access layer
- Database operations (CRUD)
- SQL query management
- Data mapping between database and models
### 5. **Storage** (`internal/storage/`)
- File system operations
- Firmware binary storage
- File path management
- File existence checks
### 6. **Service** (`internal/service/`)
- Business logic layer
- Orchestrates repository and storage operations
- Data validation and processing
- Version comparison logic
### 7. **Handlers** (`internal/handlers/`)
- HTTP request handling
- Request/response processing
- Error handling and status codes
- Input validation
### 8. **App** (`internal/app/`)
- Application initialization
- Dependency injection
- Route setup
- Server configuration
### 9. **Main** (`main.go`)
- Entry point
- Minimal and focused
- Error handling and graceful shutdown
## Environment Variables
- `PORT`: Server port (default: 3002)
- `DB_PATH`: Database file path (default: ./registry/registry.db)
- `REGISTRY_PATH`: Firmware storage directory (default: registry)
- `MAX_UPLOAD_SIZE`: Maximum upload size in bytes (default: 32MB)
## API Endpoints
All API endpoints remain the same:
- `POST /firmware` - Upload firmware
- `GET /firmware` - List firmware (with optional filters)
- `GET /firmware/{name}/{version}` - Download firmware
- `PUT /firmware/{name}/{version}` - Update firmware metadata
- `GET /health` - Health check
## Testing
```bash
# Run all tests
go test ./...
# Run tests with coverage
go test -cover ./...
# Run specific test
go test -run TestStoreFirmwareMetadata
```