From 4c4194d3df606034b9eaf8755a520937a0cc5689 Mon Sep 17 00:00:00 2001 From: Tasos Papalyras Date: Fri, 26 May 2023 16:32:53 +0300 Subject: [PATCH 1/2] Fix project delete error handling --- application/artifact.go | 24 ++++++++++++------------ application/project.go | 36 ++++++++++++++++++------------------ bob.yaml | 2 +- example/bob.yaml | 2 +- restserver/project.go | 3 +-- 5 files changed, 33 insertions(+), 34 deletions(-) diff --git a/application/artifact.go b/application/artifact.go index 9e7b143..f5b71cf 100644 --- a/application/artifact.go +++ b/application/artifact.go @@ -7,53 +7,53 @@ import ( ) // ProjectArtifactCreate creates a new artifact and copies src to the internal storage. -func (s *application) ProjectArtifactCreate(projectID uuid.UUID, artifactID string, src string, size int) (err error) { +func (a *application) ProjectArtifactCreate(projectID uuid.UUID, artifactID string, src string, size int) (err error) { defer errz.Recover(&err) - exists, err := s.ProjectArtifactExists(projectID, artifactID) + exists, err := a.ProjectArtifactExists(projectID, artifactID) errz.Fatal(err) if exists { return ErrArtifactAlreadyExists } - err = s.projects.CreateArtifact(projectID, artifactID, src, size) + err = a.projects.CreateArtifact(projectID, artifactID, src, size) errz.Fatal(err) return nil } // ProjectArtifactDelete deletes a artifact from database and s3 storage, does nothing if artifact does not exists -func (s *application) ProjectArtifactDelete(projectID uuid.UUID, artifactID string) (err error) { +func (a *application) ProjectArtifactDelete(projectID uuid.UUID, artifactID string) (err error) { defer errz.Recover(&err) - _, err = s.Project(projectID) + _, err = a.Project(projectID) errz.Fatal(err) - err = s.projects.ProjectArtifactDelete(projectID, artifactID) + err = a.projects.ProjectArtifactDelete(projectID, artifactID) errz.Fatal(err) return nil } -func (s *application) ProjectArtifactExists(projectID uuid.UUID, artifactID string) (_ bool, err error) { +func (a *application) ProjectArtifactExists(projectID uuid.UUID, artifactID string) (_ bool, err error) { defer errz.Recover(&err) - _, err = s.Project(projectID) + _, err = a.Project(projectID) if err != nil { return false, err } - return s.projects.ProjectArtifactExists(projectID, artifactID) + return a.projects.ProjectArtifactExists(projectID, artifactID) } -func (s *application) ProjectArtifact(projectID uuid.UUID, artifactID string) (_ *artifact.A, err error) { +func (a *application) ProjectArtifact(projectID uuid.UUID, artifactID string) (_ *artifact.A, err error) { defer errz.Recover(&err) - _, err = s.Project(projectID) + _, err = a.Project(projectID) errz.Fatal(err) - artifact, err := s.projects.ProjectArtifact(projectID, artifactID) + artifact, err := a.projects.ProjectArtifact(projectID, artifactID) errz.Fatal(err) return artifact, nil diff --git a/application/project.go b/application/project.go index 566a456..b151c1d 100644 --- a/application/project.go +++ b/application/project.go @@ -10,14 +10,14 @@ import ( "github.com/google/uuid" ) -func (s *application) ProjectCreate(name, description string) (_ *project.P, err error) { +func (a *application) ProjectCreate(name, description string) (_ *project.P, err error) { defer errz.Recover(&err) - if !s.projectNameValid(name) { + if !a.projectNameValid(name) { return nil, ErrInvalidProjectName } - //_, err = s.projects.ProjectByName(name) + //_, err = a.projects.ProjectByName(name) //if err == nil { // return nil, ErrProjectAlreadyExists //} else if !errors.Is(err, projectrepo.ErrNotFound) { @@ -25,7 +25,7 @@ func (s *application) ProjectCreate(name, description string) (_ *project.P, err //} p := project.New(name, description) - err = s.projects.CreateOrUpdate(p) + err = a.projects.CreateOrUpdate(p) errz.Fatal(err) return p, nil @@ -37,17 +37,17 @@ func (s *application) ProjectCreate(name, description string) (_ *project.P, err // codepoints. The names `.` and `..` are not allowed. // // Ref: https://github.com/dead-claudia/github-limits#repository-names -func (s *application) projectNameValid(name string) bool { +func (a *application) projectNameValid(name string) bool { // alphanumerics, hyphens, periods, underscores. length 1-100 codepoints rex := regexp.MustCompile(`^[A-Za-z0-9-_.]{1,100}$`) return rex.MatchString(name) && name != "." && name != ".." } -func (s *application) Project(id uuid.UUID) (_ *project.P, err error) { +func (a *application) Project(id uuid.UUID) (_ *project.P, err error) { defer errz.Recover(&err) - p, err := s.projects.Project(id) + p, err := a.projects.Project(id) if errors.Is(err, projectrepo.ErrNotFound) { return nil, ErrProjectNotFound } else if err != nil { @@ -57,16 +57,16 @@ func (s *application) Project(id uuid.UUID) (_ *project.P, err error) { return p, nil } -func (s *application) Projects() (_ []*project.P, err error) { +func (a *application) Projects() (_ []*project.P, err error) { defer errz.Recover(&err) - return s.projects.Projects() + return a.projects.Projects() } -func (s *application) ProjectByName(name string) (_ *project.P, err error) { +func (a *application) ProjectByName(name string) (_ *project.P, err error) { defer errz.Recover(&err) - p, err := s.projects.ProjectByName(name) + p, err := a.projects.ProjectByName(name) if errors.Is(err, projectrepo.ErrNotFound) { return nil, ErrProjectNotFound } else if err != nil { @@ -76,10 +76,10 @@ func (s *application) ProjectByName(name string) (_ *project.P, err error) { return p, nil } -func (s *application) ProjectExists(name string) (exists bool, err error) { +func (a *application) ProjectExists(name string) (exists bool, err error) { defer errz.Recover(&err) - _, err = s.projects.ProjectByName(name) + _, err = a.projects.ProjectByName(name) if err == nil { exists = true } else { @@ -93,14 +93,14 @@ func (s *application) ProjectExists(name string) (exists bool, err error) { return exists, nil } -func (s *application) ProjectDelete(projectID uuid.UUID) (err error) { +func (a *application) ProjectDelete(projectID uuid.UUID) (err error) { defer errz.Recover(&err) - _, err = s.projects.Project(projectID) - errz.Fatal(err) - // Delete from database - err = s.projects.ProjectDelete(projectID) + err = a.projects.ProjectDelete(projectID) + if errors.Is(err, projectrepo.ErrNotFound) { + return ErrProjectNotFound + } errz.Fatal(err) return nil diff --git a/bob.yaml b/bob.yaml index e9af12f..1c271ce 100644 --- a/bob.yaml +++ b/bob.yaml @@ -1,5 +1,5 @@ project: bob.build/benchkram/bobc -version: 0.8.0 +version: 0.8.2 nixpkgs: https://github.com/NixOS/nixpkgs/archive/refs/tags/22.05.tar.gz variables: diff --git a/example/bob.yaml b/example/bob.yaml index 0e318e5..b3e44fc 100644 --- a/example/bob.yaml +++ b/example/bob.yaml @@ -1,5 +1,5 @@ project: localhost:8100/benchkram/bobc-example -version: 0.8.0 +version: 0.8.2 nixpkgs: https://github.com/NixOS/nixpkgs/archive/refs/tags/22.05.tar.gz build: diff --git a/restserver/project.go b/restserver/project.go index fdeade5..29fdf6d 100644 --- a/restserver/project.go +++ b/restserver/project.go @@ -6,7 +6,6 @@ import ( "strconv" "github.com/benchkram/bobc/application" - projectRepo "github.com/benchkram/bobc/pkg/projectrepo" "github.com/benchkram/bobc/restserver/generated" "github.com/benchkram/errz" "github.com/google/uuid" @@ -114,7 +113,7 @@ func (s *S) DeleteProject(ctx echo.Context, projectId string) (err error) { p, err := s.app.Project(pid) if err != nil { - if errors.Is(err, projectRepo.ErrNotFound) { + if errors.Is(err, application.ErrProjectNotFound) { return ctx.JSON(http.StatusNotFound, nil) } else { errz.Log(err) From 6a237dd61cbcbd1f68159edbf3abb5af99f0bf14 Mon Sep 17 00:00:00 2001 From: Tasos Papalyras Date: Fri, 26 May 2023 16:33:18 +0300 Subject: [PATCH 2/2] Cleanup --- application/project.go | 7 ------- 1 file changed, 7 deletions(-) diff --git a/application/project.go b/application/project.go index b151c1d..2f83a78 100644 --- a/application/project.go +++ b/application/project.go @@ -17,13 +17,6 @@ func (a *application) ProjectCreate(name, description string) (_ *project.P, err return nil, ErrInvalidProjectName } - //_, err = a.projects.ProjectByName(name) - //if err == nil { - // return nil, ErrProjectAlreadyExists - //} else if !errors.Is(err, projectrepo.ErrNotFound) { - // errz.Fatal(err) - //} - p := project.New(name, description) err = a.projects.CreateOrUpdate(p) errz.Fatal(err)