123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- package router
- import (
- "github.com/xinliangnote/go-gin-api/configs"
- "github.com/xinliangnote/go-gin-api/internal/alert"
- "github.com/xinliangnote/go-gin-api/internal/metrics"
- "github.com/xinliangnote/go-gin-api/internal/pkg/core"
- "github.com/xinliangnote/go-gin-api/internal/repository/cron"
- "github.com/xinliangnote/go-gin-api/internal/repository/mysql"
- "github.com/xinliangnote/go-gin-api/internal/repository/redis"
- "github.com/xinliangnote/go-gin-api/internal/router/interceptor"
- "github.com/xinliangnote/go-gin-api/pkg/errors"
- "github.com/xinliangnote/go-gin-api/pkg/file"
- "go.uber.org/zap"
- )
- type resource struct {
- mux core.Mux
- logger *zap.Logger
- db mysql.Repo
- cache redis.Repo
- interceptors interceptor.Interceptor
- cronServer cron.Server
- }
- type Server struct {
- Mux core.Mux
- Db mysql.Repo
- Cache redis.Repo
- CronServer cron.Server
- }
- func NewHTTPServer(logger *zap.Logger, cronLogger *zap.Logger) (*Server, error) {
- if logger == nil {
- return nil, errors.New("logger required")
- }
- r := new(resource)
- r.logger = logger
- openBrowserUri := configs.ProjectDomain + configs.ProjectPort
- _, ok := file.IsExists(configs.ProjectInstallMark)
- if !ok { // 未安装
- openBrowserUri += "/install"
- } else { // 已安装
- // 初始化 DB
- dbRepo, err := mysql.New()
- if err != nil {
- logger.Fatal("new db err", zap.Error(err))
- }
- r.db = dbRepo
- // 初始化 Cache
- cacheRepo, err := redis.New()
- if err != nil {
- logger.Fatal("new cache err", zap.Error(err))
- }
- r.cache = cacheRepo
- // 初始化 CRON Server
- cronServer, err := cron.New(cronLogger, dbRepo, cacheRepo)
- if err != nil {
- logger.Fatal("new cron err", zap.Error(err))
- }
- cronServer.Start()
- r.cronServer = cronServer
- }
- mux, err := core.New(logger,
- core.WithEnableOpenBrowser(openBrowserUri),
- core.WithEnableCors(),
- core.WithEnableRate(),
- core.WithAlertNotify(alert.NotifyHandler(logger)),
- core.WithRecordMetrics(metrics.RecordHandler(logger)),
- )
- if err != nil {
- panic(err)
- }
- r.mux = mux
- r.interceptors = interceptor.New(logger, r.cache, r.db)
- // 设置 Render 路由
- setRenderRouter(r)
- // 设置 API 路由
- setApiRouter(r)
- // 设置 GraphQL 路由
- setGraphQLRouter(r)
- // 设置 Socket 路由
- setSocketRouter(r)
- s := new(Server)
- s.Mux = mux
- s.Db = r.db
- s.Cache = r.cache
- s.CronServer = r.cronServer
- return s, nil
- }
|