package user import ( "gopkg.in/go-playground/validator.v9" "nos-comptes/internal/storage/model" "nos-comptes/internal/storage/validators" "nos-comptes/internal/utils" "github.com/gin-gonic/gin" ) type Validator struct { userService *Service Validator validator.Validate } func NewValidator(service *Service) *Validator { return &Validator{userService: service} } func (v Validator) HasValidUserId(gc *gin.Context) { userId := gc.Param("userId") err := v.Validator.VarCtx(gc, userId, "uuid4") if err != nil { utils.JSONError(gc.Writer, validators.NewDataValidationAPIError(err)) return } } func (v Validator) UserExists(gc *gin.Context) { userId := gc.Param("userId") user, err := v.userService.GetUserById(userId) if e, ok := err.(*model.APIError); ok { utils.GetLoggerFromCtx(gc).WithError(err).WithField("type", e.Type).Error("error GetUser: get user error") utils.JSONErrorWithMessage(gc.Writer, *e, e.Description) } else if err != nil { utils.GetLoggerFromCtx(gc).WithError(err).Error("error while get user") utils.JSONError(gc.Writer, model.ErrInternalServer) return } if user == nil { utils.JSONErrorWithMessage(gc.Writer, model.ErrNotFound, "User not found") return } } func (v Validator) UserdIdMatchOAuthToken(gc *gin.Context) { userId := gc.Param("userId") usrParam, err := v.userService.GetUserById(userId) if e, ok := err.(*model.APIError); ok { utils.GetLoggerFromCtx(gc).WithError(err).WithField("type", e.Type).Error("error GetUser: get user error") utils.JSONErrorWithMessage(gc.Writer, *e, e.Description) } else if err != nil { utils.GetLoggerFromCtx(gc).WithError(err).Error("error while get user") utils.JSONError(gc.Writer, model.ErrInternalServer) return } googleUserId, exists := gc.Get("googleUserId") if exists == false { utils.GetLoggerFromCtx(gc).Error("error while getting google user id") utils.JSONError(gc.Writer, model.ErrInternalServer) return } usr, err := v.userService.GetUserFromGoogleID(googleUserId.(string)) if e, ok := err.(*model.APIError); ok { utils.GetLogger().Info(err) utils.GetLoggerFromCtx(gc).WithError(err).WithField("type", e.Type).Error("error GetUserFromGoogleID: get user from google user id") utils.JSONErrorWithMessage(gc.Writer, *e, e.Description) return } else if err != nil { utils.GetLoggerFromCtx(gc).WithError(err).Error("error while get user from google user id") utils.JSONError(gc.Writer, model.ErrInternalServer) return } if usr == nil || usr.ID != usrParam.ID { utils.GetLoggerFromCtx(gc).WithError(err).Error("User in path doesn't match authenticated user") utils.JSONError(gc.Writer, model.ErrBadRequestFormat) return } }