new module
Ezzel adhatsz új modult egy projekthez: egyetlen hívással scaffoldolja a belépési pontot, az első surface-t, a kontraktust és a modul-szintű közös vázakat.
go tool gpsystem new module <név> [--surface <név>]
Projekten belül futtasd (a CLI felfelé sétálva megtalálja a gpsystem.yaml-t). A modulnév kisbetű/számjegy: Go csomagnév, mappanév és URL-szegmens lesz belőle. Ugyanez a szabály érvényes az első surface nevére is (--surface, default api).
Mit generál
cmd/<név>/main.go: a ~20 soros belépési pont, ami aserver.Run-t hívja, és egy al-routert mountol az/api/v1aláinternal/modules/<név>/register.go:Dependenciesstruct + surface-enként egy exportáltRegister<Surface>(router, deps)függvény (pl.RegisterApi,RegisterWeb)- Egy első surface-t (default
api) asurfaces/<surface>/alatt: a generált szigorú interfészt implementáló handler (a mintaListegy minimálisservice/varratot hív),policy/registry-stub, plusz üresen tartotthttp/mapper/mappa (.gitkeep) a saját kódodnak - A modul-szintű közös vázakat:
core/(a surface-ek által megosztott szabályok, entitások és sentinel-hibák helye, benne egyErrNotFoundpéldával) ésrepository/(a modul egyetlen perzisztencia-rétege); ezeket az első surface bélyegzi oda, a későbbiadd surfacehívások már kihagyják spec/typespec/modules/<név>/:<surface>.tspmintaművelettel +models/<surface>.tspapi/oapi-codegen/<név>-<surface>.yamlcodegen konfig a projekt template-készletére kötvecompose.yml-be a modul app-service-e: build a projektDockerfile-jából (target: development), bekötve postgres/valkey/migratedepends_on-nal, dupla Traefik router path-alapú routinggal (lásd new project)
Anchor-beszúrások
main.tsp← modul-importok (gpsystem:modules)cmd/<név>/main.go←<név>.Register<Surface>(api, deps)hívás (gpsystem:registrations)register.go← surface-enkéntiRegister<Surface>függvény + importok (renderelve, majd goimports-szal formázva)compose.yml← a modul-service agpsystem:servicesanchornál
Compose-beszúrás
A compose.yml és a Dockerfile minden projektben megvan (a new project-től), a new module csak az új modul service-ét szúrja be a gpsystem:services anchornál, depends_on-nal postgres/valkey/migrate-re. Ha a compose.yml-ből hiányzik a networks:/volumes: szekció vagy a postgres pg_isready healthcheck, a modul-service YAML-je csak kiíródik a terminálra, kézi beillesztésre; ilyenkor egyszerűbb lehet az add compose --force-szal futtatása, és a manifestből tiszta compose.yml-t újraépíteni.
Generálás után
mise run generate # tsp → OpenAPI → szigorú szerverkód → build
go run ./cmd/<név>
A váznak még nincs perzisztenciája: a közös szabályokat a modul core/ csomagjában, a perzisztenciát a modul-szintű repository/-ban építsd fel, és a surface service/ varratán át hívd a handlerből.