Skip to content

Commit 9c5b77e

Browse files
committed
feat: add support for folder search
1 parent bfe28c5 commit 9c5b77e

4 files changed

Lines changed: 33 additions & 5 deletions

File tree

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

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@ import kotlinx.serialization.json.Json
2121
import kotlinx.serialization.json.encodeToJsonElement
2222
import org.jetbrains.exposed.v1.core.SqlExpressionBuilder.eq
2323
import org.jetbrains.exposed.v1.core.and
24+
import org.jetbrains.exposed.v1.core.lowerCase
2425
import org.jetbrains.exposed.v1.jdbc.deleteWhere
2526
import org.jetbrains.exposed.v1.jdbc.insertAndGetId
2627
import org.jetbrains.exposed.v1.jdbc.selectAll
2728
import org.jetbrains.exposed.v1.jdbc.transactions.transaction
2829
import org.jetbrains.exposed.v1.jdbc.update
29-
import java.time.Instant
3030

3131
class FoldersRepoImpl(private val panelsRepo: PanelsRepo) : FoldersRepo {
3232

@@ -154,6 +154,31 @@ class FoldersRepoImpl(private val panelsRepo: PanelsRepo) : FoldersRepo {
154154
}
155155
}
156156

157+
override suspend fun search(folderName: String): Result<List<Folder>> {
158+
return try {
159+
if (folderName.isBlank()) return Result.Success(response = emptyList(), webSocketEvent = null)
160+
161+
transaction {
162+
FoldersTable.selectAll().where {
163+
FoldersTable.folderName.lowerCase() like "%${folderName.lowercase()}%"
164+
}.toList().map {
165+
Folder(
166+
id = it[FoldersTable.id].value,
167+
name = it[FoldersTable.folderName],
168+
note = it[FoldersTable.note],
169+
parentFolderId = it[FoldersTable.parentFolderID],
170+
isArchived = it[FoldersTable.isFolderArchived],
171+
eventTimestamp = it[FoldersTable.lastModified]
172+
)
173+
}
174+
}.let {
175+
Result.Success(response = it, webSocketEvent = null)
176+
}
177+
} catch (e: Exception) {
178+
Result.Failure(e)
179+
}
180+
}
181+
157182
override suspend fun getChildFolders(idBasedDTO: IDBasedDTO): Result<List<Folder>> {
158183
return try {
159184
transaction {

src/main/kotlin/com/sakethh/linkora/domain/Route.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ sealed interface Route {
66
}
77

88
enum class Folder : Route {
9-
CREATE_FOLDER, UPDATE_FOLDER, DELETE_FOLDER, GET_CHILD_FOLDERS, GET_ROOT_FOLDERS, MARK_FOLDER_AS_ARCHIVE, MARK_AS_REGULAR_FOLDER, UPDATE_FOLDER_NAME, UPDATE_FOLDER_NOTE, DELETE_FOLDER_NOTE, MARK_FOLDERS_AS_ROOT
9+
CREATE_FOLDER, UPDATE_FOLDER, DELETE_FOLDER, GET_CHILD_FOLDERS, SEARCH_FOR_FOLDERS, GET_ROOT_FOLDERS, MARK_FOLDER_AS_ARCHIVE, MARK_AS_REGULAR_FOLDER, UPDATE_FOLDER_NAME, UPDATE_FOLDER_NOTE, DELETE_FOLDER_NOTE, MARK_FOLDERS_AS_ROOT
1010
}
1111

1212
enum class Panel : Route {

src/main/kotlin/com/sakethh/linkora/domain/repository/FoldersRepo.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ interface FoldersRepo {
1313
suspend fun updateFolder(folderDTO: FolderDTO): Result<TimeStampBasedResponse>
1414
suspend fun deleteFolder(idBasedDTO: IDBasedDTO): Result<TimeStampBasedResponse>
1515
suspend fun getChildFolders(idBasedDTO: IDBasedDTO): Result<List<Folder>>
16+
suspend fun search(folderName: String): Result<List<Folder>>
1617
suspend fun getRootFolders(): Result<List<Folder>>
1718
suspend fun markAsArchive(idBasedDTO: IDBasedDTO): Result<TimeStampBasedResponse>
1819
suspend fun markAsRegularFolder(idBasedDTO: IDBasedDTO): Result<TimeStampBasedResponse>

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,9 @@ package com.sakethh.linkora.presentation.routing.http
33
import com.sakethh.linkora.authenticate
44
import com.sakethh.linkora.domain.Route
55
import com.sakethh.linkora.domain.dto.IDBasedDTO
6-
import com.sakethh.linkora.domain.dto.MoveItemsDTO
76
import com.sakethh.linkora.domain.dto.folder.*
87
import com.sakethh.linkora.domain.repository.FoldersRepo
98
import com.sakethh.linkora.utils.respondWithResult
10-
import io.ktor.server.application.*
119
import io.ktor.server.routing.*
1210

1311
fun Routing.foldersRouting(foldersRepo: FoldersRepo) {
@@ -24,6 +22,10 @@ fun Routing.foldersRouting(foldersRepo: FoldersRepo) {
2422
respondWithResult(foldersRepo.getChildFolders(it))
2523
}
2624

25+
post<String>(Route.Folder.SEARCH_FOR_FOLDERS.name) {
26+
respondWithResult(foldersRepo.search(it))
27+
}
28+
2729
get(Route.Folder.GET_ROOT_FOLDERS.name) {
2830
respondWithResult(foldersRepo.getRootFolders())
2931
}
@@ -54,7 +56,7 @@ fun Routing.foldersRouting(foldersRepo: FoldersRepo) {
5456
respondWithResult(foldersRepo.markSelectedFoldersAsRoot(it))
5557
}
5658

57-
post<FolderDTO>(Route.Folder.UPDATE_FOLDER.name){
59+
post<FolderDTO>(Route.Folder.UPDATE_FOLDER.name) {
5860
respondWithResult(foldersRepo.updateFolder(folderDTO = it))
5961
}
6062
}

0 commit comments

Comments
 (0)