feat: UserCreateRequest model & validation
This commit is contained in:
parent
6fb6ca275c
commit
edf770b8ed
5 changed files with 141 additions and 0 deletions
24
src/main/java/eu/ztsh/wymiana/validation/Adult.java
Normal file
24
src/main/java/eu/ztsh/wymiana/validation/Adult.java
Normal file
|
@ -0,0 +1,24 @@
|
|||
package eu.ztsh.wymiana.validation;
|
||||
|
||||
import jakarta.validation.Constraint;
|
||||
import jakarta.validation.Payload;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
import static java.lang.annotation.ElementType.FIELD;
|
||||
import static java.lang.annotation.ElementType.PARAMETER;
|
||||
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||
|
||||
@Target({ FIELD, PARAMETER })
|
||||
@Retention(RUNTIME)
|
||||
@Constraint(validatedBy = AdultValidator.class)
|
||||
@Documented
|
||||
public @interface Adult {
|
||||
String message() default "{jakarta.validation.constraints.Adult.message}";
|
||||
|
||||
Class<?>[] groups() default { };
|
||||
|
||||
Class<? extends Payload>[] payload() default { };
|
||||
}
|
42
src/main/java/eu/ztsh/wymiana/validation/AdultValidator.java
Normal file
42
src/main/java/eu/ztsh/wymiana/validation/AdultValidator.java
Normal file
|
@ -0,0 +1,42 @@
|
|||
package eu.ztsh.wymiana.validation;
|
||||
|
||||
import jakarta.validation.ConstraintValidator;
|
||||
import jakarta.validation.ConstraintValidatorContext;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.time.format.DateTimeParseException;
|
||||
import java.util.Arrays;
|
||||
import java.util.Objects;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class AdultValidator implements ConstraintValidator<Adult, String> {
|
||||
|
||||
private final Pattern pattern = Pattern.compile("\\d{11}");
|
||||
private final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMdd");
|
||||
|
||||
@Override
|
||||
public boolean isValid(String value, ConstraintValidatorContext context) {
|
||||
if (!pattern.matcher(value).matches()) {
|
||||
return false;
|
||||
}
|
||||
var datePart = Arrays.stream(value.substring(0, 6).split("")).map(Integer::parseInt).toArray(Integer[]::new);
|
||||
final String prefix;
|
||||
if (datePart[2] > 1) {
|
||||
datePart[2] = (datePart[2] - 2);
|
||||
prefix = "20";
|
||||
} else {
|
||||
prefix = "19";
|
||||
}
|
||||
var dateStamp = prefix.concat(Arrays.stream(datePart).map(Objects::toString).collect(Collectors.joining()));
|
||||
try {
|
||||
return LocalDate.parse(dateStamp, dtf)
|
||||
.plusYears(18)
|
||||
.isBefore(LocalDate.now(context.getClockProvider().getClock()));
|
||||
} catch (DateTimeParseException exception) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package eu.ztsh.wymiana.web.model;
|
||||
|
||||
import eu.ztsh.wymiana.validation.Adult;
|
||||
import jakarta.validation.constraints.Min;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
|
||||
public record UserCreateRequest(
|
||||
@NotNull String name,
|
||||
@NotNull String surname,
|
||||
@Adult String pesel,
|
||||
@Min(0) int pln) {
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue