105 lines
2.6 KiB
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)
|
|
}
|