mirror of
https://github.com/zitadel/zitadel.git
synced 2025-08-12 07:27:33 +00:00
107 lines
3.6 KiB
Go
107 lines
3.6 KiB
Go
![]() |
package domain
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"time"
|
||
|
|
||
|
"github.com/zitadel/zitadel/internal/domain"
|
||
|
"github.com/zitadel/zitadel/internal/v2/database"
|
||
|
)
|
||
|
|
||
|
// Domain represents a unified domain that can belong to either an instance or an organization
|
||
|
type Domain struct {
|
||
|
ID string
|
||
|
InstanceID string
|
||
|
OrganizationID *string // nil for instance domains
|
||
|
Domain string
|
||
|
IsVerified bool
|
||
|
IsPrimary bool
|
||
|
ValidationType *domain.OrgDomainValidationType // nil for instance domains
|
||
|
CreatedAt time.Time
|
||
|
UpdatedAt time.Time
|
||
|
DeletedAt *time.Time
|
||
|
}
|
||
|
|
||
|
// IsInstanceDomain returns true if this is an instance domain (OrganizationID is nil)
|
||
|
func (d *Domain) IsInstanceDomain() bool {
|
||
|
return d.OrganizationID == nil
|
||
|
}
|
||
|
|
||
|
// IsOrganizationDomain returns true if this is an organization domain (OrganizationID is not nil)
|
||
|
func (d *Domain) IsOrganizationDomain() bool {
|
||
|
return d.OrganizationID != nil
|
||
|
}
|
||
|
|
||
|
// DomainSearchCriteria defines the search criteria for domains
|
||
|
type DomainSearchCriteria struct {
|
||
|
ID *string
|
||
|
Domain *string
|
||
|
InstanceID *string
|
||
|
OrganizationID *string
|
||
|
IsVerified *bool
|
||
|
IsPrimary *bool
|
||
|
}
|
||
|
|
||
|
// DomainPagination defines pagination options for domain queries
|
||
|
type DomainPagination struct {
|
||
|
Limit uint32
|
||
|
Offset uint32
|
||
|
SortBy DomainSortField
|
||
|
Order database.SortOrder
|
||
|
}
|
||
|
|
||
|
// DomainSortField defines the fields available for sorting domain results
|
||
|
type DomainSortField int
|
||
|
|
||
|
const (
|
||
|
DomainSortFieldCreatedAt DomainSortField = iota
|
||
|
DomainSortFieldUpdatedAt
|
||
|
DomainSortFieldDomain
|
||
|
)
|
||
|
|
||
|
// DomainList represents a paginated list of domains
|
||
|
type DomainList struct {
|
||
|
Domains []*Domain
|
||
|
TotalCount uint64
|
||
|
}
|
||
|
|
||
|
// InstanceDomainRepository defines the repository interface for instance domain operations
|
||
|
type InstanceDomainRepository interface {
|
||
|
// Add creates a new instance domain (always verified)
|
||
|
Add(ctx context.Context, instanceID, domain string) (*Domain, error)
|
||
|
|
||
|
// SetPrimary sets the primary domain for an instance
|
||
|
SetPrimary(ctx context.Context, instanceID, domain string) error
|
||
|
|
||
|
// Remove soft deletes an instance domain
|
||
|
Remove(ctx context.Context, instanceID, domain string) error
|
||
|
|
||
|
// Get returns a single instance domain matching the criteria
|
||
|
// Returns error if multiple domains are found
|
||
|
Get(ctx context.Context, criteria DomainSearchCriteria) (*Domain, error)
|
||
|
|
||
|
// List returns a list of instance domains matching the criteria with pagination
|
||
|
List(ctx context.Context, criteria DomainSearchCriteria, pagination DomainPagination) (*DomainList, error)
|
||
|
}
|
||
|
|
||
|
// OrganizationDomainRepository defines the repository interface for organization domain operations
|
||
|
type OrganizationDomainRepository interface {
|
||
|
// Add creates a new organization domain
|
||
|
Add(ctx context.Context, instanceID, organizationID, domain string, validationType domain.OrgDomainValidationType) (*Domain, error)
|
||
|
|
||
|
// SetVerified marks an organization domain as verified
|
||
|
SetVerified(ctx context.Context, instanceID, organizationID, domain string) error
|
||
|
|
||
|
// SetPrimary sets the primary domain for an organization
|
||
|
SetPrimary(ctx context.Context, instanceID, organizationID, domain string) error
|
||
|
|
||
|
// Remove soft deletes an organization domain
|
||
|
Remove(ctx context.Context, instanceID, organizationID, domain string) error
|
||
|
|
||
|
// Get returns a single organization domain matching the criteria
|
||
|
// Returns error if multiple domains are found
|
||
|
Get(ctx context.Context, criteria DomainSearchCriteria) (*Domain, error)
|
||
|
|
||
|
// List returns a list of organization domains matching the criteria with pagination
|
||
|
List(ctx context.Context, criteria DomainSearchCriteria, pagination DomainPagination) (*DomainList, error)
|
||
|
}
|