(ctx context.Context, orgID string, keepWebhook bool)
| 121 | } |
| 122 | |
| 123 | func (r *Runner) DeleteOrganization(ctx context.Context, orgID string, keepWebhook bool) error { |
| 124 | if !auth.IsAdmin(ctx) { |
| 125 | return runnerErrors.ErrUnauthorized |
| 126 | } |
| 127 | |
| 128 | org, err := r.store.GetOrganizationByID(ctx, orgID) |
| 129 | if err != nil { |
| 130 | return fmt.Errorf("error fetching org: %w", err) |
| 131 | } |
| 132 | |
| 133 | entity, err := org.GetEntity() |
| 134 | if err != nil { |
| 135 | return fmt.Errorf("error getting entity: %w", err) |
| 136 | } |
| 137 | |
| 138 | pools, err := r.store.ListEntityPools(ctx, entity) |
| 139 | if err != nil { |
| 140 | return fmt.Errorf("error fetching org pools: %w", err) |
| 141 | } |
| 142 | |
| 143 | if len(pools) > 0 { |
| 144 | poolIDs := []string{} |
| 145 | for _, pool := range pools { |
| 146 | poolIDs = append(poolIDs, pool.ID) |
| 147 | } |
| 148 | |
| 149 | return runnerErrors.NewBadRequestError("org has pools defined (%s)", strings.Join(poolIDs, ", ")) |
| 150 | } |
| 151 | |
| 152 | scaleSets, err := r.store.ListEntityScaleSets(ctx, entity) |
| 153 | if err != nil { |
| 154 | return fmt.Errorf("error fetching organization scale sets: %w", err) |
| 155 | } |
| 156 | |
| 157 | if len(scaleSets) > 0 { |
| 158 | return runnerErrors.NewBadRequestError("organization has scale sets defined; delete them first") |
| 159 | } |
| 160 | |
| 161 | if !keepWebhook && r.config.Default.EnableWebhookManagement { |
| 162 | poolMgr, err := r.poolManagerCtrl.GetOrgPoolManager(org) |
| 163 | if err != nil { |
| 164 | return fmt.Errorf("error fetching pool manager: %w", err) |
| 165 | } |
| 166 | |
| 167 | if err := poolMgr.UninstallWebhook(ctx); err != nil { |
| 168 | // nolint:golangci-lint,godox |
| 169 | // TODO(gabriel-samfira): Should we error out here? |
| 170 | slog.With(slog.Any("error", err)).ErrorContext( |
| 171 | ctx, "failed to uninstall webhook", |
| 172 | "org_id", org.ID) |
| 173 | } |
| 174 | } |
| 175 | |
| 176 | if err := r.poolManagerCtrl.DeleteOrgPoolManager(org); err != nil { |
| 177 | return fmt.Errorf("error deleting org pool manager: %w", err) |
| 178 | } |
| 179 | |
| 180 | if err := r.store.DeleteOrganization(ctx, orgID); err != nil { |
nothing calls this directly
no test coverage detected