These files were already out of step with the project's Prettier config before this branch of work; running `pnpm format` finally swept them up. No semantic changes. Kept separate from the functional commits so the reformatting does not bury them in diff noise.
92 lines
4.4 KiB
Markdown
92 lines
4.4 KiB
Markdown
---
|
|
title: Delta Force Guide API
|
|
---
|
|
|
|
## Backend API Overview
|
|
|
|
The backend is a Spring Boot 3 application organised under the base package `com.onixbyte.deltaforceguide`:
|
|
|
|
| Package | Description |
|
|
| ------------- | -------------------------------------------- |
|
|
| `controller` | REST API endpoint controllers |
|
|
| `service` | Business logic layer |
|
|
| `repository` | MyBatis data access layer |
|
|
| `domain` | JPA entity and domain objects |
|
|
| `config` | Spring configuration (security, cache, etc.) |
|
|
| `properties` | Configuration property classes |
|
|
| `enumeration` | Enumerated types |
|
|
| `shared` | Shared utilities |
|
|
|
|
## API Endpoints
|
|
|
|
### Authentication
|
|
|
|
| Method | Path | Description | Auth |
|
|
| ------ | ------------------- | ------------------------ | ---- |
|
|
| `POST` | `/api/auth/login` | Log in with credentials | No |
|
|
| `POST` | `/api/auth/refresh` | Refresh access token | No |
|
|
| `GET` | `/api/auth/profile` | Get current user profile | Yes |
|
|
|
|
### Firearms
|
|
|
|
| Method | Path | Description |
|
|
| -------- | ------------------- | --------------------------------------------- |
|
|
| `GET` | `/api/firearms` | List firearms (paginated, filterable by type) |
|
|
| `GET` | `/api/firearms/:id` | Get firearm by ID |
|
|
| `POST` | `/api/firearms` | Create a new firearm |
|
|
| `PUT` | `/api/firearms/:id` | Update an existing firearm |
|
|
| `DELETE` | `/api/firearms/:id` | Remove a firearm |
|
|
|
|
### Modifications
|
|
|
|
| Method | Path | Description |
|
|
| -------- | --------------------------------- | -------------------------------------------------------------- |
|
|
| `GET` | `/api/modifications` | List modifications (paginated, filterable by firearm and tags) |
|
|
| `GET` | `/api/modifications/:id` | Get modification by ID |
|
|
| `POST` | `/api/modifications` | Create a modification |
|
|
| `POST` | `/api/modifications/batch` | Batch create modifications |
|
|
| `PUT` | `/api/modifications/:id` | Update a modification |
|
|
| `DELETE` | `/api/modifications/:id` | Remove a modification |
|
|
| `DELETE` | `/api/modifications/batch-delete` | Batch remove modifications |
|
|
|
|
### Tags
|
|
|
|
| Method | Path | Description |
|
|
| ------ | ----------- | ------------- |
|
|
| `GET` | `/api/tags` | List all tags |
|
|
|
|
## Frontend Routes
|
|
|
|
| Path | Layout | Page | Description |
|
|
| ------------ | ------------ | ------------------ | ----------------------------- |
|
|
| `/` | Hero Layout | Firearms Browser | Home page — firearm list |
|
|
| `/firearms` | Hero Layout | Firearms Browser | Firearm detail and search |
|
|
| `/mod-codes` | Hero Layout | Modification Codes | Modification code library |
|
|
| `/legal` | Hero Layout | Legal | Legal and privacy information |
|
|
| `/login` | Empty Layout | Login | User authentication page |
|
|
|
|
## Frontend State Management
|
|
|
|
Redux Toolkit with Redux Persist manages:
|
|
|
|
- **Auth state** — Access tokens, refresh tokens, user profile
|
|
- **Settings state** — User preferences persisted to local storage
|
|
|
|
## API Client
|
|
|
|
The frontend uses a shared `WebClient` wrapper around Axios that handles:
|
|
|
|
- Base URL configuration (pointing to the backend API)
|
|
- JWT access token injection via request interceptors
|
|
- Automatic token refresh on 401 responses
|
|
|
|
## Infrastructure
|
|
|
|
| Component | Technology |
|
|
| ---------------- | ----------------------------------- |
|
|
| Database | PostgreSQL (with Flyway migrations) |
|
|
| Cache | Redis (session/token storage) |
|
|
| File Storage | AWS S3 (firearm images) |
|
|
| Containerisation | Docker |
|
|
| Deployment | Docker Compose behind Nginx |
|