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


##########
playground/backend/cmd/remove_unused_snippets.go:
##########
@@ -16,44 +16,130 @@
 package main
 
 import (
+       "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 {
+               fmt.Printf("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...")
-       startDate := time.Now()
 
-       diff, err := strconv.Atoi(dayDiff)
+       return db, nil
+}
+
+func cleanup(dayDiff int, projectId string) error {
+       ctx := context.Background()
+       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
        }
 
+       err = db.DeleteUnusedSnippets(ctx, int32(dayDiff))
+       if err != nil {
+               fmt.Printf("Couldn't delete unused code snippets, err: %s \n", 
err.Error())
+               return err
+       }
+
+       return nil
+}
+
+func remove(snippetId string, projectId string) error {
        ctx := context.Background()
-       pcMapper := mapper.NewPrecompiledObjectMapper()
-       db, err := datastore.New(ctx, pcMapper, projectId)
+       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
+       }
+
+       return nil
+}
+
+func main() {
+       if len(os.Args) < 2 {
+               fmt.Println("expected 'cleanup' or 'remove' subcommands")
+               os.Exit(1)
+       }
+
+       fmt.Println("Removing unused snippets is running...")

Review Comment:
   Please consider moving this below the place where we know if this is a 
cleanup or remove



##########
playground/backend/cmd/remove_unused_snippets.go:
##########
@@ -16,44 +16,130 @@
 package main
 
 import (
+       "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 {
+               fmt.Printf("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...")
-       startDate := time.Now()
 
-       diff, err := strconv.Atoi(dayDiff)
+       return db, nil
+}
+
+func cleanup(dayDiff int, projectId string) error {
+       ctx := context.Background()
+       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
        }
 
+       err = db.DeleteUnusedSnippets(ctx, int32(dayDiff))
+       if err != nil {
+               fmt.Printf("Couldn't delete unused code snippets, err: %s \n", 
err.Error())
+               return err
+       }
+
+       return nil
+}
+
+func remove(snippetId string, projectId string) error {
        ctx := context.Background()
-       pcMapper := mapper.NewPrecompiledObjectMapper()
-       db, err := datastore.New(ctx, pcMapper, projectId)
+       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
+       }
+
+       return nil
+}
+
+func main() {
+       if len(os.Args) < 2 {
+               fmt.Println("expected 'cleanup' or 'remove' subcommands")
+               os.Exit(1)
+       }
+
+       fmt.Println("Removing unused snippets is running...")
+       startDate := time.Now()
+
+       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] {
+       case "cleanup":
+               cleanupCmd := flag.NewFlagSet("cleanup", flag.ExitOnError)
+               dayDiff := cleanupCmd.Int("day_diff", -1, "a number of days to 
keep the code snippets")
+               projectId := cleanupCmd.String("project_id", "", "a project id 
where the code snippets are stored")
+
+               err := cleanupCmd.Parse(os.Args[2:])
+               if err != nil {
+                       fmt.Printf("Couldn't parse the command line arguments, 
err: %s \n", err.Error())
+                       os.Exit(1)
+               }
+
+               if projectId == nil || *projectId == "" {
+                       fmt.Println("project_id is required")
+                       os.Exit(1)
+               }
+
+               if *dayDiff < 0 {
+                       fmt.Println("day_diff is required and should be greater 
than 0")
+                       os.Exit(1)
+               }
+
+               logger.SetupLogger(context.Background(), cwd, *projectId)
+               err = cleanup(*dayDiff, *projectId)
+               if err != nil {
+                       fmt.Printf("Couldn't cleanup the database, err: %s \n", 
err.Error())

Review Comment:
   consider using log.Fatal



-- 
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