1 package fr.tiogars.inception.domains.domaintemplate.controllers;
2
3 import org.hibernate.exception.ConstraintViolationException;
4 import org.springframework.dao.DataIntegrityViolationException;
5 import org.springframework.dao.OptimisticLockingFailureException;
6 import org.springframework.http.HttpStatus;
7 import org.springframework.http.ResponseEntity;
8 import org.springframework.web.bind.annotation.ExceptionHandler;
9 import org.springframework.web.bind.annotation.RestControllerAdvice;
10
11
12 @RestControllerAdvice(basePackageClasses = DomainTemplateCreateController.class)
13 public class DomainTemplateConflictHandler {
14
15 @ExceptionHandler(OptimisticLockingFailureException.class)
16 public ResponseEntity<Void> concurrentWrite(OptimisticLockingFailureException exception) {
17 return ResponseEntity.status(HttpStatus.CONFLICT).build();
18 }
19
20 @ExceptionHandler(DataIntegrityViolationException.class)
21 public ResponseEntity<Void> duplicateActiveCode(DataIntegrityViolationException exception) {
22 for (Throwable cause = exception; cause != null; cause = cause.getCause()) {
23 if (cause instanceof ConstraintViolationException constraint
24 && "uk_domain_templates_active_code".equals(constraint.getConstraintName())) {
25 return ResponseEntity.status(HttpStatus.CONFLICT).build();
26 }
27 }
28 throw exception;
29 }
30 }