Skip to content

Commit a7754f9

Browse files
fix synchronization bugs
1 parent 9a724e9 commit a7754f9

File tree

5 files changed

+26
-31
lines changed

5 files changed

+26
-31
lines changed

.igrpstudio/shared/dto/PermissionDTO.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
"isEmail": false,
3030
"isUrl": false,
3131
"primaryKey": false,
32-
"regex": "^[A-Za-z0-9_-]+$"
32+
"regex": "^[A-Za-z0-9._-]+$"
3333
},
3434
{
3535
"name": "description",

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@
184184
<dependency>
185185
<groupId>cv.igrp.framework.auth</groupId>
186186
<artifactId>core</artifactId>
187-
<version>0.1.0-beta-20251008.122918-4</version>
187+
<version>0.1.0-beta-20251020.111014-6</version>
188188
</dependency>
189189
<dependency>
190190
<groupId>cv.igrp.framework.auth</groupId>

src/main/java/cv/igrp/platform/access_management/m2m/domain/service/PermissionSyncService.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,6 @@ public void synchronizePermissions(List<PermissionDTO> permissions) {
107107
newPerm.setStatus(dto.getStatus() != null ? dto.getStatus() : Status.ACTIVE);
108108
PermissionEntity savedPerm = permissionRepository.save(newPerm);
109109
resource.getPermissions().add(savedPerm);
110-
resourceEntityRepository.save(resource);
111110
LOGGER.info("[PermissionSync] Created new permission '{}'", dto.getName());
112111
} else {
113112
// Check for difference using structural hash
@@ -125,6 +124,8 @@ public void synchronizePermissions(List<PermissionDTO> permissions) {
125124
}
126125
}
127126

127+
resourceEntityRepository.save(resource);
128+
128129
// Delete permissions not present in the incoming list
129130
List<PermissionEntity> toDelete = existingPermissions.stream()
130131
.filter(p -> !incomingNames.contains(p.getName().toLowerCase(Locale.ROOT)))

src/main/java/cv/igrp/platform/access_management/m2m/domain/service/ResourceSyncService.java

Lines changed: 21 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -62,35 +62,29 @@ public void synchronizeResource(ResourceDTO resourceDTO) {
6262

6363
private void updateResource(ResourceEntity existing, ResourceDTO dto) {
6464
existing.setDescription(dto.getDescription());
65-
existing.setStatus(dto.getStatus());
6665

67-
// Update items
68-
Set<String> incomingNames = dto.getItems().stream().map(ResourceItemDTO::getName).collect(Collectors.toSet());
69-
existing.getItems().removeIf(item -> !incomingNames.contains(item.getName()));
70-
71-
for (ResourceItemDTO itemDto : dto.getItems()) {
72-
existing.getItems().stream()
73-
.filter(it -> it.getName().equals(itemDto.getName()))
74-
.findFirst()
75-
.ifPresentOrElse(
76-
it -> {
77-
var permissions = permissionRepository.findAllByNameIn(itemDto.getPermissions());
78-
var permissionsToAdd = permissions.stream().filter(permission -> !it.getPermissions().contains(permission)).toList();
79-
it.getPermissions().addAll(permissionsToAdd);
80-
it.getPermissions().removeIf(permission -> !incomingNames.contains(permission.getName()));
81-
},
82-
() -> existing.getItems().add(resourceMapper.toItemEntity(itemDto, existing))
83-
);
84-
}
85-
86-
// Update permissions
87-
Set<String> incomingPerms = new HashSet<>(dto.getPermissions());
88-
existing.getPermissions().removeIf(p -> !incomingPerms.contains(p.getName()));
66+
if(dto.getStatus() != null)
67+
existing.setStatus(dto.getStatus());
8968

90-
for (String perm : dto.getPermissions()) {
91-
PermissionEntity permission = permissionRepository.findByNameAndStatusNot(perm, Status.DELETED)
92-
.orElseGet(() -> permissionRepository.save(new PermissionEntity(null, perm, perm, Status.ACTIVE, null, null, null)));
93-
existing.getPermissions().add(permission);
69+
// Update items
70+
if (dto.getItems() != null) {
71+
Set<String> incomingNames = dto.getItems().stream().map(ResourceItemDTO::getName).collect(Collectors.toSet());
72+
existing.getItems().removeIf(item -> !incomingNames.contains(item.getName()));
73+
74+
for (ResourceItemDTO itemDto : dto.getItems()) {
75+
existing.getItems().stream()
76+
.filter(it -> it.getName().equals(itemDto.getName()))
77+
.findFirst()
78+
.ifPresentOrElse(
79+
it -> {
80+
var permissions = permissionRepository.findAllByNameIn(itemDto.getPermissions());
81+
var permissionsToAdd = permissions.stream().filter(permission -> !it.getPermissions().contains(permission)).toList();
82+
it.getPermissions().addAll(permissionsToAdd);
83+
it.getPermissions().removeIf(permission -> !incomingNames.contains(permission.getName()));
84+
},
85+
() -> existing.getItems().add(resourceMapper.toItemEntity(itemDto, existing))
86+
);
87+
}
9488
}
9589

9690
resourceRepository.save(existing);

src/main/java/cv/igrp/platform/access_management/shared/application/dto/PermissionDTO.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public class PermissionDTO {
2424
private Integer id ;
2525
@NotBlank(message = "The field <name> is required")
2626
@Size(max = 60, message = "The field length <name> cannot be more than 60 characters")
27-
@Pattern(message = "Invalid value format for field <name>.", regexp = "^[A-Za-z0-9_-]+$")
27+
@Pattern(message = "Invalid value format for field <name>.", regexp = "^[A-Za-z0-9._-]+$")
2828

2929
private String name ;
3030
@Size(max = 255, message = "The field length <description> cannot be more than 255 characters")

0 commit comments

Comments
 (0)