mirror of
https://github.com/andwati/zitadel.git
synced 2026-11-08 15:15:12 +00:00
refactor: eventstore v2
This commit is contained in:
@@ -222,19 +222,19 @@ func (db *CRDB) maxSequenceQuery() string {
|
||||
|
||||
func (db *CRDB) columnName(col repository.Field) string {
|
||||
switch col {
|
||||
case repository.Field_AggregateID:
|
||||
case repository.FieldAggregateID:
|
||||
return "aggregate_id"
|
||||
case repository.Field_AggregateType:
|
||||
case repository.FieldAggregateType:
|
||||
return "aggregate_type"
|
||||
case repository.Field_LatestSequence:
|
||||
case repository.FieldSequence:
|
||||
return "event_sequence"
|
||||
case repository.Field_ResourceOwner:
|
||||
case repository.FieldResourceOwner:
|
||||
return "resource_owner"
|
||||
case repository.Field_EditorService:
|
||||
case repository.FieldEditorService:
|
||||
return "editor_service"
|
||||
case repository.Field_EditorUser:
|
||||
case repository.FieldEditorUser:
|
||||
return "editor_user"
|
||||
case repository.Field_EventType:
|
||||
case repository.FieldEventType:
|
||||
return "event_type"
|
||||
default:
|
||||
return ""
|
||||
@@ -242,7 +242,7 @@ func (db *CRDB) columnName(col repository.Field) string {
|
||||
}
|
||||
|
||||
func (db *CRDB) conditionFormat(operation repository.Operation) string {
|
||||
if operation == repository.Operation_In {
|
||||
if operation == repository.OperationIn {
|
||||
return "%s %s ANY(?)"
|
||||
}
|
||||
return "%s %s ?"
|
||||
@@ -250,11 +250,11 @@ func (db *CRDB) conditionFormat(operation repository.Operation) string {
|
||||
|
||||
func (db *CRDB) operation(operation repository.Operation) string {
|
||||
switch operation {
|
||||
case repository.Operation_Equals, repository.Operation_In:
|
||||
case repository.OperationEquals, repository.OperationIn:
|
||||
return "="
|
||||
case repository.Operation_Greater:
|
||||
case repository.OperationGreater:
|
||||
return ">"
|
||||
case repository.Operation_Less:
|
||||
case repository.OperationLess:
|
||||
return "<"
|
||||
}
|
||||
return ""
|
||||
|
||||
@@ -81,7 +81,7 @@ func TestCRDB_operation(t *testing.T) {
|
||||
{
|
||||
name: "greater",
|
||||
args: args{
|
||||
operation: repository.Operation_Greater,
|
||||
operation: repository.OperationGreater,
|
||||
},
|
||||
res: res{
|
||||
op: ">",
|
||||
@@ -90,7 +90,7 @@ func TestCRDB_operation(t *testing.T) {
|
||||
{
|
||||
name: "less",
|
||||
args: args{
|
||||
operation: repository.Operation_Less,
|
||||
operation: repository.OperationLess,
|
||||
},
|
||||
res: res{
|
||||
op: "<",
|
||||
@@ -99,7 +99,7 @@ func TestCRDB_operation(t *testing.T) {
|
||||
{
|
||||
name: "equals",
|
||||
args: args{
|
||||
operation: repository.Operation_Equals,
|
||||
operation: repository.OperationEquals,
|
||||
},
|
||||
res: res{
|
||||
op: "=",
|
||||
@@ -108,7 +108,7 @@ func TestCRDB_operation(t *testing.T) {
|
||||
{
|
||||
name: "in",
|
||||
args: args{
|
||||
operation: repository.Operation_In,
|
||||
operation: repository.OperationIn,
|
||||
},
|
||||
res: res{
|
||||
op: "=",
|
||||
@@ -140,7 +140,7 @@ func TestCRDB_conditionFormat(t *testing.T) {
|
||||
{
|
||||
name: "default",
|
||||
args: args{
|
||||
operation: repository.Operation_Equals,
|
||||
operation: repository.OperationEquals,
|
||||
},
|
||||
res: res{
|
||||
format: "%s %s ?",
|
||||
@@ -149,7 +149,7 @@ func TestCRDB_conditionFormat(t *testing.T) {
|
||||
{
|
||||
name: "in",
|
||||
args: args{
|
||||
operation: repository.Operation_In,
|
||||
operation: repository.OperationIn,
|
||||
},
|
||||
res: res{
|
||||
format: "%s %s ANY(?)",
|
||||
@@ -190,7 +190,7 @@ func TestCRDB_columnName(t *testing.T) {
|
||||
{
|
||||
name: "aggregate id",
|
||||
args: args{
|
||||
field: repository.Field_AggregateID,
|
||||
field: repository.FieldAggregateID,
|
||||
},
|
||||
res: res{
|
||||
name: "aggregate_id",
|
||||
@@ -199,7 +199,7 @@ func TestCRDB_columnName(t *testing.T) {
|
||||
{
|
||||
name: "aggregate type",
|
||||
args: args{
|
||||
field: repository.Field_AggregateType,
|
||||
field: repository.FieldAggregateType,
|
||||
},
|
||||
res: res{
|
||||
name: "aggregate_type",
|
||||
@@ -208,7 +208,7 @@ func TestCRDB_columnName(t *testing.T) {
|
||||
{
|
||||
name: "editor service",
|
||||
args: args{
|
||||
field: repository.Field_EditorService,
|
||||
field: repository.FieldEditorService,
|
||||
},
|
||||
res: res{
|
||||
name: "editor_service",
|
||||
@@ -217,7 +217,7 @@ func TestCRDB_columnName(t *testing.T) {
|
||||
{
|
||||
name: "editor user",
|
||||
args: args{
|
||||
field: repository.Field_EditorUser,
|
||||
field: repository.FieldEditorUser,
|
||||
},
|
||||
res: res{
|
||||
name: "editor_user",
|
||||
@@ -226,7 +226,7 @@ func TestCRDB_columnName(t *testing.T) {
|
||||
{
|
||||
name: "event type",
|
||||
args: args{
|
||||
field: repository.Field_EventType,
|
||||
field: repository.FieldEventType,
|
||||
},
|
||||
res: res{
|
||||
name: "event_type",
|
||||
@@ -235,7 +235,7 @@ func TestCRDB_columnName(t *testing.T) {
|
||||
{
|
||||
name: "latest sequence",
|
||||
args: args{
|
||||
field: repository.Field_LatestSequence,
|
||||
field: repository.FieldSequence,
|
||||
},
|
||||
res: res{
|
||||
name: "event_sequence",
|
||||
@@ -244,7 +244,7 @@ func TestCRDB_columnName(t *testing.T) {
|
||||
{
|
||||
name: "resource owner",
|
||||
args: args{
|
||||
field: repository.Field_ResourceOwner,
|
||||
field: repository.FieldResourceOwner,
|
||||
},
|
||||
res: res{
|
||||
name: "resource_owner",
|
||||
|
||||
@@ -169,11 +169,11 @@ func TestInsert(t *testing.T) {
|
||||
}
|
||||
fmt.Println("====================")
|
||||
filtededEvents, err := crdb.Filter(context.Background(), &repository.SearchQuery{
|
||||
Columns: repository.Columns_Event,
|
||||
Columns: repository.ColumnsEvent,
|
||||
Filters: []*repository.Filter{
|
||||
{
|
||||
Field: repository.Field_AggregateType,
|
||||
Operation: repository.Operation_Equals,
|
||||
Field: repository.FieldAggregateType,
|
||||
Operation: repository.OperationEquals,
|
||||
Value: repository.AggregateType("agg.type"),
|
||||
},
|
||||
},
|
||||
|
||||
@@ -12,7 +12,7 @@ import (
|
||||
"github.com/lib/pq"
|
||||
)
|
||||
|
||||
type criteriaer interface {
|
||||
type querier interface {
|
||||
columnName(repository.Field) string
|
||||
operation(repository.Operation) string
|
||||
conditionFormat(repository.Operation) string
|
||||
@@ -24,7 +24,7 @@ type criteriaer interface {
|
||||
type rowScan func(scan, interface{}) error
|
||||
type scan func(dest ...interface{}) error
|
||||
|
||||
func buildQuery(criteria criteriaer, searchQuery *repository.SearchQuery) (query string, values []interface{}, rowScanner rowScan) {
|
||||
func buildQuery(criteria querier, searchQuery *repository.SearchQuery) (query string, values []interface{}, rowScanner rowScan) {
|
||||
query, rowScanner = prepareColumns(criteria, searchQuery.Columns)
|
||||
where, values := prepareCondition(criteria, searchQuery.Filters)
|
||||
if where == "" || query == "" {
|
||||
@@ -32,7 +32,7 @@ func buildQuery(criteria criteriaer, searchQuery *repository.SearchQuery) (query
|
||||
}
|
||||
query += where
|
||||
|
||||
if searchQuery.Columns != repository.Columns_Max_Sequence {
|
||||
if searchQuery.Columns != repository.ColumnsMaxSequence {
|
||||
query += " ORDER BY event_sequence"
|
||||
if searchQuery.Desc {
|
||||
query += " DESC"
|
||||
@@ -49,11 +49,11 @@ func buildQuery(criteria criteriaer, searchQuery *repository.SearchQuery) (query
|
||||
return query, values, rowScanner
|
||||
}
|
||||
|
||||
func prepareColumns(criteria criteriaer, columns repository.Columns) (string, func(s scan, dest interface{}) error) {
|
||||
func prepareColumns(criteria querier, columns repository.Columns) (string, func(s scan, dest interface{}) error) {
|
||||
switch columns {
|
||||
case repository.Columns_Max_Sequence:
|
||||
case repository.ColumnsMaxSequence:
|
||||
return criteria.maxSequenceQuery(), maxSequenceScanner
|
||||
case repository.Columns_Event:
|
||||
case repository.ColumnsEvent:
|
||||
return criteria.eventQuery(), eventsScanner
|
||||
default:
|
||||
return "", nil
|
||||
@@ -110,7 +110,7 @@ func eventsScanner(scanner scan, dest interface{}) (err error) {
|
||||
return nil
|
||||
}
|
||||
|
||||
func prepareCondition(criteria criteriaer, filters []*repository.Filter) (clause string, values []interface{}) {
|
||||
func prepareCondition(criteria querier, filters []*repository.Filter) (clause string, values []interface{}) {
|
||||
values = make([]interface{}, len(filters))
|
||||
clauses := make([]string, len(filters))
|
||||
|
||||
@@ -133,7 +133,7 @@ func prepareCondition(criteria criteriaer, filters []*repository.Filter) (clause
|
||||
return " WHERE " + strings.Join(clauses, " AND "), values
|
||||
}
|
||||
|
||||
func getCondition(cond criteriaer, filter *repository.Filter) (condition string) {
|
||||
func getCondition(cond querier, filter *repository.Filter) (condition string) {
|
||||
field := cond.columnName(filter.Field)
|
||||
operation := cond.operation(filter.Operation)
|
||||
if field == "" || operation == "" {
|
||||
|
||||
@@ -22,32 +22,32 @@ func Test_getCondition(t *testing.T) {
|
||||
}{
|
||||
{
|
||||
name: "equals",
|
||||
args: args{filter: repository.NewFilter(repository.Field_AggregateID, "", repository.Operation_Equals)},
|
||||
args: args{filter: repository.NewFilter(repository.FieldAggregateID, "", repository.OperationEquals)},
|
||||
want: "aggregate_id = ?",
|
||||
},
|
||||
{
|
||||
name: "greater",
|
||||
args: args{filter: repository.NewFilter(repository.Field_LatestSequence, 0, repository.Operation_Greater)},
|
||||
args: args{filter: repository.NewFilter(repository.FieldSequence, 0, repository.OperationGreater)},
|
||||
want: "event_sequence > ?",
|
||||
},
|
||||
{
|
||||
name: "less",
|
||||
args: args{filter: repository.NewFilter(repository.Field_LatestSequence, 5000, repository.Operation_Less)},
|
||||
args: args{filter: repository.NewFilter(repository.FieldSequence, 5000, repository.OperationLess)},
|
||||
want: "event_sequence < ?",
|
||||
},
|
||||
{
|
||||
name: "in list",
|
||||
args: args{filter: repository.NewFilter(repository.Field_AggregateType, []repository.AggregateType{"movies", "actors"}, repository.Operation_In)},
|
||||
args: args{filter: repository.NewFilter(repository.FieldAggregateType, []repository.AggregateType{"movies", "actors"}, repository.OperationIn)},
|
||||
want: "aggregate_type = ANY(?)",
|
||||
},
|
||||
{
|
||||
name: "invalid operation",
|
||||
args: args{filter: repository.NewFilter(repository.Field_AggregateType, []repository.AggregateType{"movies", "actors"}, repository.Operation(-1))},
|
||||
args: args{filter: repository.NewFilter(repository.FieldAggregateType, []repository.AggregateType{"movies", "actors"}, repository.Operation(-1))},
|
||||
want: "",
|
||||
},
|
||||
{
|
||||
name: "invalid field",
|
||||
args: args{filter: repository.NewFilter(repository.Field(-1), []repository.AggregateType{"movies", "actors"}, repository.Operation_Equals)},
|
||||
args: args{filter: repository.NewFilter(repository.Field(-1), []repository.AggregateType{"movies", "actors"}, repository.OperationEquals)},
|
||||
want: "",
|
||||
},
|
||||
{
|
||||
@@ -97,7 +97,7 @@ func Test_prepareColumns(t *testing.T) {
|
||||
{
|
||||
name: "max column",
|
||||
args: args{
|
||||
columns: repository.Columns_Max_Sequence,
|
||||
columns: repository.ColumnsMaxSequence,
|
||||
dest: new(Sequence),
|
||||
},
|
||||
res: res{
|
||||
@@ -111,7 +111,7 @@ func Test_prepareColumns(t *testing.T) {
|
||||
{
|
||||
name: "max sequence wrong dest type",
|
||||
args: args{
|
||||
columns: repository.Columns_Max_Sequence,
|
||||
columns: repository.ColumnsMaxSequence,
|
||||
dest: new(uint64),
|
||||
},
|
||||
res: res{
|
||||
@@ -122,7 +122,7 @@ func Test_prepareColumns(t *testing.T) {
|
||||
{
|
||||
name: "events",
|
||||
args: args{
|
||||
columns: repository.Columns_Event,
|
||||
columns: repository.ColumnsEvent,
|
||||
dest: &[]*repository.Event{},
|
||||
},
|
||||
res: res{
|
||||
@@ -138,7 +138,7 @@ func Test_prepareColumns(t *testing.T) {
|
||||
{
|
||||
name: "events wrong dest type",
|
||||
args: args{
|
||||
columns: repository.Columns_Event,
|
||||
columns: repository.ColumnsEvent,
|
||||
dest: []*repository.Event{},
|
||||
},
|
||||
res: res{
|
||||
@@ -149,7 +149,7 @@ func Test_prepareColumns(t *testing.T) {
|
||||
{
|
||||
name: "event query error",
|
||||
args: args{
|
||||
columns: repository.Columns_Event,
|
||||
columns: repository.ColumnsEvent,
|
||||
dest: &[]*repository.Event{},
|
||||
dbErr: sql.ErrConnDone,
|
||||
},
|
||||
@@ -240,7 +240,7 @@ func Test_prepareCondition(t *testing.T) {
|
||||
name: "invalid condition",
|
||||
args: args{
|
||||
filters: []*repository.Filter{
|
||||
repository.NewFilter(repository.Field_AggregateID, "wrong", repository.Operation(-1)),
|
||||
repository.NewFilter(repository.FieldAggregateID, "wrong", repository.Operation(-1)),
|
||||
},
|
||||
},
|
||||
res: res{
|
||||
@@ -252,7 +252,7 @@ func Test_prepareCondition(t *testing.T) {
|
||||
name: "array as condition value",
|
||||
args: args{
|
||||
filters: []*repository.Filter{
|
||||
repository.NewFilter(repository.Field_AggregateType, []repository.AggregateType{"user", "org"}, repository.Operation_In),
|
||||
repository.NewFilter(repository.FieldAggregateType, []repository.AggregateType{"user", "org"}, repository.OperationIn),
|
||||
},
|
||||
},
|
||||
res: res{
|
||||
@@ -264,9 +264,9 @@ func Test_prepareCondition(t *testing.T) {
|
||||
name: "multiple filters",
|
||||
args: args{
|
||||
filters: []*repository.Filter{
|
||||
repository.NewFilter(repository.Field_AggregateType, []repository.AggregateType{"user", "org"}, repository.Operation_In),
|
||||
repository.NewFilter(repository.Field_AggregateID, "1234", repository.Operation_Equals),
|
||||
repository.NewFilter(repository.Field_EventType, []repository.EventType{"user.created", "org.created"}, repository.Operation_In),
|
||||
repository.NewFilter(repository.FieldAggregateType, []repository.AggregateType{"user", "org"}, repository.OperationIn),
|
||||
repository.NewFilter(repository.FieldAggregateID, "1234", repository.OperationEquals),
|
||||
repository.NewFilter(repository.FieldEventType, []repository.EventType{"user.created", "org.created"}, repository.OperationIn),
|
||||
},
|
||||
},
|
||||
res: res{
|
||||
@@ -314,13 +314,13 @@ func Test_buildQuery(t *testing.T) {
|
||||
args: args{
|
||||
// NewSearchQueryFactory("user").OrderDesc()
|
||||
query: &repository.SearchQuery{
|
||||
Columns: repository.Columns_Event,
|
||||
Columns: repository.ColumnsEvent,
|
||||
Desc: true,
|
||||
Filters: []*repository.Filter{
|
||||
{
|
||||
Field: repository.Field_AggregateType,
|
||||
Field: repository.FieldAggregateType,
|
||||
Value: repository.AggregateType("user"),
|
||||
Operation: repository.Operation_Equals,
|
||||
Operation: repository.OperationEquals,
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -335,14 +335,14 @@ func Test_buildQuery(t *testing.T) {
|
||||
name: "with limit",
|
||||
args: args{
|
||||
query: &repository.SearchQuery{
|
||||
Columns: repository.Columns_Event,
|
||||
Columns: repository.ColumnsEvent,
|
||||
Desc: false,
|
||||
Limit: 5,
|
||||
Filters: []*repository.Filter{
|
||||
{
|
||||
Field: repository.Field_AggregateType,
|
||||
Field: repository.FieldAggregateType,
|
||||
Value: repository.AggregateType("user"),
|
||||
Operation: repository.Operation_Equals,
|
||||
Operation: repository.OperationEquals,
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -357,14 +357,14 @@ func Test_buildQuery(t *testing.T) {
|
||||
name: "with limit and order by desc",
|
||||
args: args{
|
||||
query: &repository.SearchQuery{
|
||||
Columns: repository.Columns_Event,
|
||||
Columns: repository.ColumnsEvent,
|
||||
Desc: true,
|
||||
Limit: 5,
|
||||
Filters: []*repository.Filter{
|
||||
{
|
||||
Field: repository.Field_AggregateType,
|
||||
Field: repository.FieldAggregateType,
|
||||
Value: repository.AggregateType("user"),
|
||||
Operation: repository.Operation_Equals,
|
||||
Operation: repository.OperationEquals,
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -392,7 +392,7 @@ func Test_buildQuery(t *testing.T) {
|
||||
name: "invalid condition",
|
||||
args: args{
|
||||
query: &repository.SearchQuery{
|
||||
Columns: repository.Columns_Event,
|
||||
Columns: repository.ColumnsEvent,
|
||||
Filters: []*repository.Filter{
|
||||
{},
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user