Skip to content

Commit d49bd5b

Browse files
committed
fix folder deletion to remove linked items
1 parent 396f509 commit d49bd5b

1 file changed

Lines changed: 32 additions & 12 deletions

File tree

src/main/kotlin/com/sakethh/linkora/data/repository/FoldersImplementation.kt

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ import com.sakethh.linkora.domain.dto.folder.*
99
import com.sakethh.linkora.domain.model.Folder
1010
import com.sakethh.linkora.domain.model.WebSocketEvent
1111
import com.sakethh.linkora.domain.repository.FoldersRepository
12+
import com.sakethh.linkora.domain.repository.LinksRepository
13+
import com.sakethh.linkora.domain.repository.PanelsRepository
1214
import com.sakethh.linkora.domain.tables.FoldersTable
15+
import com.sakethh.linkora.domain.tables.LinksTable
1316
import com.sakethh.linkora.domain.tables.PanelFoldersTable
1417
import com.sakethh.linkora.domain.tables.helper.TombStoneHelper
1518
import com.sakethh.linkora.utils.checkForLWWConflictAndThrow
@@ -21,7 +24,7 @@ import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq
2124
import org.jetbrains.exposed.sql.transactions.transaction
2225
import 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

Comments
 (0)