Luís Murta 708a8d0588
All checks were successful
Go / build (1.21) (pull_request) Successful in 12s
Go / build (1.22) (pull_request) Successful in 11s
Go / build (1.21) (push) Successful in 12s
Go / build (1.22) (push) Successful in 11s
Adds CORS protocol to server responses
Allow requests from all endpoints. Currently it is only running on
localhost.
It is required by the react's fetching lib used.
2025-03-23 19:51:46 +00:00

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"))
}