feat(validation): add request and domain validation for email use case
This commit is contained in:
@@ -4,6 +4,7 @@ import com.pablotj.restemailbridge.application.port.in.EmailDefaultConfigPort;
|
||||
import com.pablotj.restemailbridge.application.port.out.EmailPort;
|
||||
import com.pablotj.restemailbridge.application.usecase.SendEmailUseCase;
|
||||
import com.pablotj.restemailbridge.domain.repository.EmailRepository;
|
||||
import com.pablotj.restemailbridge.domain.service.EmailValidatorService;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
@@ -12,6 +13,6 @@ public class UseCaseConfig {
|
||||
|
||||
@Bean
|
||||
public SendEmailUseCase sendEmailUseCase(EmailDefaultConfigPort emailConfigurationPort, EmailPort emailService, EmailRepository emailRepository) {
|
||||
return new SendEmailUseCase(emailConfigurationPort, emailService, emailRepository);
|
||||
return new SendEmailUseCase(new EmailValidatorService(), emailConfigurationPort, emailService, emailRepository);
|
||||
}
|
||||
}
|
||||
@@ -19,15 +19,15 @@ public class MailJpa {
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private Long id;
|
||||
|
||||
@Column(nullable = false)
|
||||
@Column(length = 100, nullable = false)
|
||||
private String sender;
|
||||
|
||||
@Column(nullable = false)
|
||||
@Column(length = 100, nullable = false)
|
||||
private String recipient;
|
||||
|
||||
@Column(nullable = false)
|
||||
@Column(length = 50, nullable = false)
|
||||
private String subjet;
|
||||
|
||||
@Column(nullable = false)
|
||||
@Column(length = 40000, nullable = false)
|
||||
private String body;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.pablotj.restemailbridge.infrastructure.rest;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.MethodArgumentNotValidException;
|
||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
||||
|
||||
@RestControllerAdvice
|
||||
public class GlobalExceptionHandler {
|
||||
|
||||
@ExceptionHandler(MethodArgumentNotValidException.class)
|
||||
public ResponseEntity<Map<String, String>> handleValidationExceptions(MethodArgumentNotValidException ex) {
|
||||
Map<String, String> errors = new HashMap<>();
|
||||
ex.getBindingResult().getFieldErrors().forEach(error ->
|
||||
errors.put(error.getField(), error.getDefaultMessage()));
|
||||
return ResponseEntity.badRequest().body(errors);
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,12 @@
|
||||
package com.pablotj.restemailbridge.infrastructure.rest.dto;
|
||||
|
||||
import jakarta.validation.constraints.Email;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import org.hibernate.validator.constraints.Length;
|
||||
|
||||
public record SendMailRequest(
|
||||
String from,
|
||||
String subject,
|
||||
String body
|
||||
@NotBlank @Email @Length(min = 4, max = 100) String from,
|
||||
@NotBlank @Length(min=1, max = 30) String subject,
|
||||
@NotBlank @Length(min=1, max = 4000) String body
|
||||
) {
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user