diff --git a/internal/dev_server/api/api.yaml b/internal/dev_server/api/api.yaml index 5089d56b..93adfc9b 100644 --- a/internal/dev_server/api/api.yaml +++ b/internal/dev_server/api/api.yaml @@ -41,6 +41,8 @@ paths: responses: 204: description: OK. Project & overrides were removed + 404: + description: no project found post: summary: Add the project to the dev server parameters: diff --git a/internal/dev_server/api/server.gen.go b/internal/dev_server/api/server.gen.go index a8b53725..e4a9e845 100644 --- a/internal/dev_server/api/server.gen.go +++ b/internal/dev_server/api/server.gen.go @@ -431,6 +431,14 @@ func (response DeleteDevProjectsProjectKey204Response) VisitDeleteDevProjectsPro return nil } +type DeleteDevProjectsProjectKey404Response struct { +} + +func (response DeleteDevProjectsProjectKey404Response) VisitDeleteDevProjectsProjectKeyResponse(w http.ResponseWriter) error { + w.WriteHeader(404) + return nil +} + type GetDevProjectsProjectKeyRequestObject struct { ProjectKey ProjectKey `json:"projectKey"` } diff --git a/internal/dev_server/api/server.go b/internal/dev_server/api/server.go index 2cd06606..11e04d6d 100644 --- a/internal/dev_server/api/server.go +++ b/internal/dev_server/api/server.go @@ -26,8 +26,15 @@ func (s Server) GetDevProjects(ctx context.Context, request GetDevProjectsReques } func (s Server) DeleteDevProjectsProjectKey(ctx context.Context, request DeleteDevProjectsProjectKeyRequestObject) (DeleteDevProjectsProjectKeyResponseObject, error) { - //TODO implement me - panic("implement me") + store := model.StoreFromContext(ctx) + deleted, err := store.DeleteDevProject(ctx, request.ProjectKey) + if err != nil { + return nil, err + } + if !deleted { + return DeleteDevProjectsProjectKey404Response{}, nil + } + return DeleteDevProjectsProjectKey204Response{}, nil } func (s Server) GetDevProjectsProjectKey(ctx context.Context, request GetDevProjectsProjectKeyRequestObject) (GetDevProjectsProjectKeyResponseObject, error) { diff --git a/internal/dev_server/db/sqlite.go b/internal/dev_server/db/sqlite.go index fb5db5cf..9bae25b0 100644 --- a/internal/dev_server/db/sqlite.go +++ b/internal/dev_server/db/sqlite.go @@ -63,6 +63,22 @@ func (s Sqlite) GetDevProject(ctx context.Context, key string) (*model.Project, return &project, nil } +func (s Sqlite) DeleteDevProject(ctx context.Context, key string) (bool, error) { + result, err := s.database.Exec("DELETE FROM projects where key=?", key) + if err != nil { + return false, err + } + + rowsAffected, err := result.RowsAffected() + if err != nil { + return false, err + } + if rowsAffected == 0 { + return false, nil + } + return true, nil +} + func (s Sqlite) InsertProject(ctx context.Context, project model.Project) error { flagsStateJson, err := project.FlagState.MarshalJSON() if err != nil { diff --git a/internal/dev_server/model/store.go b/internal/dev_server/model/store.go index 2a338e2e..0e2dda56 100644 --- a/internal/dev_server/model/store.go +++ b/internal/dev_server/model/store.go @@ -14,6 +14,7 @@ const ctxKeyStore = ctxKey("model.Store") type Store interface { GetDevProjects(ctx context.Context) ([]string, error) GetDevProject(ctx context.Context, projectKey string) (*Project, error) + DeleteDevProject(ctx context.Context, projectKey string) (bool, error) InsertProject(ctx context.Context, project Project) error }