@@ -22,6 +22,7 @@ type ProjectsService interface {
2222 ProjectListService
2323 New (ctx context.Context , body kernel.ProjectNewParams , opts ... option.RequestOption ) (res * kernel.Project , err error )
2424 Get (ctx context.Context , id string , opts ... option.RequestOption ) (res * kernel.Project , err error )
25+ Update (ctx context.Context , id string , body kernel.ProjectUpdateParams , opts ... option.RequestOption ) (res * kernel.Project , err error )
2526 Delete (ctx context.Context , id string , opts ... option.RequestOption ) (err error )
2627}
2728
@@ -45,6 +46,14 @@ type ProjectsGetInput struct {
4546 Identifier string
4647}
4748
49+ type ProjectsUpdateInput struct {
50+ Identifier string
51+ Name string
52+ NameSet bool
53+ Status string
54+ StatusSet bool
55+ }
56+
4857type ProjectsDeleteInput struct {
4958 Identifier string
5059}
@@ -133,6 +142,50 @@ func (c ProjectsCmd) Get(ctx context.Context, in ProjectsGetInput) error {
133142 return nil
134143}
135144
145+ func (c ProjectsCmd ) Update (ctx context.Context , in ProjectsUpdateInput ) error {
146+ if ! in .NameSet && ! in .StatusSet {
147+ return fmt .Errorf ("must provide at least one of --name or --status" )
148+ }
149+
150+ projectID , err := resolveProjectArg (ctx , c .projects , in .Identifier )
151+ if err != nil {
152+ return err
153+ }
154+
155+ inner := kernel.UpdateProjectRequestParam {}
156+ if in .NameSet {
157+ inner .Name = param .NewOpt (in .Name )
158+ }
159+ if in .StatusSet {
160+ switch in .Status {
161+ case "active" :
162+ inner .Status = kernel .UpdateProjectRequestStatusActive
163+ case "archived" :
164+ inner .Status = kernel .UpdateProjectRequestStatusArchived
165+ default :
166+ return fmt .Errorf ("--status must be one of: active, archived (got %q)" , in .Status )
167+ }
168+ }
169+
170+ project , err := c .projects .Update (ctx , projectID , kernel.ProjectUpdateParams {
171+ UpdateProjectRequest : inner ,
172+ })
173+ if err != nil {
174+ return util.CleanedUpSdkError {Err : err }
175+ }
176+
177+ pterm .Success .Printf ("Updated project: %s (ID: %s)\n " , project .Name , project .ID )
178+ table := pterm.TableData {
179+ {"Field" , "Value" },
180+ {"ID" , project .ID },
181+ {"Name" , project .Name },
182+ {"Status" , string (project .Status )},
183+ {"Updated At" , util .FormatLocal (project .UpdatedAt )},
184+ }
185+ PrintTableNoPad (table , true )
186+ return nil
187+ }
188+
136189func (c ProjectsCmd ) Delete (ctx context.Context , in ProjectsDeleteInput ) error {
137190 projectID , err := resolveProjectArg (ctx , c .projects , in .Identifier )
138191 if err != nil {
@@ -280,6 +333,19 @@ func runProjectsGet(cmd *cobra.Command, args []string) error {
280333 return c .Get (cmd .Context (), ProjectsGetInput {Identifier : args [0 ]})
281334}
282335
336+ func runProjectsUpdate (cmd * cobra.Command , args []string ) error {
337+ c := getProjectsHandler (cmd )
338+ name , _ := cmd .Flags ().GetString ("name" )
339+ status , _ := cmd .Flags ().GetString ("status" )
340+ return c .Update (cmd .Context (), ProjectsUpdateInput {
341+ Identifier : args [0 ],
342+ Name : name ,
343+ NameSet : cmd .Flags ().Changed ("name" ),
344+ Status : status ,
345+ StatusSet : cmd .Flags ().Changed ("status" ),
346+ })
347+ }
348+
283349func runProjectsDelete (cmd * cobra.Command , args []string ) error {
284350 c := getProjectsHandler (cmd )
285351 return c .Delete (cmd .Context (), ProjectsDeleteInput {Identifier : args [0 ]})
@@ -364,6 +430,13 @@ var projectsGetCmd = &cobra.Command{
364430 RunE : runProjectsGet ,
365431}
366432
433+ var projectsUpdateCmd = & cobra.Command {
434+ Use : "update <id-or-name>" ,
435+ Short : "Update a project (rename or change status)" ,
436+ Args : cobra .ExactArgs (1 ),
437+ RunE : runProjectsUpdate ,
438+ }
439+
367440var projectsDeleteCmd = & cobra.Command {
368441 Use : "delete <id-or-name>" ,
369442 Short : "Delete a project" ,
@@ -418,9 +491,13 @@ func init() {
418491 projectsLimitsCmd .AddCommand (projectsLimitsGetCmd )
419492 projectsLimitsCmd .AddCommand (projectsLimitsSetCmd )
420493
494+ projectsUpdateCmd .Flags ().String ("name" , "" , "New project name" )
495+ projectsUpdateCmd .Flags ().String ("status" , "" , "New project status (active, archived)" )
496+
421497 projectsCmd .AddCommand (projectsListCmd )
422498 projectsCmd .AddCommand (projectsCreateCmd )
423499 projectsCmd .AddCommand (projectsGetCmd )
500+ projectsCmd .AddCommand (projectsUpdateCmd )
424501 projectsCmd .AddCommand (projectsDeleteCmd )
425502 projectsCmd .AddCommand (projectsLimitsCmd )
426503 projectsCmd .AddCommand (projectsGetLimitsCompatCmd )
0 commit comments