refactor: transitioned auth controller to use the new controller structure;

feat: setup DI for controllers;
refactor: marked old utils and routes package parts as deprecated
This commit is contained in:
2025-07-17 21:42:47 +03:00
parent f9d7439def
commit d6e2d02bff
15 changed files with 437 additions and 1585 deletions

View File

@@ -19,7 +19,6 @@ package controllers
import (
"easywish/internal/dto"
"easywish/internal/middleware"
"easywish/internal/services"
"easywish/internal/utils/enums"
"easywish/internal/validation"
@@ -48,39 +47,16 @@ type ControllerMethod struct {
type controllerImpl struct {
Path string
Authorization enums.Role
Middleware []gin.HandlerFunc
Methods []ControllerMethod
}
func (ctrl *controllerImpl) Setup(group *gin.RouterGroup, log *zap.Logger, auth services.AuthService) *gin.RouterGroup {
type Controller interface {
Setup(group *gin.RouterGroup, log *zap.Logger, auth services.AuthService)
}
func (ctrl *controllerImpl) Setup(group *gin.RouterGroup, log *zap.Logger, auth services.AuthService) {
ctrlGroup := group.Group(ctrl.Path)
ctrlGroup.Use(middleware.AuthMiddleware(log, auth))
ctrlGroup.Use(gin.HandlerFunc(func(c *gin.Context) {
ip := c.ClientIP()
userAgent := c.Request.UserAgent()
sessionInfoFromCtx, ok := c.Get("session_info"); if !ok {
c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"error": "Invalid or missing session data"})
return
}
sessionInfo := sessionInfoFromCtx.(dto.SessionInfo)
if sessionInfo.Role < ctrl.Authorization {
c.AbortWithStatusJSON(
http.StatusForbidden,
gin.H{"error": "Insufficient authorization for this controller"})
return
}
c.Set("client_info", dto.ClientInfo{
SessionInfo: sessionInfo,
IP: ip,
UserAgent: userAgent,
})
c.Next()
}))
ctrlGroup.Use(ctrl.Middleware...)
for _, method := range ctrl.Methods {
@@ -100,11 +76,6 @@ func (ctrl *controllerImpl) Setup(group *gin.RouterGroup, log *zap.Logger, auth
}),
method.Function)...,
)}
return ctrlGroup
}
type Controller interface {
Setup(group *gin.RouterGroup, log *zap.Logger, auth services.AuthService)
}
func GetRequest[ModelT any](c *gin.Context) (*dto.Request[ModelT], error) {