Skip to content

Account

Commands

AccountCommandActivate

AccountCommandActivate is a domain command to activate an account.

Domain Command Struct:

go
type AccountCommandActivate struct {
	// Outline of the command
	Email string `json:"email"` // Email of the account to activate.
}

Domain Command Handling Method: AccountCommandActivate is a domain command handler handling the activation of an account. (AccountCommandActivate)

go
func (ch *commandHandler) AccountCommandActivate(ctx context.Context, cmd comby.Command, domainCmd *AccountCommandActivate) ([]comby.Event, error)

AccountCommandChangePassword

Domain Command Struct:

go
type AccountCommandChangePassword struct {
	Email           string `json:"email"`
	PasswordCurrent string `json:"passwordCurrent"`
	NewPassword     string `json:"newPassword"`
}

Domain Command Handling Method:

go
func (ch *commandHandler) AccountCommandChangePassword(ctx context.Context, cmd comby.Command, domainCmd *AccountCommandChangePassword) ([]comby.Event, error)

AccountCommandConfirmPasswordReset

Domain Command Struct:

go
type AccountCommandConfirmPasswordReset struct {
	OneTimeToken string `json:"oneTimeToken"`
	NewPassword  string `json:"newPassword"`
}

Domain Command Handling Method:

go
func (ch *commandHandler) AccountCommandConfirmPasswordReset(ctx context.Context, cmd comby.Command, domainCmd *AccountCommandConfirmPasswordReset) ([]comby.Event, error)

AccountCommandConfirmRegister

Domain Command Struct:

go
type AccountCommandConfirmRegister struct {
	OneTimeToken string `json:"oneTimeToken"`
}

Domain Command Handling Method:

go
func (ch *commandHandler) AccountCommandConfirmRegister(ctx context.Context, cmd comby.Command, domainCmd *AccountCommandConfirmRegister) ([]comby.Event, error)

AccountCommandCreate

Domain Command Struct:

go
type AccountCommandCreate struct {
	AccountUuid string `json:"accountUuid"`
	Email       string `json:"email,omitempty"`
	Password    string `json:"password,omitempty"`
	SessionKey  string `json:"sessionKey"`
}

Domain Command Handling Method:

go
func (ch *commandHandler) AccountCommandAdd(ctx context.Context, cmd comby.Command, domainCmd *AccountCommandCreate) ([]comby.Event, error)

AccountCommandDeleteAttributes

Domain Command Struct:

go
type AccountCommandDeleteAttributes struct {
	AccountUuid   string   `json:"accountUuid"`
	AttributeKeys []string `json:"attributeKeys"`
}

Domain Command Handling Method:

go
func (ch *commandHandler) AccountCommandDeleteAttributes(ctx context.Context, cmd comby.Command, domainCmd *AccountCommandDeleteAttributes) ([]comby.Event, error)

AccountCommandLogin

Domain Command Struct:

go
type AccountCommandLogin struct {
	Email       string `json:"email"`
	Password    string `json:"password"`
	SessionUuid string `json:"sessionUuid"`
	SessionKey  string `json:"sessionKey"`
}

Domain Command Handling Method:

go
func (ch *commandHandler) AccountCommandLogin(ctx context.Context, cmd comby.Command, domainCmd *AccountCommandLogin) ([]comby.Event, error)

AccountCommandLoginOAuth

Domain Command Struct:

go
type AccountCommandLoginOAuth struct {
	AccountUuid string              `json:"accountUuid"`
	Email       string              `json:"email,omitempty"`
	NewPassword string              `json:"newPassword,omitempty"`
	SessionUuid string              `json:"sessionUuid"`
	SessionKey  string              `json:"sessionKey"`
	Attributes  *comby.AttributeMap `json:"attributes,omitempty"`
}

Domain Command Handling Method:

go
func (ch *commandHandler) AccountCommandLoginOAuth(ctx context.Context, cmd comby.Command, domainCmd *AccountCommandLoginOAuth) ([]comby.Event, error)

AccountCommandLogout

AccountCommandLogout handles logging out of a user account or session, with strict access control to ensure security and proper authorization.

This command enforces the following rules:

  1. Self-Logout:
  • A user can log out their own account or session.
  • This ensures users have full control over their own sessions while preventing unauthorized access to other accounts.
  1. System Tenant Authorization:
  • Only the system tenant is permitted to log out other users or their sessions.
  • This restriction ensures that account-wide or cross-tenant session management is tightly controlled and limited to system-level administrators.

Domain Command Struct:

go
type AccountCommandLogout struct {
	AccountUuid string `json:"accountUuid,omitempty"`
	SessionUuid string `json:"sessionUuid,omitempty"`
}

Domain Command Handling Method:

go
func (ch *commandHandler) AccountCommandLogout(ctx context.Context, cmd comby.Command, domainCmd *AccountCommandLogout) ([]comby.Event, error)

AccountCommandRegister

Domain Command Struct:

go
type AccountCommandRegister struct {
	AccountUuid     string `json:"accountUuid"`
	InvitationToken string `json:"invitationToken"`
	Email           string `json:"email"`
	Password        string `json:"password"`
}

Domain Command Handling Method:

go
func (ch *commandHandler) AccountCommandRegister(ctx context.Context, cmd comby.Command, domainCmd *AccountCommandRegister) ([]comby.Event, error)

AccountCommandRemove

AccountCommandRemove handles the deletion of accounts, with strict rules to ensure proper access control.

This command enforces the following restrictions:

  1. Self-Deletion Prohibited:
  • A user cannot delete their own account under any circumstances. This ensures a safeguard against accidental or unauthorized self-deletion.
  1. System Tenant Authorization:
  • Only system tenants are permitted to delete accounts belonging to other users or tenants.
  • This restriction ensures that account deletion is controlled centrally and prevents unauthorized cross-tenant modifications.

Domain Command Struct:

go
type AccountCommandRemove struct {
	AccountUuid string `json:"accountUuid"`
}

Domain Command Handling Method:

go
func (ch *commandHandler) AccountCommandRemove(ctx context.Context, cmd comby.Command, domainCmd *AccountCommandRemove) ([]comby.Event, error)

AccountCommandRequestPasswordReset

Domain Command Struct:

go
type AccountCommandRequestPasswordReset struct {
	Email string `json:"email"`
}

Domain Command Handling Method:

go
func (ch *commandHandler) AccountCommandRequestPasswordReset(ctx context.Context, cmd comby.Command, domainCmd *AccountCommandRequestPasswordReset) ([]comby.Event, error)

AccountCommandSetAttributes

Domain Command Struct:

go
type AccountCommandSetAttributes struct {
	AccountUuid string              `json:"accountUuid"`
	Attributes  *comby.AttributeMap `json:"attributes"`
}

Domain Command Handling Method:

go
func (ch *commandHandler) AccountCommandSetAttributes(ctx context.Context, cmd comby.Command, domainCmd *AccountCommandSetAttributes) ([]comby.Event, error)

AccountCommandUpdateCredentials

AccountCommandUpdateCredentials handles updating the credentials (email and password) of an account, with strict access control to ensure security and proper authorization.

This command enforces the following rules:

  1. Self-Account Update:
  • A user can only update the credentials of their own account.
  • This restriction ensures users cannot modify the credentials of other accounts, maintaining strict isolation.
  1. System Tenant Administrator Override:
  • The system tenant administrator is allowed to update credentials for any account.
  • This provides a controlled mechanism for administrative recovery or management of user credentials.

Domain Command Struct:

go
type AccountCommandUpdateCredentials struct {
	AccountUuid string `json:"accountUuid"`
	Email       string `json:"email"`
	Password    string `json:"password"`
}

Domain Command Handling Method:

go
func (ch *commandHandler) AccountCommandUpdateCredentials(ctx context.Context, cmd comby.Command, domainCmd *AccountCommandUpdateCredentials) ([]comby.Event, error)

AccountCommandUpdateState

Domain Command Struct:

go
type AccountCommandUpdateState struct {
	AccountUuid string `json:"accountUuid"`
	State       string `json:"state"`
}

Domain Command Handling Method:

go
func (ch *commandHandler) AccountCommandUpdateState(ctx context.Context, cmd comby.Command, domainCmd *AccountCommandUpdateState) ([]comby.Event, error)

Queries

Domain Query Structs:

Domain Query Responses:

AccountQueryList

AccountQueryList returns a list of accounts based on the context of the requestor.

This query exhibits unique behavior, as its results vary depending on the context of the requesting entity. Specifically, the query's outcome can be classified into three distinct cases:

  1. System Tenant Context:
  • When the requestor represents the system tenant, the query retrieves all accounts.
  • This includes not only the accounts directly tied to the system tenant but also any identities belonging to other tenants.
  • This behavior ensures that the system tenant maintains global visibility across all tenant identities.
  1. Specific Tenant Context:
  • If the requestor represents a specific tenant, the query returns all accounts associated with that tenant.
  • Importantly, it excludes accounts or identities that are linked to other tenants.
  • This ensures that a tenant's view remains isolated, adhering to a strict multi-tenancy principle.
  1. Equal Sender and Target Context:
  • In cases where an account requests the list of accounts, the query returns only the requesting account itself.
  • This includes all identities associated with the requesting account, regardless of their tenant.
  • This behavior ensures that the account sees only its own information while maintaining visibility into all related identities.

Domain Query Struct:

go
type AccountQueryList struct {
	Page     int64  `json:"page,omitempty"`
	PageSize int64  `json:"pageSize,omitempty"`
	OrderBy  string `json:"orderBy,omitempty"`
}

Domain Query Handling Method:

go
func (qh *queryHandler) AccountQueryList(ctx context.Context, qry comby.Query, domainQry *AccountQueryList) (*AccountQueryListResponse, error)

AccountQueryModelByEmail

Domain Query Struct:

go
type AccountQueryModelByEmail struct {
	Email string `json:"email"`
}

Domain Query Handling Method:

