Files
zitadel/internal/v2/domain/repository.go

107 lines
3.6 KiB
Go
Raw Permalink Normal View History

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)
}