add checkbox styling, driverslicence handling and validation

This commit is contained in:
Alex
2024-10-02 14:32:14 +02:00
parent 4ee18f21f2
commit cafe030e79
17 changed files with 303 additions and 44 deletions

View File

@@ -9,6 +9,7 @@ import (
"reflect"
"regexp"
"slices"
"strconv"
"strings"
"time"
@@ -80,22 +81,16 @@ func ValidateRequiredMembershipField(fl validator.FieldLevel) bool {
// Get the value of the field specified by RequiredMembershipField
fieldValue := reflect.ValueOf(membership).FieldByName(fieldName)
logger.Info.Printf("Starting fieldValue Validation for %v: %#v", fieldName, fieldValue)
// Check if the fieldValue is valid
if !fieldValue.IsValid() {
return false
}
logger.Info.Printf("fieldValue is valid: %#v", fieldValue)
// Check if the fieldValue is a nil pointer
if fieldValue.Kind() == reflect.Ptr && fieldValue.IsNil() {
return false
}
logger.Info.Println("fieldValue is not a nil pointer")
// Ensure that the fieldValue is an uint
var fieldUint uint
if fieldValue.Kind() == reflect.Uint {
@@ -104,17 +99,12 @@ func ValidateRequiredMembershipField(fl validator.FieldLevel) bool {
return false
}
logger.Info.Println("fieldValue is a int")
var membershipIDs []uint
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("found ids of members: %#v", membershipIDs)
// logger.Info.Printf("FIELD_NAME: %#v\nVALUE: %#v", fieldName, fieldValue)
// Check if the field value is zero (empty)
return slices.Contains(membershipIDs, fieldUint)
}
@@ -134,3 +124,34 @@ func ValidateSafeContent(fl validator.FieldLevel) bool {
}
return true
}
func ValidateDriversLicence(fl validator.FieldLevel) bool {
fieldValue := fl.Field().String()
if len(fieldValue) != 11 {
return false
}
id, tenthChar := string(fieldValue[:9]), string(fieldValue[9])
if tenthChar == "X" {
tenthChar = "10"
}
tenthValue, _ := strconv.ParseInt(tenthChar, 10, 8)
// for readability
weights := []int{9, 8, 7, 6, 5, 4, 3, 2, 1}
sum := 0
for i := 0; i < 9; i++ {
char := string(id[i])
value, _ := strconv.ParseInt(char, 36, 64)
sum += int(value) * weights[i]
}
calcCheckDigit := sum % 11
if calcCheckDigit != int(tenthValue) {
return false
}
return true
}