go
func (qh *queryHandler) AccountQueryModelByEmail(ctx context.Context, qry comby.Query, domainQry *AccountQueryModelByEmail) (*AccountQueryItemResponse, error)

AccountQueryModelEmailPassword

Domain Query Struct:

go
type AccountQueryModelEmailPassword struct {
	Email              string `json:"email"`
	Password           string `json:"password"`
	IncludeLastSession bool   `json:"includeLastSession,omitempty"`
	IncludeAllSessions bool   `json:"includeAllSessions,omitempty"`
}

Domain Query Handling Method:

go
func (qh *queryHandler) AccountQueryModelEmailPassword(ctx context.Context, qry comby.Query, domainQry *AccountQueryModelEmailPassword) (*AccountQueryItemResponse, error)

AccountQueryModel

Domain Query Struct:

go
type AccountQueryModel struct {
	AccountUuid string `json:"accountUuid"`
}

Domain Query Handling Method:

go
func (qh *queryHandler) AccountQueryModel(ctx context.Context, qry comby.Query, domainQry *AccountQueryModel) (*AccountQueryItemResponse, error)

AccountQueryModelOneTimeToken

Domain Query Struct:

go
type AccountQueryModelOneTimeToken struct {
	OneTimeToken string `json:"ott"`
}

Domain Query Handling Method:

go
func (qh *queryHandler) AccountQueryModelOneTimeToken(ctx context.Context, qry comby.Query, domainQry *AccountQueryModelOneTimeToken) (*AccountQueryItemResponse, error)

AccountQueryModelSessionKey

Domain Query Struct:

go
type AccountQueryModelSessionKey struct {
	SessionKey string `json:"sessionKey"`
}

Domain Query Handling Method:

go
func (qh *queryHandler) AccountQueryModelSessionKey(ctx context.Context, qry comby.Query, domainQry *AccountQueryModelSessionKey) (*AccountQueryItemResponse, error)

AccountQueryListResponse

go
type AccountQueryListResponse struct {
	Items    []*readmodel.AccountModel `json:"items,omitempty"`
	Total    int64                     `json:"total,omitempty"`
	Page     int64                     `json:"page,omitempty"`
	PageSize int64                     `json:"pageSize,omitempty"`
}

AccountQueryItemResponse

go
type AccountQueryItemResponse struct {
	Item *readmodel.AccountModel `json:"item,omitempty"`
}

Events

AccountPasswordChangedEvent

AccountPasswordChangedEvent is an domain event that is triggered when the password of an account has changed.

Domain Event Struct:

go
type AccountPasswordChangedEvent struct {
	AccountUuid       string `json:"accountUuid"`       // Unique identifier of the account.
	NewHashedPassword string `json:"newHashedPassword"` // The new hashed password for the account.
}

Domain Event Handling Method:

go
func (agg *Account) AccountPasswordChangedEvent(ctx context.Context, evt comby.Event, domainEvt *AccountPasswordChangedEvent) (error)

AccountPasswordResetConfirmedEvent

Domain Event Struct:

go
type AccountPasswordResetConfirmedEvent struct {
	AccountUuid       string `json:"accountUuid"`
	NewHashedPassword string `json:"newHashedPassword"`
	State             string `json:"state"`
}

Domain Event Handling Method:

go
func (agg *Account) AccountPasswordResetConfirmedEvent(ctx context.Context, evt comby.Event, domainEvt *AccountPasswordResetConfirmedEvent) (error)

AccountRegisterConfirmedEvent

Domain Event Struct:

go
type AccountRegisterConfirmedEvent struct {
	AccountUuid string `json:"accountUuid"`
	State       string `json:"state"`
}

Domain Event Handling Method:

go
func (agg *Account) AccountRegisterConfirmedEvent(ctx context.Context, evt comby.Event, domainEvt *AccountRegisterConfirmedEvent) (error)

AccountAttributesDeletedEvent

Domain Event Struct:

go
type AccountAttributesDeletedEvent struct {
	AccountUuid   string   `json:"accountUuid"`
	AttributeKeys []string `json:"attributeKeys"`
}

Domain Event Handling Method:

go
func (agg *Account) AccountAttributesDeletedEvent(ctx context.Context, evt comby.Event, domainEvt *AccountAttributesDeletedEvent) (error)

AccountLoggedInEvent

Domain Event Struct:

go
type AccountLoggedInEvent struct {
	AccountUuid string `json:"accountUuid"`
	SessionUuid string `json:"sessionUuid"`
	SessionKey  string `json:"sessionKey"`
	ExpiredAt   int64  `json:"expiredAt"`
}

Domain Event Handling Method:

go
func (agg *Account) AccountLoggedInEvent(ctx context.Context, evt comby.Event, domainEvt *AccountLoggedInEvent) (error)

AccountLoggedOutEvent

Domain Event Struct:

go
type AccountLoggedOutEvent struct {
	AccountUuid string `json:"accountUuid"`
	SessionUuid string `json:"sessionUuid"`
}

Domain Event Handling Method:

go
func (agg *Account) AccountLoggedOutEvent(ctx context.Context, evt comby.Event, domainEvt *AccountLoggedOutEvent) (error)

AccountRegisteredEvent

Domain Event Struct:

go
type AccountRegisteredEvent struct {
	AccountUuid string `json:"accountUuid"`
	State       string `json:"state,omitempty"`
}

Domain Event Handling Method:

go
func (agg *Account) AccountRegisteredEvent(ctx context.Context, evt comby.Event, domainEvt *AccountRegisteredEvent) (error)

AccountRemovedEvent

Domain Event Struct:

go
type AccountRemovedEvent struct {
	AccountUuid string `json:"accountUuid"`
	State       string `json:"state,omitempty"`
}

Domain Event Handling Method:

go
func (agg *Account) AccountRemovedEvent(ctx context.Context, evt comby.Event, domainEvt *AccountRemovedEvent) (error)

AccountPasswordResetRequestedEvent

Domain Event Struct:

go
type AccountPasswordResetRequestedEvent struct {
	AccountUuid string `json:"accountUuid"`
	Code        string `json:"code"`
}

Domain Event Handling Method:

go
func (agg *Account) AccountPasswordResetRequestedEvent(ctx context.Context, evt comby.Event, domainEvt *AccountPasswordResetRequestedEvent) (error)

AccountAttributesSetEvent

Domain Event Struct:

go
type AccountAttributesSetEvent struct {
	AccountUuid string              `json:"accountUuid"`
	Attributes  *comby.AttributeMap `json:"attributes,omitempty"`
}

Domain Event Handling Method:

go
func (agg *Account) AccountAttributesSetEvent(ctx context.Context, evt comby.Event, domainEvt *AccountAttributesSetEvent) (error)

AccountCredentialsUpdatedEvent

Domain Event Struct:

go
type AccountCredentialsUpdatedEvent struct {
	AccountUuid string `json:"accountUuid"`
	Email       string `json:"email,omitempty"`
	Password    string `json:"password,omitempty"`
}

Domain Event Handling Method:

go
func (agg *Account) AccountCredentialsUpdatedEvent(ctx context.Context, evt comby.Event, domainEvt *AccountCredentialsUpdatedEvent) (error)

AccountOneTimeTokenUpdatedEvent

Domain Event Struct:

go
type AccountOneTimeTokenUpdatedEvent struct {
	AccountUuid string `json:"accountUuid"`
	Key         string `json:"key"`
	ExpiredAt   int64  `json:"expiredAt"`
}

Domain Event Handling Method:

go
func (agg *Account) AccountOneTimeTokenUpdatedEvent(ctx context.Context, evt comby.Event, domainEvt *AccountOneTimeTokenUpdatedEvent) (error)

AccountStateUpdatedEvent

Domain Event Struct:

go
type AccountStateUpdatedEvent struct {
	AccountUuid string `json:"accountUuid"`
	State       string `json:"state"`
}

Domain Event Handling Method:

go
func (agg *Account) AccountStateUpdatedEvent(ctx context.Context, evt comby.Event, domainEvt *AccountStateUpdatedEvent) (error)

Aggregate

Account represents the root aggregate for managing authentication and session handling.

  • Credentials: Attributes for email, password, and the next allowed login time.
  • OneTimeToken: Single-use tokens with attributes for the key, type, and expiration time.
  • Session: Details about active user sessions, including a unique session UUID, session key, and expiration time.

Aggregate Struct:

go
type Account struct {
	*comby.BaseAggregate
	// Entities
	Credentials  *Credentials
	OneTimeToken *OneTimeToken
	Sessions     []*Session
	// Value Objects
	Attributes *comby.AttributeMap
	State      string
}

Methods

ChangePassword

go
func (agg *Account) ChangePassword(passwordCurrent, newPassword string) (error)

ConfirmPasswordReset

go
func (agg *Account) ConfirmPasswordReset(oneTimeToken, newPassword string) (error)

ConfirmRegister

go
func (agg *Account) ConfirmRegister(oneTimeToken string) (error)

DeleteAttributes

go
func (agg *Account) DeleteAttributes(attributeKeys []string) (error)

Login

go
func (agg *Account) Login(email, password, sessionUuid, sessionKey string) (error)

Logout

go
func (agg *Account) Logout() (error)

LogoutSession

go
func (agg *Account) LogoutSession(sessionUuid string) (error)

Register

go
func (agg *Account) Register(email, password, state string) (error)

Remove

go
func (agg *Account) Remove() (error)

RequestPasswordReset

go
func (agg *Account) RequestPasswordReset() (error)

SetAttributes

go
func (agg *Account) SetAttributes(attributes *comby.AttributeMap) (error)

UpdateCredentials

go
func (agg *Account) UpdateCredentials(email, password string) (error)

UpdateOneTimeToken

go
func (agg *Account) UpdateOneTimeToken(key string, expiredAt int64) (error)

UpdateState

go
func (agg *Account) UpdateState(state string) (error)

Event Handlers

Reactor

Domain EventMethod
aggregate.AccountPasswordResetRequestedEventAccountPasswordResetRequestedEvent

