organization

package
v0.15.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 9, 2026 License: MIT Imports: 20 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrOrganizationInvitationExpired         = errors.New("organization invitation expired")
	ErrOrganizationInvitationAlreadyAccepted = errors.New("organization invitation already accepted")
	ErrOrganizationInvitationRevoked         = errors.New("organization invitation revoked")
	ErrOrganizationInvitationAlreadyPending  = errors.New("organization invitation already pending")
	ErrOrganizationMemberAlreadyExists       = errors.New("organization member already exists")
	ErrOrganizationInviteForbidden           = errors.New("organization invite forbidden")
	ErrOrganizationActorNotMember            = errors.New("organization invitation actor is not a member")
	ErrOrganizationActorNotAllowed           = errors.New("organization actor is not allowed")
	ErrOrganizationInviteEmailMismatch       = errors.New("organization invitation email mismatch")
	ErrOrganizationSingleMembershipConflict  = errors.New("single organization membership conflict")
	ErrLastOrganizationOwner                 = errors.New("operation would leave organization without an owner")
	ErrLastOrganizationMember                = errors.New("last organization member must delete the organization")
	ErrOrganizationHasOtherMembers           = errors.New("organization has other members")
	ErrPersonalOrganizationImmutable         = errors.New("personal organization creator cannot leave and personal organization cannot be deleted")
	ErrInvalidOrganizationOwnershipTransfer  = errors.New("new organization owner must differ from current owner")
	ErrInvalidOrganizationMode               = errors.New("invalid organization mode")
	ErrInvalidOrganizationRole               = errors.New("invalid organization role")
	ErrOrganizationOperationForbidden        = errors.New("organization operation forbidden")
	ErrInvalidOrganizationInvitationEmail    = errors.New("invalid organization invitation email")
	ErrInvalidOrganizationInvitationMetadata = errors.New("invalid organization invitation metadata")
	ErrInvalidOrganizationInvitationToken    = errors.New("invalid organization invitation token")
)

Functions

This section is empty.

Types

type AcceptInvitationByIDInput

type AcceptInvitationByIDInput struct {
	InvitationID uuid.UUID
	UserID       uuid.UUID
	Now          time.Time
}

type AcceptInvitationInput

type AcceptInvitationInput struct {
	RawToken string
	UserID   uuid.UUID
	Now      time.Time
}

type AcceptInvitationResult

type AcceptInvitationResult struct {
	Invitation         domain.OrganizationInvitation
	Organization       domain.Organization
	Membership         domain.OrganizationMembership
	InvitationAccepted bool
	MembershipCreated  bool
}

type Config

type Config struct {
	Store                  *store.Store
	Tx                     *tx.Manager
	WebhookPublisher       webhook.Publisher
	Logger                 *slog.Logger
	InvitationTTL          time.Duration
	PublicURL              string
	Mode                   OrgMode
	IncludeCodeInEmail     bool
	AccessTokenRevocations *token.AccessTokenRevocations
}

type CreateInvitationInput

type CreateInvitationInput struct {
	OrganizationID uuid.UUID
	ActorUserID    uuid.UUID
	Email          string
	Role           domain.OrganizationRole
	Metadata       map[string]any
	Now            time.Time
}

type CreateOrganizationInput

type CreateOrganizationInput struct {
	Name            string
	CreatedByUserID uuid.UUID
}

type DeleteOrganizationInput added in v0.14.0

type DeleteOrganizationInput struct {
	OrganizationID uuid.UUID
	ActorUserID    uuid.UUID
}

type InvitationPreview

type InvitationPreview struct {
	Invitation   domain.OrganizationInvitation
	Organization domain.Organization
}

type InvitationWithToken

type InvitationWithToken struct {
	Invitation domain.OrganizationInvitation
	RawToken   string
	InviteURL  string
}

type OrgMode

type OrgMode string
const (
	OrgModePersonal OrgMode = "personal"
	OrgModeSingle   OrgMode = "single"
	OrgModeMulti    OrgMode = "multi"
)

func (OrgMode) AllowsInvitations

func (m OrgMode) AllowsInvitations() bool

func (OrgMode) AllowsLeaveOrg

func (m OrgMode) AllowsLeaveOrg() bool

func (OrgMode) AllowsOrgSwitching

func (m OrgMode) AllowsOrgSwitching() bool

func (OrgMode) AllowsUserCreatedTeamOrgs

func (m OrgMode) AllowsUserCreatedTeamOrgs() bool

func (OrgMode) HasVisibleOrganizations

func (m OrgMode) HasVisibleOrganizations() bool

type RemoveOrganizationMemberInput added in v0.14.0

type RemoveOrganizationMemberInput struct {
	OrganizationID uuid.UUID
	UserID         uuid.UUID
	ActorUserID    uuid.UUID
}

type ResendInvitationInput added in v0.1.26

type ResendInvitationInput struct {
	OrganizationID uuid.UUID
	InvitationID   uuid.UUID
	Now            time.Time
}

type RevokeInvitationInput

type RevokeInvitationInput struct {
	OrganizationID  uuid.UUID
	InvitationID    uuid.UUID
	RevokedByUserID *uuid.UUID
	Now             time.Time
}

type Service

type Service struct {
	// contains filtered or unexported fields
}

func New

func New(cfg Config) *Service

func (*Service) AcceptInvitation

func (s *Service) AcceptInvitation(ctx context.Context, in AcceptInvitationInput) (AcceptInvitationResult, error)

func (*Service) AcceptInvitationByID

