Skip to content

Commit a85b3b3

Browse files
committed
fix: coderabbit issue
1 parent daa5537 commit a85b3b3

2 files changed

Lines changed: 63 additions & 3 deletions

File tree

src/main/java/com/itasocialacademy/oitassist/filemanager/service/FileServiceImpl.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -438,7 +438,6 @@ private void detachFilesHelper(RelatedEntityType entityType, Long entityId, Long
438438
for (FileAsset file : files) {
439439
validateEntityBoundary(file, entityType, entityId);
440440
checkOwnerOrAdmin(file.getUserId(), userId, isAdmin);
441-
file.setStatus(FileStatus.SOFT_DELETED);
442441
markAsSoftDeleted(file);
443442
}
444443
repository.saveAll(files);
@@ -468,8 +467,10 @@ private void validateEntityBoundary(FileAsset file, RelatedEntityType entityType
468467
* @param file the file asset to mark as soft deleted
469468
*/
470469
private void markAsSoftDeleted(FileAsset file) {
471-
file.setStatus(FileStatus.SOFT_DELETED);
472-
file.setDeletedAt(OffsetDateTime.now());
470+
if (file.getStatus().equals(FileStatus.ATTACHED)) {
471+
file.setStatus(FileStatus.SOFT_DELETED);
472+
file.setDeletedAt(OffsetDateTime.now());
473+
}
473474
}
474475

475476
/**

src/test/java/com/itasocialacademy/oitassist/filemanager/service/FileServiceImplTest.java

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import org.springframework.mock.web.MockMultipartFile;
3535
import org.springframework.web.multipart.MultipartFile;
3636
import java.io.IOException;
37+
import java.time.OffsetDateTime;
3738
import java.util.List;
3839
import java.util.Optional;
3940
import java.util.Set;
@@ -1378,6 +1379,64 @@ void detachAllFilesByEntityId_ShouldThrowAuthorizationException_WhenUserIsNotOwn
13781379
verify(fileRepository, never()).saveAll(any());
13791380
}
13801381

1382+
// --- detachFilesForMultiOwnerEntity Tests ---
1383+
1384+
@Test
1385+
void detachFilesForMultiOwnerEntity_ShouldSoftDelete_WhenFileIsAttached() {
1386+
FileAsset file = new FileAsset();
1387+
file.setId(1L);
1388+
file.setStatus(FileStatus.ATTACHED);
1389+
file.setRelatedEntityType(RelatedEntityType.TASK);
1390+
file.setRelatedEntityId(42L);
1391+
file.setDeletedAt(null);
1392+
1393+
when(fileRepository.findAllById(List.of(1L))).thenReturn(List.of(file));
1394+
1395+
fileService.detachFilesForMultiOwnerEntity(RelatedEntityType.TASK, 42L, List.of(1L));
1396+
1397+
assertEquals(FileStatus.SOFT_DELETED, file.getStatus());
1398+
assertNotNull(file.getDeletedAt());
1399+
verify(fileRepository).saveAll(List.of(file));
1400+
}
1401+
1402+
@Test
1403+
void detachFilesForMultiOwnerEntity_ShouldIgnore_WhenFileIsAlreadySoftDeleted() {
1404+
OffsetDateTime originalDeletedAt = OffsetDateTime.now().minusDays(1);
1405+
FileAsset file = new FileAsset();
1406+
file.setId(1L);
1407+
file.setStatus(FileStatus.SOFT_DELETED);
1408+
file.setRelatedEntityType(RelatedEntityType.TASK);
1409+
file.setRelatedEntityId(42L);
1410+
file.setDeletedAt(originalDeletedAt);
1411+
1412+
when(fileRepository.findAllById(List.of(1L))).thenReturn(List.of(file));
1413+
1414+
fileService.detachFilesForMultiOwnerEntity(RelatedEntityType.TASK, 42L, List.of(1L));
1415+
1416+
assertEquals(FileStatus.SOFT_DELETED, file.getStatus());
1417+
assertEquals(originalDeletedAt, file.getDeletedAt()); // Should not be overwritten
1418+
verify(fileRepository).saveAll(List.of(file)); // Note: saveAll is still called, but entity is unchanged
1419+
}
1420+
1421+
@Test
1422+
void detachFilesForMultiOwnerEntity_ShouldIgnore_WhenFileIsHardDeleted() {
1423+
OffsetDateTime originalDeletedAt = OffsetDateTime.now().minusDays(1);
1424+
FileAsset file = new FileAsset();
1425+
file.setId(1L);
1426+
file.setStatus(FileStatus.HARD_DELETED);
1427+
file.setRelatedEntityType(RelatedEntityType.TASK);
1428+
file.setRelatedEntityId(42L);
1429+
file.setDeletedAt(originalDeletedAt);
1430+
1431+
when(fileRepository.findAllById(List.of(1L))).thenReturn(List.of(file));
1432+
1433+
fileService.detachFilesForMultiOwnerEntity(RelatedEntityType.TASK, 42L, List.of(1L));
1434+
1435+
assertEquals(FileStatus.HARD_DELETED, file.getStatus());
1436+
assertEquals(originalDeletedAt, file.getDeletedAt());
1437+
verify(fileRepository).saveAll(List.of(file));
1438+
}
1439+
13811440
// --- Update Role Tests ---
13821441

13831442
@Test

0 commit comments

Comments
 (0)