package main import ( "context" "database/sql" "log" "net/http" "os" "gitea.starryskymeow.cn/B309/datamarket/internal/repository" "gitea.starryskymeow.cn/B309/datamarket/internal/router" "gitea.starryskymeow.cn/B309/datamarket/internal/service" "github.com/golang-migrate/migrate/v4" "github.com/golang-migrate/migrate/v4/database" "github.com/golang-migrate/migrate/v4/database/postgres" _ "github.com/golang-migrate/migrate/v4/source/file" "github.com/jackc/pgx/v5/pgxpool" "github.com/jackc/pgx/v5/stdlib" ) func main() { // db connect ctx := context.Background() pool, err := pgxpool.New(ctx, os.Getenv("DATABASE_URL")) if err != nil { log.Fatal(err) } defer pool.Close() if err := pool.Ping(ctx); err != nil { log.Fatal(err) } db := stdlib.OpenDBFromPool(pool) defer func(db *sql.DB) { err := db.Close() if err != nil { log.Fatal(err) } }(db) driver, err := postgres.WithInstance(db, &postgres.Config{}) if err != nil { panic(err) } defer func(driver database.Driver) { err := driver.Close() if err != nil { log.Fatal(err) } }(driver) m, err := migrate.NewWithDatabaseInstance( "file://db/migration", "postgres", driver) if err != nil { log.Fatal(err) } if err := m.Up(); err != nil { log.Fatal(err) } queries := repository.New(pool) appService := service.New(queries) r := router.New(appService) addr := os.Getenv("SERVER_ADDR") if addr == "" { addr = ":8080" } err = http.ListenAndServe(addr, r) if err != nil { log.Fatal(err) } }