added parentmembershipvalidation
This commit is contained in:
@@ -32,7 +32,6 @@ func (uc *UserController) RegisterUser(c *gin.Context) {
|
|||||||
c.JSON(http.StatusBadRequest, gin.H{"error": "Couldn't decode userdata"})
|
c.JSON(http.StatusBadRequest, gin.H{"error": "Couldn't decode userdata"})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
logger.Info.Printf("registering user: %#v", regData.User)
|
|
||||||
|
|
||||||
selectedModel, err := uc.MembershipService.GetModelByName(®Data.User.Membership.SubscriptionModel.Name)
|
selectedModel, err := uc.MembershipService.GetModelByName(®Data.User.Membership.SubscriptionModel.Name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -41,6 +40,7 @@ func (uc *UserController) RegisterUser(c *gin.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
regData.User.Membership.SubscriptionModel = *selectedModel
|
regData.User.Membership.SubscriptionModel = *selectedModel
|
||||||
|
logger.Info.Printf("REGISTERING user: %#v", regData.User)
|
||||||
// Register User
|
// Register User
|
||||||
id, token, err := uc.Service.RegisterUser(®Data.User)
|
id, token, err := uc.Service.RegisterUser(®Data.User)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -7,9 +7,10 @@ import (
|
|||||||
type SubscriptionModel struct {
|
type SubscriptionModel struct {
|
||||||
CreatedAt time.Time
|
CreatedAt time.Time
|
||||||
UpdatedAt time.Time
|
UpdatedAt time.Time
|
||||||
Name string `json:"name" validate:"required,alphaunicode,subscriptionModel"`
|
Name string `json:"name" validate:"required,subscriptionModel"`
|
||||||
Details string `json:"details" validate:"required"`
|
Details string `json:"details" validate:"required"`
|
||||||
Conditions string `json:"conditions" validate:"required"`
|
Conditions string `json:"conditions"`
|
||||||
|
RequiredMembershipField string `json:"required_membership_field" validate:"membershipField"`
|
||||||
ID int64 `gorm:"primaryKey"`
|
ID int64 `gorm:"primaryKey"`
|
||||||
MonthlyFee float32 `json:"monthly_fee" validate:"required,number"`
|
MonthlyFee float32 `json:"monthly_fee" validate:"required,number"`
|
||||||
HourlyRate float32 `json:"hourly_rate" validate:"required,number"`
|
HourlyRate float32 `json:"hourly_rate" validate:"required,number"`
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ import (
|
|||||||
|
|
||||||
"GoMembership/internal/models"
|
"GoMembership/internal/models"
|
||||||
"GoMembership/pkg/errors"
|
"GoMembership/pkg/errors"
|
||||||
"GoMembership/pkg/logger"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type UserRepositoryInterface interface {
|
type UserRepositoryInterface interface {
|
||||||
@@ -36,7 +35,7 @@ func (ur *UserRepository) CreateUser(user *models.User) (int64, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (ur *UserRepository) UpdateUser(userID int64, user *models.User) error {
|
func (ur *UserRepository) UpdateUser(userID int64, user *models.User) error {
|
||||||
logger.Info.Printf("Updating User: %#v\n", user)
|
// logger.Info.Printf("Updating User: %#v\n", user)
|
||||||
if user == nil {
|
if user == nil {
|
||||||
return errors.ErrNoData
|
return errors.ErrNoData
|
||||||
}
|
}
|
||||||
@@ -54,7 +53,7 @@ func (ur *UserRepository) UpdateUser(userID int64, user *models.User) error {
|
|||||||
|
|
||||||
func (ur *UserRepository) FindUserByID(id int64) (*models.User, error) {
|
func (ur *UserRepository) FindUserByID(id int64) (*models.User, error) {
|
||||||
var user models.User
|
var user models.User
|
||||||
result := database.DB.Preload("Consents").Preload("BankAccount").Preload("Verification").Preload("Membership").First(&user, id)
|
result := database.DB.Preload("Consents").Preload("BankAccount").Preload("Verification").Preload("Membership").Preload("Subscription").First(&user, id)
|
||||||
if result.Error != nil {
|
if result.Error != nil {
|
||||||
if result.Error == gorm.ErrRecordNotFound {
|
if result.Error == gorm.ErrRecordNotFound {
|
||||||
return nil, gorm.ErrRecordNotFound
|
return nil, gorm.ErrRecordNotFound
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ func validateRegistrationData(user *models.User) error {
|
|||||||
validate.RegisterValidation("bic", utils.BICValidator)
|
validate.RegisterValidation("bic", utils.BICValidator)
|
||||||
validate.RegisterValidation("iban", utils.IBANValidator)
|
validate.RegisterValidation("iban", utils.IBANValidator)
|
||||||
validate.RegisterValidation("subscriptionModel", utils.SubscriptionModelValidator)
|
validate.RegisterValidation("subscriptionModel", utils.SubscriptionModelValidator)
|
||||||
|
validate.RegisterValidation("membershipField", utils.ValidateRequiredMembershipField)
|
||||||
return validate.Struct(user)
|
return validate.Struct(user)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,15 +4,15 @@ package utils
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
// "reflect"
|
// "reflect"
|
||||||
"time"
|
|
||||||
|
|
||||||
"GoMembership/internal/database"
|
"GoMembership/internal/database"
|
||||||
"GoMembership/internal/models"
|
"GoMembership/internal/models"
|
||||||
"GoMembership/pkg/logger"
|
"GoMembership/pkg/logger"
|
||||||
"github.com/go-playground/validator/v10"
|
"github.com/go-playground/validator/v10"
|
||||||
"github.com/jbub/banking/iban"
|
"github.com/jbub/banking/iban"
|
||||||
"github.com/jbub/banking/swift"
|
"github.com/jbub/banking/swift"
|
||||||
|
"reflect"
|
||||||
"slices"
|
"slices"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -55,6 +55,37 @@ func IBANValidator(fl validator.FieldLevel) bool {
|
|||||||
return iban.Validate(fieldValue) == nil
|
return iban.Validate(fieldValue) == nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ValidateRequiredMembershipField(fl validator.FieldLevel) bool {
|
||||||
|
user := fl.Top().Interface().(*models.User)
|
||||||
|
membership := user.Membership
|
||||||
|
subModel := membership.SubscriptionModel
|
||||||
|
|
||||||
|
// Get the field name specified in RequiredMembershipField
|
||||||
|
fieldName := subModel.RequiredMembershipField
|
||||||
|
if fieldName == "" {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the value of the field specified by RequiredMembershipField
|
||||||
|
fieldValue := reflect.ValueOf(membership).FieldByName(fieldName)
|
||||||
|
// Ensure that the fieldValue is an int64
|
||||||
|
var fieldInt64 int64
|
||||||
|
if fieldValue.Kind() == reflect.Int64 {
|
||||||
|
fieldInt64 = fieldValue.Int()
|
||||||
|
} else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
var membershipIDs []int64
|
||||||
|
if err := database.DB.Model(&models.Membership{}).Pluck("id", &membershipIDs).Error; err != nil {
|
||||||
|
logger.Error.Fatalf("Couldn't get SubscriptionModel names: %#v", err)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// logger.Info.Printf("FIELD_NAME: %#v\nVALUE: %#v", fieldName, fieldValue)
|
||||||
|
// Check if the field value is zero (empty)
|
||||||
|
return slices.Contains(membershipIDs, fieldInt64)
|
||||||
|
}
|
||||||
|
|
||||||
func BICValidator(fl validator.FieldLevel) bool {
|
func BICValidator(fl validator.FieldLevel) bool {
|
||||||
fieldValue := fl.Field().String()
|
fieldValue := fl.Field().String()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user