Files
go-omni/examples/userService/cmd/server/main.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)
}