feat: org command sides (#96)

* start org

* refactor(eventstore): filter in sql for querier

* feat(eventstore): Aggregate precondition

preconditions are checked right before insert. Insert is still transaction save

* feat(eventstore): check preconditions in repository

* test(eventstore): test precondition in models

* test(eventstore): precondition-tests

* start org

* refactor(eventstore): filter in sql for querier

* feat(eventstore): Aggregate precondition

preconditions are checked right before insert. Insert is still transaction save

* feat(admin): start implement org

* feat(eventstore): check preconditions in repository

* fix(eventstore): data as NULL if empty
refactor(eventstore): naming in sequence methods

* feat(admin): org command side

* feat(management): start org-repo

* feat(org): member

* fix: replace ObjectRoot.ID with ObjectRoot.AggregateID

* aggregateID

* add remove,change member

* refactor(org): namings

* refactor(eventstore): querier as type

* fix(precondition): rename validation from precondition to validation

* test(eventstore): isErr func instead of wantErr bool

* fix(tests): Data

* fix(eventstore): correct check for existing events in push,
simplify insert statement

* fix(eventstore): aggregate id public

* test(org): eventsourcing

* test(org): eventstore

* test(org): deactivate, reactivate, orgbyid

* test(org): getMemberByIDs

* tests

* running tests

* add user repo to admin

* thorw not found if no org found

* eventstore tests done

* lauft

* validate if user is already member of org

* modules

* delete unused file

* add member validation test

* return error if unable to validat member

* generate org id once,
set resourceowner of org

* Update internal/admin/repository/eventsourcing/eventstore/org.go

* Update internal/admin/repository/eventsourcing/eventstore/org.go

* Update internal/org/repository/eventsourcing/member_model.go

* Update internal/org/repository/eventsourcing/org.go

* Update internal/org/repository/eventsourcing/org.go

* Update internal/org/repository/eventsourcing/org_member.go

* Update internal/org/repository/eventsourcing/org_member.go

* Update internal/org/repository/eventsourcing/org_model.go

* Update internal/org/repository/eventsourcing/org.go

* Update internal/org/repository/eventsourcing/org_model.go

* Update internal/org/repository/eventsourcing/org_model.go

* typo

* correct user events

* usercreate for setuporg instead of userregister

* set data

* mod

* mod

* tests

* cleanup code

* code styling

* return member on add and change

* change username in startup

* girignore

* orgID as parameter in re-/deactive org

* startup config

* migration for admin_api-user

* probes fro admin

* move unique org

Co-authored-by: Fabiennne <fabienne.gerschwiler@gmail.com>
This commit is contained in:
Silvan
2020-05-13 14:22:29 +02:00
committed by GitHub
parent 7facd78026
commit 9e32740eb8
67 changed files with 16694 additions and 13035 deletions

View File

@@ -15,7 +15,7 @@ func (at AggregateType) String() string {
type Aggregates []*Aggregate
type Aggregate struct {
id string
ID string
typ AggregateType
PreviousSequence uint64
version Version
@@ -45,7 +45,7 @@ func (a *Aggregate) AppendEvent(typ EventType, payload interface{}) (*Aggregate,
CreationDate: time.Now(),
Data: data,
Type: typ,
AggregateID: a.id,
AggregateID: a.ID,
AggregateType: a.typ,
AggregateVersion: a.version,
EditorService: a.editorService,
@@ -66,7 +66,7 @@ func (a *Aggregate) Validate() error {
if a == nil {
return errors.ThrowPreconditionFailed(nil, "MODEL-yi5AC", "aggregate is nil")
}
if a.id == "" {
if a.ID == "" {
return errors.ThrowPreconditionFailed(nil, "MODEL-FSjKV", "id not set")
}
if string(a.typ) == "" {

View File

@@ -22,7 +22,7 @@ func (c *AggregateCreator) NewAggregate(ctx context.Context, id string, typ Aggr
resourceOwner := ctxData.OrgID
aggregate := &Aggregate{
id: id,
ID: id,
typ: typ,
PreviousSequence: previousSequence,
version: version,

View File

@@ -83,7 +83,7 @@ func TestAggregateCreator_NewAggregate(t *testing.T) {
creator: &AggregateCreator{serviceName: "admin"},
wantErr: false,
want: &Aggregate{
id: "hodor",
ID: "hodor",
Events: make([]*Event, 0, 2),
typ: "user",
version: "v1.0.0",

View File

@@ -114,7 +114,7 @@ func TestAggregate_Validate(t *testing.T) {
name: "no type error",
wantErr: true,
fields: fields{aggregate: &Aggregate{
id: "aggID",
ID: "aggID",
version: "v1.0.0",
editorService: "svc",
editorUser: "hodor",
@@ -135,7 +135,7 @@ func TestAggregate_Validate(t *testing.T) {
name: "invalid version error",
wantErr: true,
fields: fields{aggregate: &Aggregate{
id: "aggID",
ID: "aggID",
typ: "user",
editorService: "svc",
editorUser: "hodor",
@@ -156,7 +156,7 @@ func TestAggregate_Validate(t *testing.T) {
name: "no query in precondition error",
wantErr: true,
fields: fields{aggregate: &Aggregate{
id: "aggID",
ID: "aggID",
typ: "user",
version: "v1.0.0",
editorService: "svc",
@@ -182,7 +182,7 @@ func TestAggregate_Validate(t *testing.T) {
name: "no func in precondition error",
wantErr: true,
fields: fields{aggregate: &Aggregate{
id: "aggID",
ID: "aggID",
typ: "user",
version: "v1.0.0",
editorService: "svc",
@@ -208,7 +208,7 @@ func TestAggregate_Validate(t *testing.T) {
name: "validation without precondition ok",
wantErr: false,
fields: fields{aggregate: &Aggregate{
id: "aggID",
ID: "aggID",
typ: "user",
version: "v1.0.0",
editorService: "svc",
@@ -231,7 +231,7 @@ func TestAggregate_Validate(t *testing.T) {
name: "validation with precondition ok",
wantErr: false,
fields: fields{aggregate: &Aggregate{
id: "aggID",
ID: "aggID",
typ: "user",
version: "v1.0.0",
editorService: "svc",

View File

@@ -1,6 +1,8 @@
package models
import "github.com/caos/zitadel/internal/errors"
import (
"github.com/caos/zitadel/internal/errors"
)
type SearchQuery struct {
Limit uint64
@@ -33,6 +35,10 @@ func (q *SearchQuery) AggregateIDFilter(id string) *SearchQuery {
return q.setFilter(NewFilter(Field_AggregateID, id, Operation_Equals))
}
func (q *SearchQuery) AggregateIDsFilter(ids ...string) *SearchQuery {
return q.setFilter(NewFilter(Field_AggregateID, ids, Operation_In))
}
func (q *SearchQuery) AggregateTypeFilter(types ...AggregateType) *SearchQuery {
return q.setFilter(NewFilter(Field_AggregateType, types, Operation_In))
}