Documentation
¶
Index ¶
- Constants
- type BlockedError
- type Blocker
- type CheckoutService
- type CreditService
- type CustomerService
- type GroupService
- type InvitationService
- type InvoiceService
- type KycService
- type MembershipService
- type OrganizationService
- type PlanService
- type PolicyService
- type ProjectService
- type ResourceService
- type RoleService
- type Service
- func (d Service) CheckOrganizationDelete(ctx context.Context, id string) ([]Blocker, error)
- func (d Service) DeleteCustomers(ctx context.Context, id string) error
- func (d Service) DeleteGroup(ctx context.Context, id string) error
- func (d Service) DeleteOrganization(ctx context.Context, id string) error
- func (d Service) DeleteProject(ctx context.Context, id string) error
- func (d Service) DeleteUser(ctx context.Context, userID string) error
- func (d Service) RemoveUsersFromOrg(ctx context.Context, orgID string, userIDs []string) error
- type ServiceUserService
- type SubscriptionService
- type UserPATService
- type UserService
Constants ¶
const ( BlockerActiveSubscription = "ACTIVE_SUBSCRIPTION" BlockerUnpaidInvoice = "UNPAID_INVOICE" BlockerNegativeTokenBalance = "NEGATIVE_TOKEN_BALANCE" )
Reasons an organization delete can be blocked. The API error carries them as violation types, so a client can tell the reasons apart without reading the message text.
const ( SubjectSubscription = "billing_subscription" SubjectInvoice = "billing_invoice" SubjectBillingAccount = "billing_account" )
Kinds of entity a Blocker's Subject id refers to.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type BlockedError ¶ added in v0.116.0
BlockedError carries every blocker the up-front check found, so the caller gets one checklist instead of discovering blockers one retry at a time.
func (*BlockedError) Error ¶ added in v0.116.0
func (e *BlockedError) Error() string
type Blocker ¶ added in v0.116.0
type Blocker struct {
// Type is one of the Blocker* constants.
Type string
// Subject is the id of the entity behind the reason.
Subject string
// SubjectType is one of the Subject* constants and says what kind of
// entity the Subject id refers to.
SubjectType string
// Message says what blocks the delete and how to clear it.
Message string
}
Blocker is one reason an organization cannot be deleted right now.
type CheckoutService ¶ added in v0.114.0
type CreditService ¶ added in v0.114.0
type CustomerService ¶ added in v0.8.35
type GroupService ¶
type InvitationService ¶
type InvitationService interface {
List(ctx context.Context, flt invitation.Filter) ([]invitation.Invitation, error)
Delete(ctx context.Context, id uuid.UUID) error
}
type InvoiceService ¶ added in v0.8.35
type KycService ¶ added in v0.114.0
type MembershipService ¶ added in v0.103.0
type MembershipService interface {
OnGroupDeleted(ctx context.Context, groupID string) error
ListResourcesByPrincipal(ctx context.Context, principal authenticate.Principal, resourceType string, filter membership.ResourceFilter) ([]string, error)
ListPrincipalsByResource(ctx context.Context, resourceID, resourceType string, filter membership.MemberFilter) ([]membership.Member, error)
ForceRemoveOrganizationMember(ctx context.Context, orgID, principalID, principalType string) error
}
type OrganizationService ¶
type OrganizationService interface {
GetRaw(ctx context.Context, id string) (organization.Organization, error)
DeleteModel(ctx context.Context, id string) error
}
type PlanService ¶ added in v0.116.0
type PolicyService ¶
type ProjectService ¶
type ResourceService ¶
type RoleService ¶
type Service ¶
type Service struct {
// contains filtered or unexported fields
}
func NewCascadeDeleter ¶
func NewCascadeDeleter(orgService OrganizationService, projService ProjectService, resService ResourceService, groupService GroupService, membershipService MembershipService, policyService PolicyService, roleService RoleService, invitationService InvitationService, userService UserService, userPATService UserPATService, serviceUserService ServiceUserService, customerService CustomerService, subService SubscriptionService, invoiceService InvoiceService, checkoutService CheckoutService, creditService CreditService, kycService KycService, planService PlanService, mailDialer mailer.Dialer, deleteNoticeConfig billing.OrgDeleteNoticeConfig) *Service
func (Service) CheckOrganizationDelete ¶ added in v0.116.0
CheckOrganizationDelete reports everything that currently blocks deleting the organization, without changing anything: no subscription gets canceled and the invoice rows are read as they are (they sync from the provider on a timer). The answer is advisory — DeleteOrganization re-checks against fresh provider data before actually deleting.
func (Service) DeleteCustomers ¶ added in v0.8.35
DeleteCustomers lists the accounts and reads the balances itself; DeleteOrganization goes through deleteCustomers with what it already collected.
func (Service) DeleteGroup ¶ added in v0.103.0
DeleteGroup orchestrates teardown of a single group: clears every member's policies and relations plus the org<->group hierarchy relations via membership, then deletes the group entity itself.
func (Service) DeleteOrganization ¶
DeleteOrganization removes an org and everything belonging to it. Billing is torn down first: it talks to the billing provider and is the step most likely to fail. Identity (projects, policies, and so on) goes after, with org policies (the org owners) near the end. This way a failure at any step leaves the org owned and the delete can simply be run again. Every step treats already-deleted data as success for the same reason. That applies to data inside a half-deleted org; an org whose row is already fully gone answers not found instead, so a caller can tell a finished delete from a repeatable one (and a mistyped org id from a success).
func (Service) DeleteUser ¶ added in v0.7.6
DeleteUser visits every org the user has a policy on (disabled orgs too), otherwise userService.Delete would leave orphan policy rows behind.
func (Service) RemoveUsersFromOrg ¶ added in v0.7.5
RemoveUsersFromOrg removes users from an organization as members. The policy and relation cleanup — org, project, group, and custom resource — is delegated to membership.ForceRemoveOrganizationMember. It uses the force variant because a deletion cascade must succeed even when the user is the org's last owner.
type ServiceUserService ¶ added in v0.100.0
type ServiceUserService interface {
List(ctx context.Context, flt serviceuser.Filter) ([]serviceuser.ServiceUser, error)
Delete(ctx context.Context, id string) error
}
type SubscriptionService ¶ added in v0.8.35
type SubscriptionService interface {
List(ctx context.Context, filter subscription.Filter) ([]subscription.Subscription, error)
Cancel(ctx context.Context, id string, immediate bool) (subscription.Subscription, error)
DeleteByCustomer(ctx context.Context, customr customer.Customer) error
}