AccountReadmodel

Domain EventMethod
tenantAggregate.TenantAttributesSetEventTenantAttributesSetEvent
tenantAggregate.TenantUpdatedEventTenantUpdatedEvent
tenantAggregate.TenantRemovedEventTenantRemovedEvent
tenantAggregate.TenantCreatedEventTenantCreatedEvent
identityAggregate.IdentityRemovedEventIdentityRemovedEvent
identityAggregate.IdentityProfileUpdatedEventIdentityProfileUpdatedEvent
identityAggregate.IdentityAddedGroupEventIdentityAddedGroupEvent
identityAggregate.IdentityCreatedEventIdentityCreatedEvent
groupAggregate.GroupAddedEventGroupAddedEvent
groupAggregate.GroupRemovedEventGroupRemovedEvent
groupAggregate.GroupUpdatedEventGroupUpdatedEvent
accountAggregate.AccountCredentialsUpdatedEventAccountCredentialsUpdatedEvent
accountAggregate.AccountStateUpdatedEventAccountStateUpdatedEvent
accountAggregate.AccountAttributesDeletedEventAccountAttributesDeletedEvent
accountAggregate.AccountAttributesSetEventAccountAttributesSetEvent
accountAggregate.AccountLoggedOutEventAccountLoggedOutEvent
accountAggregate.AccountLoggedInEventAccountLoggedInEvent
accountAggregate.AccountOneTimeTokenUpdatedEventAccountOneTimeTokenUpdatedEvent
accountAggregate.AccountRegisteredEventAccountRegisteredEvent
accountAggregate.AccountRemovedEventAccountRemovedEvent
accountAggregate.AccountPasswordResetConfirmedEventAccountPasswordResetConfirmedEvent
accountAggregate.AccountPasswordResetRequestedEventAccountPasswordResetRequestedEvent
accountAggregate.AccountPasswordChangedEventAccountPasswordChangedEvent
accountAggregate.AccountRegisterConfirmedEventAccountRegisterConfirmedEvent

Custom Permissions

NameTypeComment
AccountCommandActivateCommandActivate an existing account
AccountCommandChangePasswordCommandChange password of an existing account
AccountCommandConfirmPasswordResetCommandConfirm password reset of an existing account
AccountCommandConfirmRegisterCommandConfirm registration of an new account
AccountCommandCreateCommandCreate new account manually
AccountCommandLoginOAuthCommandLogin into an existing account using OAuth
AccountCommandLoginCommandLogin into an existing account
AccountCommandLogoutCommandLogout an account
AccountCommandRegisterCommandRegister new account
AccountCommandRemoveCommandRemove existing account
AccountCommandUpdateCredentialsCommandUpdate credentials of an existing account
AccountCommandSetAttributesCommandUpdate attributes of an existing account
AccountCommandDeleteAttributesCommandDelete attributes of an existing account
AccountCommandUpdateStateCommandUpdate state of an existing account
AccountQueryModelSessionKeyQueryRequest account details by session key
AccountQueryModelOneTimeTokenQueryRequest account details by one time password
AccountQueryModelEmailPasswordQueryRequest account details by email and password
AccountQueryModelQueryRequest account details

Asset

Commands

AssetCommandUpdate

Domain Command Struct:

go
type AssetCommandUpdate struct {
	IdentityUuid     string   `json:"identityUuid"`
	AssetUuid        string   `json:"assetUuid"`
	AssetName        string   `json:"assetName,omitempty"`
	AssetSize        int64    `json:"assetSize,omitempty"`
	AssetContentType string   `json:"assetContentType,omitempty"`
	Tags             []string `json:"tags,omitempty"`
	Public           bool     `json:"public,omitempty"`
	PatchedFields    []string `json:"patchedFields"`
}

Domain Command Handling Method:

go
func (cs *commandService) AssetCommandUpdate(ctx context.Context, cmd comby.Command, domainCmd *AssetCommandUpdate) ([]comby.Event, error)

AssetCommandAdd

Domain Command Struct:

go
type AssetCommandAdd struct {
	AssetUuid        string   `json:"assetUuid"`
	IdentityUuid     string   `json:"identityUuid,omitempty"`
	AssetName        string   `json:"assetName,omitempty"`
	AssetSize        int64    `json:"assetSize,omitempty"`
	AssetContentType string   `json:"assetContentType,omitempty"`
	Tags             []string `json:"tags,omitempty"`
	Public           bool     `json:"public,omitempty"`
}

Domain Command Handling Method:

go
func (cs *commandService) AssetCommandAdd(ctx context.Context, cmd comby.Command, domainCmd *AssetCommandAdd) ([]comby.Event, error)

AssetCommandRemove

Domain Command Struct:

go
type AssetCommandRemove struct {
	AssetUuid string `json:"assetUuid"`
}

Domain Command Handling Method:

go
func (cs *commandService) AssetCommandRemove(ctx context.Context, cmd comby.Command, domainCmd *AssetCommandRemove) ([]comby.Event, error)

AssetCommandSetAttributes

Domain Command Struct:

go
type AssetCommandSetAttributes struct {
	AssetUuid  string              `json:"assetUuid"`
	Attributes *comby.AttributeMap `json:"attributes"`
}

Domain Command Handling Method:

go
func (cs *commandService) AssetCommandSetAttributes(ctx context.Context, cmd comby.Command, domainCmd *AssetCommandSetAttributes) ([]comby.Event, error)

Queries

Domain Query Structs:

Domain Query Responses:

AssetQueryDownload

Domain Query Struct:

go
type AssetQueryDownload struct {
	AssetUuid string `json:"assetUuid"`
}

Domain Query Handling Method:

go
func (qs *queryService) AssetQueryDownload(ctx context.Context, qry comby.Query, domainQry *AssetQueryDownload) (*AssetQueryItemResponse, error)

AssetQueryList

Domain Query Struct:

go
type AssetQueryList struct {
	TenantUuid string   `json:"tenantUuid"`
	Page       int64    `json:"page,omitempty"`
	PageSize   int64    `json:"pageSize,omitempty"`
	OrderBy    string   `json:"orderBy,omitempty"`
	Tags       []string `json:"tags,omitempty"`
}

Domain Query Handling Method:

go
func (qs *queryService) AssetQueryList(ctx context.Context, qry comby.Query, domainQry *AssetQueryList) (*AssetQueryListResponse, error)

AssetQueryModelByBucketObject

Domain Query Struct:

go
type AssetQueryModelByBucketObject struct {
	BucketName string `json:"bucketName"`
	ObjectName string `json:"objectName"`
}

Domain Query Handling Method:

go
func (qs *queryService) AssetQueryModelByBucketObject(ctx context.Context, qry comby.Query, domainQry *AssetQueryModelByBucketObject) (*AssetQueryItemResponse, error)

AssetQueryModel

Domain Query Struct:

go
type AssetQueryModel struct {
	AssetUuid string `json:"assetUuid"`
}

Domain Query Handling Method:

go
func (qs *queryService) AssetQueryModel(ctx context.Context, qry comby.Query, domainQry *AssetQueryModel) (*AssetQueryItemResponse, error)

AssetQueryItemResponse

go
type AssetQueryItemResponse struct {
	Item *readmodel.AssetModel `json:"item,omitempty"`
}

AssetQueryListResponse

go
type AssetQueryListResponse struct {
	Items    []*readmodel.AssetModel `json:"items,omitempty"`
	Total    int64                   `json:"total,omitempty"`
	Page     int64                   `json:"page,omitempty"`
	PageSize int64                   `json:"pageSize,omitempty"`
}

Events

AssetAddedEvent

Domain Event Struct:

go
type AssetAddedEvent struct {
	AssetUuid        string   `json:"assetUuid"`
	IdentityUuid     string   `json:"identityUuid,omitempty"`
	AssetName        string   `json:"assetName,omitempty"`
	AssetSize        int64    `json:"assetSize,omitempty"`
	AssetContentType string   `json:"assetContentType,omitempty"`
	BucketName       string   `json:"bucketName,omitempty"`
	ObjectName       string   `json:"objectName,omitempty"`
	Tags             []string `json:"tags,omitempty"`
	Public           bool     `json:"public,omitempty"`
}

Domain Event Handling Method:

go
func (agg *Asset) AssetAddedEvent(ctx context.Context, evt comby.Event, domainEvt *AssetAddedEvent) (error)

AssetRemovedEvent

Domain Event Struct:

go
type AssetRemovedEvent struct {
	AssetUuid string `json:"assetUuid"`
}

Domain Event Handling Method:

go
func (agg *Asset) AssetRemovedEvent(ctx context.Context, evt comby.Event, domainEvt *AssetRemovedEvent) (error)

AssetAttributesSetEvent

Domain Event Struct:

go
type AssetAttributesSetEvent struct {
	AssetUuid  string              `json:"assetUuid"`
	Attributes *comby.AttributeMap `json:"attributes,omitempty"`
}

Domain Event Handling Method:

go
func (agg *Asset) AssetAttributesSetEvent(ctx context.Context, evt comby.Event, domainEvt *AssetAttributesSetEvent) (error)

AssetUpdatedEvent

Domain Event Struct:

go
type AssetUpdatedEvent struct {
	AssetUuid        string   `json:"assetUuid"`
	IdentityUuid     string   `json:"identityUuid,omitempty"`
	AssetName        string   `json:"assetName,omitempty"`
	AssetSize        int64    `json:"assetSize,omitempty"`
	AssetContentType string   `json:"assetContentType,omitempty"`
	BucketName       string   `json:"bucketName,omitempty"`
	ObjectName       string   `json:"objectName,omitempty"`
	Tags             []string `json:"tags,omitempty"`
	Public           bool     `json:"public,omitempty"`
}

Domain Event Handling Method:

go
func (agg *Asset) AssetUpdatedEvent(ctx context.Context, evt comby.Event, domainEvt *AssetUpdatedEvent) (error)

Aggregate

Aggregate Struct:

