50 lines
1.1 KiB
Go
50 lines
1.1 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 := app.NewApp(cfg, db)
|
||
|
|
||
|
log.Debug().Msg("Mounting routes")
|
||
|
web.Routes(a)
|
||
|
|
||
|
web.Run(c.Context, a, cfg.Web.Port)
|
||
|
return nil
|
||
|
}
|