package cmd import ( "database/sql" "fmt" "log" "net/http" "github.com/gin-gonic/gin" _ "github.com/lib/pq" "github.com/spf13/viper" ) var ( ListenPort = "8080" DB_Host string DB_Port string DB_User string DB_Pass string DB_Name string ) func getDBInfo() error { dbhost := viper.GetString("Server.DB_Host") if dbhost == "" { e := fmt.Errorf("No database IP address present in config file!\n") return e } else { DB_Host = dbhost } dbport := viper.GetString("Server.DB_Port") if dbport == "" { e := fmt.Errorf("No database port present in config file!\n") return e } else { DB_Port = dbport } dbuser := viper.GetString("Server.DB_User") if dbuser == "" { e := fmt.Errorf("No database username present in config file!\n") return e } else { DB_User = dbuser } dbpass := viper.GetString("Server.DB_Pass") if dbpass == "" { e := fmt.Errorf("No database password present in config file!\n") return e } else { DB_Pass = dbpass } dbname := viper.GetString("Server.DB_Name") if dbname == "" { e := fmt.Errorf("No database name present in config file!\n") return e } else { DB_Name = dbname } return nil } func openDB() (*sql.DB, error) { psqlconn := fmt.Sprintf("host=%s port=%s user=%s password=%s dbname=%s sslmode=disable", DB_Host, DB_Port, DB_User, DB_Pass, DB_Name) db, err := sql.Open("postgres", psqlconn) if err != nil { return nil, err } return db, nil } func setPort() { p := viper.GetString("Server.Port") if p != "" { ListenPort = p } } func server() { log.SetPrefix("[DRAHOOT] ") setPort() if err := getDBInfo(); err != nil { log.Fatalf("INVALID DB INFO: %v\nPlease refer to the example configuration file in the repo at https://git.bulgariu.xyz/raul/drahoot/src/branch/main/sample-config", err) } gin.SetMode(gin.ReleaseMode) r := gin.Default() r.GET("/", helloWorld) r.POST("/api/user", createUser) r.Run(":" + ListenPort) } func createUser(c *gin.Context) { var newUser user if err := c.BindJSON(&newUser); err != nil { return } dynStmt := `INSERT INTO "alumnos"("nombre", "apellido1", "apellido2", "email") values($1, $2, $3, $4)` db, err := openDB() if err != nil { e := fmt.Sprintf("We couldn't complete your request because the database server exploded, more at 11: %v\n", err) c.String(http.StatusInternalServerError, e) return } _, e := db.Exec(dynStmt, newUser.Name, newUser.Surname1, newUser.Surname2, newUser.Email) if e != nil { e := fmt.Sprintf("We couldn't complete your request because the database server imploded, more at 11: %v\n", err) c.String(http.StatusInternalServerError, e) return } fmt.Println(newUser) c.String(http.StatusOK, "Everything's fine!\n") } func helloWorld(c *gin.Context) { ua := c.Request.UserAgent() message := fmt.Sprintf("Hello %v!\n", ua) c.String(http.StatusOK, message) }