private static void validateProperty(
            Object properties,
            PropertyFieldInfo fieldInfo,
            List<String> errorMessages) {
        PropertyConstraints constraints = fieldInfo.constraints();
        long min = constraints.min();
        long max = constraints.max();
        String lessThanOrEqualTo = constraints.lessThanOrEqualTo();
        Size size = constraints.size();
        ValidCron validCron = constraints.validCron();
        ValidRegex validRegex = constraints.validRegex();
        MatchesStringPattern matchesStringPattern = constraints.matchesStringPattern();
        if (min == Long.MIN_VALUE
                && max == Long.MAX_VALUE
                && lessThanOrEqualTo == null
                && size == null
                && validCron == null
                && validRegex == null
                && matchesStringPattern == null) {
            return;
        }
        Object value = fieldInfo.get(properties);
        Field field = fieldInfo.field();
        if (min != Long.MIN_VALUE || max != Long.MAX_VALUE) {
            validateMinMaxProperty(min, max, value, field, errorMessages);
        }
        if (lessThanOrEqualTo != null) {
            validateLessThanOrEqualTo(lessThanOrEqualTo, properties, value, field, errorMessages);
        }
        if (size != null) {
            validateSizeProperty(size, value, field, errorMessages);
        }
        if (validCron != null) {
            validateCronProperty(value, field, errorMessages);
        }
        if (validRegex != null) {
            validateRegexProperty(value, field, errorMessages);
        }
        if (matchesStringPattern != null) {
            validateStringPatternProperty(matchesStringPattern.value(),
                    value,
                    field,
                    errorMessages);
        }
    }
@implNote We don't use "hibernate-validator" because it has a terrible performance
turms-server-common/src/main/java/im/turms/server/common/infra/property/TurmsPropertiesValidator.java