initial commit
This commit is contained in:
163
internal/delivery/http/platform/public.go
Normal file
163
internal/delivery/http/platform/public.go
Normal file
@@ -0,0 +1,163 @@
|
||||
package platform
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/rs/zerolog"
|
||||
"go.uber.org/fx"
|
||||
|
||||
"base/config"
|
||||
appAsset "base/internal/application/asset"
|
||||
appAuth "base/internal/application/auth"
|
||||
appDiscovery "base/internal/application/discovery"
|
||||
appLanding "base/internal/application/landing"
|
||||
appProfile "base/internal/application/profile"
|
||||
appProfileRole "base/internal/application/profilerole"
|
||||
appSkill "base/internal/application/skill"
|
||||
appSpecialist "base/internal/application/specialist"
|
||||
"base/internal/server/middleware"
|
||||
)
|
||||
|
||||
type Controller struct {
|
||||
logger zerolog.Logger
|
||||
middleware middleware.Middleware
|
||||
config *config.AppConfig
|
||||
e *gin.Engine
|
||||
authService appAuth.Service
|
||||
profileService appProfile.Service
|
||||
profileRoleService appProfileRole.Service
|
||||
skillService appSkill.Service
|
||||
assetService appAsset.Service
|
||||
discoveryService appDiscovery.Service
|
||||
landingService appLanding.Service
|
||||
specialistService appSpecialist.Service
|
||||
}
|
||||
|
||||
type Param struct {
|
||||
Logger zerolog.Logger
|
||||
Engine *gin.Engine
|
||||
Middleware middleware.Middleware
|
||||
Config *config.AppConfig
|
||||
AuthService appAuth.Service
|
||||
ProfileService appProfile.Service
|
||||
ProfileRoleService appProfileRole.Service
|
||||
SkillService appSkill.Service
|
||||
AssetService appAsset.Service
|
||||
DiscoveryService appDiscovery.Service
|
||||
LandingService appLanding.Service
|
||||
SpecialistService appSpecialist.Service
|
||||
|
||||
fx.In
|
||||
}
|
||||
|
||||
func New(lc fx.Lifecycle, param Param) *Controller {
|
||||
c := &Controller{
|
||||
logger: param.Logger,
|
||||
e: param.Engine,
|
||||
middleware: param.Middleware,
|
||||
config: param.Config,
|
||||
authService: param.AuthService,
|
||||
profileService: param.ProfileService,
|
||||
profileRoleService: param.ProfileRoleService,
|
||||
skillService: param.SkillService,
|
||||
assetService: param.AssetService,
|
||||
discoveryService: param.DiscoveryService,
|
||||
landingService: param.LandingService,
|
||||
specialistService: param.SpecialistService,
|
||||
}
|
||||
|
||||
lc.Append(
|
||||
fx.Hook{
|
||||
OnStart: func(ctx context.Context) error {
|
||||
c.SetupRouter()
|
||||
|
||||
return nil
|
||||
},
|
||||
OnStop: func(ctx context.Context) error {
|
||||
return nil
|
||||
},
|
||||
},
|
||||
)
|
||||
|
||||
return c
|
||||
}
|
||||
|
||||
func (ctl *Controller) SetupRouter() {
|
||||
apiRouter := ctl.e.Group("/api")
|
||||
ctl.registerRoutes(apiRouter.Group("/v1"))
|
||||
ctl.registerSpecialistRoutes(apiRouter.Group("/specialists/v1"))
|
||||
}
|
||||
|
||||
func (ctl *Controller) registerRoutes(router *gin.RouterGroup) {
|
||||
authRouter := router.Group("/auth")
|
||||
ctl.registerAuthRoutes(authRouter)
|
||||
|
||||
accountRouter := router.Group("/account")
|
||||
ctl.registerAccountRoutes(accountRouter)
|
||||
|
||||
profileRouter := router.Group("/profiles")
|
||||
ctl.registerProfileRoutes(profileRouter)
|
||||
ctl.registerAssetRoutes(router)
|
||||
|
||||
platformRouter := router.Group("/platform")
|
||||
ctl.registerPlatformRoutes(platformRouter)
|
||||
|
||||
landingRouter := router.Group("/landing")
|
||||
ctl.registerLandingRoutes(landingRouter)
|
||||
}
|
||||
|
||||
func (ctl *Controller) registerPlatformRoutes(platformRouter *gin.RouterGroup) {
|
||||
protected := platformRouter.Use(ctl.middleware.AuthShield())
|
||||
protected.GET("/profile-roles", ctl.ListProfileRoles)
|
||||
protected.GET("/skills", ctl.ListSkills)
|
||||
protected.GET("/overview/discovery", ctl.GetDiscoveryOverview)
|
||||
protected.GET("/overview/specialist", ctl.GetSpecialistOverview)
|
||||
protected.POST("/verify-account", ctl.VerifyAccount)
|
||||
protected.POST("/setup-profile", ctl.SetupProfile)
|
||||
}
|
||||
|
||||
func (ctl *Controller) registerLandingRoutes(landingRouter *gin.RouterGroup) {
|
||||
landingRouter.GET("", ctl.GetLanding)
|
||||
}
|
||||
|
||||
func (ctl *Controller) registerAuthRoutes(authRouter *gin.RouterGroup) {
|
||||
authRouter.POST("/login", ctl.LoginWithCredentials)
|
||||
authRouter.POST("/register", ctl.RegisterWithCredentials)
|
||||
authRouter.POST("/refresh-token", ctl.RefreshToken)
|
||||
authRouter.POST("/oauth/redirect-url", ctl.GetOauthRedirectURL)
|
||||
authRouter.GET("/oauth/callback/:provider", ctl.OauthCallbackGET)
|
||||
authRouter.POST("/oauth/callback", ctl.OauthCallback)
|
||||
authRouter.POST("/send-reset-password-email", ctl.SendResetPasswordEmail)
|
||||
authRouter.POST("/reset-password", ctl.ResetPassword)
|
||||
|
||||
// Protected routes
|
||||
protectedRoutes := authRouter.Use(ctl.middleware.AuthShield())
|
||||
protectedRoutes.POST("/send-verification-email", ctl.SendVerificationEmail)
|
||||
}
|
||||
|
||||
func (ctl *Controller) registerAccountRoutes(accountRouter *gin.RouterGroup) {
|
||||
protected := accountRouter.Use(ctl.middleware.AuthShield())
|
||||
protected.GET("/info", ctl.GetUserInfo)
|
||||
}
|
||||
|
||||
func (ctl *Controller) registerProfileRoutes(profileRouter *gin.RouterGroup) {
|
||||
profileRouter.POST("", ctl.CreateProfile)
|
||||
profileRouter.GET("", ctl.ListProfiles)
|
||||
profileRouter.GET("/handle/:handle", ctl.GetProfileByHandle)
|
||||
profileRouter.GET("/:id/assets", ctl.ListAssetsByProfile)
|
||||
profileRouter.GET("/:id", ctl.GetProfile)
|
||||
profileRouter.PUT("/:id", ctl.UpdateProfile)
|
||||
profileRouter.DELETE("/:id", ctl.DeleteProfile)
|
||||
}
|
||||
|
||||
func (ctl *Controller) registerAssetRoutes(router *gin.RouterGroup) {
|
||||
assetRouter := router.Group("/assets")
|
||||
assetRouter.GET("/categories", ctl.ListAssetCategories)
|
||||
assetRouter.POST("/categories/preview", ctl.ListCategoriesWithPreview)
|
||||
assetRouter.GET("/categories/:id/assets", ctl.ListAssetsByCategoryID)
|
||||
assetRouter.POST("", ctl.CreateAsset)
|
||||
assetRouter.GET("/:id", ctl.GetAsset)
|
||||
assetRouter.PUT("/:id", ctl.UpdateAsset)
|
||||
assetRouter.DELETE("/:id", ctl.DeleteAsset)
|
||||
}
|
||||
Reference in New Issue
Block a user