Allow requests from all endpoints. Currently it is only running on localhost. It is required by the react's fetching lib used.
69 lines
1.4 KiB
Go
69 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
|
|
"git.rosemyrtle.work/personal-finance/server/internal/api"
|
|
"git.rosemyrtle.work/personal-finance/server/internal/dal"
|
|
|
|
_ "github.com/jackc/pgx/v5/stdlib"
|
|
"github.com/joho/godotenv"
|
|
"github.com/labstack/echo/v4"
|
|
"github.com/labstack/echo/v4/middleware"
|
|
echomiddleware "github.com/oapi-codegen/echo-middleware"
|
|
)
|
|
|
|
func main() {
|
|
if err := godotenv.Load(); err != nil {
|
|
log.Fatal("error loading .env file")
|
|
return
|
|
}
|
|
|
|
// 1. Database
|
|
database := fmt.Sprintf("postgres://%s:%s@%s/%s",
|
|
os.Getenv("PG_USER"),
|
|
os.Getenv("PG_PASSWORD"),
|
|
os.Getenv("PG_URL"),
|
|
os.Getenv("PG_DB"))
|
|
|
|
db, err := sql.Open("pgx", database)
|
|
if err != nil {
|
|
log.Fatalf("unable to connect to database: %v\n", err)
|
|
}
|
|
|
|
if err := db.Ping(); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
// 2. Data Access Layer
|
|
dal := dal.DalImpl{Db: db}
|
|
|
|
// 3. HTTP server
|
|
e := echo.New()
|
|
|
|
// 3.1. logging
|
|
e.Use(middleware.Logger())
|
|
|
|
// 3.2. oapi validator
|
|
swagger, err := api.GetSwagger()
|
|
if err != nil {
|
|
log.Fatalf("unable to get API swagger: %v\n", err)
|
|
}
|
|
e.Use(echomiddleware.OapiRequestValidator(swagger))
|
|
|
|
// 3.3. CORS
|
|
e.Use(middleware.CORSWithConfig(middleware.CORSConfig{
|
|
AllowOrigins: []string{"*"},
|
|
}))
|
|
|
|
// 3.4. register implemented handlers
|
|
handlers := api.ServerImpl{Dal: &dal}
|
|
api.RegisterHandlers(e, &handlers)
|
|
|
|
// 3.5 run server
|
|
e.Logger.Fatal(e.Start(":9000"))
|
|
}
|