View Javadoc
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  /** Reports active-code and concurrent-write conflicts without hiding other database errors. */
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  }