func (s *Service) AcceptInvitationByID(ctx context.Context, in AcceptInvitationByIDInput) (AcceptInvitationResult, error)

func (*Service) CreateInvitation

func (s *Service) CreateInvitation(ctx context.Context, in CreateInvitationInput) (InvitationWithToken, error)

func (*Service) DefaultOrganizationForUser

func (s *Service) DefaultOrganizationForUser(ctx context.Context, userID uuid.UUID) (domain.Organization, domain.OrganizationMembership, error)

func (*Service) DeleteOrganization added in v0.14.0

func (s *Service) DeleteOrganization(ctx context.Context, in DeleteOrganizationInput) error

func (*Service) DeleteOrganizationMember

func (s *Service) DeleteOrganizationMember(ctx context.Context, organizationID uuid.UUID, userID uuid.UUID) error

func (*Service) EnsureDefaultOrganization

func (s *Service) EnsureDefaultOrganization(ctx context.Context, user domain.User) (domain.Organization, domain.OrganizationMembership, error)

func (*Service) EnsureInitialOrganization

func (s *Service) EnsureInitialOrganization(ctx context.Context, user domain.User, source SignupSource) (domain.Organization, domain.OrganizationMembership, bool, error)

func (*Service) GetOrganization

func (s *Service) GetOrganization(ctx context.Context, organizationID uuid.UUID) (domain.Organization, error)

func (*Service) GetOrganizationMember

func (s *Service) GetOrganizationMember(ctx context.Context, organizationID uuid.UUID, userID uuid.UUID) (domain.OrganizationMember, error)

func (*Service) InvitationByID

func (s *Service) InvitationByID(ctx context.Context, invitationID uuid.UUID) (InvitationPreview, error)

func (*Service) InvitationByOrganizationAndID

func (s *Service) InvitationByOrganizationAndID(ctx context.Context, organizationID uuid.UUID, invitationID uuid.UUID) (InvitationPreview, error)

func (*Service) InvitationByToken

func (s *Service) InvitationByToken(ctx context.Context, rawToken string) (InvitationPreview, error)

func (*Service) ListCurrentOrganizationMembers added in v0.1.25

func (s *Service) ListCurrentOrganizationMembers(ctx context.Context, userID uuid.UUID, organizationID uuid.UUID) ([]domain.OrganizationMember, error)

func (*Service) ListInvitations

func (s *Service) ListInvitations(ctx context.Context, organizationID uuid.UUID) ([]domain.OrganizationInvitation, error)

func (*Service) ListOrganizationMembers

func (s *Service) ListOrganizationMembers(ctx context.Context, organizationID uuid.UUID) ([]domain.OrganizationMember, error)

func (*Service) ListUserMemberships

func (s *Service) ListUserMemberships(ctx context.Context, userID uuid.UUID) ([]UserOrganization, error)

func (*Service) ListUserOrganizations

func (s *Service) ListUserOrganizations(ctx context.Context, userID uuid.UUID) ([]UserOrganization, error)

func (*Service) Mode

func (s *Service) Mode() OrgMode

func (*Service) PrepareUserDeletion added in v0.14.0

func (s *Service) PrepareUserDeletion(ctx context.Context, userID uuid.UUID) error

PrepareUserDeletion removes organization-owned state without allowing user deletion to bypass last-owner and last-member rules. The caller must invoke it inside the same transaction that deletes the user.

func (*Service) RemoveOrganizationMember added in v0.14.0

func (s *Service) RemoveOrganizationMember(ctx context.Context, in RemoveOrganizationMemberInput) error

func (*Service) RequireMembership

func (s *Service) RequireMembership(ctx context.Context, userID uuid.UUID, organizationID uuid.UUID) (domain.OrganizationMembership, error)

func (*Service) ResendInvitation added in v0.1.26

func (s *Service) ResendInvitation(ctx context.Context, in ResendInvitationInput) (InvitationWithToken, error)

func (*Service) RevokeInvitation

func (*Service) SignupOrganizationPlan

func (s *Service) SignupOrganizationPlan(source SignupSource) (SignupOrganizationPlan, error)

func (*Service) TransferOrganizationOwnership added in v0.14.0

func (s *Service) TransferOrganizationOwnership(ctx context.Context, in TransferOrganizationOwnershipInput) error

func (*Service) UpdateOrganization

func (s *Service) UpdateOrganization(ctx context.Context, organizationID uuid.UUID, name string) (domain.Organization, error)

func (*Service) UpdateOrganizationMember

func (s *Service) UpdateOrganizationMember(ctx context.Context, organizationID uuid.UUID, userID uuid.UUID, role domain.OrganizationRole) (domain.OrganizationMembership, error)

type SignupOrganizationPlan

type SignupOrganizationPlan struct {
	CreateInitialOrg bool
	InitialOrgKind   domain.OrganizationKind
	AcceptInvitation bool
}

func SignupOrganizationPlanFor

func SignupOrganizationPlanFor(mode OrgMode, source SignupSource) (SignupOrganizationPlan, error)

type SignupSource

type SignupSource string
const (
	SignupSourceDirect SignupSource = "direct"
	SignupSourceInvite SignupSource = "invite"
)

type TransferOrganizationOwnershipInput added in v0.14.0

type TransferOrganizationOwnershipInput struct {
	OrganizationID uuid.UUID
	ActorUserID    uuid.UUID
	NewOwnerUserID uuid.UUID
}

type UserOrganization

type UserOrganization struct {
	Organization domain.Organization
	Membership   domain.OrganizationMembership
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL