diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerController.java b/src/main/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerController.java index d2403078..8f70e1d1 100644 --- a/src/main/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerController.java +++ b/src/main/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerController.java @@ -42,10 +42,10 @@ public class HsOfficePartnerController implements HsOfficePartnersApi { private StrictMapper mapper; @Autowired - private HsOfficePartnerRbacRepository partnerRepo; + private HsOfficePartnerRbacRepository rbacPartnerRepo; @Autowired - private HsOfficeRelationRealRepository relationRepo; + private HsOfficeRelationRealRepository realRelationRepo; @PersistenceContext private EntityManager em; @@ -59,7 +59,7 @@ public class HsOfficePartnerController implements HsOfficePartnersApi { final String name) { context.define(currentSubject, assumedRoles); - final var entities = partnerRepo.findPartnerByOptionalNameLike(name); + final var entities = rbacPartnerRepo.findPartnerByOptionalNameLike(name); final var resources = mapper.mapList(entities, HsOfficePartnerResource.class, ENTITY_TO_RESOURCE_POSTMAPPER); return ResponseEntity.ok(resources); @@ -77,7 +77,7 @@ public class HsOfficePartnerController implements HsOfficePartnersApi { final var entityToSave = createPartnerEntity(body); - final var saved = partnerRepo.save(entityToSave); + final var saved = rbacPartnerRepo.save(entityToSave); final var uri = MvcUriComponentsBuilder.fromController(getClass()) @@ -98,7 +98,7 @@ public class HsOfficePartnerController implements HsOfficePartnersApi { context.define(currentSubject, assumedRoles); - final var result = partnerRepo.findByUuid(partnerUuid); + final var result = rbacPartnerRepo.findByUuid(partnerUuid); if (result.isEmpty()) { return ResponseEntity.notFound().build(); } @@ -116,7 +116,7 @@ public class HsOfficePartnerController implements HsOfficePartnersApi { context.define(currentSubject, assumedRoles); - final var result = partnerRepo.findPartnerByPartnerNumber(partnerNumber); + final var result = rbacPartnerRepo.findPartnerByPartnerNumber(partnerNumber); if (result.isEmpty()) { return ResponseEntity.notFound().build(); } @@ -133,12 +133,12 @@ public class HsOfficePartnerController implements HsOfficePartnersApi { final UUID partnerUuid) { context.define(currentSubject, assumedRoles); - final var partnerToDelete = partnerRepo.findByUuid(partnerUuid); + final var partnerToDelete = rbacPartnerRepo.findByUuid(partnerUuid); if (partnerToDelete.isEmpty()) { return ResponseEntity.notFound().build(); } - if (partnerRepo.deleteByUuid(partnerUuid) != 1) { + if (rbacPartnerRepo.deleteByUuid(partnerUuid) != 1) { return ResponseEntity.status(HttpStatus.FORBIDDEN).build(); } @@ -156,12 +156,12 @@ public class HsOfficePartnerController implements HsOfficePartnersApi { context.define(currentSubject, assumedRoles); - final var current = partnerRepo.findByUuid(partnerUuid).orElseThrow(); + final var current = rbacPartnerRepo.findByUuid(partnerUuid).orElseThrow(); final var previousPartnerRel = current.getPartnerRel(); new HsOfficePartnerEntityPatcher(em, current).apply(body); - final var saved = partnerRepo.save(current); + final var saved = rbacPartnerRepo.save(current); optionallyCreateExPartnerRelation(saved, previousPartnerRel); optionallyUpdateRelatedRelations(saved, previousPartnerRel); @@ -170,19 +170,27 @@ public class HsOfficePartnerController implements HsOfficePartnersApi { } private void optionallyCreateExPartnerRelation(final HsOfficePartnerRbacEntity saved, final HsOfficeRelationRealEntity previousPartnerRel) { - if (!saved.getPartnerRel().getUuid().equals(previousPartnerRel.getUuid())) { - relationRepo.save(previousPartnerRel.toBuilder().uuid(null) + + final var partnerRelHasChanged = !saved.getPartnerRel().getUuid().equals(previousPartnerRel.getUuid()); + if (partnerRelHasChanged) { + realRelationRepo.save(previousPartnerRel.toBuilder().uuid(null) .type(EX_PARTNER).anchor(saved.getPartnerRel().getHolder()) .build()); } } private void optionallyUpdateRelatedRelations(final HsOfficePartnerRbacEntity saved, final HsOfficeRelationRealEntity previousPartnerRel) { -// if (!saved.getPartnerRel().getUuid().equals(previousPartnerRel.getUuid())) { -// relationRepo.save(previousPartnerRel.toBuilder().uuid(null) -// .type(EX_PARTNER).anchor(saved.getPartnerRel().getHolder()) -// .build()); -// } + final var oldPartnerPerson = previousPartnerRel.getHolder(); + final var newPartnerPerson = saved.getPartnerRel().getHolder(); + final var partnerPersonHasChanged = !newPartnerPerson.getUuid().equals(oldPartnerPerson.getUuid()); + if (partnerPersonHasChanged) { +// realRelationRepo.findRelationRelatedToPersonUuid(oldPartnerPerson.getUuid()).forEach( rel -> { +// if (rel.getType() == REPRESENTATIVE && rel.getAnchor().getUuid().equals(oldPartnerPerson.getUuid()) ) { +// +// } +// +// } + } } private HsOfficePartnerRbacEntity createPartnerEntity(final HsOfficePartnerInsertResource body) { diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationRepositoryIntegrationTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationRepositoryIntegrationTest.java index 4a9a1cee..5e8c750b 100644 --- a/src/test/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationRepositoryIntegrationTest.java +++ b/src/test/java/net/hostsharing/hsadminng/hs/office/relation/HsOfficeRelationRepositoryIntegrationTest.java @@ -28,7 +28,6 @@ import static net.hostsharing.hsadminng.hs.office.person.HsOfficePersonType.NATU import static net.hostsharing.hsadminng.hs.office.person.HsOfficePersonType.UNINCORPORATED_FIRM; import static net.hostsharing.hsadminng.rbac.grant.RawRbacGrantEntity.distinctGrantDisplaysOf; import static net.hostsharing.hsadminng.rbac.role.RawRbacRoleEntity.distinctRoleNamesOf; -import static net.hostsharing.hsadminng.rbac.role.RbacRoleType.ADMIN; import static net.hostsharing.hsadminng.rbac.test.JpaAttempt.attempt; import static org.assertj.core.api.Assertions.assertThat;