diff --git a/backend/v3/api/org/v2/org.go b/backend/v3/api/org/v2/org.go index 601846848ac..793e42922c0 100644 --- a/backend/v3/api/org/v2/org.go +++ b/backend/v3/api/org/v2/org.go @@ -1,5 +1,14 @@ package orgv2 +import ( + "context" + + "connectrpc.com/connect" + + "github.com/zitadel/zitadel/backend/v3/domain" + v2beta_org "github.com/zitadel/zitadel/pkg/grpc/org/v2beta" +) + // import ( // "context" @@ -31,3 +40,24 @@ package orgv2 // } // return cmds // } + +func UpdateOrganization(ctx context.Context, request *connect.Request[v2beta_org.UpdateOrganizationRequest]) (*connect.Response[v2beta_org.UpdateOrganizationResponse], error) { + orgUpdtCmd := domain.NewUpdateOrgCommand(request.Msg.GetId(), request.Msg.GetName()) + + // TODO(IAM-Marco) Finish implementation in https://github.com/zitadel/zitadel/issues/10447 + domainAddCmd := domain.NewAddOrgDomainCommand(request.Msg.GetId(), request.Msg.GetName()) + domainSetPrimaryCmd := domain.NewSetPrimaryOrgDomainCommand(request.Msg.GetId(), request.Msg.GetName()) + // TODO(IAM-Marco) Check if passing the pointer is actually working to retrieve the domain name and the DomainVerified + domainRemoveCmd := domain.NewRemoveOrgDomainCommand(request.Msg.GetId(), orgUpdtCmd.OldDomainName, orgUpdtCmd.IsOldDomainVerified) + + batchCmd := domain.BatchCommands(orgUpdtCmd, domainAddCmd, domainSetPrimaryCmd, domainRemoveCmd) + + err := domain.Invoke(ctx, batchCmd) + if err != nil { + return nil, err + } + + return &connect.Response[v2beta_org.UpdateOrganizationResponse]{ + Msg: &v2beta_org.UpdateOrganizationResponse{}, + }, nil +} diff --git a/backend/v3/domain/org_domain_add.go b/backend/v3/domain/org_domain_add.go new file mode 100644 index 00000000000..b760b66e9c2 --- /dev/null +++ b/backend/v3/domain/org_domain_add.go @@ -0,0 +1,47 @@ +package domain + +import ( + "context" + + "github.com/zitadel/zitadel/internal/eventstore" + "github.com/zitadel/zitadel/internal/repository/org" +) + +type AddOrgDomainCommand struct { + OrgID string `json:"org_id"` + Name string `json:"name"` + // ClaimedUserIDs []string `json:"claimed_user_ids"` +} + +// Events implements Commander. +func (a *AddOrgDomainCommand) Events(ctx context.Context) []eventstore.Command { + // TODO(IAM-Marco) Finish implementation in https://github.com/zitadel/zitadel/issues/10447 + return []eventstore.Command{ + org.NewDomainAddedEvent(ctx, &org.NewAggregate(a.OrgID).Aggregate, a.Name), + org.NewDomainVerifiedEvent(ctx, &org.NewAggregate(a.OrgID).Aggregate, a.Name), + } +} + +func NewAddOrgDomainCommand(orgID, domainName string) *AddOrgDomainCommand { + return &AddOrgDomainCommand{ + OrgID: orgID, + Name: domainName, + } +} + +// Execute implements Commander. +func (a *AddOrgDomainCommand) Execute(ctx context.Context, opts *CommandOpts) (err error) { + return nil +} + +// String implements Commander. +func (a *AddOrgDomainCommand) String() string { + return "AddOrgDomainCommand" +} + +// Validate implements Commander. +func (a *AddOrgDomainCommand) Validate() (err error) { + return nil +} + +var _ Commander = (*AddOrgDomainCommand)(nil) diff --git a/backend/v3/domain/org_domain_remove.go b/backend/v3/domain/org_domain_remove.go new file mode 100644 index 00000000000..a784fca2797 --- /dev/null +++ b/backend/v3/domain/org_domain_remove.go @@ -0,0 +1,56 @@ +package domain + +import ( + "context" + + "github.com/zitadel/zitadel/internal/eventstore" + "github.com/zitadel/zitadel/internal/repository/org" +) + +type RemoveOrgDomainCommand struct { + OrgID string `json:"org_id"` + Name *string `json:"name"` + IsVerified *bool `json:"is_verified"` +} + +// Events implements Commander. +func (r *RemoveOrgDomainCommand) Events(ctx context.Context) []eventstore.Command { + // TODO(IAM-Marco) Finish implementation in https://github.com/zitadel/zitadel/issues/10447 + oldDomainName := "" + isVerified := false + if r.Name != nil { + oldDomainName = *r.Name + } + if r.IsVerified != nil { + isVerified = *r.IsVerified + } + + return []eventstore.Command{ + org.NewDomainRemovedEvent(ctx, &org.NewAggregate(r.OrgID).Aggregate, oldDomainName, isVerified), + } +} + +func NewRemoveOrgDomainCommand(orgID string, domainName *string, isDomainVerified *bool) *RemoveOrgDomainCommand { + return &RemoveOrgDomainCommand{ + OrgID: orgID, + Name: domainName, + IsVerified: isDomainVerified, + } +} + +// Execute implements Commander. +func (r *RemoveOrgDomainCommand) Execute(ctx context.Context, opts *CommandOpts) (err error) { + return nil +} + +// String implements Commander. +func (r *RemoveOrgDomainCommand) String() string { + return "RemoveOrgDomainCommand" +} + +// Validate implements Commander. +func (r *RemoveOrgDomainCommand) Validate() (err error) { + return nil +} + +var _ Commander = (*RemoveOrgDomainCommand)(nil) diff --git a/backend/v3/domain/org_domain_set.go b/backend/v3/domain/org_domain_set.go new file mode 100644 index 00000000000..641036d7488 --- /dev/null +++ b/backend/v3/domain/org_domain_set.go @@ -0,0 +1,45 @@ +package domain + +import ( + "context" + + "github.com/zitadel/zitadel/internal/eventstore" + "github.com/zitadel/zitadel/internal/repository/org" +) + +type SetPrimaryOrgDomainCommand struct { + OrgID string `json:"org_id"` + Name string `json:"name"` +} + +// Events implements Commander. +func (a *SetPrimaryOrgDomainCommand) Events(ctx context.Context) []eventstore.Command { + // TODO(IAM-Marco) Finish implementation in https://github.com/zitadel/zitadel/issues/10447 + return []eventstore.Command{ + org.NewDomainPrimarySetEvent(ctx, &org.NewAggregate(a.OrgID).Aggregate, a.Name), + } +} + +func NewSetPrimaryOrgDomainCommand(orgID, domainName string) *SetPrimaryOrgDomainCommand { + return &SetPrimaryOrgDomainCommand{ + OrgID: orgID, + Name: domainName, + } +} + +// Execute implements Commander. +func (a *SetPrimaryOrgDomainCommand) Execute(ctx context.Context, opts *CommandOpts) (err error) { + return nil +} + +// String implements Commander. +func (a *SetPrimaryOrgDomainCommand) String() string { + return "SetPrimaryOrgDomainCommand" +} + +// Validate implements Commander. +func (a *SetPrimaryOrgDomainCommand) Validate() (err error) { + return nil +} + +var _ Commander = (*SetPrimaryOrgDomainCommand)(nil)