84 lines
1.8 KiB
Go
84 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/gob"
|
|
"errors"
|
|
"gopher-toolbox/config"
|
|
"log/slog"
|
|
"net/http"
|
|
"os"
|
|
|
|
"gopher-toolbox/db"
|
|
"gopher-toolbox/utils"
|
|
|
|
"github.com/golang-migrate/migrate/v4"
|
|
_ "github.com/golang-migrate/migrate/v4/database/postgres"
|
|
_ "github.com/golang-migrate/migrate/v4/source/file"
|
|
"github.com/joho/godotenv"
|
|
"github.com/zepyrshut/rating-orama/internal/handlers"
|
|
"github.com/zepyrshut/rating-orama/internal/repository"
|
|
)
|
|
|
|
const version = "0.2.0-beta.20241116-4"
|
|
|
|
var app *config.App
|
|
|
|
func init() {
|
|
gob.Register(map[string]string{})
|
|
|
|
err := godotenv.Load()
|
|
if err != nil {
|
|
slog.Error("cannot load .env file", "error", err)
|
|
}
|
|
config.NewLogger(config.LogLevel(os.Getenv("LOG_LEVEL")))
|
|
slog.Info("starting server")
|
|
|
|
if os.Getenv("MIGRATE") == "true" {
|
|
migrateDB()
|
|
}
|
|
}
|
|
|
|
func migrateDB() {
|
|
slog.Info("migrating database")
|
|
m, err := migrate.New("file://database/migrations", os.Getenv("DATASOURCE"))
|
|
if err != nil {
|
|
slog.Error("cannot create migration", "error", err)
|
|
}
|
|
|
|
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.App{
|
|
DataSource: os.Getenv("DATASOURCE"),
|
|
UseCache: utils.GetBool(os.Getenv("USE_CACHE")),
|
|
AppInfo: config.AppInfo{
|
|
GinMode: os.Getenv("GIN_MODE"),
|
|
Version: version,
|
|
},
|
|
}
|
|
|
|
dbPool := db.NewPostgresPool(app.DataSource)
|
|
defer dbPool.Close()
|
|
|
|
q := repository.NewPGXRepo(dbPool)
|
|
h := handlers.New(q, app)
|
|
r := Router(h, app)
|
|
|
|
slog.Info("server started", "port", "8080", "version", version)
|
|
err := http.ListenAndServe(":8080", r)
|
|
if err != nil {
|
|
slog.Error("cannot start server", "error", err)
|
|
}
|
|
}
|