Skip to content

Commit 70f7426

Browse files
committed
refactor: change DELETE_EVERYTHING to a POST request and push the event via socket
1 parent f648d6a commit 70f7426

4 files changed

Lines changed: 31 additions & 19 deletions

File tree

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

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,23 @@ package com.sakethh.linkora.data.repository
33
import com.sakethh.linkora.data.linkoraTables
44
import com.sakethh.linkora.domain.LinkType
55
import com.sakethh.linkora.domain.MediaType
6+
import com.sakethh.linkora.domain.Result
7+
import com.sakethh.linkora.domain.Route
68
import com.sakethh.linkora.domain.dto.AllTablesDTO
9+
import com.sakethh.linkora.domain.dto.DeleteEverythingDTO
710
import com.sakethh.linkora.domain.dto.Tombstone
8-
import com.sakethh.linkora.domain.model.Folder
9-
import com.sakethh.linkora.domain.model.Link
10-
import com.sakethh.linkora.domain.model.Panel
11-
import com.sakethh.linkora.domain.model.PanelFolder
11+
import com.sakethh.linkora.domain.model.*
1212
import com.sakethh.linkora.domain.repository.SyncRepo
1313
import com.sakethh.linkora.domain.tables.*
1414
import kotlinx.coroutines.async
1515
import kotlinx.coroutines.awaitAll
1616
import kotlinx.coroutines.coroutineScope
1717
import kotlinx.serialization.json.Json
18+
import kotlinx.serialization.json.encodeToJsonElement
1819
import org.jetbrains.exposed.sql.deleteAll
1920
import org.jetbrains.exposed.sql.selectAll
2021
import org.jetbrains.exposed.sql.transactions.transaction
22+
import java.time.Instant
2123

2224
class SyncRepoImpl : SyncRepo {
2325
override suspend fun getTombstonesAfter(eventTimestamp: Long): List<Tombstone> {
@@ -121,17 +123,23 @@ class SyncRepoImpl : SyncRepo {
121123
)
122124
}
123125

124-
override suspend fun deleteEverything(): Result<Unit> {
126+
override suspend fun deleteEverything(deleteEverythingDTO: DeleteEverythingDTO): Result<Unit> {
125127
return try {
128+
val eventTimestamp = Instant.now().epochSecond
126129
transaction {
127130
linkoraTables().forEach {
128131
it.deleteAll()
129132
}
130133
}
131-
Result.success(Unit)
134+
Result.Success(
135+
response = Unit, webSocketEvent = WebSocketEvent(
136+
operation = Route.Sync.DELETE_EVERYTHING.name,
137+
payload = Json.encodeToJsonElement(deleteEverythingDTO.copy(eventTimestamp = eventTimestamp))
138+
)
139+
)
132140
} catch (e: Exception) {
133141
e.printStackTrace()
134-
Result.failure(e)
142+
Result.Failure(e)
135143
}
136144
}
137145
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.sakethh.linkora.domain.dto
2+
3+
import kotlinx.serialization.Serializable
4+
5+
@Serializable
6+
data class DeleteEverythingDTO(
7+
val eventTimestamp: Long, val correlation: Correlation
8+
)
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package com.sakethh.linkora.domain.repository
22

3+
import com.sakethh.linkora.domain.Result
34
import com.sakethh.linkora.domain.dto.AllTablesDTO
5+
import com.sakethh.linkora.domain.dto.DeleteEverythingDTO
46
import com.sakethh.linkora.domain.dto.Tombstone
57

68
interface SyncRepo {
79
suspend fun getTombstonesAfter(eventTimestamp: Long): List<Tombstone>
810
suspend fun getUpdatesAfter(eventTimestamp: Long): AllTablesDTO
9-
suspend fun deleteEverything(): Result<Unit>
11+
suspend fun deleteEverything(deleteEverythingDTO: DeleteEverythingDTO): Result<Unit>
1012
}

src/main/kotlin/com/sakethh/linkora/presentation/routing/http/SyncRouting.kt

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package com.sakethh.linkora.presentation.routing.http
22

33
import com.sakethh.linkora.Security
4-
import com.sakethh.linkora.domain.repository.SyncRepo
54
import com.sakethh.linkora.domain.Route
5+
import com.sakethh.linkora.domain.dto.DeleteEverythingDTO
6+
import com.sakethh.linkora.domain.repository.SyncRepo
7+
import com.sakethh.linkora.utils.respondWithResult
68
import io.ktor.http.*
79
import io.ktor.server.application.*
810
import io.ktor.server.auth.*
@@ -32,16 +34,8 @@ fun Application.syncRouting(syncRepo: SyncRepo) {
3234
}
3335
}
3436

35-
get(Route.Sync.DELETE_EVERYTHING.name) {
36-
syncRepo.deleteEverything().onSuccess {
37-
call.respond(status = HttpStatusCode.OK, message = HttpStatusCode.OK.description)
38-
}.onFailure {
39-
call.respond(
40-
status = HttpStatusCode.InternalServerError,
41-
message = HttpStatusCode.InternalServerError.description
42-
)
43-
it.printStackTrace()
44-
}
37+
post<DeleteEverythingDTO>(Route.Sync.DELETE_EVERYTHING.name) {
38+
respondWithResult(syncRepo.deleteEverything(it))
4539
}
4640
}
4741
}

0 commit comments

Comments
 (0)