http.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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. ginSwagger.PersistAuthorization(true),
  35. ))
  36. s.Use(
  37. middleware.CORSMiddleware(),
  38. middleware.ResponseLogMiddleware(logger),
  39. middleware.RequestLogMiddleware(logger),
  40. //middleware.SignMiddleware(log),
  41. )
  42. s.GET("/", func(ctx *gin.Context) {
  43. logger.WithContext(ctx).Info("hello")
  44. apiV1.HandleSuccess(ctx, map[string]interface{}{
  45. ":)": "Thank you for using nunu!",
  46. })
  47. })
  48. v1 := s.Group("/v1")
  49. {
  50. // No route group has permission
  51. noAuthRouter := v1.Group("/")
  52. {
  53. noAuthRouter.POST("/register", userHandler.Register)
  54. noAuthRouter.POST("/login", userHandler.Login)
  55. }
  56. // Non-strict permission routing group
  57. noStrictAuthRouter := v1.Group("/").Use(middleware.NoStrictAuth(jwt, logger))
  58. {
  59. noStrictAuthRouter.GET("/user", userHandler.GetProfile)
  60. }
  61. // Strict permission routing group
  62. strictAuthRouter := v1.Group("/").Use(middleware.StrictAuth(jwt, logger))
  63. {
  64. strictAuthRouter.PUT("/user", userHandler.UpdateProfile)
  65. }
  66. }
  67. return s
  68. }