added parentmembershipvalidation

This commit is contained in:
$(pass /github/name)
2024-07-12 16:01:16 +02:00
parent d8115f512d
commit 02647c4cf7
5 changed files with 48 additions and 17 deletions

View File

@@ -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(&regData.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(&regData.User)
if err != nil {

View File

@@ -5,14 +5,15 @@ import (
)
type SubscriptionModel struct {
CreatedAt time.Time
UpdatedAt time.Time
Name string `json:"name" validate:"required,alphaunicode,subscriptionModel"`
Details string `json:"details" validate:"required"`
Conditions string `json:"conditions" validate:"required"`
ID int64 `gorm:"primaryKey"`
MonthlyFee float32 `json:"monthly_fee" validate:"required,number"`
HourlyRate float32 `json:"hourly_rate" validate:"required,number"`
IncludedPerYear int16 `json:"included_hours_per_year" validate:"omitempty,number"`
IncludedPerMonth int16 `json:"included_hours_per_month" validate:"omitempty,number"`
CreatedAt time.Time
UpdatedAt time.Time
Name string `json:"name" validate:"required,subscriptionModel"`
Details string `json:"details" 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"`
IncludedPerYear int16 `json:"included_hours_per_year" validate:"omitempty,number"`
IncludedPerMonth int16 `json:"included_hours_per_month" validate:"omitempty,number"`
}

View File

@@ -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

View File

@@ -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)
}

View File

@@ -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()