summaryrefslogtreecommitdiffstats
path: root/cmd/npd.go
blob: 3092b42a79d09a52c2aa6d653866803f8e9f8dfe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package cmd

import (
	"git.db.org.ai/dborg/internal/client"
	"git.db.org.ai/dborg/internal/config"
	"git.db.org.ai/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
}