Commit e8059014 authored by Christopher Cottier's avatar Christopher Cottier

added validations for all fields in request

parent 55c743df
...@@ -16,7 +16,9 @@ import org.springframework.web.bind.annotation.*; ...@@ -16,7 +16,9 @@ import org.springframework.web.bind.annotation.*;
import javax.validation.ConstraintViolation; import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException; import javax.validation.ConstraintViolationException;
import javax.validation.Valid; import javax.validation.Valid;
import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors;
@RestController @RestController
@RequestMapping("/api/cc") @RequestMapping("/api/cc")
...@@ -31,15 +33,18 @@ public class CreditCardController{ ...@@ -31,15 +33,18 @@ public class CreditCardController{
@PostMapping(value = "/authorize", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @PostMapping(value = "/authorize", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public CreditCardResponse authorize(@Valid @RequestBody CreditCardRequest ccRequest) { public CreditCardResponse authorize(@Valid @RequestBody CreditCardRequest ccRequest) {
logger.info("this is CC controller"); logger.info("this is CC controller");
//validationService.validatePostAuthorization(ccRequest);
return ccService.authorize(ccRequest); return ccService.authorize(ccRequest);
} }
@ExceptionHandler(MethodArgumentNotValidException.class) @ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST) @ResponseStatus(HttpStatus.BAD_REQUEST)
public ResponseEntity<String> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { public ResponseEntity<List<String>> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
System.out.println("in exception handler"); System.out.println("in exception handler");
return new ResponseEntity<>("not valid due to validation error: " + e.getMessage(), HttpStatus.BAD_REQUEST); List<String> errors = e.getAllErrors().stream()
.map(error -> error.getDefaultMessage())
.collect(Collectors.toList());
return new ResponseEntity<>(errors, HttpStatus.BAD_REQUEST);
} }
} }
...@@ -5,13 +5,19 @@ import lombok.Getter; ...@@ -5,13 +5,19 @@ import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
@Getter @Getter
@Setter @Setter
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class CreditCardAmount { public class CreditCardAmount {
@Pattern(regexp = "\\d+\\.\\d{2}", message="Value must be at dollar and cents value separated by '.'")
String value; String value;
@NotBlank
String currency; String currency;
} }
...@@ -5,16 +5,28 @@ import lombok.Getter; ...@@ -5,16 +5,28 @@ import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
@Getter @Getter
@Setter @Setter
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class CreditCardData { public class CreditCardData {
@Pattern(regexp = "\\d{16}", message = "Credit card must be 16 digits")
String number; String number;
@Pattern(regexp = "\\d{2}", message = "Credit card must be 2 digits")
String expiryMonth; String expiryMonth;
@Pattern(regexp = "\\d{4}", message = "Credit card must be 4 digits")
String expiryYear; String expiryYear;
@Pattern(regexp = "\\d{3}", message = "cvc must be 3 digits")
String cvc; String cvc;
@NotBlank
String holderName; String holderName;
} }
...@@ -5,6 +5,7 @@ import lombok.Getter; ...@@ -5,6 +5,7 @@ import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
@Getter @Getter
...@@ -13,7 +14,10 @@ import javax.validation.constraints.NotBlank; ...@@ -13,7 +14,10 @@ import javax.validation.constraints.NotBlank;
@NoArgsConstructor @NoArgsConstructor
public class CreditCardRequest { public class CreditCardRequest {
@Valid
CreditCardData card; CreditCardData card;
@Valid
CreditCardAmount amount; CreditCardAmount amount;
@NotBlank(message="reference can't be blank") @NotBlank(message="reference can't be blank")
...@@ -21,7 +25,8 @@ public class CreditCardRequest { ...@@ -21,7 +25,8 @@ public class CreditCardRequest {
@NotBlank(message="merchantAccount can't be blank") @NotBlank(message="merchantAccount can't be blank")
String merchantAccount; String merchantAccount;
CreditCardAddress billingAddress; CreditCardAddress billingAddress;
// String returnUrl; // for Adyen payment, not classic integration, do we need?
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment