@@ -15,6 +15,7 @@ import com.sakethh.linkora.domain.tables.LinksTable
1515import com.sakethh.linkora.domain.tables.PanelFoldersTable
1616import com.sakethh.linkora.domain.tables.helper.TombStoneHelper
1717import com.sakethh.linkora.utils.checkForLWWConflictAndThrow
18+ import com.sakethh.linkora.utils.getSystemEpochSeconds
1819import kotlinx.serialization.encodeToString
1920import kotlinx.serialization.json.Json
2021import kotlinx.serialization.json.encodeToJsonElement
@@ -31,7 +32,7 @@ class FoldersRepoImpl(private val panelsRepo: PanelsRepo) : FoldersRepo {
3132
3233 override suspend fun createFolder (addFolderDTO : AddFolderDTO ): Result <NewItemResponseDTO > {
3334 return try {
34- val eventTimestamp = Instant .now().epochSecond
35+ val eventTimestamp = getSystemEpochSeconds()
3536 transaction {
3637 FoldersTable .insertAndGetId { folder ->
3738 folder[lastModified] = eventTimestamp
@@ -44,14 +45,11 @@ class FoldersRepoImpl(private val panelsRepo: PanelsRepo) : FoldersRepo {
4445 Result .Success (
4546 response = NewItemResponseDTO (
4647 timeStampBasedResponse = TimeStampBasedResponse (
47- message = " Folder created successfully with id = $it " ,
48- eventTimestamp = eventTimestamp
49- ),
50- id = it,
51- correlation = addFolderDTO.correlation
52- ),
53- webSocketEvent = WebSocketEvent (
54- operation = Route .Folder .CREATE_FOLDER .name, payload = Json .encodeToJsonElement(
48+ message = " Folder created successfully with id = $it " , eventTimestamp = eventTimestamp
49+ ), id = it, correlation = addFolderDTO.correlation
50+ ), webSocketEvent = WebSocketEvent (
51+ operation = Route .Folder .CREATE_FOLDER .name,
52+ payload = Json .encodeToJsonElement(
5553 FolderDTO (
5654 id = it,
5755 name = addFolderDTO.name,
@@ -70,9 +68,40 @@ class FoldersRepoImpl(private val panelsRepo: PanelsRepo) : FoldersRepo {
7068 }
7169 }
7270
71+ override suspend fun updateFolder (folderDTO : FolderDTO ): Result <TimeStampBasedResponse > {
72+ return try {
73+ FoldersTable .checkForLWWConflictAndThrow(
74+ id = folderDTO.id, timeStamp = folderDTO.eventTimestamp, lastModifiedColumn = FoldersTable .lastModified
75+ )
76+ val eventTimestamp = getSystemEpochSeconds()
77+ transaction {
78+ FoldersTable .update(where = {
79+ FoldersTable .id eq folderDTO.id
80+ }) { folder ->
81+ folder[lastModified] = eventTimestamp
82+ folder[folderName] = folderDTO.name
83+ folder[note] = folderDTO.note
84+ folder[parentFolderID] = folderDTO.parentFolderId
85+ folder[isFolderArchived] = folderDTO.isArchived
86+ }
87+ }.let {
88+ Result .Success (
89+ response = TimeStampBasedResponse (
90+ message = " Folder updated successfully." , eventTimestamp = eventTimestamp
91+ ), webSocketEvent = WebSocketEvent (
92+ operation = Route .Folder .UPDATE_FOLDER .name,
93+ payload = Json .encodeToJsonElement(folderDTO.copy(eventTimestamp = eventTimestamp)),
94+ )
95+ )
96+ }
97+ } catch (e: Exception ) {
98+ Result .Failure (e)
99+ }
100+ }
101+
73102 override suspend fun deleteFolder (idBasedDTO : IDBasedDTO ): Result <TimeStampBasedResponse > {
74103 return try {
75- val eventTimestamp = Instant .now().epochSecond
104+ val eventTimestamp = getSystemEpochSeconds()
76105 when (val childFolders = getChildFolders(idBasedDTO)) {
77106 is Result .Failure -> {
78107 throw childFolders.exception
@@ -114,8 +143,7 @@ class FoldersRepoImpl(private val panelsRepo: PanelsRepo) : FoldersRepo {
114143 }
115144 Result .Success (
116145 response = TimeStampBasedResponse (
117- message = " Folder and its contents have been successfully deleted." ,
118- eventTimestamp = eventTimestamp
146+ message = " Folder and its contents have been successfully deleted." , eventTimestamp = eventTimestamp
119147 ), webSocketEvent = WebSocketEvent (
120148 operation = Route .Folder .DELETE_FOLDER .name,
121149 payload = Json .encodeToJsonElement(idBasedDTO.copy(eventTimestamp = eventTimestamp)),
@@ -180,7 +208,7 @@ class FoldersRepoImpl(private val panelsRepo: PanelsRepo) : FoldersRepo {
180208 timeStamp = idBasedDTO.eventTimestamp,
181209 lastModifiedColumn = FoldersTable .lastModified
182210 )
183- val eventTimestamp = Instant .now().epochSecond
211+ val eventTimestamp = getSystemEpochSeconds()
184212 transaction {
185213 FoldersTable .update(where = { FoldersTable .id.eq(folderId) }) {
186214 it[lastModified] = eventTimestamp
@@ -189,8 +217,7 @@ class FoldersRepoImpl(private val panelsRepo: PanelsRepo) : FoldersRepo {
189217 }.let {
190218 Result .Success (
191219 response = TimeStampBasedResponse (
192- eventTimestamp = eventTimestamp,
193- message = " Number of rows affected by the update = $it "
220+ eventTimestamp = eventTimestamp, message = " Number of rows affected by the update = $it "
194221 ), webSocketEvent = WebSocketEvent (
195222 operation = Route .Folder .MARK_FOLDER_AS_ARCHIVE .name,
196223 payload = Json .encodeToJsonElement(idBasedDTO.copy(eventTimestamp = eventTimestamp)),
@@ -210,7 +237,7 @@ class FoldersRepoImpl(private val panelsRepo: PanelsRepo) : FoldersRepo {
210237 timeStamp = idBasedDTO.eventTimestamp,
211238 lastModifiedColumn = FoldersTable .lastModified
212239 )
213- val eventTimestamp = Instant .now().epochSecond
240+ val eventTimestamp = getSystemEpochSeconds()
214241 transaction {
215242 FoldersTable .update(where = { FoldersTable .id.eq(folderId) }) {
216243 it[lastModified] = eventTimestamp
@@ -219,8 +246,7 @@ class FoldersRepoImpl(private val panelsRepo: PanelsRepo) : FoldersRepo {
219246 }.let {
220247 Result .Success (
221248 response = TimeStampBasedResponse (
222- eventTimestamp = eventTimestamp,
223- message = " Number of rows affected by the update = $it "
249+ eventTimestamp = eventTimestamp, message = " Number of rows affected by the update = $it "
224250 ), webSocketEvent = WebSocketEvent (
225251 operation = Route .Folder .MARK_AS_REGULAR_FOLDER .name,
226252 payload = Json .encodeToJsonElement(idBasedDTO.copy(eventTimestamp = eventTimestamp)),
@@ -241,7 +267,7 @@ class FoldersRepoImpl(private val panelsRepo: PanelsRepo) : FoldersRepo {
241267 timeStamp = updateFolderNameDTO.eventTimestamp,
242268 lastModifiedColumn = FoldersTable .lastModified
243269 )
244- val eventTimestamp = Instant .now().epochSecond
270+ val eventTimestamp = getSystemEpochSeconds()
245271 transaction {
246272 FoldersTable .update(where = { FoldersTable .id.eq(folderId) }) {
247273 it[lastModified] = eventTimestamp
@@ -256,8 +282,7 @@ class FoldersRepoImpl(private val panelsRepo: PanelsRepo) : FoldersRepo {
256282 }.let {
257283 Result .Success (
258284 response = TimeStampBasedResponse (
259- eventTimestamp = eventTimestamp,
260- message = " Number of rows affected by the update = $it "
285+ eventTimestamp = eventTimestamp, message = " Number of rows affected by the update = $it "
261286 ), webSocketEvent = WebSocketEvent (
262287 operation = Route .Folder .UPDATE_FOLDER_NAME .name,
263288 payload = Json .encodeToJsonElement(updateFolderNameDTO.copy(eventTimestamp = eventTimestamp)),
@@ -278,7 +303,7 @@ class FoldersRepoImpl(private val panelsRepo: PanelsRepo) : FoldersRepo {
278303 timeStamp = updateFolderNoteDTO.eventTimestamp,
279304 lastModifiedColumn = FoldersTable .lastModified
280305 )
281- val eventTimestamp = Instant .now().epochSecond
306+ val eventTimestamp = getSystemEpochSeconds()
282307 transaction {
283308 FoldersTable .update(where = { FoldersTable .id.eq(folderId) }) {
284309 it[lastModified] = eventTimestamp
@@ -287,8 +312,7 @@ class FoldersRepoImpl(private val panelsRepo: PanelsRepo) : FoldersRepo {
287312 }.let {
288313 Result .Success (
289314 response = TimeStampBasedResponse (
290- message = " Number of rows affected by the update = $it " ,
291- eventTimestamp = eventTimestamp
315+ message = " Number of rows affected by the update = $it " , eventTimestamp = eventTimestamp
292316 ), webSocketEvent = WebSocketEvent (
293317 operation = Route .Folder .UPDATE_FOLDER_NOTE .name,
294318 payload = Json .encodeToJsonElement(updateFolderNoteDTO.copy(eventTimestamp = eventTimestamp)),
@@ -302,7 +326,7 @@ class FoldersRepoImpl(private val panelsRepo: PanelsRepo) : FoldersRepo {
302326
303327 override suspend fun deleteFolderNote (idBasedDTO : IDBasedDTO ): Result <TimeStampBasedResponse > {
304328 return try {
305- val eventTimestamp = Instant .now().epochSecond
329+ val eventTimestamp = getSystemEpochSeconds()
306330 transaction {
307331 FoldersTable .update(where = { FoldersTable .id.eq(idBasedDTO.id) }) {
308332 it[note] = " "
@@ -311,8 +335,7 @@ class FoldersRepoImpl(private val panelsRepo: PanelsRepo) : FoldersRepo {
311335 }.let {
312336 Result .Success (
313337 response = TimeStampBasedResponse (
314- eventTimestamp = eventTimestamp,
315- message = " Number of rows affected by the update = $it "
338+ eventTimestamp = eventTimestamp, message = " Number of rows affected by the update = $it "
316339 ), webSocketEvent = WebSocketEvent (
317340 operation = Route .Folder .DELETE_FOLDER_NOTE .name,
318341 payload = Json .encodeToJsonElement(idBasedDTO.copy(eventTimestamp = eventTimestamp)),
@@ -331,7 +354,7 @@ class FoldersRepoImpl(private val panelsRepo: PanelsRepo) : FoldersRepo {
331354 timeStamp = markSelectedFoldersAsRootDTO.eventTimestamp,
332355 lastModifiedColumn = FoldersTable .lastModified
333356 )
334- val eventTimeStamp = Instant .now().epochSecond
357+ val eventTimeStamp = getSystemEpochSeconds()
335358 transaction {
336359 FoldersTable .update(where = {
337360 FoldersTable .id.inList(markSelectedFoldersAsRootDTO.folderIds)
@@ -342,8 +365,7 @@ class FoldersRepoImpl(private val panelsRepo: PanelsRepo) : FoldersRepo {
342365 }.let {
343366 Result .Success (
344367 response = TimeStampBasedResponse (
345- eventTimestamp = eventTimeStamp,
346- message = " Marked $it folders as root."
368+ eventTimestamp = eventTimeStamp, message = " Marked $it folders as root."
347369 ), webSocketEvent = WebSocketEvent (
348370 operation = Route .Folder .MARK_FOLDERS_AS_ROOT .name,
349371 payload = Json .encodeToJsonElement(markSelectedFoldersAsRootDTO.copy(eventTimestamp = eventTimeStamp))
0 commit comments