diff --git a/migrations/0_29092022_setup_tables.sql b/migrations/0_29092022_setup_tables.sql index cae448b..db5c082 100644 --- a/migrations/0_29092022_setup_tables.sql +++ b/migrations/0_29092022_setup_tables.sql @@ -58,7 +58,7 @@ CREATE TABLE user ( CREATE TABLE license ( id INT AUTO_INCREMENT, user_id INT NOT NULL, - type ENUM('NMLS', 'FSRA'), + type ENUM('NMLS', 'FSRA', 'Other'), num VARCHAR(40) NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (user_id) REFERENCES user(id) diff --git a/skouter.go b/skouter.go index 69df8b7..f200d44 100644 --- a/skouter.go +++ b/skouter.go @@ -30,6 +30,12 @@ import ( _ "image/jpeg" ) +type Config struct { + DBName string + DBUsername string + DBPassword string +} + type Address struct { Id int `json:"id"` Full string `json:"full"` @@ -67,6 +73,12 @@ type User struct { Password string `json:"password,omitempty"` } +type License struct { + Id int `json:"id"` + Type string `json:"type"` + Num string `json:"num"` +} + type UserClaims struct { Id int `json:"id"` Role string `json:"role"` @@ -2296,22 +2308,31 @@ func serve() { log.Fatal(http.ListenAndServe(address, nil)) } -func dbSeed() { - db, err := sql.Open("mysql", - fmt.Sprintf("%s:%s@tcp(127.0.0.1:3306)/%s", - os.Getenv("DBUser"), - os.Getenv("DBPass"), - os.Getenv("DBName"), - )) +func dbReset(db *sql.DB) { + b, err := os.ReadFile("migrations/reset.sql") + if err != nil { + log.Fatal(err) + } - err = db.Ping() + _, err = db.Exec(string(b)) if err != nil { - fmt.Println("Bad database configuration: %v\n", err) - panic(err) - // maybe os.Exit(1) instead + log.Fatal(err) } - + + b, err = os.ReadFile("migrations/0_29092022_setup_tables.sql") + if err != nil { + log.Fatal(err) + } + + _, err = db.Exec(string(b)) + if err != nil { + log.Fatal(err) + } +} + +func seedAddresses(db *sql.DB) []Address { addresses := make([]Address, 10) + for i, a := range addresses { a.Street = gofakeit.Street() a.City = gofakeit.City() @@ -2323,9 +2344,14 @@ func dbSeed() { addresses[i].Id = id } + return addresses +} + +func seedBranches(db *sql.DB, addresses []Address) []Branch { branches := make([]Branch, 4) + for i := range branches { - branches[i].Name = gofakeit.Street() + branches[i].Name = gofakeit.Company() branches[i].Type = "NMLS" branches[i].Letterhead = gofakeit.ImagePng(400, 200) branches[i].Num = gofakeit.HexUint8() @@ -2336,7 +2362,12 @@ func dbSeed() { branches[i].Id = id } + return branches +} + +func seedUsers(db *sql.DB, addresses []Address, branches []Branch) []User { users := make([]User, 10) + for i := range users { p := gofakeit.Person() users[i].FirstName = p.FirstName @@ -2371,6 +2402,30 @@ func dbSeed() { if err != nil {log.Println(err); break} users[i].Id = u.Id } + + return users +} + +func seedLicenses(db *sql.DB, users []User) []Branch { + licenses := make([]License, len(users) + + for i := range licenses { + licenses[i].UserId = users[i].Id + licenses[i].Type = []string{"NMLS", "FSRA"}[gofakeit.Number(0, 1)] + licenses[i].Num = gofakeit.UUID() + // id, err := insertLicense(db, licenses[i]) + if err != nil {log.Println(err); break} + licenses[i].Id = id + } + + return licenses +} + +func dbSeed(db *sql.DB) { + addresses := seedAddresses(db) + branches := seedBranches(db, addresses) + users := seedUsers(db, addresses, branches) + license := seedLicenses(db, users) } func dev(args []string) { @@ -2378,6 +2433,20 @@ func dev(args []string) { os.Setenv("DBUser", "tester") os.Setenv("DBPass", "test123") + db, err := sql.Open("mysql", + fmt.Sprintf("%s:%s@tcp(127.0.0.1:3306)/%s?multiStatements=true", + os.Getenv("DBUser"), + os.Getenv("DBPass"), + os.Getenv("DBName"), + )) + + err = db.Ping() + if err != nil { + log.Println("Bad database configuration: %v", err) + panic(err) + // maybe os.Exit(1) instead + } + if len(args) == 0 { serve() return @@ -2385,7 +2454,9 @@ func dev(args []string) { switch args[0] { case "seed": - dbSeed() + dbSeed(db) + case "reset": + dbReset(db) default: return }