refactor(query): use new packages for org by id query (#7826)

If the feature is enabled the new packages are used to query org by id

Part of: https://github.com/zitadel/zitadel/issues/7639

### Definition of Ready

- [x] I am happy with the code
- [x] Short description of the feature/issue is added in the pr
description
- [x] PR is linked to the corresponding user story
- [ ] Acceptance criteria are met
- [ ] All open todos and follow ups are defined in a new ticket and
justified
- [ ] Deviations from the acceptance criteria and design are agreed with
the PO and documented.
- [x] No debug or dead code
- [x] My code has no repetitions
- [ ] Critical parts are tested automatically
- [ ] Where possible E2E tests are implemented
- [ ] Documentation/examples are up-to-date
- [ ] All non-functional requirements are met
- [x] Functionality of the acceptance criteria is checked manually on
the dev system.
This commit is contained in:
Silvan
2024-05-24 13:32:57 +02:00
committed by GitHub
parent e58869c090
commit 0bfcf2c317
27 changed files with 587 additions and 104 deletions

View File

@@ -0,0 +1,57 @@
package projection
import (
"github.com/zitadel/zitadel/internal/v2/eventstore"
"github.com/zitadel/zitadel/internal/v2/org"
)
type OrgPrimaryDomain struct {
projection
id string
Domain string
}
func NewOrgPrimaryDomain(id string) *OrgPrimaryDomain {
return &OrgPrimaryDomain{
id: id,
}
}
func (p *OrgPrimaryDomain) Filter() []*eventstore.Filter {
return []*eventstore.Filter{
eventstore.NewFilter(
eventstore.FilterPagination(
eventstore.GlobalPositionGreater(&p.position),
),
eventstore.AppendAggregateFilter(
org.AggregateType,
eventstore.AggregateIDs(p.id),
eventstore.AppendEvent(
eventstore.SetEventTypes(org.DomainPrimarySetType),
),
),
),
}
}
func (p *OrgPrimaryDomain) Reduce(events ...*eventstore.StorageEvent) error {
for _, event := range events {
if !p.shouldReduce(event) {
continue
}
if event.Type != org.DomainPrimarySetType {
continue
}
e, err := org.DomainPrimarySetEventFromStorage(event)
if err != nil {
return err
}
p.Domain = e.Payload.Name
p.projection.reduce(event)
}
return nil
}

View File

@@ -0,0 +1,67 @@
package projection
import (
"github.com/zitadel/zitadel/internal/v2/eventstore"
"github.com/zitadel/zitadel/internal/v2/org"
)
type OrgState struct {
projection
id string
org.State
}
func NewStateProjection(id string) *OrgState {
// TODO: check buffer for id and return from buffer if exists
return &OrgState{
id: id,
}
}
func (p *OrgState) Filter() []*eventstore.Filter {
return []*eventstore.Filter{
eventstore.NewFilter(
eventstore.FilterPagination(
eventstore.Descending(),
eventstore.GlobalPositionGreater(&p.position),
),
eventstore.AppendAggregateFilter(
org.AggregateType,
eventstore.AggregateIDs(p.id),
eventstore.AppendEvent(
eventstore.SetEventTypes(
org.AddedType,
org.DeactivatedType,
org.ReactivatedType,
org.RemovedType,
),
),
),
),
}
}
func (p *OrgState) Reduce(events ...*eventstore.StorageEvent) error {
for _, event := range events {
if !p.shouldReduce(event) {
continue
}
switch event.Type {
case org.AddedType:
p.State = org.ActiveState
case org.DeactivatedType:
p.State = org.InactiveState
case org.ReactivatedType:
p.State = org.ActiveState
case org.RemovedType:
p.State = org.RemovedState
default:
continue
}
p.position = event.Position
}
return nil
}

View File

@@ -0,0 +1,20 @@
package projection
import "github.com/zitadel/zitadel/internal/v2/eventstore"
type projection struct {
instance string
position eventstore.GlobalPosition
}
func (p *projection) reduce(event *eventstore.StorageEvent) {
if p.instance == "" {
p.instance = event.Aggregate.Instance
}
p.position = event.Position
}
func (p *projection) shouldReduce(event *eventstore.StorageEvent) bool {
shouldReduce := p.instance == "" || p.instance == event.Aggregate.Instance
return shouldReduce && p.position.IsLess(event.Position)
}