agents md
This commit is contained in:
1 parent
8db09e3c6a
commit
9390f2132d
1 file changed
+70
@@ -0,0 +1,70 @@
|
||||
# platform — agents map
|
||||
|
||||
A **Go library** shared across the platform — not a deployable service.
|
||||
Provides common types and adapters (auth, money, inventory, rabbit,
|
||||
catalog, tax, event, order, config). Most services depend on it via
|
||||
`go.work`.
|
||||
|
||||
## Where to start
|
||||
|
||||
- `platform/go.mod` — module path and consumers.
|
||||
- `doc.go` — package-level intent (if empty, add one).
|
||||
- `platform/auth/{auth,middleware}.go` — principal + scope + middleware.
|
||||
- `platform/money/money.go` — `Cents` type (the canonical money value —
|
||||
every service uses this, **don't** add parallel types).
|
||||
- `platform/event/event.go` — generic event envelope.
|
||||
- `platform/inventory/inventory.go` — `Level` type + `ReservationPolicy`
|
||||
interface.
|
||||
- `platform/rabbit/conn.go` — RabbitMQ connection lifecycle.
|
||||
- `platform/config/env.go` — env-var loader.
|
||||
|
||||
## Architecture
|
||||
|
||||
- **Cross-cutting — no business logic.** Anything here is meant to be
|
||||
plugged into by individual services. The deletion test for any platform
|
||||
package: "remove it; how many services have to reimplement it?" If the
|
||||
answer is "more than one", this is the right home.
|
||||
- **Stable contracts**: changes here ripple to every service. That is the
|
||||
cost of centralisation; pay it only when the type is reused.
|
||||
|
||||
## Important files by area
|
||||
|
||||
| Area | File |
|
||||
| ------------ | ------------------------------------- |
|
||||
| Auth | `platform/auth/{auth,middleware}.go` |
|
||||
| Money | `platform/money/money.go` |
|
||||
| Catalog | `platform/catalog/{registry,schema}.go` |
|
||||
| Order | `platform/order/order.go` |
|
||||
| Event | `platform/event/event.go` |
|
||||
| Inventory | `platform/inventory/inventory.go` |
|
||||
| Rabbit | `platform/rabbit/conn.go` |
|
||||
| Config | `platform/config/env.go` |
|
||||
| Tax | `platform/tax/tax.go` |
|
||||
|
||||
## Cross-project seams
|
||||
|
||||
- **Verified consumer**: `slask-finder` (`replace git.k6n.net/mats/platform
|
||||
=> ../platform` in its go.mod; line 7 + replace line 93).
|
||||
- **Likely consumers** (claimed in their respective agents.md files but not
|
||||
cross-checked here): `go-cart-actor`, `go-redis-inventory`,
|
||||
`go-shipping`, `slask-tracking`, `go-form-submissions`. To verify for any
|
||||
module: `grep git.k6n.net/mats/platform <module>/go.mod`.
|
||||
|
||||
## Improvement suggestions
|
||||
|
||||
- **No `doc.go`** at the platform root. Add a short one that names the
|
||||
responsibility ("shared, stable, no business logic").
|
||||
- **No tests** — but a few of these types are the contracts most services
|
||||
build against. A `platform/money/money_test.go` for `Cents` arithmetic
|
||||
(overflow at 2^63, rounding rules) would lock the seam.
|
||||
- **`RabbitConnection` reconnection logic lives in code.** Promote to a
|
||||
managed component with a single `Run(ctx)` entrypoint — most services
|
||||
copy this stub.
|
||||
- **Inventory `Level` is a single type**; if it ever needs variants
|
||||
(per-warehouse, per-customer-group), the contract change ripples
|
||||
everywhere. State the invariant in a top-of-file comment so future
|
||||
contributors see the constraint.
|
||||
- **Money rounding** — ensure `Cents` cannot be divided unevenly; if you
|
||||
have a `FromFloat`, document why it exists (and consider deprecating).
|
||||
- **`config/env.go`** — if it grows, consider whether to split into
|
||||
`config/env` (parsing) + `config/stats` (logging).
|
||||
Reference in new issue
Block a user