fix quota projection primary key

This commit is contained in:
Elio Bischof
2023-09-21 15:50:29 +02:00
parent b17411ebb5
commit e72f4d7fa1
2 changed files with 4 additions and 3 deletions

View File

@@ -2,3 +2,4 @@ ALTER TABLE IF EXISTS projections.quotas ALTER COLUMN from_anchor DROP NOT NULL;
ALTER TABLE IF EXISTS projections.quotas ALTER COLUMN amount DROP NOT NULL; ALTER TABLE IF EXISTS projections.quotas ALTER COLUMN amount DROP NOT NULL;
ALTER TABLE IF EXISTS projections.quotas ALTER COLUMN interval DROP NOT NULL; ALTER TABLE IF EXISTS projections.quotas ALTER COLUMN interval DROP NOT NULL;
ALTER TABLE IF EXISTS projections.quotas ALTER COLUMN limit_usage DROP NOT NULL; ALTER TABLE IF EXISTS projections.quotas ALTER COLUMN limit_usage DROP NOT NULL;
ALTER TABLE IF EXISTS projections.quotas ALTER PRIMARY KEY USING COLUMNS ( instance_id, unit, id );

View File

@@ -70,7 +70,7 @@ func newQuotaProjection(ctx context.Context, config crdb.StatementHandlerConfig)
crdb.NewColumn(QuotaColumnInterval, crdb.ColumnTypeInterval, crdb.Nullable()), crdb.NewColumn(QuotaColumnInterval, crdb.ColumnTypeInterval, crdb.Nullable()),
crdb.NewColumn(QuotaColumnLimit, crdb.ColumnTypeBool, crdb.Nullable()), crdb.NewColumn(QuotaColumnLimit, crdb.ColumnTypeBool, crdb.Nullable()),
}, },
crdb.NewPrimaryKey(QuotaColumnInstanceID, QuotaColumnUnit), crdb.NewPrimaryKey(QuotaColumnInstanceID, QuotaColumnUnit, QuotaColumnID),
), ),
crdb.NewSuffixedTable( crdb.NewSuffixedTable(
[]*crdb.Column{ []*crdb.Column{
@@ -156,8 +156,9 @@ func (q *quotaProjection) reduceQuotaSet(event eventstore.Event) (*handler.State
quotaConflictColumns := []handler.Column{ quotaConflictColumns := []handler.Column{
handler.NewCol(QuotaColumnInstanceID, e.Aggregate().InstanceID), handler.NewCol(QuotaColumnInstanceID, e.Aggregate().InstanceID),
handler.NewCol(QuotaColumnUnit, e.Unit), handler.NewCol(QuotaColumnUnit, e.Unit),
handler.NewCol(QuotaColumnID, e.Aggregate().ID),
} }
quotaUpdateCols := make([]handler.Column, 0, 4+1+len(quotaConflictColumns)) quotaUpdateCols := make([]handler.Column, 0, 4+len(quotaConflictColumns))
if e.Limit != nil { if e.Limit != nil {
quotaUpdateCols = append(quotaUpdateCols, handler.NewCol(QuotaColumnLimit, *e.Limit)) quotaUpdateCols = append(quotaUpdateCols, handler.NewCol(QuotaColumnLimit, *e.Limit))
} }
@@ -172,7 +173,6 @@ func (q *quotaProjection) reduceQuotaSet(event eventstore.Event) (*handler.State
} }
if len(quotaUpdateCols) > 0 { if len(quotaUpdateCols) > 0 {
// TODO: Add the quota ID to the primary key in a migration? // TODO: Add the quota ID to the primary key in a migration?
quotaUpdateCols = append(quotaUpdateCols, handler.NewCol(QuotaColumnID, e.Aggregate().ID))
quotaUpdateCols = append(quotaUpdateCols, quotaConflictColumns...) quotaUpdateCols = append(quotaUpdateCols, quotaConflictColumns...)
statements = append(statements, crdb.AddUpsertStatement(quotaConflictColumns, quotaUpdateCols)) statements = append(statements, crdb.AddUpsertStatement(quotaConflictColumns, quotaUpdateCols))
} }