go
type Asset struct {
	*comby.BaseAggregate
	// References
	IdentityUuid string
	// Value Objects (asset)
	Name        string
	Size        int64
	ContentType string
	Path        string
	// Value Objects (storage)
	BucketName string
	ObjectName string
	Tags       []string
	Public     bool
	Attributes *comby.AttributeMap
}

Methods

Add

go
func (agg *Asset) Add(identityUuid, assetName string, assetSize int64, assetContentType, bucketName, objectName string, tags []string, public bool) (error)

Remove

go
func (agg *Asset) Remove() (error)

SetAttributes

go
func (agg *Asset) SetAttributes(attributes *comby.AttributeMap) (error)

Update

go
func (agg *Asset) Update(identityUuid, assetName string, assetSize int64, assetContentType, bucketName, objectName string, tags []string, public bool) (error)

Event Handlers

AssetReadmodel

Domain EventMethod
tenantAggregate.TenantCreatedEventTenantCreatedEvent
tenantAggregate.TenantRemovedEventTenantRemovedEvent
tenantAggregate.TenantUpdatedEventTenantUpdatedEvent
identityAggregate.IdentityCreatedEventIdentityCreatedEvent
identityAggregate.IdentityProfileUpdatedEventIdentityProfileUpdatedEvent
identityAggregate.IdentityRemovedEventIdentityRemovedEvent
assetAggregate.AssetAddedEventAssetAddedEvent
assetAggregate.AssetUpdatedEventAssetUpdatedEvent
assetAggregate.AssetRemovedEventAssetRemovedEvent
assetAggregate.AssetAttributesSetEventAssetAttributesSetEvent

Custom Permissions

NameTypeComment
AssetCommandAddCommandCreate and upload asset
AssetCommandRemoveCommandRemove existing asset
AssetCommandUpdateCommandUpdate existing asset
AssetCommandSetAttributesCommandUpdate attributes of existing asset
AssetQueryDownloadQueryDownload existing asset
AssetQueryListQueryList all assets
AssetQueryModelQueryGet asset
AssetQueryModelByBucketObjectQueryGet asset by bucket and object name

Auth

Commands

CommandWithoutTargetAggregate

Domain Command Struct:

go
type CommandWithoutTargetAggregate struct {
	NewAggAUuid string `json:"newAggAUuid"`
	Name        string
}

Domain Command Handling Method:

go
func (cs *commandService) CommandHandlerWithoutTargetAggregateUuid(ctx context.Context, cmd comby.Command, domainCmd *CommandWithoutTargetAggregate) ([]comby.Event, error)

CommandWithTargetAggregate

Domain Command Struct:

go
type CommandWithTargetAggregate struct {
	AggAUuid string `json:"aggAUuid"`
	Name     string
}

Domain Command Handling Method:

go
func (cs *commandService) CommandHandlerWithTargetAggregateUuid(ctx context.Context, cmd comby.Command, domainCmd *CommandWithTargetAggregate) ([]comby.Event, error)

Events

AggACreated


Domain Event Struct:

go
type AggACreated struct {
	AggAUuid string `json:"aggAUuid"`
	Other    string `json:"other,omitempty"`
}

Domain Event Handling Method:

go
func (agg *AggA) AggACreated(ctx context.Context, evt comby.Event, domainEvt *AggACreated) (error)

AggAModified

Domain Event Struct:

go
type AggAModified struct {
	AggAUuid string `json:"aggAUuid"`
	Other    string `json:"other,omitempty"`
}

Domain Event Handling Method:

go
func (agg *AggA) AggAModified(ctx context.Context, evt comby.Event, domainEvt *AggAModified) (error)

Aggregate


Aggregate Struct:

go
type AggA struct {
	*comby.BaseAggregate
	Other string
}

Methods

CreateAggA

go
func (agg *AggA) CreateAggA(other string) (error)

ModifyAggA

go
func (agg *AggA) ModifyAggA(other string) (error)

Event Handlers

AccountCtxReadmodel

Domain EventMethod
tenantAggregate.TenantRemovedEventTenantRemovedEvent
tenantAggregate.TenantCreatedEventTenantCreatedEvent
identityAggregate.IdentityRemovedGroupEventIdentityRemovedGroupEvent
identityAggregate.IdentityAddedGroupEventIdentityAddedGroupEvent
identityAggregate.IdentityRemovedTokenEventIdentityRemovedTokenEvent
identityAggregate.IdentityAddedTokenEventIdentityAddedTokenEvent
identityAggregate.IdentityRemovedEventIdentityRemovedEvent
identityAggregate.IdentityCreatedEventIdentityCreatedEvent
groupAggregate.GroupAddedEventGroupAddedEvent
groupAggregate.GroupUpdatedEventGroupUpdatedEvent
groupAggregate.GroupRemovedEventGroupRemovedEvent
accountAggregate.AccountRemovedEventAccountRemovedEvent
accountAggregate.AccountAttributesSetEventAccountAttributesSetEvent
accountAggregate.AccountLoggedOutEventAccountLoggedOutEvent
accountAggregate.AccountLoggedInEventAccountLoggedInEvent
accountAggregate.AccountOneTimeTokenUpdatedEventAccountOneTimeTokenUpdatedEvent
accountAggregate.AccountCredentialsUpdatedEventAccountCredentialsUpdatedEvent
accountAggregate.AccountRegisteredEventAccountRegisteredEvent
accountAggregate.AccountPasswordResetConfirmedEventAccountPasswordResetConfirmedEvent
accountAggregate.AccountPasswordResetRequestedEventAccountPasswordResetRequestedEvent
accountAggregate.AccountPasswordChangedEventAccountPasswordChangedEvent
accountAggregate.AccountRegisterConfirmedEventAccountRegisterConfirmedEvent
comby.AllDomainEventOnHandleEventForTenantAggregateTuples

Custom Permissions

NameTypeComment
CommandCommandWithoutTargetAggregate
CommandCommandWithTargetAggregate

Group

Commands

GroupCommandCreate

Domain Command Struct:

go
type GroupCommandCreate struct {
	GroupUuid   string   `json:"groupUuid"`
	Name        string   `json:"name"`
	Description string   `json:"description,omitempty"`
	Permissions []string `json:"permissions,omitempty"`
}

Domain Command Handling Method:

go
func (cs *commandService) GroupCommandCreate(ctx context.Context, cmd comby.Command, domainCmd *GroupCommandCreate) ([]comby.Event, error)

GroupCommandRemove

Domain Command Struct:

go
type GroupCommandRemove struct {
	GroupUuid string `json:"groupUuid"`
}

Domain Command Handling Method:

go
func (cs *commandService) GroupCommandRemove(ctx context.Context, cmd comby.Command, domainCmd *GroupCommandRemove) ([]comby.Event, error)

GroupCommandSetAttributes

Domain Command Struct:

go
type GroupCommandSetAttributes struct {
	GroupUuid  string              `json:"groupUuid"`
	Attributes *comby.AttributeMap `json:"attributes"`
}

Domain Command Handling Method:

go
func (cs *commandService) GroupCommandSetAttributes(ctx context.Context, cmd comby.Command, domainCmd *GroupCommandSetAttributes) ([]comby.Event, error)

GroupCommandUpdate

Domain Command Struct:

go
type GroupCommandUpdate struct {
	GroupUuid     string   `json:"groupUuid"`
	Name          string   `json:"name,omitempty"`
	Description   string   `json:"description,omitempty"`
	Permissions   []string `json:"permissions,omitempty"`
	PatchedFields []string `json:"patchedFields"`
}

Domain Command Handling Method:

go
func (cs *commandService) GroupCommandUpdate(ctx context.Context, cmd comby.Command, domainCmd *GroupCommandUpdate) ([]comby.Event, error)

Queries

Domain Query Structs:

Domain Query Responses:

GroupQueryList

Domain Query Struct:

go
type GroupQueryList struct {
	TenantUuid string `json:"tenantUuid"`
	Page       int64  `json:"page,omitempty"`
	PageSize   int64  `json:"pageSize,omitempty"`
	OrderBy    string `json:"orderBy,omitempty"`
}

Domain Query Handling Method:

go
func (qs *queryService) GroupQueryList(ctx context.Context, qry comby.Query, domainQry *GroupQueryList) (*GroupQueryListResponse, error)

GroupQueryModelByName

Domain Query Struct:

go
type GroupQueryModelByName struct {
	Name string `json:"name"`
}

Domain Query Handling Method:

go
func (qs *queryService) GroupQueryModelByName(ctx context.Context, qry comby.Query, domainQry *GroupQueryModelByName) (*GroupQueryItemResponse, error)

GroupQueryModel

Domain Query Struct:

go
type GroupQueryModel struct {
	GroupUuid string `json:"groupUuid"`
}

Domain Query Handling Method:

go
func (qs *queryService) GroupQueryModel(ctx context.Context, qry comby.Query, domainQry *GroupQueryModel) (*GroupQueryItemResponse, error)

GroupQueryListResponse

go
type GroupQueryListResponse struct {
	Items    []*readmodel.GroupModel `json:"items,omitempty"`
	Total    int64                   `json:"total,omitempty"`
	Page     int64                   `json:"page,omitempty"`
	PageSize int64                   `json:"pageSize,omitempty"`
}

GroupQueryItemResponse

go
type GroupQueryItemResponse struct {
	Item *readmodel.GroupModel `json:"item,omitempty"`
}

Events

GroupAddedEvent

Domain Event Struct:

go
type GroupAddedEvent struct {
	GroupUuid   string   `json:"groupUuid"`
	Name        string   `json:"name"`
	Description string   `json:"description,omitempty"`
	Permissions []string `json:"permissions,omitempty"`
}

Domain Event Handling Method:

go
func (agg *Group) GroupAddedEvent(ctx context.Context, evt comby.Event, domainEvt *GroupAddedEvent) (error)

GroupRemovedEvent

Domain Event Struct:

go
type GroupRemovedEvent struct {
	GroupUuid string `json:"groupUuid"`
}

