75 lines
1.4 KiB
Go
75 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"database/sql"
|
|
"embed"
|
|
"errors"
|
|
"fmt"
|
|
"github.com/golang-migrate/migrate/v4"
|
|
_ "github.com/golang-migrate/migrate/v4/database/postgres"
|
|
"github.com/golang-migrate/migrate/v4/source/iofs"
|
|
_ "github.com/jackc/pgx/v5/stdlib"
|
|
"log/slog"
|
|
"os"
|
|
"ron"
|
|
"ron-pets/internal/config"
|
|
"ron-pets/internal/handlers"
|
|
"ron-pets/internal/repository"
|
|
)
|
|
|
|
//go:embed database/migrations
|
|
var database embed.FS
|
|
|
|
func migrateDB() {
|
|
dbConn, err := sql.Open("pgx", os.Getenv("DATASOURCE"))
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return
|
|
}
|
|
defer dbConn.Close()
|
|
|
|
d, err := iofs.New(database, "database/migrations")
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return
|
|
}
|
|
|
|
m, err := migrate.NewWithSourceInstance("iofs", d, os.Getenv("DATASOURCE"))
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return
|
|
}
|
|
|
|
err = m.Up()
|
|
if err != nil && !errors.Is(err, migrate.ErrNoChange) {
|
|
slog.Error("cannot migrate", "error", err)
|
|
panic(err)
|
|
}
|
|
if errors.Is(err, migrate.ErrNoChange) {
|
|
slog.Info("migration has no changes")
|
|
}
|
|
|
|
slog.Info("migration done")
|
|
}
|
|
|
|
func main() {
|
|
app := config.New()
|
|
migrateDB()
|
|
r := ron.New(func(e *ron.Engine) {
|
|
e.Render = ron.NewHTMLRender()
|
|
e.LogLevel = slog.LevelDebug
|
|
})
|
|
|
|
dbPool := config.NewPostgresPool(app.DataSource)
|
|
defer dbPool.Close()
|
|
|
|
q := repository.NewPGXRepo(dbPool)
|
|
h := handlers.New(app, q)
|
|
router(h, r)
|
|
|
|
err := r.Run(":8080")
|
|
if err != nil {
|
|
slog.Error(err.Error())
|
|
}
|
|
}
|