package main import ( "context" "fmt" "isl-api/Controllers" "isl-api/Services" "isl-api/sql/powerItem" "log" "net/http" "github.com/jackc/pgx/v4" "github.com/julienschmidt/httprouter" "github.com/spf13/viper" ) var conf *EnvConfigs func init() { setupConfig() } func main() { deps := dependencies{} deps.initializeDependencies() deps.router.HandlerFunc("GET", "/", index) err := http.ListenAndServe(fmt.Sprintf(":%v", conf.HttpPort), deps.router) log.Fatal(err) } 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 *httprouter.Router postgresConnection *pgx.Conn context context.Context powerItemQuerier *powerItem.DBQuerier powerItemService *Services.PowerItemService powerItemController *Controllers.PowerItemController } func (d *dependencies) initializeDependencies() error { var err error d.router = httprouter.New() d.context = context.Background() d.postgresConnection, err = pgx.Connect(d.context, conf.ConnectionString) if err != nil { return err } d.powerItemQuerier = powerItem.NewQuerier(d.postgresConnection) d.powerItemService = Services.NewPowerItemService(d.powerItemQuerier) d.powerItemController = Controllers.NewPowerItemController(d.router, d.powerItemService) return nil } func index(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "Index") }