woj-server/cmd/woj/woj.go

105 lines
2.6 KiB
Go

package main
import (
"git.0x7f.app/WOJ/woj-server/cmd"
appRunner "git.0x7f.app/WOJ/woj-server/internal/app/runner"
appServer "git.0x7f.app/WOJ/woj-server/internal/app/server"
"git.0x7f.app/WOJ/woj-server/internal/misc/config"
"git.0x7f.app/WOJ/woj-server/internal/misc/log"
"git.0x7f.app/WOJ/woj-server/internal/repo/cache"
"git.0x7f.app/WOJ/woj-server/internal/repo/db"
"git.0x7f.app/WOJ/woj-server/internal/service/problem"
"git.0x7f.app/WOJ/woj-server/internal/service/runner"
"git.0x7f.app/WOJ/woj-server/internal/service/status"
"git.0x7f.app/WOJ/woj-server/internal/service/storage"
"git.0x7f.app/WOJ/woj-server/internal/service/submission"
"git.0x7f.app/WOJ/woj-server/internal/service/task"
"git.0x7f.app/WOJ/woj-server/internal/service/user"
"git.0x7f.app/WOJ/woj-server/internal/web/jwt"
"git.0x7f.app/WOJ/woj-server/internal/web/metrics"
"git.0x7f.app/WOJ/woj-server/internal/web/router"
"github.com/samber/do"
"github.com/urfave/cli/v2"
slog "log"
"os"
)
func main() {
a := cmd.App
a.Usage = "woj-server"
a.Commands = []*cli.Command{
{
Name: "web",
Aliases: []string{"w"},
Usage: "start web api server",
Action: runServer,
},
{
Name: "runner",
Aliases: []string{"r"},
Usage: "start runner",
Action: runRunner,
},
}
err := a.Run(os.Args)
if err != nil {
slog.Fatal(err)
}
}
func prepareServices(c *cli.Context) *do.Injector {
injector := do.New()
// cli context
do.ProvideValue(injector, c)
{ // basic services
do.Provide(injector, config.NewService)
do.Provide(injector, log.NewService)
}
{ // repo services
do.Provide(injector, db.NewService)
do.Provide(injector, cache.NewService)
}
{ // web helper services
do.Provide(injector, metrics.NewService)
do.Provide(injector, jwt.NewService)
do.Provide(injector, router.NewService)
}
{ // core services
do.Provide(injector, problem.NewService)
do.Provide(injector, runner.NewService)
do.Provide(injector, status.NewService)
do.Provide(injector, storage.NewService)
do.Provide(injector, submission.NewService)
do.Provide(injector, task.NewService)
do.Provide(injector, user.NewService)
}
return injector
}
func runServer(c *cli.Context) error {
injector := prepareServices(c)
logger := do.MustInvoke[log.Service](injector)
defer func() { _ = logger.GetRawLogger().Sync() }()
logger.GetRawLogger().Info("starting...")
return appServer.RunServer(injector)
}
func runRunner(c *cli.Context) error {
injector := prepareServices(c)
logger := do.MustInvoke[log.Service](injector)
defer func() { _ = logger.GetRawLogger().Sync() }()
logger.GetRawLogger().Info("starting...")
return appRunner.RunRunner(injector)
}