add core
Ezt egy olyan modulon futtasd, amelynek még nincs közös magja, például mert kézzel építetted, vagy egy csak surface-re lecsupaszított minimál modul.
go tool gpsystem add core <modul> [--db <név>]
A modul-szintű közös vázakat rendereli egy meglévő modulba: a core/ csomagot (a minden surface által megosztott entitások, szabályok és sentinel-hibák helye) és a modul egyetlen repository/ perzisztencia-rétegének vázát. Új moduloknál erre nincs szükség: az add surface a modul első surface-e mellé automatikusan odabélyegzi mindkettőt. Az add core a többi esetre való: egy generátor nélkül épített modulra, vagy egy olyanra, amelynek a közös magját törölték.
Mit renderel
internal/modules/<modul>/core/core.go: a csomagdokumentáció, benne az import irányát rögzítő szabály (http → service → core → repository; a core soha nem importál surface-csomagot, a handler soha nem importálja a repository-t)internal/modules/<modul>/core/errors.go: egyErrNotFoundsentinelerrs.Define-nal, mintaként arra, hogy a "nincs ilyen rekord" jellegű hibákat a core definiálja (vagy exportálja tovább a repositoryból), és a handlerek mindig a saját surface-ük service csomagján át ellenőrzikinternal/modules/<modul>/repository/doc.go: a modul közös perzisztencia-rétegének csomagváza (a sorokat leíró structok + interfész + implementáció ide kerül, modulonként egyszer)
A parancs tisztán additív: nem nyúl anchorhoz, nem módosít meglévő fájlt, csak új fájlokat hoz létre. Ha a modulnak már van core/ csomagja, a parancs nem fut le.
--db: nevesített kapcsolat
Alapesetben a repository-váz flat (repository/doc.go), a projekt default adatbázis-kapcsolatához kötve. A --db <név> egy korábban add db-vel hozzáadott nevesített kapcsolathoz köti, és a vázat kapcsolatnév szerinti almappaként rendereli:
go tool gpsystem add db news analytics --connector bun
go tool gpsystem add core news --db analytics
# -> internal/modules/news/repository/analytics/doc.go
A <név>-nek már léteznie kell a modulon; ha nem, a parancs azonnal hibázik, és felsorolja a modul elérhető kapcsolatait.