mirror of
https://github.com/zitadel/zitadel.git
synced 2025-08-12 01:47:33 +00:00
feat: projections auto create their tables (#3324)
* begin init checks for projections * first projection checks * debug notification providers with query fixes * more projections and first index * more projections * more projections * finish projections * fix tests (remove db name) * create tables in setup * fix logging / error handling * add tenant to views * rename tenant to instance_id * add instance_id to all projections * add instance_id to all queries * correct instance_id on projections * add instance_id to failed_events * use separate context for instance * implement features projection * implement features projection * remove unique constraint from setup when migration failed * add error to failed setup event * add instance_id to primary keys * fix IAM projection * remove old migrations folder * fix keysFromYAML test
This commit is contained in:
@@ -2,12 +2,14 @@ package model
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"time"
|
||||
|
||||
"github.com/caos/logging"
|
||||
|
||||
caos_errs "github.com/caos/zitadel/internal/errors"
|
||||
"github.com/caos/zitadel/internal/eventstore/v1/models"
|
||||
"github.com/caos/zitadel/internal/user/model"
|
||||
es_model "github.com/caos/zitadel/internal/user/repository/eventsourcing/model"
|
||||
"time"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -27,6 +29,7 @@ type ExternalIDPView struct {
|
||||
ChangeDate time.Time `json:"-" gorm:"column:change_date"`
|
||||
ResourceOwner string `json:"-" gorm:"column:resource_owner"`
|
||||
Sequence uint64 `json:"-" gorm:"column:sequence"`
|
||||
InstanceID string `json:"instanceID" gorm:"column:instance_id"`
|
||||
}
|
||||
|
||||
func ExternalIDPViewFromModel(externalIDP *model.ExternalIDPView) *ExternalIDPView {
|
||||
@@ -80,6 +83,7 @@ func (i *ExternalIDPView) AppendEvent(event *models.Event) (err error) {
|
||||
func (r *ExternalIDPView) setRootData(event *models.Event) {
|
||||
r.UserID = event.AggregateID
|
||||
r.ResourceOwner = event.ResourceOwner
|
||||
r.InstanceID = event.InstanceID
|
||||
}
|
||||
|
||||
func (r *ExternalIDPView) SetData(event *models.Event) error {
|
||||
|
@@ -42,6 +42,7 @@ type NotifyUser struct {
|
||||
PasswordSet bool `json:"-" gorm:"column:password_set"`
|
||||
Sequence uint64 `json:"-" gorm:"column:sequence"`
|
||||
State int32 `json:"-" gorm:"-"`
|
||||
InstanceID string `json:"instanceID" gorm:"column:instance_id"`
|
||||
}
|
||||
|
||||
func NotifyUserFromModel(user *model.NotifyUser) *NotifyUser {
|
||||
@@ -158,6 +159,7 @@ func (u *NotifyUser) AppendEvent(event *models.Event) (err error) {
|
||||
func (u *NotifyUser) setRootData(event *models.Event) {
|
||||
u.ID = event.AggregateID
|
||||
u.ResourceOwner = event.ResourceOwner
|
||||
u.InstanceID = event.InstanceID
|
||||
}
|
||||
|
||||
func (u *NotifyUser) setData(event *models.Event) error {
|
||||
|
@@ -21,6 +21,7 @@ const (
|
||||
RefreshTokenKeyUserAgentID = "user_agent_id"
|
||||
RefreshTokenKeyExpiration = "expiration"
|
||||
RefreshTokenKeyResourceOwner = "resource_owner"
|
||||
RefreshTokenKeyInstanceID = "instance_id"
|
||||
)
|
||||
|
||||
type RefreshTokenView struct {
|
||||
@@ -39,6 +40,7 @@ type RefreshTokenView struct {
|
||||
IdleExpiration time.Time `json:"-" gorm:"column:idle_expiration"`
|
||||
Expiration time.Time `json:"-" gorm:"column:expiration"`
|
||||
Sequence uint64 `json:"-" gorm:"column:sequence"`
|
||||
InstanceID string `json:"instanceID" gorm:"column:instance_id"`
|
||||
}
|
||||
|
||||
func RefreshTokenViewsToModel(tokens []*RefreshTokenView) []*usr_model.RefreshTokenView {
|
||||
@@ -115,6 +117,7 @@ func (t *RefreshTokenView) AppendEvent(event *es_models.Event) error {
|
||||
func (t *RefreshTokenView) setRootData(event *es_models.Event) {
|
||||
t.UserID = event.AggregateID
|
||||
t.ResourceOwner = event.ResourceOwner
|
||||
t.InstanceID = event.InstanceID
|
||||
}
|
||||
|
||||
func (t *RefreshTokenView) appendAddedEvent(event *es_models.Event) error {
|
||||
|
@@ -63,6 +63,8 @@ func (key RefreshTokenSearchKey) ToColumnName() string {
|
||||
return RefreshTokenKeyExpiration
|
||||
case model.RefreshTokenSearchKeyResourceOwner:
|
||||
return RefreshTokenKeyResourceOwner
|
||||
case model.RefreshTokenSearchKeyInstanceID:
|
||||
return RefreshTokenKeyInstanceID
|
||||
default:
|
||||
return ""
|
||||
}
|
||||
|
@@ -23,6 +23,7 @@ const (
|
||||
TokenKeyUserAgentID = "user_agent_id"
|
||||
TokenKeyExpiration = "expiration"
|
||||
TokenKeyResourceOwner = "resource_owner"
|
||||
TokenKeyInstanceID = "instance_id"
|
||||
)
|
||||
|
||||
type TokenView struct {
|
||||
@@ -41,6 +42,7 @@ type TokenView struct {
|
||||
RefreshTokenID string `json:"refreshTokenID,omitempty" gorm:"refresh_token_id"`
|
||||
IsPAT bool `json:"-" gorm:"is_pat"`
|
||||
Deactivated bool `json:"-" gorm:"-"`
|
||||
InstanceID string `json:"instanceID" gorm:"column:instance_id"`
|
||||
}
|
||||
|
||||
func TokenViewToModel(token *TokenView) *usr_model.TokenView {
|
||||
@@ -125,6 +127,7 @@ func (t *TokenView) AppendEvent(event *es_models.Event) error {
|
||||
func (t *TokenView) setRootData(event *es_models.Event) {
|
||||
t.UserID = event.AggregateID
|
||||
t.ResourceOwner = event.ResourceOwner
|
||||
t.InstanceID = event.InstanceID
|
||||
}
|
||||
|
||||
func (t *TokenView) setData(event *es_models.Event) error {
|
||||
|
@@ -65,6 +65,8 @@ func (key TokenSearchKey) ToColumnName() string {
|
||||
return TokenKeyExpiration
|
||||
case model.TokenSearchKeyResourceOwner:
|
||||
return TokenKeyResourceOwner
|
||||
case model.TokenSearchKeyInstanceID:
|
||||
return TokenKeyInstanceID
|
||||
default:
|
||||
return ""
|
||||
}
|
||||
|
@@ -6,9 +6,10 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/caos/logging"
|
||||
"github.com/caos/zitadel/internal/query"
|
||||
"github.com/lib/pq"
|
||||
|
||||
"github.com/caos/zitadel/internal/query"
|
||||
|
||||
req_model "github.com/caos/zitadel/internal/auth_request/model"
|
||||
"github.com/caos/zitadel/internal/domain"
|
||||
caos_errs "github.com/caos/zitadel/internal/errors"
|
||||
@@ -32,6 +33,7 @@ const (
|
||||
UserKeyLoginNames = "login_names"
|
||||
UserKeyPreferredLoginName = "preferred_login_name"
|
||||
UserKeyType = "user_type"
|
||||
UserKeyInstanceID = "instance_id"
|
||||
)
|
||||
|
||||
type userType string
|
||||
@@ -53,6 +55,7 @@ type UserView struct {
|
||||
Sequence uint64 `json:"-" gorm:"column:sequence"`
|
||||
Type userType `json:"-" gorm:"column:user_type"`
|
||||
UserName string `json:"userName" gorm:"column:user_name"`
|
||||
InstanceID string `json:"instanceID" gorm:"column:instance_id"`
|
||||
*MachineView
|
||||
*HumanView
|
||||
}
|
||||
@@ -363,6 +366,7 @@ func (u *UserView) AppendEvent(event *models.Event) (err error) {
|
||||
func (u *UserView) setRootData(event *models.Event) {
|
||||
u.ID = event.AggregateID
|
||||
u.ResourceOwner = event.ResourceOwner
|
||||
u.InstanceID = event.InstanceID
|
||||
}
|
||||
|
||||
func (u *UserView) setData(event *models.Event) error {
|
||||
|
@@ -21,6 +21,7 @@ const (
|
||||
UserMembershipKeyObjectID = "object_id"
|
||||
UserMembershipKeyResourceOwner = "resource_owner"
|
||||
UserMembershipKeyMemberType = "member_type"
|
||||
UserMembershipKeyInstanceID = "instance_id"
|
||||
)
|
||||
|
||||
type UserMembershipView struct {
|
||||
@@ -36,6 +37,7 @@ type UserMembershipView struct {
|
||||
ResourceOwner string `json:"-" gorm:"column:resource_owner"`
|
||||
ResourceOwnerName string `json:"-" gorm:"column:resource_owner_name"`
|
||||
Sequence uint64 `json:"-" gorm:"column:sequence"`
|
||||
InstanceID string `json:"instanceID" gorm:"column:instance_id"`
|
||||
}
|
||||
|
||||
func UserMembershipToModel(membership *UserMembershipView) *model.UserMembershipView {
|
||||
@@ -105,6 +107,7 @@ func (u *UserMembershipView) setRootData(event *models.Event, memberType model.M
|
||||
u.ObjectID = event.AggregateID
|
||||
u.ResourceOwner = event.ResourceOwner
|
||||
u.MemberType = int32(memberType)
|
||||
u.InstanceID = event.InstanceID
|
||||
}
|
||||
|
||||
func (u *UserMembershipView) setIamMemberData(event *models.Event) error {
|
||||
|
@@ -61,6 +61,9 @@ func (key UserMembershipSearchKey) ToColumnName() string {
|
||||
return UserMembershipKeyAggregateID
|
||||
case usr_model.UserMembershipSearchKeyObjectID:
|
||||
return UserMembershipKeyObjectID
|
||||
case usr_model.UserMembershipSearchKeyInstanceID:
|
||||
return UserMembershipKeyInstanceID
|
||||
|
||||
default:
|
||||
return ""
|
||||
}
|
||||
|
@@ -75,6 +75,8 @@ func (key UserSearchKey) ToColumnName() string {
|
||||
return UserKeyPreferredLoginName
|
||||
case usr_model.UserSearchKeyType:
|
||||
return UserKeyType
|
||||
case usr_model.UserSearchKeyInstanceID:
|
||||
return UserKeyInstanceID
|
||||
default:
|
||||
return ""
|
||||
}
|
||||
|
@@ -41,6 +41,7 @@ type UserSessionView struct {
|
||||
MultiFactorVerification time.Time `json:"-" gorm:"column:multi_factor_verification"`
|
||||
MultiFactorVerificationType int32 `json:"-" gorm:"column:multi_factor_verification_type"`
|
||||
Sequence uint64 `json:"-" gorm:"column:sequence"`
|
||||
InstanceID string `json:"instanceID" gorm:"column:instance_id"`
|
||||
}
|
||||
|
||||
func UserSessionFromEvent(event *models.Event) (*UserSessionView, error) {
|
||||
|
Reference in New Issue
Block a user