moved server initialization

This commit is contained in:
Sergey Chubaryan 2024-08-18 21:16:07 +03:00
parent 278ef8c991
commit f9ef25b285
2 changed files with 92 additions and 49 deletions

60
main.go
View File

@ -9,22 +9,18 @@ import (
"backend/src/core/services"
"backend/src/core/utils"
"backend/src/logger"
"backend/src/server/handlers"
"backend/src/server/middleware"
"backend/src/server"
"context"
"crypto/rsa"
"crypto/x509"
"database/sql"
"encoding/pem"
"fmt"
"net"
"os"
"os/signal"
"runtime/pprof"
"syscall"
"time"
"github.com/gin-gonic/gin"
"github.com/jackc/pgx"
"github.com/jackc/pgx/stdlib"
)
@ -135,32 +131,6 @@ func main() {
},
)
// if !debugMode {
gin.SetMode(gin.ReleaseMode)
// }
r := gin.New()
r.Use(middleware.NewRequestLogMiddleware(logger))
r.Use(gin.Recovery())
r.Static("/webapp", "./webapp")
r.GET("/pooling", handlers.NewLongPoolingHandler(clientNotifier))
linkGroup := r.Group("/s")
linkGroup.POST("/new", handlers.NewShortlinkCreateHandler(linkService))
linkGroup.GET("/:linkId", handlers.NewShortlinkResolveHandler(linkService))
userGroup := r.Group("/user")
userGroup.POST("/create", handlers.NewUserCreateHandler(userService))
userGroup.POST("/login", handlers.NewUserLoginHandler(userService))
dummyGroup := r.Group("/dummy")
{
dummyGroup.Use(middleware.NewAuthMiddleware(userService))
dummyGroup.GET("", handlers.NewDummyHandler())
}
if args.GetProfilePath() != "" {
pprofFile, err := os.Create(args.GetProfilePath())
if err != nil {
@ -177,22 +147,14 @@ func main() {
}()
}
listenAddr := fmt.Sprintf(":%d", conf.GetPort())
logger.Log().Msgf("server listening on %s", listenAddr)
listener, err := (&net.ListenConfig{}).Listen(ctx, "tcp", listenAddr)
if err != nil {
logger.Fatal().Err(err).Msg("can not create network listener")
}
go func() {
<-ctx.Done()
logger.Log().Msg("stopping tcp listener...")
listener.Close()
}()
err = r.RunListener(listener)
if err != nil && err == net.ErrClosed {
logger.Fatal().Err(err).Msg("server stopped with error")
}
srv := server.New(
server.NewServerOpts{
DebugMode: debugMode,
Logger: logger,
Notifier: clientNotifier,
ShortlinkService: linkService,
UserService: userService,
},
)
srv.Run(ctx, conf.GetPort())
}

81
src/server/server.go Normal file
View File

@ -0,0 +1,81 @@
package server
import (
"backend/src/client_notifier"
"backend/src/core/services"
"backend/src/logger"
"backend/src/server/handlers"
"backend/src/server/middleware"
"context"
"fmt"
"net"
"github.com/gin-gonic/gin"
)
type Server struct {
logger logger.Logger
ginEngine *gin.Engine
}
type NewServerOpts struct {
DebugMode bool
Logger logger.Logger
Notifier client_notifier.ClientNotifier
UserService services.UserService
ShortlinkService services.ShortlinkService
}
func New(opts NewServerOpts) *Server {
if !opts.DebugMode {
gin.SetMode(gin.ReleaseMode)
}
r := gin.New()
r.Use(middleware.NewRequestLogMiddleware(opts.Logger))
r.Use(gin.Recovery())
r.Static("/webapp", "./webapp")
r.GET("/pooling", handlers.NewLongPoolingHandler(opts.Notifier))
linkGroup := r.Group("/s")
linkGroup.POST("/new", handlers.NewShortlinkCreateHandler(opts.ShortlinkService))
linkGroup.GET("/:linkId", handlers.NewShortlinkResolveHandler(opts.ShortlinkService))
userGroup := r.Group("/user")
userGroup.POST("/create", handlers.NewUserCreateHandler(opts.UserService))
userGroup.POST("/login", handlers.NewUserLoginHandler(opts.UserService))
dummyGroup := r.Group("/dummy")
{
dummyGroup.Use(middleware.NewAuthMiddleware(opts.UserService))
dummyGroup.GET("", handlers.NewDummyHandler())
}
return &Server{
logger: opts.Logger,
ginEngine: r,
}
}
func (s *Server) Run(ctx context.Context, port uint16) {
listenAddr := fmt.Sprintf(":%d", port)
s.logger.Log().Msgf("server listening on %s", listenAddr)
listener, err := (&net.ListenConfig{}).Listen(ctx, "tcp", listenAddr)
if err != nil {
s.logger.Fatal().Err(err).Msg("can not create network listener")
}
go func() {
<-ctx.Done()
s.logger.Log().Msg("stopping tcp listener...")
listener.Close()
}()
err = s.ginEngine.RunListener(listener)
if err != nil && err == net.ErrClosed {
s.logger.Fatal().Err(err).Msg("server stopped with error")
}
}