# API Contracts - Main

This document outlines the API endpoints available in the Pig Farm Controller application.

## Public Routes (No Authentication Required)

| Method | Path                       | Description                               |
| :----- | :------------------------- | :---------------------------------------- |
| POST   | `/api/v1/users`            | User registration                         |
| POST   | `/api/v1/users/login`      | User login                                |
| POST   | `/upstream`                | Handle device upstream events             |
| GET    | `/swagger/*any`            | Swagger UI                                |

## Authenticated Routes (JWT Authentication and Audit Logging Required)

### User Endpoints (`/api/v1/users`)

| Method | Path                               | Description               |
| :----- | :--------------------------------- | :------------------------ |
| POST   | `/api/v1/users/:id/notifications/test` | Send test notification    |

### Device Endpoints (`/api/v1/devices`)

| Method | Path                               | Description               |
| :----- | :--------------------------------- | :------------------------ |
| POST   | `/api/v1/devices`                  | Create device             |
| GET    | `/api/v1/devices`                  | List devices              |
| GET    | `/api/v1/devices/:id`              | Get single device         |
| PUT    | `/api/v1/devices/:id`              | Update device             |
| DELETE | `/api/v1/devices/:id`              | Delete device             |
| POST   | `/api/v1/devices/manual-control/:id` | Manual control device     |

### Area Controller Endpoints (`/api/v1/area-controllers`)

| Method | Path                               | Description               |
| :----- | :--------------------------------- | :------------------------ |
| POST   | `/api/v1/area-controllers`         | Create area controller    |
| GET    | `/api/v1/area-controllers`         | List area controllers     |
| GET    | `/api/v1/area-controllers/:id`     | Get single area controller|
| PUT    | `/api/v1/area-controllers/:id`     | Update area controller    |
| DELETE | `/api/v1/area-controllers/:id`     | Delete area controller    |

### Device Template Endpoints (`/api/v1/device-templates`)

| Method | Path                               | Description               |
| :----- | :--------------------------------- | :------------------------ |
| POST   | `/api/v1/device-templates`         | Create device template    |
| GET    | `/api/v1/device-templates`         | List device templates     |
| GET    | `/api/v1/device-templates/:id`     | Get single device template|
| PUT    | `/api/v1/device-templates/:id`     | Update device template    |
| DELETE | `/api/v1/device-templates/:id`     | Delete device template    |

### Plan Endpoints (`/api/v1/plans`)

| Method | Path                               | Description               |
| :----- | :--------------------------------- | :------------------------ |
| POST   | `/api/v1/plans`                    | Create plan               |
| GET    | `/api/v1/plans`                    | List plans                |
| GET    | `/api/v1/plans/:id`                | Get single plan           |
| PUT    | `/api/v1/plans/:id`                | Update plan               |
| DELETE | `/api/v1/plans/:id`                | Delete plan               |
| POST   | `/api/v1/plans/:id/start`          | Start plan                |
| POST   | `/api/v1/plans/:id/stop`           | Stop plan                 |

### Pig House Endpoints (`/api/v1/pig-houses`)

| Method | Path                               | Description               |
| :----- | :--------------------------------- | :------------------------ |
| POST   | `/api/v1/pig-houses`               | Create pig house          |
| GET    | `/api/v1/pig-houses`               | List pig houses           |
| GET    | `/api/v1/pig-houses/:id`           | Get single pig house      |
| PUT    | `/api/v1/pig-houses/:id`           | Update pig house          |
| DELETE | `/api/v1/pig-houses/:id`           | Delete pig house          |

### Pen Endpoints (`/api/v1/pens`)

| Method | Path                               | Description               |
| :----- | :--------------------------------- | :------------------------ |
| POST   | `/api/v1/pens`                     | Create pen                |
| GET    | `/api/v1/pens`                     | List pens                 |
| GET    | `/api/v1/pens/:id`                 | Get single pen            |
| PUT    | `/api/v1/pens/:id`                 | Update pen                |
| DELETE | `/api/v1/pens/:id`                 | Delete pen                |
| PUT    | `/api/v1/pens/:id/status`          | Update pen status         |

