package main import ( "database/sql" "fmt" "log" "net/http" "os" "strconv" "github.com/joho/godotenv" _ "github.com/jackc/pgx/v5/stdlib" "paterissa.net/mblog/cmd/web/handlers" "paterissa.net/mblog/cmd/web/types" ) func main() { var app types.Application app.Err = log.New(os.Stderr, "ERROR\t", log.Ldate | log.Ltime) app.Info = log.New(os.Stdout, "INFO\t", log.Ldate | log.Ltime) err := godotenv.Load() if err != nil { app.Err.Fatal("Failed to load env") } app.AudioDir = os.Getenv("audio_dir") app.Env.Webmaster = os.Getenv("webmaster") app.Env.Db.Name = os.Getenv("db_name") app.Env.Db.Port, err = strconv.ParseUint(os.Getenv("db_port"), 10, 64) if err != nil { app.Env.Db.Port = 5432 } app.Env.Db.Host = os.Getenv("db_host") app.Env.Db.Username = os.Getenv("db_user") app.Env.Db.Password = os.Getenv("db_pass") app.Env.AppPort, err = strconv.ParseUint(os.Getenv("web_port"), 10, 64) if err != nil { app.Env.AppPort = 5005 } connStr := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable", app.Env.Db.Host, app.Env.Db.Port, app.Env.Db.Username, app.Env.Db.Password, app.Env.Db.Name, ) db, err := sql.Open("pgx", connStr) if err != nil { fmt.Fprintf(os.Stderr, "Failed to open DB: %v\n", err) os.Exit(1) } defer db.Close() router := handlers.RegisterEndpoints(app, db) srv := &http.Server{ Addr: fmt.Sprintf(":%d", app.Env.AppPort), ErrorLog: app.Err, Handler: router, } err = srv.ListenAndServe() app.Err.Fatal(err) }