mercury/cmd/web/cmd.go
2023-09-04 03:33:13 +02:00

52 lines
1.2 KiB
Go

package web
import (
"emperror.dev/errors"
"git.sleepycat.moe/sam/mercury/config"
"git.sleepycat.moe/sam/mercury/internal/database/sql"
"git.sleepycat.moe/sam/mercury/web"
"git.sleepycat.moe/sam/mercury/web/app"
"github.com/rs/zerolog/log"
"github.com/urfave/cli/v2"
)
var Command = &cli.Command{
Name: "web",
Usage: "Run the Mercury web server",
Action: run,
}
func run(c *cli.Context) error {
log.Debug().Msg("Reading configuration")
cfg, err := config.Parse("config.toml")
if err != nil {
return errors.Wrap(err, "reading configuration")
}
log.Debug().Bool("dev", cfg.Core.Dev).Str("domain", cfg.Web.Domain).Msg("Starting server")
if cfg.Core.Dev {
log.Info().Msg("Running migrations")
err = sql.Migrate(cfg.Core.Postgres)
if err != nil {
return errors.Wrap(err, "performing migrations")
}
}
log.Debug().Msg("Connecting to database")
db, err := sql.NewBase(c.Context, cfg.Core.Postgres)
if err != nil {
return errors.Wrap(err, "creating postgres database")
}
a, err := app.NewApp(c.Context, cfg, db)
if err != nil {
return errors.Wrap(err, "creating app")
}
log.Debug().Msg("Mounting routes")
web.Routes(a)
web.Run(c.Context, a, cfg.Web.Port)
return nil
}