package main import ( "crowsnest/internal/model/database" "database/sql" "fmt" "log" "net/http" "os" _ "github.com/lib/pq" ) type App struct { articles *database.ArticleModel } func main() { // collect environement variables dbPass := os.Getenv("DB_PASS") if dbPass == "" { log.Fatal("empty DB_PASS") } dbHost := os.Getenv("DB_HOST") if dbHost == "" { log.Fatal("empty DB_HOST") } dbPort := os.Getenv("DB_PORT") if dbPort == "" { dbPort = "5432" } dbUser := os.Getenv("DB_USER") if dbUser == "" { dbUser = "postgres" } dbName := os.Getenv("DB_NAME") // connect to database databaseURL := fmt.Sprintf("user=%s password=%s dbname=%s host=%s port=%s sslmode=disable", dbUser, dbPass, dbName, dbHost, dbPort) db, err := sql.Open("postgres", databaseURL) if err != nil { log.Fatal(err) } defer db.Close() if err = db.Ping(); err != nil { log.Fatal(err) } // define app app := &App{ articles: &database.ArticleModel{DB: db}, } // start web server server := http.Server{ Addr: ":8080", Handler: app.routes(), } log.Println("server started, listening on :8080") server.ListenAndServe() }