isl-api/main.go

80 lines
2 KiB
Go
Raw Normal View History

2024-01-26 17:11:42 -05:00
package main
import (
"context"
"fmt"
2024-01-26 17:11:42 -05:00
"log"
"net/http"
"forgejo.merr.is/annika/isl-api/Controllers"
routes "forgejo.merr.is/annika/isl-api/Routes"
"forgejo.merr.is/annika/isl-api/Services"
"forgejo.merr.is/annika/isl-api/sql/powerItem"
"github.com/go-chi/chi/v5"
"github.com/go-chi/cors"
"github.com/jackc/pgx/v4/pgxpool"
2024-01-31 14:51:42 -05:00
"github.com/spf13/viper"
2024-01-26 17:11:42 -05:00
)
2024-01-31 14:51:42 -05:00
var conf *EnvConfigs
func init() {
setupConfig()
}
2024-01-26 17:11:42 -05:00
func main() {
deps := dependencies{}
deps.initializeDependencies()
fmt.Printf("Preparing to listen on `:%v`\n", conf.HttpPort)
2024-01-31 14:51:42 -05:00
err := http.ListenAndServe(fmt.Sprintf(":%v", conf.HttpPort), deps.router)
2024-01-26 17:11:42 -05:00
log.Fatal(err)
}
2024-01-31 14:51:42 -05:00
func setupConfig() {
viper.AddConfigPath(".")
viper.SetConfigName(".env")
viper.SetConfigType("env")
viper.SetEnvPrefix("isl_api")
viper.AutomaticEnv()
if err := viper.ReadInConfig(); err != nil {
fmt.Printf("Error reading env file: %v\n", err)
}
if err := viper.Unmarshal(&conf); err != nil {
log.Fatal(err)
}
}
type dependencies struct {
router *chi.Mux
postgresConnection *pgxpool.Pool
context context.Context
powerItemQuerier *powerItem.DBQuerier
powerItemService *Services.PowerItemService
powerItemController *Controllers.PowerItemController
}
2024-01-26 17:11:42 -05:00
func (d *dependencies) initializeDependencies() error {
var err error
2024-01-26 17:11:42 -05:00
d.router = chi.NewRouter()
d.router.Use(cors.Handler(cors.Options{
AllowedOrigins: []string{"*"},
AllowedMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
AllowedHeaders: []string{"Cache-Control", "Expires", "Pragma"},
}))
d.context = context.Background()
d.postgresConnection, err = pgxpool.Connect(d.context, conf.ConnectionString)
if err != nil {
return err
2024-01-26 17:11:42 -05:00
}
d.powerItemQuerier = powerItem.NewQuerier(d.postgresConnection)
d.powerItemService = Services.NewPowerItemService(d.powerItemQuerier)
d.powerItemController = Controllers.NewPowerItemController(d.powerItemService)
d.router.Mount("/powerItems", routes.SetupPowerItemRoutes(*d.powerItemController))
return nil
}