2021-11-23 10:31:23 +01:00
|
|
|
package projection
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
2025-06-06 10:48:29 +02:00
|
|
|
_ "embed"
|
2021-11-23 10:31:23 +01:00
|
|
|
|
2022-04-27 01:01:45 +02:00
|
|
|
"github.com/zitadel/zitadel/internal/eventstore"
|
2023-10-19 12:19:10 +02:00
|
|
|
old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
|
|
|
|
|
"github.com/zitadel/zitadel/internal/eventstore/handler/v2"
|
2022-04-27 01:01:45 +02:00
|
|
|
"github.com/zitadel/zitadel/internal/repository/instance"
|
|
|
|
|
"github.com/zitadel/zitadel/internal/repository/org"
|
|
|
|
|
"github.com/zitadel/zitadel/internal/repository/policy"
|
|
|
|
|
"github.com/zitadel/zitadel/internal/repository/user"
|
2023-12-08 16:30:55 +02:00
|
|
|
"github.com/zitadel/zitadel/internal/zerrors"
|
2021-11-23 10:31:23 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
const (
|
2023-12-08 13:14:22 +01:00
|
|
|
// if the table name of the users or domains table is changed please update setup step 18
|
2023-11-20 16:21:08 +01:00
|
|
|
LoginNameTableAlias = "login_names3"
|
2022-11-30 17:01:17 +01:00
|
|
|
LoginNameProjectionTable = "projections." + LoginNameTableAlias
|
2021-11-23 10:31:23 +01:00
|
|
|
LoginNameUserProjectionTable = LoginNameProjectionTable + "_" + loginNameUserSuffix
|
|
|
|
|
LoginNamePolicyProjectionTable = LoginNameProjectionTable + "_" + loginNamePolicySuffix
|
|
|
|
|
LoginNameDomainProjectionTable = LoginNameProjectionTable + "_" + loginNameDomainSuffix
|
2022-03-23 09:02:39 +01:00
|
|
|
|
2023-11-20 16:21:08 +01:00
|
|
|
LoginNameCol = "login_name"
|
|
|
|
|
LoginNameUserCol = "user_id"
|
|
|
|
|
LoginNameIsPrimaryCol = "is_primary"
|
|
|
|
|
LoginNameInstanceIDCol = "instance_id"
|
2022-11-30 17:01:17 +01:00
|
|
|
|
|
|
|
|
usersAlias = "users"
|
|
|
|
|
policyCustomAlias = "policy_custom"
|
|
|
|
|
policyDefaultAlias = "policy_default"
|
|
|
|
|
policyUsersAlias = "policy_users"
|
|
|
|
|
domainsAlias = "domains"
|
|
|
|
|
domainAlias = "domain"
|
2022-03-23 09:02:39 +01:00
|
|
|
|
2023-12-08 13:14:22 +01:00
|
|
|
loginNameUserSuffix = "users"
|
|
|
|
|
LoginNameUserIDCol = "id"
|
|
|
|
|
LoginNameUserUserNameCol = "user_name"
|
|
|
|
|
// internal fields for faster search
|
|
|
|
|
loginNameUserUserNameLowerCol = "user_name_lower"
|
2022-03-23 09:02:39 +01:00
|
|
|
LoginNameUserResourceOwnerCol = "resource_owner"
|
|
|
|
|
LoginNameUserInstanceIDCol = "instance_id"
|
|
|
|
|
|
|
|
|
|
loginNameDomainSuffix = "domains"
|
|
|
|
|
LoginNameDomainNameCol = "name"
|
2023-12-08 13:14:22 +01:00
|
|
|
loginNameDomainNameLowerCol = "name_lower"
|
2022-03-23 09:02:39 +01:00
|
|
|
LoginNameDomainIsPrimaryCol = "is_primary"
|
|
|
|
|
LoginNameDomainResourceOwnerCol = "resource_owner"
|
|
|
|
|
LoginNameDomainInstanceIDCol = "instance_id"
|
|
|
|
|
|
|
|
|
|
loginNamePolicySuffix = "policies"
|
|
|
|
|
LoginNamePoliciesMustBeDomainCol = "must_be_domain"
|
|
|
|
|
LoginNamePoliciesIsDefaultCol = "is_default"
|
|
|
|
|
LoginNamePoliciesResourceOwnerCol = "resource_owner"
|
|
|
|
|
LoginNamePoliciesInstanceIDCol = "instance_id"
|
2021-11-23 10:31:23 +01:00
|
|
|
)
|
|
|
|
|
|
2025-06-06 10:48:29 +02:00
|
|
|
//go:embed login_name_query.sql
|
|
|
|
|
var loginNameViewStmt string
|
2022-11-30 17:01:17 +01:00
|
|
|
|
2023-10-19 12:19:10 +02:00
|
|
|
type loginNameProjection struct{}
|
|
|
|
|
|
|
|
|
|
func newLoginNameProjection(ctx context.Context, config handler.Config) *handler.Handler {
|
|
|
|
|
return handler.NewHandler(ctx, &config, new(loginNameProjection))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (*loginNameProjection) Name() string {
|
|
|
|
|
return LoginNameProjectionTable
|
2022-03-23 09:02:39 +01:00
|
|
|
}
|
|
|
|
|
|
2023-10-19 12:19:10 +02:00
|
|
|
func (*loginNameProjection) Init() *old_handler.Check {
|
|
|
|
|
return handler.NewViewCheck(
|
2025-06-06 10:48:29 +02:00
|
|
|
loginNameViewStmt,
|
2023-10-19 12:19:10 +02:00
|
|
|
handler.NewSuffixedTable(
|
|
|
|
|
[]*handler.InitColumn{
|
|
|
|
|
handler.NewColumn(LoginNameUserIDCol, handler.ColumnTypeText),
|
|
|
|
|
handler.NewColumn(LoginNameUserUserNameCol, handler.ColumnTypeText),
|
2023-12-08 13:14:22 +01:00
|
|
|
// TODO: implement computed columns
|
|
|
|
|
// handler.NewComputedColumn(loginNameUserUserNameLowerCol, handler.ColumnTypeText),
|
2023-10-19 12:19:10 +02:00
|
|
|
handler.NewColumn(LoginNameUserResourceOwnerCol, handler.ColumnTypeText),
|
|
|
|
|
handler.NewColumn(LoginNameUserInstanceIDCol, handler.ColumnTypeText),
|
|
|
|
|
},
|
|
|
|
|
handler.NewPrimaryKey(LoginNameUserInstanceIDCol, LoginNameUserIDCol),
|
2022-03-23 09:02:39 +01:00
|
|
|
loginNameUserSuffix,
|
2023-12-08 13:14:22 +01:00
|
|
|
handler.WithIndex(handler.NewIndex("instance_user_name", []string{LoginNameUserInstanceIDCol, LoginNameUserUserNameCol},
|
|
|
|
|
handler.WithInclude(LoginNameUserResourceOwnerCol),
|
|
|
|
|
)),
|
2023-10-19 12:19:10 +02:00
|
|
|
handler.WithIndex(
|
|
|
|
|
handler.NewIndex("lnu_instance_ro_id", []string{LoginNameUserInstanceIDCol, LoginNameUserResourceOwnerCol, LoginNameUserIDCol},
|
|
|
|
|
handler.WithInclude(
|
|
|
|
|
LoginNameUserUserNameCol,
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
),
|
2023-12-08 13:14:22 +01:00
|
|
|
// TODO: uncomment the following line when login_names4 will be created
|
|
|
|
|
// handler.WithIndex(
|
|
|
|
|
// handler.NewIndex("search", []string{LoginNameUserInstanceIDCol, loginNameUserUserNameLowerCol},
|
|
|
|
|
// handler.WithInclude(LoginNameUserResourceOwnerCol),
|
|
|
|
|
// ),
|
|
|
|
|
// ),
|
2022-03-23 09:02:39 +01:00
|
|
|
),
|
2023-10-19 12:19:10 +02:00
|
|
|
handler.NewSuffixedTable(
|
|
|
|
|
[]*handler.InitColumn{
|
|
|
|
|
handler.NewColumn(LoginNameDomainNameCol, handler.ColumnTypeText),
|
2023-12-08 13:14:22 +01:00
|
|
|
// TODO: implement computed columns
|
|
|
|
|
// handler.NewComputedColumn(loginNameDomainNameLowerCol, handler.ColumnTypeText),
|
2023-10-19 12:19:10 +02:00
|
|
|
handler.NewColumn(LoginNameDomainIsPrimaryCol, handler.ColumnTypeBool, handler.Default(false)),
|
|
|
|
|
handler.NewColumn(LoginNameDomainResourceOwnerCol, handler.ColumnTypeText),
|
|
|
|
|
handler.NewColumn(LoginNameDomainInstanceIDCol, handler.ColumnTypeText),
|
|
|
|
|
},
|
|
|
|
|
handler.NewPrimaryKey(LoginNameDomainInstanceIDCol, LoginNameDomainResourceOwnerCol, LoginNameDomainNameCol),
|
2022-03-23 09:02:39 +01:00
|
|
|
loginNameDomainSuffix,
|
2023-12-08 13:14:22 +01:00
|
|
|
// TODO: uncomment the following line when login_names4 will be created
|
|
|
|
|
// handler.WithIndex(
|
|
|
|
|
// handler.NewIndex("search", []string{LoginNameDomainInstanceIDCol, LoginNameDomainResourceOwnerCol, loginNameDomainNameLowerCol}),
|
|
|
|
|
// ),
|
|
|
|
|
// handler.WithIndex(
|
|
|
|
|
// handler.NewIndex("search_result", []string{LoginNameDomainInstanceIDCol, LoginNameDomainResourceOwnerCol},
|
|
|
|
|
// handler.WithInclude(LoginNameDomainIsPrimaryCol),
|
|
|
|
|
// ),
|
|
|
|
|
// ),
|
2022-03-23 09:02:39 +01:00
|
|
|
),
|
2023-10-19 12:19:10 +02:00
|
|
|
handler.NewSuffixedTable(
|
|
|
|
|
[]*handler.InitColumn{
|
|
|
|
|
handler.NewColumn(LoginNamePoliciesMustBeDomainCol, handler.ColumnTypeBool),
|
|
|
|
|
handler.NewColumn(LoginNamePoliciesIsDefaultCol, handler.ColumnTypeBool),
|
|
|
|
|
handler.NewColumn(LoginNamePoliciesResourceOwnerCol, handler.ColumnTypeText),
|
|
|
|
|
handler.NewColumn(LoginNamePoliciesInstanceIDCol, handler.ColumnTypeText),
|
|
|
|
|
},
|
|
|
|
|
handler.NewPrimaryKey(LoginNamePoliciesInstanceIDCol, LoginNamePoliciesResourceOwnerCol),
|
2022-03-23 09:02:39 +01:00
|
|
|
loginNamePolicySuffix,
|
2025-06-06 10:48:29 +02:00
|
|
|
// this index is not used anymore, but kept for understanding why the default exists on existing systems, TODO: remove in login_names4
|
|
|
|
|
// handler.WithIndex(handler.NewIndex("is_default", []string{LoginNamePoliciesResourceOwnerCol, LoginNamePoliciesIsDefaultCol})),
|
|
|
|
|
handler.WithIndex(handler.NewIndex("is_default_owner", []string{LoginNamePoliciesInstanceIDCol, LoginNamePoliciesIsDefaultCol, LoginNamePoliciesResourceOwnerCol}, handler.WithInclude(LoginNamePoliciesMustBeDomainCol))),
|
2022-03-23 09:02:39 +01:00
|
|
|
),
|
|
|
|
|
)
|
2021-11-23 10:31:23 +01:00
|
|
|
}
|
|
|
|
|
|
2023-10-19 12:19:10 +02:00
|
|
|
func (p *loginNameProjection) Reducers() []handler.AggregateReducer {
|
2021-11-23 10:31:23 +01:00
|
|
|
return []handler.AggregateReducer{
|
|
|
|
|
{
|
|
|
|
|
Aggregate: user.AggregateType,
|
2023-10-19 12:19:10 +02:00
|
|
|
EventReducers: []handler.EventReducer{
|
2021-12-16 14:25:38 +01:00
|
|
|
{
|
|
|
|
|
Event: user.UserV1AddedType,
|
|
|
|
|
Reduce: p.reduceUserCreated,
|
|
|
|
|
},
|
2021-11-23 10:31:23 +01:00
|
|
|
{
|
|
|
|
|
Event: user.HumanAddedType,
|
|
|
|
|
Reduce: p.reduceUserCreated,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
Event: user.HumanRegisteredType,
|
|
|
|
|
Reduce: p.reduceUserCreated,
|
|
|
|
|
},
|
2021-12-16 14:25:38 +01:00
|
|
|
{
|
|
|
|
|
Event: user.UserV1RegisteredType,
|
|
|
|
|
Reduce: p.reduceUserCreated,
|
|
|
|
|
},
|
2021-11-23 10:31:23 +01:00
|
|
|
{
|
|
|
|
|
Event: user.MachineAddedEventType,
|
|
|
|
|
Reduce: p.reduceUserCreated,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
Event: user.UserRemovedType,
|
|
|
|
|
Reduce: p.reduceUserRemoved,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
Event: user.UserUserNameChangedType,
|
|
|
|
|
Reduce: p.reduceUserNameChanged,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
// changes the username of the user
|
|
|
|
|
// this event occures in orgs
|
|
|
|
|
// where policy.must_be_domain=false
|
|
|
|
|
Event: user.UserDomainClaimedType,
|
|
|
|
|
Reduce: p.reduceUserDomainClaimed,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
Aggregate: org.AggregateType,
|
2023-10-19 12:19:10 +02:00
|
|
|
EventReducers: []handler.EventReducer{
|
2021-11-23 10:31:23 +01:00
|
|
|
{
|
2022-03-28 10:05:09 +02:00
|
|
|
Event: org.DomainPolicyAddedEventType,
|
2021-11-23 10:31:23 +01:00
|
|
|
Reduce: p.reduceOrgIAMPolicyAdded,
|
|
|
|
|
},
|
|
|
|
|
{
|
2022-03-28 10:05:09 +02:00
|
|
|
Event: org.DomainPolicyChangedEventType,
|
2022-03-24 17:21:34 +01:00
|
|
|
Reduce: p.reduceDomainPolicyChanged,
|
2021-11-23 10:31:23 +01:00
|
|
|
},
|
|
|
|
|
{
|
2022-03-28 10:05:09 +02:00
|
|
|
Event: org.DomainPolicyRemovedEventType,
|
2022-03-24 17:21:34 +01:00
|
|
|
Reduce: p.reduceDomainPolicyRemoved,
|
2021-11-23 10:31:23 +01:00
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
Event: org.OrgDomainPrimarySetEventType,
|
|
|
|
|
Reduce: p.reducePrimaryDomainSet,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
Event: org.OrgDomainRemovedEventType,
|
|
|
|
|
Reduce: p.reduceDomainRemoved,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
Event: org.OrgDomainVerifiedEventType,
|
|
|
|
|
Reduce: p.reduceDomainVerified,
|
|
|
|
|
},
|
2022-11-30 17:01:17 +01:00
|
|
|
{
|
|
|
|
|
Event: org.OrgRemovedEventType,
|
|
|
|
|
Reduce: p.reduceOwnerRemoved,
|
|
|
|
|
},
|
2021-11-23 10:31:23 +01:00
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
2022-03-24 17:21:34 +01:00
|
|
|
Aggregate: instance.AggregateType,
|
2023-10-19 12:19:10 +02:00
|
|
|
EventReducers: []handler.EventReducer{
|
2021-11-23 10:31:23 +01:00
|
|
|
{
|
2022-03-28 10:05:09 +02:00
|
|
|
Event: instance.DomainPolicyAddedEventType,
|
2021-11-23 10:31:23 +01:00
|
|
|
Reduce: p.reduceOrgIAMPolicyAdded,
|
|
|
|
|
},
|
|
|
|
|
{
|
2022-03-28 10:05:09 +02:00
|
|
|
Event: instance.DomainPolicyChangedEventType,
|
2022-03-24 17:21:34 +01:00
|
|
|
Reduce: p.reduceDomainPolicyChanged,
|
2021-11-23 10:31:23 +01:00
|
|
|
},
|
2022-10-20 13:36:52 +01:00
|
|
|
{
|
|
|
|
|
Event: instance.InstanceRemovedEventType,
|
2022-10-26 15:06:48 +02:00
|
|
|
Reduce: p.reduceInstanceRemoved,
|
2022-10-20 13:36:52 +01:00
|
|
|
},
|
2021-11-23 10:31:23 +01:00
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-06-14 07:51:00 +02:00
|
|
|
func (p *loginNameProjection) reduceUserCreated(event eventstore.Event) (*handler.Statement, error) {
|
2021-11-23 10:31:23 +01:00
|
|
|
var userName string
|
|
|
|
|
|
|
|
|
|
switch e := event.(type) {
|
|
|
|
|
case *user.HumanAddedEvent:
|
|
|
|
|
userName = e.UserName
|
|
|
|
|
case *user.HumanRegisteredEvent:
|
|
|
|
|
userName = e.UserName
|
|
|
|
|
case *user.MachineAddedEvent:
|
|
|
|
|
userName = e.UserName
|
|
|
|
|
default:
|
2023-12-08 16:30:55 +02:00
|
|
|
return nil, zerrors.ThrowInvalidArgumentf(nil, "HANDL-ayo69", "reduce.wrong.event.type %v", []eventstore.EventType{user.UserV1AddedType, user.HumanAddedType, user.UserV1RegisteredType, user.HumanRegisteredType, user.MachineAddedEventType})
|
2021-11-23 10:31:23 +01:00
|
|
|
}
|
|
|
|
|
|
2023-10-19 12:19:10 +02:00
|
|
|
return handler.NewCreateStatement(
|
2021-11-23 10:31:23 +01:00
|
|
|
event,
|
|
|
|
|
[]handler.Column{
|
|
|
|
|
handler.NewCol(LoginNameUserIDCol, event.Aggregate().ID),
|
|
|
|
|
handler.NewCol(LoginNameUserUserNameCol, userName),
|
|
|
|
|
handler.NewCol(LoginNameUserResourceOwnerCol, event.Aggregate().ResourceOwner),
|
2022-03-23 09:02:39 +01:00
|
|
|
handler.NewCol(LoginNameUserInstanceIDCol, event.Aggregate().InstanceID),
|
2021-11-23 10:31:23 +01:00
|
|
|
},
|
2023-10-19 12:19:10 +02:00
|
|
|
handler.WithTableSuffix(loginNameUserSuffix),
|
2021-11-23 10:31:23 +01:00
|
|
|
), nil
|
|
|
|
|
}
|
|
|
|
|
|
2022-06-14 07:51:00 +02:00
|
|
|
func (p *loginNameProjection) reduceUserRemoved(event eventstore.Event) (*handler.Statement, error) {
|
2021-11-23 10:31:23 +01:00
|
|
|
e, ok := event.(*user.UserRemovedEvent)
|
|
|
|
|
if !ok {
|
2023-12-08 16:30:55 +02:00
|
|
|
return nil, zerrors.ThrowInvalidArgumentf(nil, "HANDL-QIe3C", "reduce.wrong.event.type %s", user.UserRemovedType)
|
2021-11-23 10:31:23 +01:00
|
|
|
}
|
|
|
|
|
|
2023-10-19 12:19:10 +02:00
|
|
|
return handler.NewDeleteStatement(
|
2021-11-23 10:31:23 +01:00
|
|
|
event,
|
|
|
|
|
[]handler.Condition{
|
|
|
|
|
handler.NewCond(LoginNameUserIDCol, e.Aggregate().ID),
|
2022-11-10 11:59:33 +01:00
|
|
|
handler.NewCond(LoginNameUserInstanceIDCol, e.Aggregate().InstanceID),
|
2021-11-23 10:31:23 +01:00
|
|
|
},
|
2023-10-19 12:19:10 +02:00
|
|
|
handler.WithTableSuffix(loginNameUserSuffix),
|
2021-11-23 10:31:23 +01:00
|
|
|
), nil
|
|
|
|
|
}
|
|
|
|
|
|
2022-06-14 07:51:00 +02:00
|
|
|
func (p *loginNameProjection) reduceUserNameChanged(event eventstore.Event) (*handler.Statement, error) {
|
2021-11-23 10:31:23 +01:00
|
|
|
e, ok := event.(*user.UsernameChangedEvent)
|
|
|
|
|
if !ok {
|
2023-12-08 16:30:55 +02:00
|
|
|
return nil, zerrors.ThrowInvalidArgumentf(nil, "HANDL-QlwjC", "reduce.wrong.event.type %s", user.UserUserNameChangedType)
|
2021-11-23 10:31:23 +01:00
|
|
|
}
|
|
|
|
|
|
2023-10-19 12:19:10 +02:00
|
|
|
return handler.NewUpdateStatement(
|
2021-11-23 10:31:23 +01:00
|
|
|
event,
|
|
|
|
|
[]handler.Column{
|
|
|
|
|
handler.NewCol(LoginNameUserUserNameCol, e.UserName),
|
|
|
|
|
},
|
|
|
|
|
[]handler.Condition{
|
|
|
|
|
handler.NewCond(LoginNameUserIDCol, e.Aggregate().ID),
|
2022-11-10 11:59:33 +01:00
|
|
|
handler.NewCond(LoginNameUserInstanceIDCol, e.Aggregate().InstanceID),
|
2021-11-23 10:31:23 +01:00
|
|
|
},
|
2023-10-19 12:19:10 +02:00
|
|
|
handler.WithTableSuffix(loginNameUserSuffix),
|
2021-11-23 10:31:23 +01:00
|
|
|
), nil
|
|
|
|
|
}
|
|
|
|
|
|
2022-06-14 07:51:00 +02:00
|
|
|
func (p *loginNameProjection) reduceUserDomainClaimed(event eventstore.Event) (*handler.Statement, error) {
|
2021-11-23 10:31:23 +01:00
|
|
|
e, ok := event.(*user.DomainClaimedEvent)
|
|
|
|
|
if !ok {
|
2023-12-08 16:30:55 +02:00
|
|
|
return nil, zerrors.ThrowInvalidArgumentf(nil, "HANDL-AQMBY", "reduce.wrong.event.type %s", user.UserDomainClaimedType)
|
2021-11-23 10:31:23 +01:00
|
|
|
}
|
|
|
|
|
|
2023-10-19 12:19:10 +02:00
|
|
|
return handler.NewUpdateStatement(
|
2021-11-23 10:31:23 +01:00
|
|
|
event,
|
|
|
|
|
[]handler.Column{
|
|
|
|
|
handler.NewCol(LoginNameUserUserNameCol, e.UserName),
|
|
|
|
|
},
|
|
|
|
|
[]handler.Condition{
|
|
|
|
|
handler.NewCond(LoginNameUserIDCol, e.Aggregate().ID),
|
2022-11-10 11:59:33 +01:00
|
|
|
handler.NewCond(LoginNameUserInstanceIDCol, e.Aggregate().InstanceID),
|
2021-11-23 10:31:23 +01:00
|
|
|
},
|
2023-10-19 12:19:10 +02:00
|
|
|
handler.WithTableSuffix(loginNameUserSuffix),
|
2021-11-23 10:31:23 +01:00
|
|
|
), nil
|
|
|
|
|
}
|
|
|
|
|
|
2022-06-14 07:51:00 +02:00
|
|
|
func (p *loginNameProjection) reduceOrgIAMPolicyAdded(event eventstore.Event) (*handler.Statement, error) {
|
2021-11-23 10:31:23 +01:00
|
|
|
var (
|
2022-03-24 17:21:34 +01:00
|
|
|
policyEvent *policy.DomainPolicyAddedEvent
|
2021-11-23 10:31:23 +01:00
|
|
|
isDefault bool
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
switch e := event.(type) {
|
2022-03-28 10:05:09 +02:00
|
|
|
case *org.DomainPolicyAddedEvent:
|
2022-03-24 17:21:34 +01:00
|
|
|
policyEvent = &e.DomainPolicyAddedEvent
|
2021-11-23 10:31:23 +01:00
|
|
|
isDefault = false
|
2022-03-28 10:05:09 +02:00
|
|
|
case *instance.DomainPolicyAddedEvent:
|
2022-03-24 17:21:34 +01:00
|
|
|
policyEvent = &e.DomainPolicyAddedEvent
|
2021-11-23 10:31:23 +01:00
|
|
|
isDefault = true
|
|
|
|
|
default:
|
2023-12-08 16:30:55 +02:00
|
|
|
return nil, zerrors.ThrowInvalidArgumentf(nil, "HANDL-yCV6S", "reduce.wrong.event.type %v", []eventstore.EventType{org.DomainPolicyAddedEventType, instance.DomainPolicyAddedEventType})
|
2021-11-23 10:31:23 +01:00
|
|
|
}
|
|
|
|
|
|
2023-10-19 12:19:10 +02:00
|
|
|
return handler.NewCreateStatement(
|
2021-11-23 10:31:23 +01:00
|
|
|
event,
|
|
|
|
|
[]handler.Column{
|
|
|
|
|
handler.NewCol(LoginNamePoliciesMustBeDomainCol, policyEvent.UserLoginMustBeDomain),
|
|
|
|
|
handler.NewCol(LoginNamePoliciesIsDefaultCol, isDefault),
|
|
|
|
|
handler.NewCol(LoginNamePoliciesResourceOwnerCol, policyEvent.Aggregate().ResourceOwner),
|
2022-03-23 09:02:39 +01:00
|
|
|
handler.NewCol(LoginNamePoliciesInstanceIDCol, policyEvent.Aggregate().InstanceID),
|
2021-11-23 10:31:23 +01:00
|
|
|
},
|
2023-10-19 12:19:10 +02:00
|
|
|
handler.WithTableSuffix(loginNamePolicySuffix),
|
2021-11-23 10:31:23 +01:00
|
|
|
), nil
|
|
|
|
|
}
|
|
|
|
|
|
2022-06-14 07:51:00 +02:00
|
|
|
func (p *loginNameProjection) reduceDomainPolicyChanged(event eventstore.Event) (*handler.Statement, error) {
|
2022-03-24 17:21:34 +01:00
|
|
|
var policyEvent *policy.DomainPolicyChangedEvent
|
2021-11-23 10:31:23 +01:00
|
|
|
|
|
|
|
|
switch e := event.(type) {
|
2022-03-28 10:05:09 +02:00
|
|
|
case *org.DomainPolicyChangedEvent:
|
2022-03-24 17:21:34 +01:00
|
|
|
policyEvent = &e.DomainPolicyChangedEvent
|
2022-03-28 10:05:09 +02:00
|
|
|
case *instance.DomainPolicyChangedEvent:
|
2022-03-24 17:21:34 +01:00
|
|
|
policyEvent = &e.DomainPolicyChangedEvent
|
2021-11-23 10:31:23 +01:00
|
|
|
default:
|
2023-12-08 16:30:55 +02:00
|
|
|
return nil, zerrors.ThrowInvalidArgumentf(nil, "HANDL-ArFDd", "reduce.wrong.event.type %v", []eventstore.EventType{org.DomainPolicyChangedEventType, instance.DomainPolicyChangedEventType})
|
2021-11-23 10:31:23 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if policyEvent.UserLoginMustBeDomain == nil {
|
2023-10-19 12:19:10 +02:00
|
|
|
return handler.NewNoOpStatement(event), nil
|
2021-11-23 10:31:23 +01:00
|
|
|
}
|
|
|
|
|
|
2023-10-19 12:19:10 +02:00
|
|
|
return handler.NewUpdateStatement(
|
2021-11-23 10:31:23 +01:00
|
|
|
event,
|
|
|
|
|
[]handler.Column{
|
|
|
|
|
handler.NewCol(LoginNamePoliciesMustBeDomainCol, *policyEvent.UserLoginMustBeDomain),
|
|
|
|
|
},
|
|
|
|
|
[]handler.Condition{
|
|
|
|
|
handler.NewCond(LoginNamePoliciesResourceOwnerCol, policyEvent.Aggregate().ResourceOwner),
|
2022-11-10 11:59:33 +01:00
|
|
|
handler.NewCond(LoginNamePoliciesInstanceIDCol, policyEvent.Aggregate().InstanceID),
|
2021-11-23 10:31:23 +01:00
|
|
|
},
|
2023-10-19 12:19:10 +02:00
|
|
|
handler.WithTableSuffix(loginNamePolicySuffix),
|
2021-11-23 10:31:23 +01:00
|
|
|
), nil
|
|
|
|
|
}
|
|
|
|
|
|
2022-06-14 07:51:00 +02:00
|
|
|
func (p *loginNameProjection) reduceDomainPolicyRemoved(event eventstore.Event) (*handler.Statement, error) {
|
2022-03-28 10:05:09 +02:00
|
|
|
e, ok := event.(*org.DomainPolicyRemovedEvent)
|
2021-11-23 10:31:23 +01:00
|
|
|
if !ok {
|
2023-12-08 16:30:55 +02:00
|
|
|
return nil, zerrors.ThrowInvalidArgumentf(nil, "HANDL-ysEeB", "reduce.wrong.event.type %s", org.DomainPolicyRemovedEventType)
|
2021-11-23 10:31:23 +01:00
|
|
|
}
|
|
|
|
|
|
2023-10-19 12:19:10 +02:00
|
|
|
return handler.NewDeleteStatement(
|
2021-11-23 10:31:23 +01:00
|
|
|
event,
|
|
|
|
|
[]handler.Condition{
|
|
|
|
|
handler.NewCond(LoginNamePoliciesResourceOwnerCol, e.Aggregate().ResourceOwner),
|
2022-11-10 11:59:33 +01:00
|
|
|
handler.NewCond(LoginNamePoliciesInstanceIDCol, e.Aggregate().InstanceID),
|
2021-11-23 10:31:23 +01:00
|
|
|
},
|
2023-10-19 12:19:10 +02:00
|
|
|
handler.WithTableSuffix(loginNamePolicySuffix),
|
2021-11-23 10:31:23 +01:00
|
|
|
), nil
|
|
|
|
|
}
|
|
|
|
|
|
2022-06-14 07:51:00 +02:00
|
|
|
func (p *loginNameProjection) reduceDomainVerified(event eventstore.Event) (*handler.Statement, error) {
|
2021-11-23 10:31:23 +01:00
|
|
|
e, ok := event.(*org.DomainVerifiedEvent)
|
|
|
|
|
if !ok {
|
2023-12-08 16:30:55 +02:00
|
|
|
return nil, zerrors.ThrowInvalidArgumentf(nil, "HANDL-weGAh", "reduce.wrong.event.type %s", org.OrgDomainVerifiedEventType)
|
2021-11-23 10:31:23 +01:00
|
|
|
}
|
|
|
|
|
|
2023-10-19 12:19:10 +02:00
|
|
|
return handler.NewCreateStatement(
|
2021-11-23 10:31:23 +01:00
|
|
|
event,
|
|
|
|
|
[]handler.Column{
|
|
|
|
|
handler.NewCol(LoginNameDomainNameCol, e.Domain),
|
|
|
|
|
handler.NewCol(LoginNameDomainResourceOwnerCol, e.Aggregate().ResourceOwner),
|
2022-03-23 09:02:39 +01:00
|
|
|
handler.NewCol(LoginNameDomainInstanceIDCol, e.Aggregate().InstanceID),
|
2021-11-23 10:31:23 +01:00
|
|
|
},
|
2023-10-19 12:19:10 +02:00
|
|
|
handler.WithTableSuffix(loginNameDomainSuffix),
|
2021-11-23 10:31:23 +01:00
|
|
|
), nil
|
|
|
|
|
}
|
|
|
|
|
|
2022-06-14 07:51:00 +02:00
|
|
|
func (p *loginNameProjection) reducePrimaryDomainSet(event eventstore.Event) (*handler.Statement, error) {
|
2021-11-23 10:31:23 +01:00
|
|
|
e, ok := event.(*org.DomainPrimarySetEvent)
|
|
|
|
|
if !ok {
|
2023-12-08 16:30:55 +02:00
|
|
|
return nil, zerrors.ThrowInvalidArgumentf(nil, "HANDL-eOXPN", "reduce.wrong.event.type %s", org.OrgDomainPrimarySetEventType)
|
2021-11-23 10:31:23 +01:00
|
|
|
}
|
|
|
|
|
|
2023-10-19 12:19:10 +02:00
|
|
|
return handler.NewMultiStatement(
|
2021-11-23 10:31:23 +01:00
|
|
|
e,
|
2023-10-19 12:19:10 +02:00
|
|
|
handler.AddUpdateStatement(
|
2021-11-23 10:31:23 +01:00
|
|
|
[]handler.Column{
|
|
|
|
|
handler.NewCol(LoginNameDomainIsPrimaryCol, false),
|
|
|
|
|
},
|
|
|
|
|
[]handler.Condition{
|
|
|
|
|
handler.NewCond(LoginNameDomainResourceOwnerCol, e.Aggregate().ResourceOwner),
|
|
|
|
|
handler.NewCond(LoginNameDomainIsPrimaryCol, true),
|
2022-11-10 11:59:33 +01:00
|
|
|
handler.NewCond(LoginNameDomainInstanceIDCol, e.Aggregate().InstanceID),
|
2021-11-23 10:31:23 +01:00
|
|
|
},
|
2023-10-19 12:19:10 +02:00
|
|
|
handler.WithTableSuffix(loginNameDomainSuffix),
|
2021-11-23 10:31:23 +01:00
|
|
|
),
|
2023-10-19 12:19:10 +02:00
|
|
|
handler.AddUpdateStatement(
|
2021-11-23 10:31:23 +01:00
|
|
|
[]handler.Column{
|
|
|
|
|
handler.NewCol(LoginNameDomainIsPrimaryCol, true),
|
|
|
|
|
},
|
|
|
|
|
[]handler.Condition{
|
|
|
|
|
handler.NewCond(LoginNameDomainNameCol, e.Domain),
|
|
|
|
|
handler.NewCond(LoginNameDomainResourceOwnerCol, e.Aggregate().ResourceOwner),
|
2022-11-10 11:59:33 +01:00
|
|
|
handler.NewCond(LoginNameDomainInstanceIDCol, e.Aggregate().InstanceID),
|
2021-11-23 10:31:23 +01:00
|
|
|
},
|
2023-10-19 12:19:10 +02:00
|
|
|
handler.WithTableSuffix(loginNameDomainSuffix),
|
2021-11-23 10:31:23 +01:00
|
|
|
),
|
|
|
|
|
), nil
|
|
|
|
|
}
|
|
|
|
|
|
2022-06-14 07:51:00 +02:00
|
|
|
func (p *loginNameProjection) reduceDomainRemoved(event eventstore.Event) (*handler.Statement, error) {
|
2021-11-23 10:31:23 +01:00
|
|
|
e, ok := event.(*org.DomainRemovedEvent)
|
|
|
|
|
if !ok {
|
2023-12-08 16:30:55 +02:00
|
|
|
return nil, zerrors.ThrowInvalidArgumentf(nil, "HANDL-4RHYq", "reduce.wrong.event.type %s", org.OrgDomainRemovedEventType)
|
2021-11-23 10:31:23 +01:00
|
|
|
}
|
|
|
|
|
|
2023-10-19 12:19:10 +02:00
|
|
|
return handler.NewDeleteStatement(
|
2021-11-23 10:31:23 +01:00
|
|
|
event,
|
|
|
|
|
[]handler.Condition{
|
|
|
|
|
handler.NewCond(LoginNameDomainNameCol, e.Domain),
|
|
|
|
|
handler.NewCond(LoginNameDomainResourceOwnerCol, e.Aggregate().ResourceOwner),
|
2022-11-10 11:59:33 +01:00
|
|
|
handler.NewCond(LoginNameDomainInstanceIDCol, e.Aggregate().InstanceID),
|
2021-11-23 10:31:23 +01:00
|
|
|
},
|
2023-10-19 12:19:10 +02:00
|
|
|
handler.WithTableSuffix(loginNameDomainSuffix),
|
2021-11-23 10:31:23 +01:00
|
|
|
), nil
|
|
|
|
|
}
|
2022-10-26 15:06:48 +02:00
|
|
|
|
|
|
|
|
func (p *loginNameProjection) reduceInstanceRemoved(event eventstore.Event) (*handler.Statement, error) {
|
|
|
|
|
e, ok := event.(*instance.InstanceRemovedEvent)
|
|
|
|
|
if !ok {
|
2023-12-08 16:30:55 +02:00
|
|
|
return nil, zerrors.ThrowInvalidArgumentf(nil, "HANDL-ASeg3", "reduce.wrong.event.type %s", instance.InstanceRemovedEventType)
|
2022-10-26 15:06:48 +02:00
|
|
|
}
|
|
|
|
|
|
2023-10-19 12:19:10 +02:00
|
|
|
return handler.NewMultiStatement(
|
2022-10-26 15:06:48 +02:00
|
|
|
event,
|
2023-10-19 12:19:10 +02:00
|
|
|
handler.AddDeleteStatement(
|
2022-10-26 15:06:48 +02:00
|
|
|
[]handler.Condition{
|
|
|
|
|
handler.NewCond(LoginNameDomainInstanceIDCol, e.Aggregate().ID),
|
|
|
|
|
},
|
2023-10-19 12:19:10 +02:00
|
|
|
handler.WithTableSuffix(loginNameDomainSuffix),
|
2022-10-26 15:06:48 +02:00
|
|
|
),
|
2023-10-19 12:19:10 +02:00
|
|
|
handler.AddDeleteStatement(
|
2022-10-26 15:06:48 +02:00
|
|
|
[]handler.Condition{
|
|
|
|
|
handler.NewCond(LoginNamePoliciesInstanceIDCol, e.Aggregate().ID),
|
|
|
|
|
},
|
2023-10-19 12:19:10 +02:00
|
|
|
handler.WithTableSuffix(loginNamePolicySuffix),
|
2022-10-26 15:06:48 +02:00
|
|
|
),
|
2023-10-19 12:19:10 +02:00
|
|
|
handler.AddDeleteStatement(
|
2022-10-26 15:06:48 +02:00
|
|
|
[]handler.Condition{
|
|
|
|
|
handler.NewCond(LoginNameUserInstanceIDCol, e.Aggregate().ID),
|
|
|
|
|
},
|
2023-10-19 12:19:10 +02:00
|
|
|
handler.WithTableSuffix(loginNameUserSuffix),
|
2022-10-26 15:06:48 +02:00
|
|
|
),
|
|
|
|
|
), nil
|
|
|
|
|
}
|
2022-11-30 17:01:17 +01:00
|
|
|
|
|
|
|
|
func (p *loginNameProjection) reduceOwnerRemoved(event eventstore.Event) (*handler.Statement, error) {
|
|
|
|
|
e, ok := event.(*org.OrgRemovedEvent)
|
|
|
|
|
if !ok {
|
2023-12-08 16:30:55 +02:00
|
|
|
return nil, zerrors.ThrowInvalidArgumentf(nil, "HANDL-px02mo", "reduce.wrong.event.type %s", org.OrgRemovedEventType)
|
2022-11-30 17:01:17 +01:00
|
|
|
}
|
|
|
|
|
|
2023-10-19 12:19:10 +02:00
|
|
|
return handler.NewMultiStatement(
|
2022-11-30 17:01:17 +01:00
|
|
|
event,
|
2023-10-19 12:19:10 +02:00
|
|
|
handler.AddDeleteStatement(
|
2022-11-30 17:01:17 +01:00
|
|
|
[]handler.Condition{
|
|
|
|
|
handler.NewCond(LoginNameDomainInstanceIDCol, e.Aggregate().InstanceID),
|
|
|
|
|
handler.NewCond(LoginNameDomainResourceOwnerCol, e.Aggregate().ID),
|
|
|
|
|
},
|
2023-10-19 12:19:10 +02:00
|
|
|
handler.WithTableSuffix(loginNameDomainSuffix),
|
2022-11-30 17:01:17 +01:00
|
|
|
),
|
2023-10-19 12:19:10 +02:00
|
|
|
handler.AddDeleteStatement(
|
2022-11-30 17:01:17 +01:00
|
|
|
[]handler.Condition{
|
|
|
|
|
handler.NewCond(LoginNamePoliciesInstanceIDCol, e.Aggregate().InstanceID),
|
|
|
|
|
handler.NewCond(LoginNamePoliciesResourceOwnerCol, e.Aggregate().ID),
|
|
|
|
|
},
|
2023-10-19 12:19:10 +02:00
|
|
|
handler.WithTableSuffix(loginNamePolicySuffix),
|
2022-11-30 17:01:17 +01:00
|
|
|
),
|
2023-10-19 12:19:10 +02:00
|
|
|
handler.AddDeleteStatement(
|
2022-11-30 17:01:17 +01:00
|
|
|
[]handler.Condition{
|
|
|
|
|
handler.NewCond(LoginNameUserInstanceIDCol, e.Aggregate().InstanceID),
|
|
|
|
|
handler.NewCond(LoginNameUserResourceOwnerCol, e.Aggregate().ID),
|
|
|
|
|
},
|
2023-10-19 12:19:10 +02:00
|
|
|
handler.WithTableSuffix(loginNameUserSuffix),
|
2022-11-30 17:01:17 +01:00
|
|
|
),
|
|
|
|
|
), nil
|
|
|
|
|
}
|