Skip to content

Commit 6c8b565

Browse files
gfyragAzorloghDav-14
authored
feat: introduce schemas (#1064)
* feat: introduce schemas * feat: plug schema on writes (#1065) * feat: plug schema on writes * feat: Chart of accounts & tx validation (#1109) * wip chart of account & serialization * tx validation * improve structure * fix test * more tests & fixes * cleanup & improve coverage * remove rules prototype * force schemaVersion if ledger has one * cleanup & better naming * remove useless if, rename regex * change segment prop prefix * add missing test & cleanup leftover errors * missed pre-commit * address review suggestions - used strings.HasPrefix to avoid potential panics - group var definitions - validate .pattern type & regex - fix .self validation `{ }` * improve error message for forbidden keys * fix permissive regexes * table-driven tests & t.Parallel * fix api pattern examples * review fixes - Use log validation method instead of ad-hoc controller check - Handle errors: non-specified schema, already-existing schema version, missing chart - Add e2e unspecified schema check * fix test --------- Co-authored-by: Alix Bott <bott.alix@gmail.com> * improve error messages (#1148) * remove special handling of 'world' in charts * feat: Chart of accounts: default metadata (#1164) * default metadata on upsert account * use global schemaVersion on bulks * fix migrations * fix missing units in schema otel histograms * consistency: rename update->insert * 400->409 for SchemaAlreadyExist * tweak comment * fix pagination test, add `previous` to v2schemacursor * tweak test * fix: read schema (#1180) * improve naming consistency * skip marshaling empty rules * fix marshal * pre-commit * throw error on root .pattern + allow patternless variable segments * throw error when account fields are used on non-accounts * fix migration number * fix * schema enforcement mode * address review comments - pass schema to createTransaction - schemaVersion in BulkingOptions - use Store.newScopedSelect - remove the errors.Unwraps --------- Co-authored-by: Alix Bott <bott.alix@gmail.com> Co-authored-by: David Ragot <35502263+Dav-14@users.noreply.github.com>
1 parent 55d8b18 commit 6c8b565

File tree

129 files changed

+6938
-322
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

129 files changed

+6938
-322
lines changed

cmd/config.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,17 @@ import (
88
"github.com/robfig/cron/v3"
99
"github.com/spf13/cobra"
1010
"github.com/spf13/viper"
11+
12+
"github.com/formancehq/ledger/internal/controller/ledger"
1113
)
1214

1315
type commonConfig struct {
14-
NumscriptInterpreter bool `mapstructure:"experimental-numscript-interpreter"`
15-
NumscriptInterpreterFlags []string `mapstructure:"experimental-numscript-interpreter-flags"`
16-
ExperimentalFeaturesEnabled bool `mapstructure:"experimental-features"`
17-
ExperimentalExporters bool `mapstructure:"experimental-exporters"`
18-
SemconvMetricsNames bool `mapstructure:"semconv-metrics-names"`
16+
NumscriptInterpreter bool `mapstructure:"experimental-numscript-interpreter"`
17+
NumscriptInterpreterFlags []string `mapstructure:"experimental-numscript-interpreter-flags"`
18+
ExperimentalFeaturesEnabled bool `mapstructure:"experimental-features"`
19+
ExperimentalExporters bool `mapstructure:"experimental-exporters"`
20+
SemconvMetricsNames bool `mapstructure:"semconv-metrics-names"`
21+
SchemaEnforcementMode ledger.SchemaEnforcementMode `mapstructure:"schema-enforcement-mode"`
1922
}
2023

2124
func decodeCronSchedule(sourceType, destType reflect.Type, value any) (any, error) {

cmd/docs_events.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ func NewDocEventsCommand() *cobra.Command {
3636
events.DeletedMetadata{},
3737
events.SavedMetadata{},
3838
events.RevertedTransaction{},
39+
events.InsertedSchema{},
3940
} {
4041
schema := jsonschema.Reflect(o)
4142
data, err := json.MarshalIndent(schema, "", " ")

cmd/serve.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,11 @@ const (
6565
BulkMaxSizeFlag = "bulk-max-size"
6666
BulkParallelFlag = "bulk-parallel"
6767

68-
DefaultPageSizeFlag = "default-page-size"
69-
MaxPageSizeFlag = "max-page-size"
70-
WorkerEnabledFlag = "worker"
71-
SemconvMetricsNames = "semconv-metrics-names"
68+
DefaultPageSizeFlag = "default-page-size"
69+
MaxPageSizeFlag = "max-page-size"
70+
WorkerEnabledFlag = "worker"
71+
SemconvMetricsNames = "semconv-metrics-names"
72+
SchemaEnforcementMode = "schema-enforcement-mode"
7273
)
7374

7475
func NewServeCommand() *cobra.Command {
@@ -112,7 +113,8 @@ func NewServeCommand() *cobra.Command {
112113
MaxRetry: 10,
113114
Delay: time.Millisecond * 100,
114115
},
115-
EnableFeatures: cfg.ExperimentalFeaturesEnabled,
116+
EnableFeatures: cfg.ExperimentalFeaturesEnabled,
117+
SchemaEnforcementMode: cfg.commonConfig.SchemaEnforcementMode,
116118
}),
117119
bus.NewFxModule(),
118120
ballast.Module(cfg.BallastSizeInBytes),
@@ -187,6 +189,7 @@ func NewServeCommand() *cobra.Command {
187189
cmd.Flags().StringSlice(NumscriptInterpreterFlagsToPass, nil, "Feature flags to pass to the experimental numscript interpreter")
188190
cmd.Flags().String(WorkerGRPCAddressFlag, "localhost:8081", "GRPC address")
189191
cmd.Flags().Bool(SemconvMetricsNames, false, "Use semconv metrics names (recommended)")
192+
cmd.Flags().String(SchemaEnforcementMode, "audit", "Schema enforcement mode. Values: `audit`, `strict`")
190193

191194
addWorkerFlags(cmd)
192195
bunconnect.AddFlags(cmd.Flags())

0 commit comments

Comments
 (0)