# Software Requirements Specification

This document outlines the functional and non-functional requirements for the project, mapped to the V-Model testing strategy.

| ID | Description | Type (Attribute) | Level | Linked Test Case |
|----|-------------|------------------|-------|-------------------|
| **MOD-GO-CORE** | Drone event backend must persist location events and support "Time Travel" queries (snapshot at specific timestamp). | Functional (Verification) | Component | `TestIngestAndSnapshot` |
| **MOD-GO-VAL** | The API must enforce strict input validation, rejecting malformed JSON or missing query parameters with `400 Bad Request`. | Robustness (Verification) | Unit | `TestIngestBadJSON` `TestSnapshotMissingTime` |
| **MOD-GO-OPS** | The service must provide health probes and support graceful shutdown to prevent data corruption during updates. | Operational | System | `TestHealth` `TestGracefulShutdown` |
| **REST-API-GEO** | The API must expose geospatial utilities (distance, proximity) strictly conforming to the JSON contract. | Functional (Contract) | Integration | `ApiControllerTest.java` |
| **REST-API-VAL** | REST endpoints must validate input semantic correctness (e.g., valid coordinates) and reject malformed JSON with 400. | Robustness (Verification) | Unit | `ApiControllerTest.java` (Error paths) |
| **REST-API-DRONE** | The API must expose drone query endpoints conforming to the specified JSON contract. | Functional | Integration | `DroneControllerTest.java` |
| **REST-ALG-PATH** | Pathfinding algorithm must generate valid flight paths within battery budget, ensuring return-to-base actions. | Functional (Verification) | Unit | `PathFinderServiceTest.java` |
| **REST-DATA-INT** | System must output flight paths in a simplified format for frontend compatibility. | Interoperability | Unit | `PathFinderServiceTest.java` |
| **REST-ALG-GEO** | GPS calculation module must accurately compute Euclidean distances with **1e-9 measurable precision**. | Measurable Quality | Unit | `GpsCalculationServiceTest.java` |
| **REST-EXT-INT** | System must integrate with external Drone Info API, gracefully handling network failures (Reliability). | Reliability (Robustness) | Unit (Mocked) | `DroneInfoServiceTest.java` |
| **REST-LOGIC-FIL** | Business logic must filter available drones based on dynamic requirements and service availability. | Functional | Unit | `DroneInfoServiceTest.java` |
| **REST-SYS-OPS** | The service must have an observable endpoint to verify system availability (Liveness/Readiness). | Operational | System | `ActuatorHealthTest.java` |
| **REST-SYS-E2E** | **Validation:** The system must successfully process a complete request lifecycle from ingestion to retrieval (User Journey). | User Need (Validation) | System | `ilp-cw-api/**/*.bru` |
| **FRONTEND-UI-UX** | **Validation:** The Svelte UI must provide visual feedback (spinners/toasts) during asynchronous processing. | Usability (Qualitative) | System | *Manual* |

**Notes:**
* All requirements with ID `MOD-GO-*` are located in `drone-black-box/main_test.go`.
* All requirements with ID `REST-*` target the core Spring Boot application.
