@@ -9,7 +9,10 @@ import com.sakethh.linkora.domain.dto.folder.*
99import com.sakethh.linkora.domain.model.Folder
1010import com.sakethh.linkora.domain.model.WebSocketEvent
1111import com.sakethh.linkora.domain.repository.FoldersRepository
12+ import com.sakethh.linkora.domain.repository.LinksRepository
13+ import com.sakethh.linkora.domain.repository.PanelsRepository
1214import com.sakethh.linkora.domain.tables.FoldersTable
15+ import com.sakethh.linkora.domain.tables.LinksTable
1316import com.sakethh.linkora.domain.tables.PanelFoldersTable
1417import com.sakethh.linkora.domain.tables.helper.TombStoneHelper
1518import com.sakethh.linkora.utils.checkForLWWConflictAndThrow
@@ -21,7 +24,7 @@ import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq
2124import org.jetbrains.exposed.sql.transactions.transaction
2225import java.time.Instant
2326
24- class FoldersImplementation : FoldersRepository {
27+ class FoldersImplementation ( private val panelsRepository : PanelsRepository ) : FoldersRepository {
2528
2629 override suspend fun createFolder (addFolderDTO : AddFolderDTO ): Result <NewItemResponseDTO > {
2730 return try {
@@ -65,30 +68,47 @@ class FoldersImplementation : FoldersRepository {
6568 }
6669
6770 override suspend fun deleteFolder (idBasedDTO : IDBasedDTO ): Result <TimeStampBasedResponse > {
68- val folderId = idBasedDTO.id
6971 return try {
7072 val eventTimestamp = Instant .now().epochSecond
71- transaction {
72- FoldersTable .deleteWhere {
73- FoldersTable .id.eq(folderId)
74- }
75- TombStoneHelper .insert(
76- payload = Json .encodeToString(idBasedDTO.copy(eventTimestamp = eventTimestamp)),
77- operation = Route .Folder .DELETE_FOLDER .name,
78- eventTimestamp
79- )
80- }
8173 when (val childFolders = getChildFolders(idBasedDTO)) {
8274 is Result .Failure -> {
8375 throw childFolders.exception
8476 }
8577
8678 is Result .Success -> {
8779 childFolders.response.map { it.id }.forEach { childFolderId ->
80+ panelsRepository.deleteAFolderFromAllPanels(
81+ IDBasedDTO (
82+ id = childFolderId,
83+ correlation = idBasedDTO.correlation,
84+ eventTimestamp = idBasedDTO.eventTimestamp
85+ )
86+ )
87+ transaction {
88+ FoldersTable .deleteWhere {
89+ FoldersTable .id.eq(childFolderId)
90+ }
91+ LinksTable .deleteWhere {
92+ idOfLinkedFolder.eq(childFolderId)
93+ }
94+ }
8895 deleteFolder(idBasedDTO.copy(id = childFolderId, eventTimestamp = eventTimestamp))
8996 }
9097 }
9198 }
99+ transaction {
100+ FoldersTable .deleteWhere {
101+ FoldersTable .id.eq(idBasedDTO.id)
102+ }
103+ LinksTable .deleteWhere {
104+ idOfLinkedFolder.eq(idBasedDTO.id)
105+ }
106+ TombStoneHelper .insert(
107+ payload = Json .encodeToString(idBasedDTO.copy(eventTimestamp = eventTimestamp)),
108+ operation = Route .Folder .DELETE_FOLDER .name,
109+ eventTimestamp
110+ )
111+ }
92112 Result .Success (
93113 response = TimeStampBasedResponse (
94114 message = " Folder and its contents have been successfully deleted." ,
0 commit comments