From c00b690bd6f600554a1404e692bd9e4373325d27 Mon Sep 17 00:00:00 2001 From: Leonardo Bishop Date: Fri, 17 Jan 2025 13:21:24 +0000 Subject: Initial commit --- main.go | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 main.go (limited to 'main.go') diff --git a/main.go b/main.go new file mode 100644 index 0000000..ae0ef9d --- /dev/null +++ b/main.go @@ -0,0 +1,59 @@ +package main + +import ( + "fmt" + "log/slog" + "os" + + "github.com/LMBishop/confplanner/api" + config "github.com/LMBishop/confplanner/internal" + "github.com/LMBishop/confplanner/pkg/database" + "github.com/LMBishop/confplanner/pkg/favourites" + "github.com/LMBishop/confplanner/pkg/schedule" + "github.com/LMBishop/confplanner/pkg/user" +) + +func main() { + if err := run(); err != nil { + slog.Error("Unhandled error", "error", err) + os.Exit(1) + } +} + +func run() error { + c := &config.Config{} + err := config.ReadConfig("config.yaml", c) + if err != nil { + return fmt.Errorf("failed to load config: %w", err) + } + + pool, err := database.Connect(c.Database.ConnString) + if err != nil { + return fmt.Errorf("failed to connect to database: %w", err) + } + + if err := database.Migrate(pool); err != nil { + return fmt.Errorf("database migration failed: %w", err) + } + + userService := user.NewService(pool, c.AcceptRegistrations) + favouritesService := favourites.NewService(pool) + scheduleService, err := schedule.NewService(c.Conference.ScheduleURL) + if err != nil { + return fmt.Errorf("failed to create schedule service: %w", err) + } + + app := api.NewServer(api.ApiServices{ + UserService: userService, + FavouritesService: favouritesService, + ScheduleService: scheduleService, + }) + + slog.Info("Server is listening", "host", c.Server.Host, "port", c.Server.Port) + + if err := app.Listen(fmt.Sprintf("%s:%s", c.Server.Host, c.Server.Port)); err != nil { + return fmt.Errorf("failed to start server: %w", err) + } + + return nil +} -- cgit v1.2.3-70-g09d2