Skip to content
Snippets Groups Projects
Commit 8631d0ba authored by Xera's avatar Xera
Browse files

Add deleteTask() function

Added a function to delete tasks, also turned out that the bug with api calls disappears when server is restarted (probably some bug in the framework itself)
parent 28010f70
No related branches found
No related tags found
No related merge requests found
...@@ -36,9 +36,9 @@ suspend fun getAllTasks( ...@@ -36,9 +36,9 @@ suspend fun getAllTasks(
} }
} }
/*suspend fun deleteTask(taskID: String): String { suspend fun deleteTask(task: Task): String {
return window.api.tryPost( return window.api.tryPost(
apiPath = "deletetask", apiPath = "deletetask",
body = Json.encodeToString(taskID).encodeToByteArray() body = Json.encodeToString(task).encodeToByteArray()
)?.decodeToString().toString() )?.decodeToString().toString()
}*/ }
...@@ -25,7 +25,6 @@ import com.varabyte.kobweb.silk.style.base ...@@ -25,7 +25,6 @@ import com.varabyte.kobweb.silk.style.base
import com.varabyte.kobweb.silk.style.selectors.hover import com.varabyte.kobweb.silk.style.selectors.hover
import com.varabyte.kobweb.silk.style.toModifier import com.varabyte.kobweb.silk.style.toModifier
import com.varabyte.kobweb.silk.theme.colors.ColorMode import com.varabyte.kobweb.silk.theme.colors.ColorMode
import kotlinx.browser.document import kotlinx.browser.document
import kotlinx.browser.window import kotlinx.browser.window
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
...@@ -42,6 +41,7 @@ import org.jetbrains.compose.web.dom.Text ...@@ -42,6 +41,7 @@ import org.jetbrains.compose.web.dom.Text
import org.w3c.dom.HTMLInputElement import org.w3c.dom.HTMLInputElement
import todo.components.widgets.HeaderLayout import todo.components.widgets.HeaderLayout
import todo.data.addTask import todo.data.addTask
import todo.data.deleteTask
import todo.data.getAllTasks import todo.data.getAllTasks
import todo.model.ApiListResponse import todo.model.ApiListResponse
import todo.model.Task import todo.model.Task
...@@ -102,6 +102,9 @@ fun HomePage() { ...@@ -102,6 +102,9 @@ fun HomePage() {
var response by remember { mutableStateOf<ApiListResponse>(ApiListResponse.Loading) } var response by remember { mutableStateOf<ApiListResponse>(ApiListResponse.Loading) }
LaunchedEffect(Unit) { LaunchedEffect(Unit) {
getAllTasks( getAllTasks(
...@@ -123,10 +126,12 @@ fun HomePage() { ...@@ -123,10 +126,12 @@ fun HomePage() {
verticalArrangement = Arrangement.Top, verticalArrangement = Arrangement.Top,
) { ) {
HeaderLayout(context = context) {}
// ======== H E A D E R ======== // ======== H E A D E R ========
Header( /*Header(
HeaderStyle.toModifier().toAttrs() HeaderStyle.toModifier().toAttrs()
) { ) {
...@@ -145,7 +150,7 @@ fun HomePage() { ...@@ -145,7 +150,7 @@ fun HomePage() {
Text(value = "Change theme") Text(value = "Change theme")
} }
} }
} }*/
// ===== Input form ===== // ===== Input form =====
...@@ -226,11 +231,12 @@ fun HomePage() { ...@@ -226,11 +231,12 @@ fun HomePage() {
modifier = TaskStyle.toModifier() modifier = TaskStyle.toModifier()
) )
Button(ButtonStyle.toModifier() Button(ButtonStyle.toModifier()
/*.onClick { .onClick {
scope.launch { scope.launch {
deleteTask(task._id) deleteTask(task)
} }
}*/ }
.toAttrs() .toAttrs()
) { ) {
Text(value = "Delete") Text(value = "Delete")
...@@ -247,8 +253,6 @@ fun HomePage() { ...@@ -247,8 +253,6 @@ fun HomePage() {
} }
} }
Spacer() Spacer()
......
...@@ -12,7 +12,6 @@ import todo.data.MongoDbImp ...@@ -12,7 +12,6 @@ import todo.data.MongoDbImp
import todo.model.ApiListResponse import todo.model.ApiListResponse
import todo.model.Task import todo.model.Task
@Api(routeOverride = "addtask") @Api(routeOverride = "addtask")
suspend fun addTask(context: ApiContext) { suspend fun addTask(context: ApiContext) {
try { try {
...@@ -26,7 +25,6 @@ suspend fun addTask(context: ApiContext) { ...@@ -26,7 +25,6 @@ suspend fun addTask(context: ApiContext) {
} }
@Api(routeOverride = "getalltasks") @Api(routeOverride = "getalltasks")
suspend fun getAllTasks(context: ApiContext) { suspend fun getAllTasks(context: ApiContext) {
try { try {
...@@ -37,15 +35,13 @@ suspend fun getAllTasks(context: ApiContext) { ...@@ -37,15 +35,13 @@ suspend fun getAllTasks(context: ApiContext) {
} }
} }
/*
@Api(routeOverride = "deletetask") @Api(routeOverride = "deletetask")
suspend fun deleteTask(context: ApiContext) { suspend fun deleteTask(context: ApiContext) {
try { try {
val task = context.req.body?.decodeToString()?.let { Json.decodeFromString<Task>(it) } val task = context.req.body?.decodeToString()?.let { Json.decodeFromString<Task>(it) }
val responseBody = Json.encodeToString(task?.let { context.data.getValue<MongoDbImp>().deleteTask(it._id) }) val responseBody = Json.encodeToString(task?.let { context.data.getValue<MongoDbImp>().deleteTask(it) })
context.res.setBodyText(responseBody) context.res.setBodyText(responseBody)
}catch (e: Exception) { } catch (e: Exception) {
context.res.setBodyText(Json.encodeToString(e)) context.res.setBodyText(Json.encodeToString(e))
} }
}
}*/
...@@ -5,5 +5,5 @@ import todo.model.Task ...@@ -5,5 +5,5 @@ import todo.model.Task
interface MongoDb { interface MongoDb {
suspend fun getAllTasks(): List<Task> suspend fun getAllTasks(): List<Task>
suspend fun addTask(task: Task): Boolean suspend fun addTask(task: Task): Boolean
/*suspend fun deleteTask(taskID: String): Boolean*/ suspend fun deleteTask(task: Task): Boolean
} }
\ No newline at end of file
...@@ -6,6 +6,7 @@ import com.varabyte.kobweb.api.data.add ...@@ -6,6 +6,7 @@ import com.varabyte.kobweb.api.data.add
import com.varabyte.kobweb.api.init.InitApi import com.varabyte.kobweb.api.init.InitApi
import com.varabyte.kobweb.api.init.InitApiContext import com.varabyte.kobweb.api.init.InitApiContext
import kotlinx.coroutines.flow.toList import kotlinx.coroutines.flow.toList
import org.bson.types.ObjectId
import todo.model.Task import todo.model.Task
@InitApi @InitApi
...@@ -35,9 +36,9 @@ class MongoDbImp(): MongoDb { ...@@ -35,9 +36,9 @@ class MongoDbImp(): MongoDb {
return tasksCollection.insertOne(task).wasAcknowledged() return tasksCollection.insertOne(task).wasAcknowledged()
} }
/*override suspend fun deleteTask(taskID: String): Boolean { override suspend fun deleteTask(task: Task): Boolean {
val filter = Filters.eq("_id", taskID) val filter = Filters.eq("_id", task._id)
return tasksCollection.deleteOne(filter).wasAcknowledged() return tasksCollection.deleteOne(filter).wasAcknowledged()
}*/ }
} }
\ No newline at end of file
package todo.model
import com.varabyte.kobweb.api.data.add
import com.varabyte.kobweb.api.init.InitApi
import com.varabyte.kobweb.api.init.InitApiContext
import java.util.*
import java.util.concurrent.locks.ReentrantLock
import kotlin.concurrent.withLock
// NOTE: This is a simple demo, so we create an in-memory store (which will get reset everytime server code is live
// reloaded). However, in a production app, you should use a real database instead, maybe a redis backend, or possibly
// even something that lives on a different server which you access via network calls.
@InitApi
fun initTodoStore(ctx: InitApiContext) {
ctx.data.add(TodoStore())
}
class TodoStore {
private val lock = ReentrantLock()
private val todos = mutableMapOf<String, MutableList<TodoItem>>()
fun add(ownerId: String, todo: String) {
lock.withLock {
todos.computeIfAbsent(ownerId) { mutableListOf() }.add(TodoItem(UUID.randomUUID().toString(), todo))
}
}
fun remove(ownerId: String, id: String) {
lock.withLock { todos[ownerId]?.removeIf { it.id == id } }
}
operator fun get(ownerId: String): List<TodoItem> = lock.withLock { todos[ownerId] } ?: emptyList()
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment