package validation import ( "GoMembership/internal/models" "GoMembership/pkg/errors" "GoMembership/pkg/logger" "github.com/go-playground/validator/v10" "gorm.io/gorm" ) func validateMembership(db *gorm.DB, user *models.User, sl validator.StructLevel) { if user.Membership.SubscriptionModel.RequiredMembershipField != "" { switch user.Membership.SubscriptionModel.RequiredMembershipField { case "ParentMembershipID": if err := CheckParentMembershipID(db, user); err != nil { logger.Error.Printf("Error ParentMembershipValidation: %v", err.Error()) sl.ReportError(user.Membership.ParentMembershipID, user.Membership.SubscriptionModel.RequiredMembershipField, "RequiredMembershipField", "invalid", "") } default: logger.Error.Printf("Error no matching RequiredMembershipField: %v", errors.ErrInvalidValue.Error()) sl.ReportError(user.Membership.ParentMembershipID, user.Membership.SubscriptionModel.RequiredMembershipField, "RequiredMembershipField", "not_implemented", "") } } } func CheckParentMembershipID(db *gorm.DB, user *models.User) error { if user.Membership.ParentMembershipID == 0 { return errors.ValErrParentIDNotSet } else { var parent models.User if err := parent.FromID(db, &user.Membership.ParentMembershipID); err != nil { return errors.ValErrParentIDNotFound } } return nil }