59 lines
1.7 KiB
Go
59 lines
1.7 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"example.com/userService/internal/handler"
|
|
"example.com/userService/internal/servicecontext"
|
|
"example.com/userService/internal/settings"
|
|
"flag"
|
|
omni "git.yuntuo.hk/k2safe/go-omni"
|
|
"git.yuntuo.hk/k2safe/go-omni/httpx"
|
|
"git.yuntuo.hk/k2safe/go-omni/logx"
|
|
"log"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
)
|
|
|
|
func main() {
|
|
path := flag.String("config", "etc/config.yaml", "configuration file; empty uses defaults and environment")
|
|
flag.Parse()
|
|
if err := run(*path); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|
|
func run(path string) (runErr error) {
|
|
ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
|
|
defer stop()
|
|
cfg, err := settings.Load(path)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
logger, err := logx.New(cfg.Server.Log)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer func() { runErr = errors.Join(runErr, logger.Close()) }()
|
|
logx.SetDefault(logger)
|
|
deps, err := servicecontext.New(ctx, logger, cfg)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer func() { runErr = errors.Join(runErr, deps.Close()) }()
|
|
app := omni.New(omni.WithConfig(cfg.Server))
|
|
app.OnShutdown(logger.Close)
|
|
app.OnShutdown(deps.Close)
|
|
for _, method := range []string{"GET", "HEAD", "PUT"} {
|
|
app.Handle(method, "/storage/object", func(c *httpx.Context) error { deps.FileHTTP.ServeHTTP(c.Raw(), c.Request()); return nil })
|
|
}
|
|
if err = handler.RegisterRoutes(app, deps); err != nil {
|
|
return err
|
|
}
|
|
app.GET("/openapi.json", handler.OpenAPI)
|
|
app.GET("/health/live", deps.Health.LivenessHandler())
|
|
app.GET("/health/ready", deps.Health.ReadinessHandler())
|
|
logger.InfoContext(ctx, "service.starting", "address", cfg.Server.Address)
|
|
return app.RunContext(ctx, cfg.Server.Address)
|
|
}
|