Domain Event Handling Method:

go
func (agg *Group) GroupRemovedEvent(ctx context.Context, evt comby.Event, domainEvt *GroupRemovedEvent) (error)

GroupAttributesSetEvent

Domain Event Struct:

go
type GroupAttributesSetEvent struct {
	GroupUuid  string              `json:"groupUuid"`
	Attributes *comby.AttributeMap `json:"attributes,omitempty"`
}

Domain Event Handling Method:

go
func (agg *Group) GroupAttributesSetEvent(ctx context.Context, evt comby.Event, domainEvt *GroupAttributesSetEvent) (error)

GroupUpdatedEvent

Domain Event Struct:

go
type GroupUpdatedEvent struct {
	GroupUuid   string   `json:"groupUuid"`
	Name        string   `json:"name"`
	Description string   `json:"description"`
	Permissions []string `json:"permissions,omitempty"`
}

Domain Event Handling Method:

go
func (agg *Group) GroupUpdatedEvent(ctx context.Context, evt comby.Event, domainEvt *GroupUpdatedEvent) (error)

Aggregate

Aggregate Struct:

go
type Group struct {
	*comby.BaseAggregate
	// Value Objects
	Permissions []string
	Name        string
	Description string
	Attributes  *comby.AttributeMap
}

Methods

Add

go
func (agg *Group) Add(name, description string, permissions []string) (error)

Remove

go
func (agg *Group) Remove() (error)

SetAttributes

go
func (agg *Group) SetAttributes(attributes *comby.AttributeMap) (error)

Update

go
func (agg *Group) Update(name, description string, permissions []string) (error)

Event Handlers

GroupReadmodel

Domain EventMethod
tenantAggregate.TenantCreatedEventTenantCreatedEvent
tenantAggregate.TenantRemovedEventTenantRemovedEvent
tenantAggregate.TenantUpdatedEventTenantUpdatedEvent
groupAggregate.GroupAddedEventGroupAddedEvent
groupAggregate.GroupUpdatedEventGroupUpdatedEvent
groupAggregate.GroupRemovedEventGroupRemovedEvent
groupAggregate.GroupAttributesSetEventGroupAttributesSetEvent

Custom Permissions

NameTypeComment
GroupCommandCreateCommandCreate new group
GroupCommandUpdateCommandUpdate existing group
GroupCommandRemoveCommandRemove existing group
GroupCommandSetAttributesCommandUpdate additionals of existing group
GroupQueryListQueryList groups
GroupQueryModelQueryGet group by id
GroupQueryModelByNameQueryGet group by name

Identity

Commands

IdentityCommandAddGroup

Domain Command Struct:

go
type IdentityCommandAddGroup struct {
	IdentityUuid string `json:"identityUuid"`
	GroupUuid    string `json:"groupUuid"`
}

Domain Command Handling Method:

go
func (cs *commandService) IdentityCommandAddGroup(ctx context.Context, cmd comby.Command, domainCmd *IdentityCommandAddGroup) ([]comby.Event, error)

IdentityCommandAddToken

Domain Command Struct:

go
type IdentityCommandAddToken struct {
	IdentityUuid string `json:"identityUuid"`
	TokenUuid    string `json:"tokenUuid"`
	TokenValue   string `json:"tokenValue"`
	Name         string `json:"name,omitempty"`
	Description  string `json:"description,omitempty"`
	ExpiredAt    int64  `json:"expiredAt,omitempty"`
}

Domain Command Handling Method:

go
func (cs *commandService) IdentityCommandAddToken(ctx context.Context, cmd comby.Command, domainCmd *IdentityCommandAddToken) ([]comby.Event, error)

IdentityCommandCreate

Domain Command Struct:

go
type IdentityCommandCreate struct {
	IdentityUuid string   `json:"identityUuid"`
	AccountUuid  string   `json:"accountUuid,omitempty"`
	GroupUuids   []string `json:"groupUuids"`
}

Domain Command Handling Method:

go
func (cs *commandService) IdentityCommandCreate(ctx context.Context, cmd comby.Command, domainCmd *IdentityCommandCreate) ([]comby.Event, error)

IdentityCommandRemove

Domain Command Struct:

go
type IdentityCommandRemove struct {
	IdentityUuid string `json:"identityUuid"`
}

Domain Command Handling Method:

go
func (cs *commandService) IdentityCommandRemove(ctx context.Context, cmd comby.Command, domainCmd *IdentityCommandRemove) ([]comby.Event, error)

IdentityCommandRemoveGroup

Domain Command Struct:

go
type IdentityCommandRemoveGroup struct {
	IdentityUuid string `json:"identityUuid"`
	GroupUuid    string `json:"groupUuid"`
}

Domain Command Handling Method:

go
func (cs *commandService) IdentityCommandRemoveGroup(ctx context.Context, cmd comby.Command, domainCmd *IdentityCommandRemoveGroup) ([]comby.Event, error)

IdentityCommandRemoveToken

Domain Command Struct:

go
type IdentityCommandRemoveToken struct {
	IdentityUuid string `json:"identityUuid"`
	TokenUuid    string `json:"tokenUuid"`
}

Domain Command Handling Method:

go
func (cs *commandService) IdentityCommandRemoveToken(ctx context.Context, cmd comby.Command, domainCmd *IdentityCommandRemoveToken) ([]comby.Event, error)

IdentityCommandSetAttributes

Domain Command Struct:

go
type IdentityCommandSetAttributes struct {
	IdentityUuid string              `json:"identityUuid"`
	Attributes   *comby.AttributeMap `json:"attributes"`
}

Domain Command Handling Method:

go
func (cs *commandService) IdentityCommandSetAttributes(ctx context.Context, cmd comby.Command, domainCmd *IdentityCommandSetAttributes) ([]comby.Event, error)

IdentityCommandUpdateProfile

Domain Command Struct:

go
type IdentityCommandUpdateProfile struct {
	IdentityUuid  string   `json:"identityUuid"`
	Name          string   `json:"name,omitempty"`
	Email         string   `json:"email,omitempty"`
	Title         string   `json:"title,omitempty"`
	Avatar        string   `json:"avatar,omitempty"`
	PatchedFields []string `json:"patchedFields"`
}

Domain Command Handling Method:

go
func (cs *commandService) IdentityCommandUpdateProfile(ctx context.Context, cmd comby.Command, domainCmd *IdentityCommandUpdateProfile) ([]comby.Event, error)

Queries

Domain Query Structs:

Domain Query Responses:

IdentityQueryListByAccountUuid

Domain Query Struct:

go
type IdentityQueryListByAccountUuid struct {
	AccountUuid string `json:"accountUuid"`
	Page        int64  `json:"page,omitempty"`
	PageSize    int64  `json:"pageSize,omitempty"`
	OrderBy     string `json:"orderBy,omitempty"`
}

Domain Query Handling Method:

go
func (qs *queryService) IdentityQueryListByAccountUuid(ctx context.Context, qry comby.Query, domainQry *IdentityQueryListByAccountUuid) (*IdentityQueryListResponse, error)

IdentityQueryListByAccountTenantUuid

Domain Query Struct:

go
type IdentityQueryListByAccountTenantUuid struct {
	TenantUuid  string `json:"tenantUuid"`
	AccountUuid string `json:"accountUuid"`
	Page        int64  `json:"page,omitempty"`
	PageSize    int64  `json:"pageSize,omitempty"`
	OrderBy     string `json:"orderBy,omitempty"`
}

Domain Query Handling Method:

go
func (qs *queryService) IdentityQueryListByAccountTenantUuid(ctx context.Context, qry comby.Query, domainQry *IdentityQueryListByAccountTenantUuid) (*IdentityQueryListResponse, error)

IdentityQueryList

Domain Query Struct:

go
type IdentityQueryList struct {
	TenantUuid string `json:"tenantUuid"`
	Page       int64  `json:"page,omitempty"`
	PageSize   int64  `json:"pageSize,omitempty"`
	OrderBy    string `json:"orderBy,omitempty"`
}

Domain Query Handling Method:

go
func (qs *queryService) IdentityQueryList(ctx context.Context, qry comby.Query, domainQry *IdentityQueryList) (*IdentityQueryListResponse, error)

IdentityQueryModel

Domain Query Struct:

go
type IdentityQueryModel struct {
	IdentityUuid string `json:"identityUuid"`
}

Domain Query Handling Method:

go
func (qs *queryService) IdentityQueryModel(ctx context.Context, qry comby.Query, domainQry *IdentityQueryModel) (*IdentityQueryItemResponse, error)

IdentityQueryModelIndependentOfOrganization

Domain Query Struct:

go
type IdentityQueryModelIndependentOfOrganization struct {
	SessionUuid  string `json:"sessionUuid"`
	IdentityUuid string `json:"identityUuid,omitempty"`
}

Domain Query Handling Method:

go
func (qs *queryService) IdentityQueryModelIndependentOfOrganization(ctx context.Context, qry comby.Query, domainQry *IdentityQueryModelIndependentOfOrganization) (*IdentityQueryItemResponse, error)

IdentityQueryListResponse

go
type IdentityQueryListResponse struct {
	Items    []*readmodel.IdentityModel `json:"items,omitempty"`
	Total    int64                      `json:"total,omitempty"`
	Page     int64                      `json:"page,omitempty"`
	PageSize int64                      `json:"pageSize,omitempty"`
}

IdentityQueryItemResponse

go
type IdentityQueryItemResponse struct {
	Item *readmodel.IdentityModel `json:"item,omitempty"`
}

Events

IdentityAddedGroupEvent

Domain Event Struct:

go
type IdentityAddedGroupEvent struct {
	IdentityUuid string `json:"identityUuid"`
	GroupUuid    string `json:"groupUuid"`
}

Domain Event Handling Method:

go
func (agg *Identity) IdentityAddedGroupEvent(ctx context.Context, evt comby.Event, domainEvt *IdentityAddedGroupEvent) (error)

IdentityAddedTokenEvent

