Skip to content

Commit ba965c8

Browse files
committed
Delete overrides
1 parent 06f0533 commit ba965c8

File tree

12 files changed

+256
-28
lines changed

12 files changed

+256
-28
lines changed

cmd/dev_server/dev_server.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ func NewDevServerCmd(client resources.Client, analyticsTrackerFn analytics.Track
6262
cmd.AddGroup(&cobra.Group{ID: "overrides", Title: "Override commands:"})
6363
cmd.AddCommand(NewAddOverrideCmd(client))
6464
cmd.AddCommand(NewRemoveOverrideCmd(client))
65+
cmd.AddCommand(NewDeleteOverridesCmd(client))
6566
cmd.AddGroup(&cobra.Group{ID: "server", Title: "Server commands:"})
6667

6768
cmd.AddCommand(NewStartServerCmd(ldClient))

cmd/dev_server/overrides.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,44 @@ func addOverride(client resources.Client) func(*cobra.Command, []string) error {
7373
}
7474
}
7575

76+
func NewDeleteOverridesCmd(client resources.Client) *cobra.Command {
77+
cmd := &cobra.Command{
78+
GroupID: "overrides",
79+
Args: validators.Validate(),
80+
Long: "remove all overrides for a project",
81+
RunE: deleteOverrides(client),
82+
Short: "remove all overrides for a project",
83+
Use: "remove-overrides",
84+
}
85+
86+
cmd.SetUsageTemplate(resourcescmd.SubcommandUsageTemplate())
87+
88+
cmd.Flags().String(cliflags.ProjectFlag, "", "The project key")
89+
_ = cmd.MarkFlagRequired(cliflags.ProjectFlag)
90+
_ = cmd.Flags().SetAnnotation(cliflags.ProjectFlag, "required", []string{"true"})
91+
_ = viper.BindPFlag(cliflags.ProjectFlag, cmd.Flags().Lookup(cliflags.ProjectFlag))
92+
93+
return cmd
94+
}
95+
96+
func deleteOverrides(client resources.Client) func(*cobra.Command, []string) error {
97+
return func(cmd *cobra.Command, args []string) error {
98+
path := fmt.Sprintf("%s/dev/projects/%s/overrides", getDevServerUrl(), viper.GetString(cliflags.ProjectFlag))
99+
res, err := client.MakeUnauthenticatedRequest(
100+
"DELETE",
101+
path,
102+
nil,
103+
)
104+
if err != nil {
105+
return output.NewCmdOutputError(err, viper.GetString(cliflags.OutputFlag))
106+
}
107+
108+
fmt.Fprint(cmd.OutOrStdout(), string(res))
109+
110+
return nil
111+
}
112+
}
113+
76114
func NewRemoveOverrideCmd(client resources.Client) *cobra.Command {
77115
cmd := &cobra.Command{
78116
GroupID: "overrides",

internal/dev_server/api/api.yaml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,17 @@ paths:
113113
$ref: "#/components/responses/ErrorResponse"
114114
409:
115115
$ref: "#/components/responses/ErrorResponse"
116+
/dev/projects/{projectKey}/overrides:
117+
delete:
118+
summary: remove all overrides for the given project
119+
operationId: deleteOverrides
120+
parameters:
121+
- $ref: "#/components/parameters/projectKey"
122+
responses:
123+
204:
124+
description: OK. All overrides were removed
125+
404:
126+
description: No project found
116127
/dev/projects/{projectKey}/overrides/{flagKey}:
117128
put:
118129
summary: override flag value with value provided in the body
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package api
2+
3+
import (
4+
"context"
5+
6+
"github.com/pkg/errors"
7+
8+
"github.com/launchdarkly/ldcli/internal/dev_server/model"
9+
)
10+
11+
func (s server) DeleteOverrides(ctx context.Context, request DeleteOverridesRequestObject) (DeleteOverridesResponseObject, error) {
12+
err := model.DeleteOverrides(ctx, request.ProjectKey)
13+
if err != nil {
14+
if errors.As(err, &model.ErrNotFound{}) {
15+
return DeleteOverrides404Response{}, nil
16+
}
17+
return nil, err
18+
}
19+
return DeleteOverrides204Response{}, nil
20+
}

internal/dev_server/api/server.gen.go

Lines changed: 94 additions & 21 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/dev_server/db/sqlite.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,17 @@ func (s *Sqlite) GetOverridesForProject(ctx context.Context, projectKey string)
301301
return overrides, nil
302302
}
303303

304+
func (s *Sqlite) DeleteOverridesForProject(ctx context.Context, projectKey string) error {
305+
_, err := s.database.ExecContext(ctx, `
306+
DELETE FROM overrides
307+
WHERE project_key = ?
308+
`, projectKey)
309+
if err != nil {
310+
return errors.Wrap(err, "unable to delete overrides for project")
311+
}
312+
return nil
313+
}
314+
304315
func (s *Sqlite) UpsertOverride(ctx context.Context, override model.Override) (model.Override, error) {
305316
valueJson, err := override.Value.MarshalJSON()
306317
if err != nil {

internal/dev_server/db/sqlite_test.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,4 +328,13 @@ func TestDBFunctions(t *testing.T) {
328328

329329
assert.True(t, found)
330330
})
331+
332+
t.Run("DeleteOverridesForProject deletes overrides", func(t *testing.T) {
333+
err := store.DeleteOverridesForProject(ctx, projects[0].Key)
334+
assert.NoError(t, err)
335+
336+
overridesResult, err := store.GetOverridesForProject(ctx, projects[0].Key)
337+
assert.NoError(t, err)
338+
assert.Len(t, overridesResult, 0)
339+
})
331340
}

0 commit comments

Comments
 (0)