MCPcopy Create free account
hub / github.com/bytebase/bytebase / DeleteProject

Method DeleteProject

backend/store/project.go:339–598  ·  view source on GitHub ↗

DeleteProject permanently purges a soft-deleted project and all related resources. This operation is irreversible and should only be used for: - Administrative cleanup of old soft-deleted projects - Test cleanup Following AIP-164/165, this only works on projects where deleted = TRUE.

(ctx context.Context, workspace string, resourceID string)

Source from the content-addressed store, hash-verified

337// - Test cleanup
338// Following AIP-164/165, this only works on projects where deleted = TRUE.
339func (s *Store) DeleteProject(ctx context.Context, workspace string, resourceID string) error {
340 defaultProjectID, err := s.GetDefaultProjectID(ctx, workspace)
341 if err != nil {
342 return errors.Wrap(err, "failed to get default project ID")
343 }
344
345 tx, err := s.GetDB().BeginTx(ctx, nil)
346 if err != nil {
347 return errors.Wrap(err, "failed to begin transaction")
348 }
349 defer tx.Rollback()
350
351 // Delete query_history entries that reference this project
352 q := qb.Q().Space("DELETE FROM query_history WHERE project = ?", resourceID)
353 sql, args, err := q.ToSQL()
354 if err != nil {
355 return errors.Wrap(err, "failed to build query_history delete query")
356 }
357 if _, err := tx.ExecContext(ctx, sql, args...); err != nil {
358 return errors.Wrapf(err, "failed to delete query_history for project %s", resourceID)
359 }
360
361 // Delete policy entries that reference this project
362 q = qb.Q().Space("DELETE FROM policy")
363 q.Space("WHERE (resource_type = ? AND resource = 'projects/' || ?)", storepb.Policy_PROJECT.String(), resourceID)
364 q.And("workspace = ?", workspace)
365 sql, args, err = q.ToSQL()
366 if err != nil {
367 return errors.Wrap(err, "failed to build policy delete query")
368 }
369 if _, err := tx.ExecContext(ctx, sql, args...); err != nil {
370 return errors.Wrapf(err, "failed to delete policies for project %s", resourceID)
371 }
372
373 // Delete worksheets associated with this project
374 q = qb.Q().Space("UPDATE worksheet SET project = ? WHERE project = ?", defaultProjectID, resourceID)
375 sql, args, err = q.ToSQL()
376 if err != nil {
377 return errors.Wrap(err, "failed to build worksheet update query")
378 }
379 if _, err := tx.ExecContext(ctx, sql, args...); err != nil {
380 return errors.Wrapf(err, "failed to update worksheets for project %s", resourceID)
381 }
382
383 // Delete issue_comment entries for issues in this project
384 q = qb.Q().Space("DELETE FROM issue_comment WHERE project = ?", resourceID)
385 sql, args, err = q.ToSQL()
386 if err != nil {
387 return errors.Wrap(err, "failed to build issue_comment delete query")
388 }
389 if _, err := tx.ExecContext(ctx, sql, args...); err != nil {
390 return errors.Wrapf(err, "failed to delete issue_comment for project %s", resourceID)
391 }
392
393 // Delete issues associated with this project
394 q = qb.Q().Space("DELETE FROM issue WHERE project = ?", resourceID)
395 sql, args, err = q.ToSQL()
396 if err != nil {

Callers

nothing calls this directly

Calls 8

GetDefaultProjectIDMethod · 0.95
GetDBMethod · 0.95
QFunction · 0.92
SpaceMethod · 0.80
ToSQLMethod · 0.80
AndMethod · 0.80
ErrorfMethod · 0.80
StringMethod · 0.65

Tested by

no test coverage detected