add domain
Ezt egy olyan modulon futtasd, amelynek még nincs gyökér-domaincsomagja, például mert kézzel építetted, vagy egy csak surface-re lecsupaszított minimál modul.
go tool gpsystem add domain <modul> [--db <név>]
A modul-szintű közös vázakat rendereli egy meglévő modulba: a modul gyökércsomagjának domain-fájljait (a minden surface által megosztott entitások, szabályok és sentinel-hibák helye; a csomag neve maga a modul, a hívók news.Service-t és news.ErrNotFound-ot írnak) é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 (és kihagyja, ha a modul gyökerében már vannak .go fájlok). Az add domain a többi esetre való: egy generátor nélkül épített modulra, vagy egy olyanra, amelynek a domain-fájljait törölték.
Mit renderel
internal/modules/<modul>/<modul>.go: a csomagdokumentáció, benne az import irányát rögzítő szabály (http → service → <modul> (gyökércsomag) → repository; a gyökércsomag soha nem importál surface-csomagot, a handler soha nem importálja a repository-t)internal/modules/<modul>/errors.go: egyErrNotFoundsentinelerrs.Define-nal, mintaként arra, hogy a "nincs ilyen rekord" jellegű hibákat a gyökércsomag 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. Egy már meglévő domain-fájl normál ütközésként jelenik meg. Sikeres futáskor ezt írja ki: Domain skeleton added to module "<m>": internal/modules/<m>/{<m>.go,errors.go,repository}.
--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 domain 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.