chore: remove sample portfolio module

This commit is contained in:
DongHyeonka
2026-08-13 21:47:15 +09:00
parent e552e317d6
commit 697fc740e6
321 changed files with 190 additions and 18961 deletions
+3 -4
View File
@@ -212,15 +212,14 @@ The read side has two equally-valid shapes; pick per read, do not force one:
| Shape | Returns | When | How |
|---|---|---|---|
| **Through-aggregate** (default for simple reads) | domain aggregate via a `*Repository` port | read shape == write aggregate **and** the aggregate is the minimal invariant boundary (no lazy collections needed) | `QueryUseCase` → repository port → `WorkLog` |
| **Projection (CQRS-lite)** | application-layer projection DTO via a `*QueryPort` | read shape ≠ write, or to skip aggregate hydration / lazy-collection joins | `QueryUseCase``*QueryPort``WorkLogSummary` (record); query via JPQL `SELECT new` / JdbcTemplate |
| **Through-aggregate** (default for simple reads) | domain aggregate via a `*Repository` port | read shape == write aggregate **and** the aggregate is the minimal invariant boundary (no lazy collections needed) | `QueryUseCase` → repository port → aggregate |
| **Projection (CQRS-lite)** | application-layer projection DTO via a `*QueryPort` | read shape ≠ write, or to skip aggregate hydration / lazy-collection joins | `QueryUseCase``*QueryPort`summary record; query via JPQL `SELECT new` / JdbcTemplate |
- **D1 — purity guardrail (core, machine-enforced):** a read port whose simple name ends
with `QueryPort` MUST return application-layer projection DTOs only — never a domain
aggregate, JPA entity, or web type, **including through generic type arguments**
(`List<DomainType>`). Enforced by ArchUnit `query_ports_do_not_leak_domain_jpa_or_web_types`.
Projection usage itself is **opt-in**, not a forced default; the demo lives in
`sample-portfolio` (`WorkLogSummaryQueryPort` / `WorkLogSummary`).
Projection usage itself is **opt-in**, not a forced default.
- **D3 — Strict ceremony:** every read goes through a `QueryUseCase` bean. There is no thin
web→read-port path — that would bypass the mandatory `@UseCaseCapability` fitness function.
- **D4 — transaction:** reads default to `TransactionPort.inRead`. A no-tx (autocommit) read
@@ -11,7 +11,7 @@ import java.util.Optional;
*
* <p><strong>Legacy compatibility only.</strong> This contract preserves caller-keyed overwrite and
* whole-{@code byte[]} materialization semantics in a separate legacy namespace while stored data
* and the sample endpoint migrate. New code must use the semantic ports under {@code
* and external consumers migrate. New code must use the semantic ports under {@code
* dev.caskeleton.application.objectstorage}. Production activation must be removed after the
* additive API/data migration, dual-read observation, external-consumer approval, and zero-usage
* gates pass; no calendar removal date is implied here.