105 lines
2.7 KiB
Go
105 lines
2.7 KiB
Go
package utils
|
|
|
|
// import "regexp"
|
|
|
|
import (
|
|
// "reflect"
|
|
"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"
|
|
)
|
|
|
|
//
|
|
// func IsEmailValid(email string) bool {
|
|
// regex := `^[a-z0-9._%+\-]+@[a-z0-9.\-]+\.[a-z]{2,}$`
|
|
// re := regexp.MustCompile(regex)
|
|
// return re.MatchString(email)
|
|
// }
|
|
|
|
func AgeValidator(fl validator.FieldLevel) bool {
|
|
fieldValue := fl.Field()
|
|
// Ensure the field is of type time.Time
|
|
// if fieldValue.Kind() != reflect.Struct || !fieldValue.Type().ConvertibleTo(reflect.TypeOf(time.Time{})) {
|
|
// return false
|
|
// }
|
|
dateOfBirth := fieldValue.Interface().(time.Time)
|
|
now := time.Now()
|
|
age := now.Year() - dateOfBirth.Year()
|
|
|
|
if now.YearDay() < dateOfBirth.YearDay() {
|
|
age-- // if birthday is in the future..
|
|
}
|
|
|
|
return age >= 18
|
|
}
|
|
|
|
func SubscriptionModelValidator(fl validator.FieldLevel) bool {
|
|
fieldValue := fl.Field().String()
|
|
var names []string
|
|
if err := database.DB.Model(&models.SubscriptionModel{}).Pluck("name", &names).Error; err != nil {
|
|
logger.Error.Fatalf("Couldn't get SubscriptionModel names: %#v", err)
|
|
return false
|
|
}
|
|
return slices.Contains(names, fieldValue)
|
|
}
|
|
|
|
func IBANValidator(fl validator.FieldLevel) bool {
|
|
fieldValue := fl.Field().String()
|
|
|
|
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)
|
|
|
|
// Check if the fieldValue is valid
|
|
if !fieldValue.IsValid() {
|
|
return false
|
|
}
|
|
|
|
// Check if the fieldValue is a nil pointer
|
|
if fieldValue.Kind() == reflect.Ptr && fieldValue.IsNil() {
|
|
return false
|
|
}
|
|
|
|
// 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()
|
|
|
|
return swift.Validate(fieldValue) == nil
|
|
}
|