Path: internal/service/meta
LowcodeService does not embed meta; use meta.New(base) or internal data/meta() as needed.
| Role | Delegates to |
|---|---|
| LoadColumns | catalog |
| Index list | catalog |
| Column PG types | catalog |
Avoids schema/data import cycles. Writes still go through schema/catalog/data.
Path: internal/service/shared
| File / area | Role |
|---|---|
base.go |
Base: TenantManager, Cache, Metrics, isolation mode |
events.go |
EmitEvent: publish to EventBus (records.* / schema.*) |
helpers.go |
Value conversion, TenantID, ResolveDataSchema |
config.go |
Virtual column config validation (link, rollup) |
result_type.go |
formula/lookup/rollup result types |
virtual.go |
EffectivePgType, formula SQL fragments |
cells.go |
Cell reference resolution |
service.WithCache(...)
service.WithPGStatStatements(...)
service.WithLogger(...)Every domain module holds *shared.Base. There are no direct struct references between domains.
schema / catalog / data / platform
↓
shared.Base
↓
infra · event · platform/cache ...
meta is read-only: no EmitEvent, no DDL.