Domain Event Struct:

go
type IdentityAddedTokenEvent struct {
	IdentityUuid string `json:"identityUuid"`
	TokenUuid    string `json:"tokenUuid"`
	Name         string `json:"name,omitempty"`
	Description  string `json:"description,omitempty"`
	TokenValue   string `json:"tokenValue"`
	ExpiredAt    int64  `json:"expiredAt,omitempty"`
}

Domain Event Handling Method:

go
func (agg *Identity) IdentityAddedTokenEvent(ctx context.Context, evt comby.Event, domainEvt *IdentityAddedTokenEvent) (error)

IdentityCreatedEvent

Domain Event Struct:

go
type IdentityCreatedEvent struct {
	IdentityUuid string `json:"identityUuid"`
	AccountUuid  string `json:"accountUuid,omitempty"`
}

Domain Event Handling Method:

go
func (agg *Identity) IdentityCreatedEvent(ctx context.Context, evt comby.Event, domainEvt *IdentityCreatedEvent) (error)

IdentityRemovedEvent

Domain Event Struct:

go
type IdentityRemovedEvent struct {
	IdentityUuid string `json:"identityUuid"`
}

Domain Event Handling Method:

go
func (agg *Identity) IdentityRemovedEvent(ctx context.Context, evt comby.Event, domainEvt *IdentityRemovedEvent) (error)

IdentityRemovedGroupEvent

Domain Event Struct:

go
type IdentityRemovedGroupEvent struct {
	IdentityUuid string `json:"identityUuid"`
	GroupUuid    string `json:"groupUuid"`
}

Domain Event Handling Method:

go
func (agg *Identity) IdentityRemovedGroupEvent(ctx context.Context, evt comby.Event, domainEvt *IdentityRemovedGroupEvent) (error)

IdentityRemovedTokenEvent

Domain Event Struct:

go
type IdentityRemovedTokenEvent struct {
	IdentityUuid string `json:"identityUuid"`
	TokenUuid    string `json:"tokenUuid"`
}

Domain Event Handling Method:

go
func (agg *Identity) IdentityRemovedTokenEvent(ctx context.Context, evt comby.Event, domainEvt *IdentityRemovedTokenEvent) (error)

IdentityAttributesSetEvent

Domain Event Struct:

go
type IdentityAttributesSetEvent struct {
	IdentityUuid string              `json:"identityUuid"`
	Attributes   *comby.AttributeMap `json:"attributes,omitempty"`
}

Domain Event Handling Method:

go
func (agg *Identity) IdentityAttributesSetEvent(ctx context.Context, evt comby.Event, domainEvt *IdentityAttributesSetEvent) (error)

IdentityProfileUpdatedEvent

Domain Event Struct:

go
type IdentityProfileUpdatedEvent struct {
	IdentityUuid string `json:"identityUuid"`
	Name         string `json:"name,omitempty"`
	Email        string `json:"email,omitempty"`
	Title        string `json:"title,omitempty"`
	Avatar       string `json:"avatar,omitempty"`
}

Domain Event Handling Method:

go
func (agg *Identity) IdentityProfileUpdatedEvent(ctx context.Context, evt comby.Event, domainEvt *IdentityProfileUpdatedEvent) (error)

Aggregate

Aggregate Struct:

go
type Identity struct {
	*comby.BaseAggregate
	// References
	AccountUuid string
	GroupUuids  []string
	// Entities
	Profile *Profile
	Tokens  []*Token
	// Value Objects
	Attributes *comby.AttributeMap
}

Methods

AddGroup

go
func (agg *Identity) AddGroup(groupUuid string) (error)

AddToken

go
func (agg *Identity) AddToken(tokenUuid, tokenValue, name, description string, expiredAt int64) (error)

Add

go
func (agg *Identity) Add(accountUuid string) (error)

Remove

go
func (agg *Identity) Remove() (error)

RemoveGroup

go
func (agg *Identity) RemoveGroup(groupUuid string) (error)

RemoveToken

go
func (agg *Identity) RemoveToken(tokenUuid string) (error)

SetAttributes

go
func (agg *Identity) SetAttributes(attributes *comby.AttributeMap) (error)

UpdateProfile

go
func (agg *Identity) UpdateProfile(name, email, title, avatar string) (error)

Event Handlers

IdentityReadmodel

Domain EventMethod
tenantAggregate.TenantCreatedEventTenantCreatedEvent
tenantAggregate.TenantAttributesSetEventTenantAttributesSetEvent
tenantAggregate.TenantUpdatedEventTenantUpdatedEvent
tenantAggregate.TenantRemovedEventTenantRemovedEvent
identityAggregate.IdentityProfileUpdatedEventIdentityProfileUpdatedEvent
identityAggregate.IdentityRemovedTokenEventIdentityRemovedTokenEvent
identityAggregate.IdentityCreatedEventIdentityCreatedEvent
identityAggregate.IdentityRemovedEventIdentityRemovedEvent
identityAggregate.IdentityAddedGroupEventIdentityAddedGroupEvent
identityAggregate.IdentityRemovedGroupEventIdentityRemovedGroupEvent
identityAggregate.IdentityAddedTokenEventIdentityAddedTokenEvent
identityAggregate.IdentityAttributesSetEventIdentityAttributesSetEvent
groupAggregate.GroupUpdatedEventGroupUpdatedEvent
groupAggregate.GroupRemovedEventGroupRemovedEvent
groupAggregate.GroupAddedEventGroupAddedEvent
assetAggregate.AssetAddedEventAssetAddedEvent
assetAggregate.AssetRemovedEventAssetRemovedEvent
assetAggregate.AssetUpdatedEventAssetUpdatedEvent

Invitation

Commands

InvitationCommandAccept

Domain Command Struct:

go
type InvitationCommandAccept struct {
	InvitationUuid string `json:"invitationUuid"`
	AccountUuid    string `json:"accountUuid"`
	Token          string `json:"token"`
}

Domain Command Handling Method:

go
func (cs *commandService) InvitationCommandAccept(ctx context.Context, cmd comby.Command, domainCmd *InvitationCommandAccept) ([]comby.Event, error)

InvitationCommandCreate

Domain Command Struct:

go
type InvitationCommandCreate struct {
	InvitationUuid string   `json:"invitationUuid"`
	IdentityUuid   string   `json:"identityUuid"`
	GroupUuids     []string `json:"groupUuids"`
	Email          string   `json:"email"`
}

Domain Command Handling Method:

go
func (cs *commandService) InvitationCommandCreate(ctx context.Context, cmd comby.Command, domainCmd *InvitationCommandCreate) ([]comby.Event, error)

InvitationCommandDecline

Domain Command Struct:

go
type InvitationCommandDecline struct {
	InvitationUuid string `json:"invitationUuid"`
	AccountUuid    string `json:"accountUuid"`
	Token          string `json:"token"`
}

Domain Command Handling Method:

go
func (cs *commandService) InvitationCommandDecline(ctx context.Context, cmd comby.Command, domainCmd *InvitationCommandDecline) ([]comby.Event, error)

InvitationCommandRemove

Domain Command Struct:

go
type InvitationCommandRemove struct {
	InvitationUuid string `json:"invitationUuid"`
}

Domain Command Handling Method:

go
func (cs *commandService) InvitationCommandRemove(ctx context.Context, cmd comby.Command, domainCmd *InvitationCommandRemove) ([]comby.Event, error)

InvitationCommandSend

Domain Command Struct:

go
type InvitationCommandSend struct {
	InvitationUuid string `json:"invitationUuid"`
}

Domain Command Handling Method:

go
func (cs *commandService) InvitationCommandSend(ctx context.Context, cmd comby.Command, domainCmd *InvitationCommandSend) ([]comby.Event, error)

InvitationCommandSetAttributes

Domain Command Struct:

go
type InvitationCommandSetAttributes struct {
	InvitationUuid string              `json:"invitationUuid"`
	Attributes     *comby.AttributeMap `json:"attributes"`
}

Domain Command Handling Method:

go
func (cs *commandService) InvitationCommandSetAttributes(ctx context.Context, cmd comby.Command, domainCmd *InvitationCommandSetAttributes) ([]comby.Event, error)

Queries

Domain Query Structs:

Domain Query Responses:

InvitationQueryList

Domain Query Struct:

go
type InvitationQueryList struct {
	TenantUuid string `json:"tenantUuid"`
	Page       int64  `json:"page,omitempty"`
	PageSize   int64  `json:"pageSize,omitempty"`
	OrderBy    string `json:"orderBy,omitempty"`
}

Domain Query Handling Method:

go
func (qs *queryService) InvitationQueryList(ctx context.Context, qry comby.Query, domainQry *InvitationQueryList) (*InvitationQueryListResponse, error)

InvitationQueryModel

Domain Query Struct:

go
type InvitationQueryModel struct {
	InvitationUuid string `json:"invitationUuid"`
}

Domain Query Handling Method:

go
func (qs *queryService) InvitationQueryModel(ctx context.Context, qry comby.Query, domainQry *InvitationQueryModel) (*InvitationQueryItemResponse, error)

InvitationQueryModelByInvitationToken

Domain Query Struct:

go
type InvitationQueryModelByInvitationToken struct {
	InvitationToken string `json:"invitationToken"`
}

Domain Query Handling Method:

go
func (qs *queryService) InvitationQueryModelByInvitationToken(ctx context.Context, qry comby.Query, domainQry *InvitationQueryModelByInvitationToken) (*InvitationQueryItemResponse, error)

InvitationQueryListResponse

go
type InvitationQueryListResponse struct {
	Items    []*readmodel.InvitationModel `json:"items,omitempty"`
	Total    int64                        `json:"total,omitempty"`
	Page     int64                        `json:"page,omitempty"`
	PageSize int64                        `json:"pageSize,omitempty"`
}

InvitationQueryItemResponse

go
type InvitationQueryItemResponse struct {
	Item *readmodel.InvitationModel `json:"item,omitempty"`
}

Events

