deleter

package
v0.116.1 Latest Latest
Warning

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

Go to latest
Published: Sep 8, 2026 License: Apache-2.0 Imports: 32 Imported by: 0

Documentation

Index

Constants

View Source
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.

View Source
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

type BlockedError struct {
	OrgID    string
	Blockers []Blocker
}

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 CheckoutService interface {
	List(ctx context.Context, filter checkout.Filter) ([]checkout.Checkout, error)
	DeleteByCustomer(ctx context.Context, customerID string) error
}

type CreditService added in v0.114.0

type CreditService interface {
	GetBalance(ctx context.Context, accountID string) (int64, error)
	List(ctx context.Context, flt credit.Filter) ([]credit.Transaction, error)
	DeleteByAccountID(ctx context.Context, accountID string) error
}

type CustomerService added in v0.8.35

type CustomerService interface {
	Delete(ctx context.Context, id string) error
	List(ctx context.Context, filter customer.Filter) ([]customer.Customer, error)
}

type GroupService

type GroupService interface {
	List(ctx context.Context, flt group.Filter) ([]group.Group, error)
	DeleteModel(ctx context.Context, id string) error
}

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 InvoiceService interface {
	List(ctx context.Context, flt invoice.Filter) ([]invoice.Invoice, error)
	ListPayableOnProvider(ctx context.Context, customr customer.Customer) ([]invoice.Invoice, error)
	DeleteByCustomer(ctx context.Context, customr customer.Customer) error
}

type KycService added in v0.114.0

type KycService interface {
	DeleteKyc(ctx context.Context, orgID string) error
}

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 PlanService interface {
	GetByID(ctx context.Context, id string) (plan.Plan, error)
}

type PolicyService

type PolicyService interface {
	List(ctx context.Context, flt policy.Filter) ([]policy.Policy, error)
	Delete(ctx context.Context, id string) error
}

type ProjectService

type ProjectService interface {
	List(ctx context.Context, flt project.Filter) ([]project.Project, error)
	DeleteModel(ctx context.Context, id string) error
}

type ResourceService

type ResourceService interface {
	List(ctx context.Context, flt resource.Filter) ([]resource.Resource, error)
	Delete(ctx context.Context, namespaceID, id string) error
}

type RoleService

type RoleService interface {
	Get(ctx context.Context, id string) (role.Role, error)
	List(ctx context.Context, flt role.Filter) ([]role.Role, error)
	Delete(ctx context.Context, id string) error
}

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

func (d Service) CheckOrganizationDelete(ctx context.Context, id string) ([]Blocker, error)

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

func (d Service) DeleteCustomers(ctx context.Context, id string) error

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

func (d Service) DeleteGroup(ctx context.Context, id string) error

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

func (d Service) DeleteOrganization(ctx context.Context, id string) error

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

func (d Service) DeleteProject(ctx context.Context, id string) error

func (Service) DeleteUser added in v0.7.6

func (d Service) DeleteUser(ctx context.Context, userID string) error

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

func (d Service) RemoveUsersFromOrg(ctx context.Context, orgID string, userIDs []string) error

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
}

type UserPATService added in v0.106.0

type UserPATService interface {
	DeleteAllByUser(ctx context.Context, userID string) error
}

type UserService added in v0.7.6

type UserService interface {
	GetByIDs(ctx context.Context, userIDs []string) ([]user.User, error)
	Delete(ctx context.Context, id string) error
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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