### Pig Batch Endpoints (`/api/v1/pig-batches`)

| Method | Path                                       | Description                       |
| :----- | :----------------------------------------- | :-------------------------------- |
| POST   | `/api/v1/pig-batches`                      | Create pig batch                  |
| GET    | `/api/v1/pig-batches`                      | List pig batches                  |
| GET    | `/api/v1/pig-batches/:id`                  | Get single pig batch              |
| PUT    | `/api/v1/pig-batches/:id`                  | Update pig batch                  |
| DELETE | `/api/v1/pig-batches/:id`                  | Delete pig batch                  |
| POST   | `/api/v1/pig-batches/assign-pens/:id`      | Assign empty pens to batch        |
| POST   | `/api/v1/pig-batches/reclassify-pen/:fromBatchID` | Reclassify pen to new batch       |
| DELETE | `/api/v1/pig-batches/remove-pen/:penID/:batchID` | Remove empty pen from batch       |
| POST   | `/api/v1/pig-batches/move-pigs-into-pen/:id` | Move pigs into pen                |
| POST   | `/api/v1/pig-batches/sell-pigs/:id`        | Sell pigs                         |
| POST   | `/api/v1/pig-batches/buy-pigs/:id`         | Buy pigs                          |
| POST   | `/api/v1/pig-batches/transfer-across-batches/:sourceBatchID` | Transfer pigs across batches      |
| POST   | `/api/v1/pig-batches/transfer-within-batch/:id` | Transfer pigs within batch        |
| POST   | `/api/v1/pig-batches/record-sick-pigs/:id` | Record sick pigs event            |
| POST   | `/api/v1/pig-batches/record-sick-pig-recovery/:id` | Record sick pig recovery event    |
| POST   | `/api/v1/pig-batches/record-sick-pig-death/:id` | Record sick pig death event       |
| POST   | `/api/v1/pig-batches/record-sick-pig-cull/:id` | Record sick pig cull event        |
| POST   | `/api/v1/pig-batches/record-death/:id`     | Record normal pig death event     |
| POST   | `/api/v1/pig-batches/record-cull/:id`      | Record normal pig cull event      |

### Monitor Endpoints (`/api/v1/monitor`)

| Method | Path                               | Description               |
| :----- | :--------------------------------- | :------------------------ |
| GET    | `/api/v1/monitor/sensor-data`      | List sensor data          |
| GET    | `/api/v1/monitor/device-command-logs` | List device command logs  |
| GET    | `/api/v1/monitor/plan-execution-logs` | List plan execution logs  |
| GET    | `/api/v1/monitor/task-execution-logs` | List task execution logs  |
| GET    | `/api/v1/monitor/pending-collections` | List pending collections  |
| GET    | `/api/v1/monitor/user-action-logs` | List user action logs     |
| GET    | `/api/v1/monitor/raw-material-purchases` | List raw material purchases |
| GET    | `/api/v1/monitor/raw-material-stock-logs` | List raw material stock logs |
| GET    | `/api/v1/monitor/feed-usage-records` | List feed usage records   |
| GET    | `/api/v1/monitor/medication-logs`  | List medication logs      |
| GET    | `/api/v1/monitor/pig-batch-logs`   | List pig batch logs       |
| GET    | `/api/v1/monitor/weighing-batches` | List weighing batches     |
| GET    | `/api/v1/monitor/weighing-records` | List weighing records     |
| GET    | `/api/v1/monitor/pig-transfer-logs` | List pig transfer logs    |
| GET    | `/api/v1/monitor/pig-sick-logs`    | List pig sick logs        |
| GET    | `/api/v1/monitor/pig-purchases`    | List pig purchases        |
| GET    | `/api/v1/monitor/pig-sales`        | List pig sales            |
| GET    | `/api/v1/monitor/notifications`    | List notifications        |
