damccorm commented on code in PR #26102:
URL: https://github.com/apache/beam/pull/26102#discussion_r1170066578


##########
playground/backend/cmd/remove_unused_snippets.go:
##########
@@ -16,46 +16,141 @@
 package main
 
 import (
+       "beam.apache.org/playground/backend/internal/constants"
+       "beam.apache.org/playground/backend/internal/logger"
        "context"
+       "flag"
        "fmt"
        "os"
-       "strconv"
        "time"
 
        "beam.apache.org/playground/backend/internal/db/datastore"
        "beam.apache.org/playground/backend/internal/db/mapper"
 )
 
-func main() {
-       if len(os.Args) < 3 {
-               fmt.Println("Go must have at least three arguments")
-               return
+func createDatastoreClient(ctx context.Context, projectId string) 
(*datastore.Datastore, error) {
+       pcMapper := mapper.NewPrecompiledObjectMapper()
+       db, err := datastore.New(ctx, pcMapper, projectId)
+       if err != nil {
+               logger.Errorf("Couldn't create the database client, err: %s 
\n", err.Error())
+               return nil, err
        }
-       dayDiff := os.Args[1]
-       projectId := os.Args[2]
-       fmt.Println("Removing unused snippets is running...")
+
+       return db, nil
+}
+
+func cleanup(dayDiff int, projectId, namespace string) error {
+       logger.Infof("Removing unused snippets is running...")
        startDate := time.Now()
 
-       diff, err := strconv.Atoi(dayDiff)
+       ctx := context.WithValue(context.Background(), 
constants.DatastoreNamespaceKey, namespace)
+       db, err := createDatastoreClient(ctx, projectId)
        if err != nil {
-               fmt.Printf("Couldn't convert days to integer from the input 
parameter, err: %s \n", err.Error())
-               return
+               return err
        }
 
-       ctx := context.Background()
-       pcMapper := mapper.NewPrecompiledObjectMapper()
-       db, err := datastore.New(ctx, pcMapper, projectId)
+       err = db.DeleteUnusedSnippets(ctx, int32(dayDiff))
+       if err != nil {
+               logger.Errorf("Couldn't delete unused code snippets, err: %s 
\n", err.Error())
+               return err
+       }
+
+       diffTime := time.Now().Sub(startDate).Milliseconds()
+       logger.Infof("Removing unused snippets finished, work time: %d ms\n", 
diffTime)
+
+       return nil
+}
+
+func remove(snippetId string, projectId, namespace string) error {
+       logger.Infof("Removing snippet %s is running...", snippetId)
+       startDate := time.Now()
+
+       ctx := context.WithValue(context.Background(), 
constants.DatastoreNamespaceKey, namespace)
+       db, err := createDatastoreClient(ctx, projectId)
        if err != nil {
-               fmt.Printf("Couldn't create the database client, err: %s \n", 
err.Error())
-               return
+               return err
        }
 
-       err = db.DeleteUnusedSnippets(ctx, int32(diff))
+       err = db.DeleteSnippet(ctx, snippetId)
        if err != nil {
-               fmt.Printf("Couldn't delete unused code snippets, err: %s \n", 
err.Error())
-               return
+               fmt.Printf("Couldn't delete code snippet, err: %s \n", 
err.Error())
+               return err
        }
 
        diffTime := time.Now().Sub(startDate).Milliseconds()
-       fmt.Printf("Removing unused snippets finished, work time: %d ms\n", 
diffTime)
+       logger.Infof("Removing snippet %s finished, work time: %d ms\n", 
snippetId, diffTime)
+
+       return nil
+}
+
+func main() {
+       if len(os.Args) < 2 {
+               fmt.Println("expected 'cleanup' or 'remove' subcommands")
+               os.Exit(1)
+       }
+
+       cwd, err := os.Getwd()
+       if err != nil {
+               fmt.Printf("Couldn't get the current working directory, err: %s 
\n", err.Error())
+               os.Exit(1)
+       }
+
+       switch os.Args[1] {

Review Comment:
   Should we have a default case to catch if the user didn't correctly specify 
either cleanup or remove?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to