deleter

package
v0.119.0 Latest Latest
Warning

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

Go to latest
Published: Oct 27, 2026 License: Apache-2.0 Imports: 38 Imported by: 0

Documentation

Index

Constants

View Source
const (
	BlockerActiveSubscription   = "ACTIVE_SUBSCRIPTION"
	BlockerUnpaidInvoice        = "UNPAID_INVOICE"
	BlockerNegativeTokenBalance = "NEGATIVE_TOKEN_BALANCE"
	BlockerResourcesExist       = "RESOURCES_EXIST"
)

Reasons a 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"
	SubjectResourceNamespace = "resource_namespace"
)

Kinds of entity a Blocker's Subject id refers to.

Variables

This section is empty.

Functions

This section is empty.

Types

type AuditRecordService added in v0.119.0

type AuditRecordService interface {
	List(ctx context.Context, query *rql.Query) (auditrecord.AuditRecordsList, error)
}

type BlockedError added in v0.116.0

type BlockedError struct {
	OrgID     string
	ProjectID 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, or the namespace
	// for BlockerResourcesExist.
	Subject string
	// SubjectType is one of the Subject* constants and says what kind of
	// entity the Subject id refers to.
	SubjectType string
	// Count is the number of blocking resources, for BlockerResourcesExist.
	Count int
	// Message says what blocks the delete and how to clear it. Empty for
	// BlockerResourcesExist.
	Message string
}

Blocker is one reason a project or 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 Config added in v0.119.0

type Config struct {
	Enabled   bool             `yaml:"enabled" mapstructure:"enabled" default:"false"`
	Resources map[string]Rules `yaml:"resources" mapstructure:"resources"`
}

func (Config) Validate added in v0.119.0

func (c Config) Validate() 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)
}

type CustomerService added in v0.8.35

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

type DomainService added in v0.119.0

type DomainService interface {
	List(ctx context.Context, flt domain.Filter) ([]domain.Domain, error)
	Delete(ctx context.Context, id string) 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 Parent added in v0.119.0

type Parent string

Parent is what is being deleted.

const (
	ParentProject      Parent = "project"
	ParentOrganization Parent = "organization"
)

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 Rule added in v0.119.0

type Rule string
const (
	RuleBlock Rule = "block"
	// RuleBlockUnlessDeletable blocks until the resource metadata has
	// deletable set to true.
	RuleBlockUnlessDeletable Rule = "block_unless_deletable"
	RuleAllow                Rule = "allow"
)

type Rules added in v0.119.0

type Rules map[Parent]Rule

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, domainService DomainService,
	serviceUserService ServiceUserService,
	customerService CustomerService, subService SubscriptionService,
	invoiceService InvoiceService, checkoutService CheckoutService,
	creditService CreditService, kycService KycService,
	planService PlanService, auditRecordService AuditRecordService,
	mailDialer mailer.Dialer, deleteNoticeConfig billing.OrgDeleteNoticeConfig,
	deletionConfig Config) *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) CheckProjectDelete added in v0.119.0

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

func (Service) DeleteCustomers added in v0.8.35

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

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) OrganizationResourceBlockers added in v0.119.0

func (d Service) OrganizationResourceBlockers(ctx context.Context, orgID string) ([]Blocker, error)

func (Service) ProjectResourceBlockers added in v0.119.0

func (d Service) ProjectResourceBlockers(ctx context.Context, projectID string) ([]Blocker, error)

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
	DeleteAllByOrg(ctx context.Context, orgID 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