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"})
|
||||
return
|
||||
}
|
||||
logger.Info.Printf("registering user: %#v", regData.User)
|
||||
|
||||
selectedModel, err := uc.MembershipService.GetModelByName(®Data.User.Membership.SubscriptionModel.Name)
|
||||
if err != nil {
|
||||
@@ -41,6 +40,7 @@ func (uc *UserController) RegisterUser(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
regData.User.Membership.SubscriptionModel = *selectedModel
|
||||
logger.Info.Printf("REGISTERING user: %#v", regData.User)
|
||||
// Register User
|
||||
id, token, err := uc.Service.RegisterUser(®Data.User)
|
||||
if err != nil {
|
||||
|
||||
@@ -7,9 +7,10 @@ import (
|
||||
type SubscriptionModel struct {
|
||||
CreatedAt 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"`
|
||||
Conditions string `json:"conditions" validate:"required"`
|
||||
Conditions string `json:"conditions"`
|
||||
RequiredMembershipField string `json:"required_membership_field" validate:"membershipField"`
|
||||
ID int64 `gorm:"primaryKey"`
|
||||
MonthlyFee float32 `json:"monthly_fee" validate:"required,number"`
|
||||
HourlyRate float32 `json:"hourly_rate" validate:"required,number"`
|
||||
|
||||
@@ -12,7 +12,6 @@ import (
|
||||
|
||||
"GoMembership/internal/models"
|
||||
"GoMembership/pkg/errors"
|
||||
"GoMembership/pkg/logger"
|
||||
)
|
||||
|
||||
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 {
|
||||
logger.Info.Printf("Updating User: %#v\n", user)
|
||||
// logger.Info.Printf("Updating User: %#v\n", user)
|
||||
if user == nil {
|
||||
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) {
|
||||
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 == gorm.ErrRecordNotFound {
|
||||
return nil, gorm.ErrRecordNotFound
|
||||
|
||||
@@ -75,7 +75,7 @@ func validateRegistrationData(user *models.User) error {
|
||||
validate.RegisterValidation("bic", utils.BICValidator)
|
||||
validate.RegisterValidation("iban", utils.IBANValidator)
|
||||
validate.RegisterValidation("subscriptionModel", utils.SubscriptionModelValidator)
|
||||
|
||||
validate.RegisterValidation("membershipField", utils.ValidateRequiredMembershipField)
|
||||
return validate.Struct(user)
|
||||
}
|
||||
|
||||
|
||||
@@ -4,15 +4,15 @@ package utils
|
||||
|
||||
import (
|
||||
// "reflect"
|
||||
"time"
|
||||
|
||||
"GoMembership/internal/database"
|
||||
"GoMembership/internal/models"
|
||||
"GoMembership/pkg/logger"
|
||||
"github.com/go-playground/validator/v10"
|
||||
"github.com/jbub/banking/iban"
|
||||
"github.com/jbub/banking/swift"
|
||||
"reflect"
|
||||
"slices"
|
||||
"time"
|
||||
)
|
||||
|
||||
//
|
||||
@@ -55,6 +55,37 @@ func IBANValidator(fl validator.FieldLevel) bool {
|
||||
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 {
|
||||
fieldValue := fl.Field().String()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user