InvitationAcceptedEvent

Domain Event Struct:

go
type InvitationAcceptedEvent struct {
	InvitationUuid string `json:"invitationUuid"`
	AccountUuid    string `json:"accountUuid"`
}

Domain Event Handling Method:

go
func (agg *Invitation) InvitationAcceptedEvent(ctx context.Context, evt comby.Event, domainEvt *InvitationAcceptedEvent) (error)

InvitationCreatedEvent

Domain Event Struct:

go
type InvitationCreatedEvent struct {
	InvitationUuid string   `json:"invitationUuid"`
	IdentityUuid   string   `json:"identityUuid"`
	GroupUuids     []string `json:"groupUuids"`
	Token          string   `json:"token"`
	Email          string   `json:"email"`
}

Domain Event Handling Method:

go
func (agg *Invitation) InvitationCreatedEvent(ctx context.Context, evt comby.Event, domainEvt *InvitationCreatedEvent) (error)

InvitationDeclinedEvent

Domain Event Struct:

go
type InvitationDeclinedEvent struct {
	InvitationUuid string `json:"invitationUuid"`
	AccountUuid    string `json:"accountUuid"`
}

Domain Event Handling Method:

go
func (agg *Invitation) InvitationDeclinedEvent(ctx context.Context, evt comby.Event, domainEvt *InvitationDeclinedEvent) (error)

InvitationRemovedEvent

Domain Event Struct:

go
type InvitationRemovedEvent struct {
	InvitationUuid string `json:"invitationUuid"`
}

Domain Event Handling Method:

go
func (agg *Invitation) InvitationRemovedEvent(ctx context.Context, evt comby.Event, domainEvt *InvitationRemovedEvent) (error)

InvitationSentEvent

Domain Event Struct:

go
type InvitationSentEvent struct {
	InvitationUuid string `json:"invitationUuid"`
}

Domain Event Handling Method:

go
func (agg *Invitation) InvitationSentEvent(ctx context.Context, evt comby.Event, domainEvt *InvitationSentEvent) (error)

InvitationAttributesSetEvent

Domain Event Struct:

go
type InvitationAttributesSetEvent struct {
	InvitationUuid string              `json:"invitationUuid"`
	Attributes     *comby.AttributeMap `json:"attributes,omitempty"`
}

Domain Event Handling Method:

go
func (agg *Invitation) InvitationAttributesSetEvent(ctx context.Context, evt comby.Event, domainEvt *InvitationAttributesSetEvent) (error)

Aggregate

Aggregate Struct:

go
type Invitation struct {
	*comby.BaseAggregate
	// GroupUuids groups to which the invited account will be added
	GroupUuids []string
	// IdentityUuid who created the invitation
	IdentityUuid string
	// AccountUuid who accepted the invitation
	AccountUuid string
	// Value Objects
	Token      string
	Email      string
	State      string
	Attributes *comby.AttributeMap
}

Methods

Accept

go
func (agg *Invitation) Accept(accountUuid string) (error)

Create

go
func (agg *Invitation) Create(identityUuid string, groupUuids []string, token, email string) (error)

Decline

go
func (agg *Invitation) Decline(accountUuid string) (error)

Remove

go
func (agg *Invitation) Remove() (error)

Send

go
func (agg *Invitation) Send() (error)

SetAttributes

go
func (agg *Invitation) SetAttributes(attributes *comby.AttributeMap) (error)

Event Handlers

Reactor

Domain EventMethod
aggregateInvitation.InvitationCreatedEventInvitationCreatedEvent
aggregateInvitation.InvitationAcceptedEventInvitationAcceptedEvent

InvitationReadmodel

Domain EventMethod
tenantAggregate.TenantCreatedEventTenantCreatedEvent
tenantAggregate.TenantUpdatedEventTenantUpdatedEvent
tenantAggregate.TenantRemovedEventTenantRemovedEvent
invitationAggregate.InvitationAttributesSetEventInvitationAttributesSetEvent
invitationAggregate.InvitationCreatedEventInvitationCreatedEvent
invitationAggregate.InvitationRemovedEventInvitationRemovedEvent
invitationAggregate.InvitationAcceptedEventInvitationAcceptedEvent
invitationAggregate.InvitationDeclinedEventInvitationDeclinedEvent
invitationAggregate.InvitationSentEventInvitationSentEvent
identityAggregate.IdentityCreatedEventIdentityCreatedEvent
identityAggregate.IdentityRemovedEventIdentityRemovedEvent
identityAggregate.IdentityProfileUpdatedEventIdentityProfileUpdatedEvent
groupAggregate.GroupUpdatedEventGroupUpdatedEvent
groupAggregate.GroupRemovedEventGroupRemovedEvent
groupAggregate.GroupAddedEventGroupAddedEvent
accountAggregate.AccountCredentialsUpdatedEventAccountCredentialsUpdatedEvent

Tenant

Commands

TenantCommandCreate

Domain Command Struct:

go
type TenantCommandCreate struct {
	TenantUuid string `json:"tenantUuid"`
	Name       string `json:"name"`
}

Domain Command Handling Method:

go
func (cs *commandService) TenantCommandCreate(ctx context.Context, cmd comby.Command, domainCmd *TenantCommandCreate) ([]comby.Event, error)

TenantCommandRemove

Domain Command Struct:

go
type TenantCommandRemove struct {
	TenantUuid string `json:"tenantUuid"`
}

Domain Command Handling Method:

go
func (cs *commandService) TenantCommandRemove(ctx context.Context, cmd comby.Command, domainCmd *TenantCommandRemove) ([]comby.Event, error)

TenantCommandSetSecret

Domain Command Struct:

go
type TenantCommandSetSecret struct {
	TenantUuid  string `json:"tenantUuid"`
	SecretKey   string `json:"secretKey"`
	SecretValue string `json:"secretValue,omitempty"`
}

Domain Command Handling Method:

go
func (cs *commandService) TenantCommandSetSecret(ctx context.Context, cmd comby.Command, domainCmd *TenantCommandSetSecret) ([]comby.Event, error)

TenantCommandSetAttributes

Domain Command Struct:

go
type TenantCommandSetAttributes struct {
	TenantUuid string              `json:"tenantUuid"`
	Attributes *comby.AttributeMap `json:"attributes"`
}

Domain Command Handling Method:

go
func (cs *commandService) TenantCommandSetAttributes(ctx context.Context, cmd comby.Command, domainCmd *TenantCommandSetAttributes) ([]comby.Event, error)

TenantCommandUpdate

Domain Command Struct:

go
type TenantCommandUpdate struct {
	TenantUuid    string   `json:"tenantUuid"`
	Name          string   `json:"name,omitempty"`
	PatchedFields []string `json:"patchedFields"`
}

Domain Command Handling Method:

go
func (cs *commandService) TenantCommandUpdate(ctx context.Context, cmd comby.Command, domainCmd *TenantCommandUpdate) ([]comby.Event, error)

Queries

Domain Query Structs:

Domain Query Responses:

TenantQueryList

TenantQueryList returns a list of tenants based on the context of the requestor.

This query determines the list of tenants a requestor is allowed to access, with behavior depending on the requestor's context. The query outcome is classified into two distinct cases:

  1. System Tenant Context:
  • When the requestor represents the system tenant, the query retrieves a complete list of all tenants.
  • This includes tenants from all contexts, providing global visibility for the system tenant.
  1. Specific Tenant Context:
  • If the requestor represents a specific tenant, the query returns a list containing only the tenant associated with the requestor.
  • This ensures that the tenant has access only to its own information, adhering to strict isolation principles in a multi-tenant architecture.

Domain Query Struct:

go
type TenantQueryList struct {
	Page     int64  `json:"page,omitempty"`
	PageSize int64  `json:"pageSize,omitempty"`
	OrderBy  string `json:"orderBy,omitempty"`
}

Domain Query Handling Method:

go
func (qs *queryService) TenantQueryList(ctx context.Context, qry comby.Query, domainQry *TenantQueryList) (*TenantQueryListResponse, error)

TenantQueryListForAccount

Domain Query Struct:

go
type TenantQueryListForAccount struct {
	AccountUuid string `json:"accountUuid"`
	Page        int64  `json:"page,omitempty"`
	PageSize    int64  `json:"pageSize,omitempty"`
	OrderBy     string `json:"orderBy,omitempty"`
}

Domain Query Handling Method:

go
func (qs *queryService) TenantQueryListForAccount(ctx context.Context, qry comby.Query, domainQry *TenantQueryListForAccount) (*TenantQueryListResponse, error)

TenantQueryModelByName

Domain Query Struct:

go
type TenantQueryModelByName struct {
	Name string `json:"name"`
}

Domain Query Handling Method:

go
func (qs *queryService) TenantQueryModelByName(ctx context.Context, qry comby.Query, domainQry *TenantQueryModelByName) (*TenantQueryItemResponse, error)

TenantQueryModel

Domain Query Struct:

go
type TenantQueryModel struct {
	TenantUuid string `json:"tenantUuid"`
}

Domain Query Handling Method:

go
func (qs *queryService) TenantQueryModel(ctx context.Context, qry comby.Query, domainQry *TenantQueryModel) (*TenantQueryItemResponse, error)

TenantQueryListResponse

go
type TenantQueryListResponse struct {
	Items    []*readmodel.TenantModel `json:"items,omitempty"`
	Total    int64                    `json:"total,omitempty"`
	Page     int64                    `json:"page,omitempty"`
	PageSize int64                    `json:"pageSize,omitempty"`
}

TenantQueryItemResponse

go
type TenantQueryItemResponse struct {
	Item *readmodel.TenantModel `json:"item,omitempty"`
}

Events

TenantCreatedEvent

Domain Event Struct:

go
type TenantCreatedEvent struct {
	TenantUuid string `json:"tenantUuid"`
	Name       string `json:"name"`
}

Domain Event Handling Method:

go
func (agg *Tenant) TenantCreatedEvent(ctx context.Context, evt comby.Event, domainEvt *TenantCreatedEvent) (error)

