DomainTemplateConflictHandler.java
package fr.tiogars.inception.domains.domaintemplate.controllers;
import org.hibernate.exception.ConstraintViolationException;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.dao.OptimisticLockingFailureException;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
/** Reports active-code and concurrent-write conflicts without hiding other database errors. */
@RestControllerAdvice(basePackageClasses = DomainTemplateCreateController.class)
public class DomainTemplateConflictHandler {
@ExceptionHandler(OptimisticLockingFailureException.class)
public ResponseEntity<Void> concurrentWrite(OptimisticLockingFailureException exception) {
return ResponseEntity.status(HttpStatus.CONFLICT).build();
}
@ExceptionHandler(DataIntegrityViolationException.class)
public ResponseEntity<Void> duplicateActiveCode(DataIntegrityViolationException exception) {
for (Throwable cause = exception; cause != null; cause = cause.getCause()) {
if (cause instanceof ConstraintViolationException constraint
&& "uk_domain_templates_active_code".equals(constraint.getConstraintName())) {
return ResponseEntity.status(HttpStatus.CONFLICT).build();
}
}
throw exception;
}
}