fix(stammbaum): structured error codes in RelationshipController

getRelationshipBetween now throws DomainException with RELATIONSHIP_NOT_FOUND
instead of ResponseStatusException, so the frontend receives a typed error code.
Removed redundant validateRelationType() guard — RelationshipService.parseType()
already handles this with the same DomainException/VALIDATION_ERROR path.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Marcel
2026-04-28 10:19:09 +02:00
committed by marcel
parent 7a3d919c2d
commit 22752ac1ae
2 changed files with 61 additions and 15 deletions

View File

@@ -9,12 +9,13 @@ import org.raddatz.familienarchiv.relationship.dto.InferredRelationshipDTO;
import org.raddatz.familienarchiv.relationship.dto.InferredRelationshipWithPersonDTO;
import org.raddatz.familienarchiv.relationship.dto.NetworkDTO;
import org.raddatz.familienarchiv.relationship.dto.RelationshipDTO;
import org.raddatz.familienarchiv.exception.DomainException;
import org.raddatz.familienarchiv.exception.ErrorCode;
import org.raddatz.familienarchiv.security.Permission;
import org.raddatz.familienarchiv.security.RequirePermission;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.server.ResponseStatusException;
import java.util.List;
import java.util.UUID;
@@ -51,8 +52,8 @@ public class RelationshipController {
@GetMapping("/api/persons/{aId}/relationship-to/{bId}")
public InferredRelationshipDTO getRelationshipBetween(@PathVariable UUID aId, @PathVariable UUID bId) {
return relationshipService.getRelationshipBetween(aId, bId)
.orElseThrow(() -> new ResponseStatusException(
HttpStatus.NOT_FOUND, "No relationship path between " + aId + " and " + bId));
.orElseThrow(() -> DomainException.notFound(
ErrorCode.RELATIONSHIP_NOT_FOUND, "No relationship path between " + aId + " and " + bId));
}
@PostMapping("/api/persons/{id}/relationships")
@@ -60,7 +61,6 @@ public class RelationshipController {
public ResponseEntity<RelationshipDTO> addRelationship(
@PathVariable UUID id,
@Valid @RequestBody CreateRelationshipRequest dto) {
validateRelationType(dto.relationType());
return ResponseEntity.status(HttpStatus.CREATED)
.body(relationshipService.addRelationship(id, dto));
}
@@ -78,15 +78,4 @@ public class RelationshipController {
return relationshipService.setFamilyMember(id, dto.familyMember());
}
private static void validateRelationType(String typeName) {
if (typeName == null || typeName.isBlank()) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "relationType is required");
}
try {
RelationType.valueOf(typeName);
} catch (IllegalArgumentException e) {
throw new ResponseStatusException(
HttpStatus.BAD_REQUEST, "Unknown relationType: " + typeName);
}
}
}