TenantRemovedEvent

Domain Event Struct:

go
type TenantRemovedEvent struct {
	TenantUuid string `json:"tenantUuid"`
}

Domain Event Handling Method:

go
func (agg *Tenant) TenantRemovedEvent(ctx context.Context, evt comby.Event, domainEvt *TenantRemovedEvent) (error)

TenantAttributesSetEvent

Domain Event Struct:

go
type TenantAttributesSetEvent struct {
	TenantUuid string              `json:"tenantUuid"`
	Attributes *comby.AttributeMap `json:"attributes,omitempty"`
}

Domain Event Handling Method:

go
func (agg *Tenant) TenantAttributesSetEvent(ctx context.Context, evt comby.Event, domainEvt *TenantAttributesSetEvent) (error)

TenantSecretSetEvent

Domain Event Struct:

go
type TenantSecretSetEvent struct {
	TenantUuid  string `json:"tenantUuid"`
	SecretKey   string `json:"SecretKey"`
	SecretValue string `json:"SecretValue,omitempty"`
}

Domain Event Handling Method:

go
func (agg *Tenant) TenantSecretSetEvent(ctx context.Context, evt comby.Event, domainEvt *TenantSecretSetEvent) (error)

TenantUpdatedEvent

Domain Event Struct:

go
type TenantUpdatedEvent struct {
	TenantUuid string `json:"tenantUuid"`
	Name       string `json:"name,omitempty"`
}

Domain Event Handling Method:

go
func (agg *Tenant) TenantUpdatedEvent(ctx context.Context, evt comby.Event, domainEvt *TenantUpdatedEvent) (error)

Aggregate

Aggregate Struct:

go
type Tenant struct {
	*comby.BaseAggregate
	// Value Objects
	Name       string
	Attributes *comby.AttributeMap
	Secrets    *comby.AttributeMap
}

Methods

Create

go
func (agg *Tenant) Create(name string) (error)

Remove

go
func (agg *Tenant) Remove() (error)

SetAttributes

go
func (agg *Tenant) SetAttributes(attributes *comby.AttributeMap) (error)

SetSecret

go
func (agg *Tenant) SetSecret(secretKey, secretValue string) (error)

Update

go
func (agg *Tenant) Update(name string) (error)

Event Handlers

TenantReadmodel

Domain EventMethod
webhookAggregate.WebhookRemovedEventWebhookRemovedEvent
webhookAggregate.WebhookAddedEventWebhookAddedEvent
tenantAggregate.TenantCreatedEventTenantCreatedEvent
tenantAggregate.TenantSecretSetEventTenantSecretSetEvent
tenantAggregate.TenantAttributesSetEventTenantAttributesSetEvent
tenantAggregate.TenantUpdatedEventTenantUpdatedEvent
tenantAggregate.TenantRemovedEventTenantRemovedEvent
invitationAggregate.InvitationCreatedEventInvitationCreatedEvent
invitationAggregate.InvitationRemovedEventInvitationRemovedEvent
identityAggregate.IdentityProfileUpdatedEventIdentityProfileUpdatedEvent
identityAggregate.IdentityRemovedEventIdentityRemovedEvent
identityAggregate.IdentityCreatedEventIdentityCreatedEvent
groupAggregate.GroupUpdatedEventGroupUpdatedEvent
groupAggregate.GroupRemovedEventGroupRemovedEvent
groupAggregate.GroupAddedEventGroupAddedEvent
assetAggregate.AssetAddedEventAssetAddedEvent
assetAggregate.AssetRemovedEventAssetRemovedEvent

Webhook

Commands

WebhookCommandAdd

Domain Command Struct:

go
type WebhookCommandAdd struct {
	WebhookUuid   string `json:"webhookUuid"`
	EventDataName string `json:"eventDataName"`
	EventDataType string `json:"eventDataType"`
	WebhookUrl    string `json:"webhookUrl"`
}

Domain Command Handling Method:

go
func (cs *commandService) WebhookCommandAdd(ctx context.Context, cmd comby.Command, domainCmd *WebhookCommandAdd) ([]comby.Event, error)

WebhookCommandRemove

Domain Command Struct:

go
type WebhookCommandRemove struct {
	WebhookUuid string `json:"webhookUuid"`
}

Domain Command Handling Method:

go
func (cs *commandService) WebhookCommandRemove(ctx context.Context, cmd comby.Command, domainCmd *WebhookCommandRemove) ([]comby.Event, error)

WebhookCommandSetAttributes

Domain Command Struct:

go
type WebhookCommandSetAttributes struct {
	WebhookUuid string              `json:"webhookUuid"`
	Attributes  *comby.AttributeMap `json:"attributes"`
}

Domain Command Handling Method:

go
func (cs *commandService) WebhookCommandSetAttributes(ctx context.Context, cmd comby.Command, domainCmd *WebhookCommandSetAttributes) ([]comby.Event, error)

WebhookCommandUpdate

Domain Command Struct:

go
type WebhookCommandUpdate struct {
	WebhookUuid   string   `json:"webhookUuid"`
	Active        bool     `json:"active,omitempty"`
	EventDataName string   `json:"eventDataName,omitempty"`
	EventDataType string   `json:"eventDataType,omitempty"`
	WebhookUrl    string   `json:"webhookUrl,omitempty"`
	PatchedFields []string `json:"patchedFields"`
}

Domain Command Handling Method:

go
func (cs *commandService) WebhookCommandUpdate(ctx context.Context, cmd comby.Command, domainCmd *WebhookCommandUpdate) ([]comby.Event, error)

Queries

Domain Query Structs:

Domain Query Responses:

WebhookQueryList

Domain Query Struct:

go
type WebhookQueryList struct {
	TenantUuid string `json:"tenantUuid"`
	Page       int64  `json:"page,omitempty"`
	PageSize   int64  `json:"pageSize,omitempty"`
	OrderBy    string `json:"orderBy,omitempty"`
}

Domain Query Handling Method:

go
func (qs *queryService) WebhookQueryList(ctx context.Context, qry comby.Query, domainQry *WebhookQueryList) (*WebhookQueryListResponse, error)

WebhookQueryModel

Domain Query Struct:

go
type WebhookQueryModel struct {
	WebhookUuid string `json:"webhookUuid"`
}

Domain Query Handling Method:

go
func (qs *queryService) WebhookQueryModel(ctx context.Context, qry comby.Query, domainQry *WebhookQueryModel) (*WebhookQueryItemResponse, error)

WebhookQueryListResponse

go
type WebhookQueryListResponse struct {
	Items    []*readmodel.WebhookModel `json:"items,omitempty"`
	Total    int64                     `json:"total,omitempty"`
	Page     int64                     `json:"page,omitempty"`
	PageSize int64                     `json:"pageSize,omitempty"`
}

WebhookQueryItemResponse

go
type WebhookQueryItemResponse struct {
	Item *readmodel.WebhookModel `json:"item,omitempty"`
}

Events

WebhookAddedEvent

Domain Event Struct:

go
type WebhookAddedEvent struct {
	WebhookUuid   string `json:"webhookUuid"`
	EventDataName string `json:"eventDataName"`
	EventDataType string `json:"eventDataType"`
	WebhookUrl    string `json:"webhookUrl"`
}

Domain Event Handling Method:

go
func (agg *Webhook) WebhookAddedEvent(ctx context.Context, evt comby.Event, domainEvt *WebhookAddedEvent) (error)

WebhookRemovedEvent

Domain Event Struct:

go
type WebhookRemovedEvent struct {
	WebhookUuid string `json:"webhookUuid"`
}

Domain Event Handling Method:

go
func (agg *Webhook) WebhookRemovedEvent(ctx context.Context, evt comby.Event, domainEvt *WebhookRemovedEvent) (error)

WebhookAttributesSetEvent

Domain Event Struct:

go
type WebhookAttributesSetEvent struct {
	WebhookUuid string              `json:"webhookUuid"`
	Attributes  *comby.AttributeMap `json:"attributes,omitempty"`
}

Domain Event Handling Method:

go
func (agg *Webhook) WebhookAttributesSetEvent(ctx context.Context, evt comby.Event, domainEvt *WebhookAttributesSetEvent) (error)

WebhookUpdatedEvent

Domain Event Struct:

go
type WebhookUpdatedEvent struct {
	WebhookUuid   string `json:"webhookUuid"`
	Active        bool   `json:"active"`
	EventDataName string `json:"eventDataName"`
	EventDataType string `json:"eventDataType"`
	WebhookUrl    string `json:"webhookUrl"`
}

Domain Event Handling Method:

go
func (agg *Webhook) WebhookUpdatedEvent(ctx context.Context, evt comby.Event, domainEvt *WebhookUpdatedEvent) (error)

Aggregate

Aggregate Struct:

go
type Webhook struct {
	*comby.BaseAggregate
	// Value Objects
	Active        bool
	EventDataName string
	EventDataType string
	WebhookUrl    string
	Attributes    *comby.AttributeMap
}

Methods

Add

go
func (agg *Webhook) Add(eventDataName, eventDataType, webhookUrl string) (error)

Remove

go
func (agg *Webhook) Remove() (error)

SetAttributes

go
func (agg *Webhook) SetAttributes(attributes *comby.AttributeMap) (error)

Update

go
func (agg *Webhook) Update(active bool, eventDataName, eventDataType, webhookUrl string) (error)

Event Handlers

WebhookReadmodel

Domain EventMethod
webhookAggregate.WebhookAddedEventWebhookAddedEvent
webhookAggregate.WebhookUpdatedEventWebhookUpdatedEvent
webhookAggregate.WebhookRemovedEventWebhookRemovedEvent
webhookAggregate.WebhookAttributesSetEventWebhookAttributesSetEvent
tenantAggregate.TenantCreatedEventTenantCreatedEvent
tenantAggregate.TenantRemovedEventTenantRemovedEvent
tenantAggregate.TenantUpdatedEventTenantUpdatedEvent