package main import ( "context" "flag" "fmt" "os" "gitea.lab.audasmedia.com.au/sam/compass_teams_nhs/internal/config" "gitea.lab.audasmedia.com.au/sam/compass_teams_nhs/internal/store" ) // itemsCommand is the `school items` entry point. It currently supports purging // items for one child, which Phase 4 uses to drop rows that a shared page // stored against the wrong child ("nothing may leak between children"). func itemsCommand(args []string) { if len(args) == 0 || args[0] != "purge" { fmt.Fprintln(os.Stderr, "usage: school items purge --child NAME [--source compass|teams] [--type message|task|event]") os.Exit(2) } fs := flag.NewFlagSet("items purge", flag.ContinueOnError) var ( child string source string typ string ) fs.StringVar(&child, "child", "", "child name (Harry or Finn)") fs.StringVar(&source, "source", "", "limit to one source") fs.StringVar(&typ, "type", "", "limit to one type") _ = fs.Parse(args[1:]) if child == "" { fmt.Fprintln(os.Stderr, "school items purge: --child is required") os.Exit(2) } if err := runItemsPurge(child, source, typ); err != nil { fmt.Fprintln(os.Stderr, "school items:", err) os.Exit(1) } } func runItemsPurge(child, source, typ string) error { ctx := context.Background() cfg, err := config.LoadDB() if err != nil { return err } st, err := store.Open(cfg.DBPath) if err != nil { return err } defer st.Close() if err := st.Migrate(ctx); err != nil { return err } c, err := st.ChildByName(ctx, child) if err != nil { return err } if c == nil { return fmt.Errorf("unknown child %q", child) } n, err := st.DeleteItems(ctx, c.ID, source, typ) if err != nil { return err } fmt.Printf("child=%s purged=%d source=%q type=%q\n", c.Name, n, source, typ) return nil }