From 00e1b86949c80370d3f807e5ad457218836bdb0f Mon Sep 17 00:00:00 2001 From: Mirna Gama Date: Sat, 13 Jan 2024 17:26:34 -0300 Subject: [PATCH] [R9] Validator to check if the consultation date was scheduled at least 30 minutes in advance --- ...tationDateScheduledInAdvanceValidator.java | 25 +++++++++++++++++++ .../ConsultationDateScheduledInAdvance.java | 23 +++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 src/main/java/com/mirna/hospitalmanagementapi/domain/validators/consultation/ConsultationDateScheduledInAdvanceValidator.java create mode 100644 src/main/java/com/mirna/hospitalmanagementapi/domain/validators/consultation/constraints/ConsultationDateScheduledInAdvance.java diff --git a/src/main/java/com/mirna/hospitalmanagementapi/domain/validators/consultation/ConsultationDateScheduledInAdvanceValidator.java b/src/main/java/com/mirna/hospitalmanagementapi/domain/validators/consultation/ConsultationDateScheduledInAdvanceValidator.java new file mode 100644 index 0000000..c2f2043 --- /dev/null +++ b/src/main/java/com/mirna/hospitalmanagementapi/domain/validators/consultation/ConsultationDateScheduledInAdvanceValidator.java @@ -0,0 +1,25 @@ +package com.mirna.hospitalmanagementapi.domain.validators.consultation; + +import java.time.Duration; +import java.time.LocalDateTime; + +import com.mirna.hospitalmanagementapi.domain.validators.consultation.constraints.ConsultationDateScheduledInAdvance; + +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; +import jakarta.validation.constraints.Future; + +public class ConsultationDateScheduledInAdvanceValidator implements ConstraintValidator { + + @Override + public boolean isValid(LocalDateTime value, ConstraintValidatorContext context) { + LocalDateTime now = LocalDateTime.now(); + + long diff = Duration.between(now, value).toMinutes(); + + if (diff < 30L) return false; + + return true; + } + +} diff --git a/src/main/java/com/mirna/hospitalmanagementapi/domain/validators/consultation/constraints/ConsultationDateScheduledInAdvance.java b/src/main/java/com/mirna/hospitalmanagementapi/domain/validators/consultation/constraints/ConsultationDateScheduledInAdvance.java new file mode 100644 index 0000000..766d941 --- /dev/null +++ b/src/main/java/com/mirna/hospitalmanagementapi/domain/validators/consultation/constraints/ConsultationDateScheduledInAdvance.java @@ -0,0 +1,23 @@ +package com.mirna.hospitalmanagementapi.domain.validators.consultation.constraints; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import com.mirna.hospitalmanagementapi.domain.validators.consultation.ConsultationDateScheduledInAdvanceValidator; + +import jakarta.validation.Constraint; +import jakarta.validation.Payload; + +@Constraint(validatedBy = ConsultationDateScheduledInAdvanceValidator.class) +@Target( { ElementType.METHOD, ElementType.FIELD }) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface ConsultationDateScheduledInAdvance { + + String message() default "This consultation must be scheduled at least 30 minutes in advance"; + Class[] groups() default {}; + Class[] payload() default {}; +}