diff options
Diffstat (limited to 'cmd/npd.go')
| -rw-r--r-- | cmd/npd.go | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/cmd/npd.go b/cmd/npd.go new file mode 100644 index 0000000..0df627f --- /dev/null +++ b/cmd/npd.go @@ -0,0 +1,95 @@ +package cmd + +import ( + "dborg/internal/client" + "dborg/internal/config" + "dborg/internal/models" + "encoding/json" + "fmt" + + "github.com/spf13/cobra" +) + +var npdCmd = &cobra.Command{ + Use: "npd", + Short: "Search NPD breach data", + Long: `Search NPD breach data by various fields`, + RunE: runNPDSearch, +} + +func init() { + rootCmd.AddCommand(npdCmd) + npdCmd.Flags().StringP("id", "i", "", "ID") + npdCmd.Flags().StringP("firstname", "f", "", "First name") + npdCmd.Flags().StringP("lastname", "l", "", "Last name") + npdCmd.Flags().StringP("middlename", "m", "", "Middle name") + npdCmd.Flags().StringP("dob", "d", "", "Date of birth") + npdCmd.Flags().StringP("ssn", "s", "", "Social security number") + npdCmd.Flags().StringP("phone1", "p", "", "Phone number") + npdCmd.Flags().StringP("address", "a", "", "Address") + npdCmd.Flags().StringP("city", "c", "", "City") + npdCmd.Flags().StringP("st", "t", "", "State") + npdCmd.Flags().StringP("zip", "z", "", "ZIP code") + npdCmd.Flags().StringP("county_name", "y", "", "County name") + npdCmd.Flags().StringP("name_suff", "x", "", "Name suffix") + npdCmd.Flags().StringP("aka1fullname", "1", "", "AKA 1 full name") + npdCmd.Flags().StringP("aka2fullname", "2", "", "AKA 2 full name") + npdCmd.Flags().StringP("aka3fullname", "3", "", "AKA 3 full name") + npdCmd.Flags().StringP("alt1dob", "4", "", "Alternate DOB 1") + npdCmd.Flags().StringP("alt2dob", "5", "", "Alternate DOB 2") + npdCmd.Flags().StringP("alt3dob", "6", "", "Alternate DOB 3") + npdCmd.Flags().StringP("startdat", "r", "", "Start date") + npdCmd.Flags().IntP("max_hits", "n", 10, "Maximum number of hits to return") + npdCmd.Flags().StringP("sort_by", "o", "", "Sort by field") +} + +func runNPDSearch(cmd *cobra.Command, args []string) error { + apiKey, _ := cmd.Flags().GetString("api-key") + cfg := config.New().WithAPIKey(apiKey) + + c, err := client.New(cfg) + if err != nil { + return err + } + + params := &models.NPDParams{} + params.ID, _ = cmd.Flags().GetString("id") + params.FirstName, _ = cmd.Flags().GetString("firstname") + params.LastName, _ = cmd.Flags().GetString("lastname") + params.MiddleName, _ = cmd.Flags().GetString("middlename") + params.DOB, _ = cmd.Flags().GetString("dob") + params.SSN, _ = cmd.Flags().GetString("ssn") + params.Phone1, _ = cmd.Flags().GetString("phone1") + params.Address, _ = cmd.Flags().GetString("address") + params.City, _ = cmd.Flags().GetString("city") + params.State, _ = cmd.Flags().GetString("st") + params.Zip, _ = cmd.Flags().GetString("zip") + params.CountyName, _ = cmd.Flags().GetString("county_name") + params.NameSuffix, _ = cmd.Flags().GetString("name_suff") + params.AKA1FullName, _ = cmd.Flags().GetString("aka1fullname") + params.AKA2FullName, _ = cmd.Flags().GetString("aka2fullname") + params.AKA3FullName, _ = cmd.Flags().GetString("aka3fullname") + params.Alt1DOB, _ = cmd.Flags().GetString("alt1dob") + params.Alt2DOB, _ = cmd.Flags().GetString("alt2dob") + params.Alt3DOB, _ = cmd.Flags().GetString("alt3dob") + params.StartDate, _ = cmd.Flags().GetString("startdat") + params.MaxHits, _ = cmd.Flags().GetInt("max_hits") + params.SortBy, _ = cmd.Flags().GetString("sort_by") + + response, err := c.SearchNPD(params) + if err != nil { + return err + } + + if response.Error != "" { + return fmt.Errorf("API error: %s", response.Error) + } + + output, err := json.MarshalIndent(response.Results.Hits, "", " ") + if err != nil { + return fmt.Errorf("failed to format response: %w", err) + } + + fmt.Println(string(output)) + return nil +} |
