Files
boc/packages/application/README.md
T

61 lines
1.7 KiB
Markdown
Raw Normal View History

# @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