# @landvex/application Application layer — orchestrates domain operations. ## Architecture ``` UI → Application Layer (commands/handlers) → Domain → Repository Interfaces → Adapters ``` **No business logic here. Only orchestration.** ## Commands | Command | Purpose | |---------|---------| | `CreateFieldSessionCommand` | Start a new field session | | `CreateMissionCommand` | Create a mission within a session | | `RegisterArtifactCommand` | Register an artifact | | `CreateObservationCommand` | Create an observation | | `CreateDecisionCaseCommand` | Create a decision case | | `ApproveDecisionCommand` | Approve a decision | | `StartReviewCommand` | Start a review | | `CompleteReviewCommand` | Complete a review | ## Handlers | Handler | Command | Result | |---------|---------|--------| | `CreateFieldSessionHandler` | `CreateFieldSessionCommand` | `Result<{ session }>` | | `CreateMissionHandler` | `CreateMissionCommand` | `Result<{ mission }>` | | `CreateDecisionCaseHandler` | `CreateDecisionCaseCommand` | `Result<{ decisionCase }>` | | `ApproveDecisionHandler` | `ApproveDecisionCommand` | `Result<{ decisionCase }>` | ## Result Pattern ```typescript const result = await handler.execute(command); if (result.success) { // Use result.data } else { // Handle result.error } ``` ## End-to-End Test `use-cases/end-to-end-flow.test.ts` proves the full flow works in memory: ``` CreateFieldSession → CreateMission → CreateDecisionCase → ApproveDecision ``` Without PostgreSQL, Redis, S3, API, HTTP, or UI. ## Dependencies - `@landvex/domain` — domain objects and factories - `@landvex/infrastructure` — repository interfaces and in-memory adapters