http.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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. {
  49. // No route group has permission
  50. noAuthRouter := v1.Group("/")
  51. {
  52. noAuthRouter.POST("/register", userHandler.Register)
  53. noAuthRouter.POST("/login", userHandler.Login)
  54. }
  55. // Non-strict permission routing group
  56. noStrictAuthRouter := v1.Group("/").Use(middleware.NoStrictAuth(jwt, logger))
  57. {
  58. noStrictAuthRouter.GET("/user", userHandler.GetProfile)
  59. }
  60. // Strict permission routing group
  61. strictAuthRouter := v1.Group("/").Use(middleware.StrictAuth(jwt, logger))
  62. {
  63. strictAuthRouter.PUT("/user", userHandler.UpdateProfile)
  64. }
  65. }
  66. return s
  67. }