diff --git a/internal/access/bind.go b/internal/access/bind.go index 59c4c69..dcd27b5 100644 --- a/internal/access/bind.go +++ b/internal/access/bind.go @@ -11,7 +11,7 @@ var ( //Ent *ent.Client Redis *redis.Client Logger *zap.Logger - Gin *gin.Engine + Router *gin.Engine ) func init() { diff --git a/internal/access/http_context.go b/internal/access/http_context.go new file mode 100644 index 0000000..7df039f --- /dev/null +++ b/internal/access/http_context.go @@ -0,0 +1,11 @@ +package access + +import ( + "framework_v2/internal/providers" +) + +type User providers.JwtIDToken + +type Metadata struct { + User User +} diff --git a/internal/cmd/http.go b/internal/cmd/http.go new file mode 100644 index 0000000..dcad895 --- /dev/null +++ b/internal/cmd/http.go @@ -0,0 +1,36 @@ +package cmd + +import ( + "framework_v2/internal/access" + "framework_v2/internal/providers" + "github.com/spf13/cobra" +) + +var httpCommand = &cobra.Command{ + Use: "http", + + Run: func(cmd *cobra.Command, args []string) { + providers.InitConfig() + providers.InitLogger() + providers.InitEnt() + providers.InitRedis() + providers.InitJwksRefresh() + providers.InitAsynQClient() + providers.InitGin() + providers.InitApiRoutes() + + StartHttp() + }, +} + +func StartHttp() { + if providers.Config.HTTP.ListenAddr == "" { + providers.Config.GRPC.GrpcListenAddr = "0.0.0.0:8080" + } + + err := access.Router.Run(providers.Config.HTTP.ListenAddr) + if err != nil { + panic("failed to listen: " + err.Error()) + } + providers.Logger.Info("Http Server listening at " + providers.Config.GRPC.GrpcListenAddr) +} diff --git a/internal/cmd/root.go b/internal/cmd/root.go index 52d9df6..5f2e532 100644 --- a/internal/cmd/root.go +++ b/internal/cmd/root.go @@ -13,12 +13,12 @@ var rootCmd = &cobra.Command{ func Execute() { rootCmd.AddCommand(rpcCommand) - //rootCmd.AddCommand(gormGenCommand) rootCmd.AddCommand(migrateCommand) rootCmd.AddCommand(workerCommand) rootCmd.AddCommand(scheduleCommand) rootCmd.AddCommand(dsnCommand) rootCmd.AddCommand(createMigrateCommand) + rootCmd.AddCommand(httpCommand) if err := rootCmd.Execute(); err != nil { fmt.Println(err) diff --git a/internal/controllers/user/main.go b/internal/controllers/user/main.go new file mode 100644 index 0000000..f7efdbc --- /dev/null +++ b/internal/controllers/user/main.go @@ -0,0 +1,9 @@ +package user + +import ( + "framework_v2/internal/access" + "github.com/gin-gonic/gin" +) + +func CurrentUser(ctx *gin.Context, metadata *access.Metadata) { +} diff --git a/internal/providers/gin.go b/internal/providers/gin.go index cf2a3ba..6b7a5a3 100644 --- a/internal/providers/gin.go +++ b/internal/providers/gin.go @@ -1 +1,49 @@ package providers + +import ( + "framework_v2/internal/access" + "github.com/gin-gonic/gin" +) + +func InitGin() { + access.Router = gin.Default() + access.Router.Use(gin.Recovery()) +} + +type httpMethod int + +var httpMethodStr = []string{"GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS"} + +func (h httpMethod) String() string { + return httpMethodStr[h-1] +} + +const ( + GET httpMethod = iota + 1 + POST + PUT + DELETE + PATCH + HEAD + OPTIONS +) + +type HandlerFunc func(c *gin.Context, metadata *access.Metadata) + +func HandleRoute(method httpMethod, relativePath string, handlers ...HandlerFunc) { + access.Router.Handle(method.String(), relativePath, func(c *gin.Context) { + handleWithMetadata(c, handlers...) + }) +} + +func GetUser(c *gin.Context) *access.User { + return &access.User{} +} + +func handleWithMetadata(c *gin.Context, handlers ...HandlerFunc) { + var metadata = &access.Metadata{} + + for _, handler := range handlers { + handler(c, metadata) + } +} diff --git a/internal/providers/routes.go b/internal/providers/routes.go new file mode 100644 index 0000000..1bf29e6 --- /dev/null +++ b/internal/providers/routes.go @@ -0,0 +1,7 @@ +package providers + +import "framework_v2/internal/controllers/user" + +func InitApiRoutes() { + HandleRoute(GET, "/", user.CurrentUser) +}