http.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package server
  2. import (
  3. "github.com/gin-gonic/gin"
  4. apiV1 "github.com/go-nunu/nunu-layout-advanced/api/v1"
  5. "github.com/go-nunu/nunu-layout-advanced/docs"
  6. "github.com/go-nunu/nunu-layout-advanced/internal/handler"
  7. "github.com/go-nunu/nunu-layout-advanced/internal/middleware"
  8. "github.com/go-nunu/nunu-layout-advanced/pkg/jwt"
  9. "github.com/go-nunu/nunu-layout-advanced/pkg/log"
  10. "github.com/go-nunu/nunu-layout-advanced/pkg/server/http"
  11. "github.com/spf13/viper"
  12. swaggerfiles "github.com/swaggo/files"
  13. ginSwagger "github.com/swaggo/gin-swagger"
  14. )
  15. func NewHTTPServer(
  16. logger *log.Logger,
  17. conf *viper.Viper,
  18. jwt *jwt.JWT,
  19. userHandler handler.UserHandler,
  20. ) *http.Server {
  21. gin.SetMode(gin.DebugMode)
  22. s := http.NewServer(
  23. gin.Default(),
  24. logger,
  25. http.WithServerHost(conf.GetString("http.host")),
  26. http.WithServerPort(conf.GetInt("http.port")),
  27. )
  28. // swagger doc
  29. docs.SwaggerInfo.BasePath = "/v1"
  30. s.GET("/swagger/*any", ginSwagger.WrapHandler(
  31. swaggerfiles.Handler,
  32. //ginSwagger.URL(fmt.Sprintf("http://localhost:%d/swagger/doc.json", conf.GetInt("app.http.port"))),
  33. ginSwagger.DefaultModelsExpandDepth(-1),
  34. ))
  35. s.Use(
  36. middleware.CORSMiddleware(),
  37. middleware.ResponseLogMiddleware(logger),
  38. middleware.RequestLogMiddleware(logger),
  39. //middleware.SignMiddleware(log),
  40. )
  41. s.GET("/", func(ctx *gin.Context) {
  42. logger.WithContext(ctx).Info("hello")
  43. apiV1.HandleSuccess(ctx, map[string]interface{}{
  44. ":)": "Thank you for using nunu!",
  45. })
  46. })
  47. v1 := s.Group("/v1")
  48. // No route group has permission
  49. noAuthRouter := v1
  50. {
  51. noAuthRouter.POST("/register", userHandler.Register)
  52. noAuthRouter.POST("/login", userHandler.Login)
  53. }
  54. // Non-strict permission routing group
  55. noStrictAuthRouter := v1.Use(middleware.NoStrictAuth(jwt, logger))
  56. {
  57. noStrictAuthRouter.GET("/user", userHandler.GetProfile)
  58. }
  59. // Strict permission routing group
  60. strictAuthRouter := v1.Use(middleware.StrictAuth(jwt, logger))
  61. {
  62. strictAuthRouter.PUT("/user", userHandler.UpdateProfile)
  63. }
  64. return s
  65. }