From e426522380702d10d7c2a95ed945ed6b44e22e1a Mon Sep 17 00:00:00 2001 From: stephaniegl Date: Mon, 13 Oct 2025 16:16:15 +0700 Subject: [PATCH] commit 08/10/2025 WebApp --- html/webpage/assets/js/schedulebank.js | 2 + src/web/WebApp.kt | 115 ++++++++++++++++++++++++- 2 files changed, 116 insertions(+), 1 deletion(-) diff --git a/html/webpage/assets/js/schedulebank.js b/html/webpage/assets/js/schedulebank.js index 6c9e437..5975d02 100644 --- a/html/webpage/assets/js/schedulebank.js +++ b/html/webpage/assets/js/schedulebank.js @@ -101,6 +101,8 @@ $(document).ready(function () { let $schedulehour = $schedulemodal.find('#schedulehour'); // number input 0-59 let $scheduleminute = $schedulemodal.find('#scheduleminute'); + + //TODO ganti dropdown with list of messages from MessageBank // text input let $schedulesoundpath = $schedulemodal.find('#schedulesoundpath'); // number input 0-5 diff --git a/src/web/WebApp.kt b/src/web/WebApp.kt index 6cedfde..8c93a1e 100644 --- a/src/web/WebApp.kt +++ b/src/web/WebApp.kt @@ -21,6 +21,7 @@ import database.MariaDB import database.Messagebank import database.SoundChannel import database.Soundbank +import database.ScheduleBank import db import io.javalin.Javalin import io.javalin.apibuilder.ApiBuilder.before @@ -202,7 +203,8 @@ class WebApp(val listenPort: Int, val userlist: List>) { it.result(MariaDB.ArrayListtoString(db.soundDB.List)) } get("ListFiles"){ - it.result(objectmapper.writeValueAsString(ListAudioFiles("C:\\soundbank"))) + //it.result(objectmapper.writeValueAsString(ListAudioFiles("C:\\soundbank"))) + } post("Add") { try { @@ -644,6 +646,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { // get timer list it.result(MariaDB.ArrayListtoString(db.scheduleDB.List)) } + delete("List") { // truncate timer table if (db.scheduleDB.Clear()) { @@ -655,6 +658,38 @@ class WebApp(val listenPort: Int, val userlist: List>) { } post("Add"){ // TODO add new schedule + // recheck lagi tambahan steph + val json: JsonNode = objectmapper.readTree(it.body()) + val description = json.get("Description")?.asText("") ?: "" + val day = json.get("Day")?.asText("") ?: "" + val time = json.get("Time")?.asText("") ?: "" + val soundpath = json.get("Soundpath")?.asText("") ?: "" + val repeat = json.get("Repeat")?.asInt()?.toUByte() ?: 0u + val enable = json.get("Enable")?.asBoolean() ?: false + val broadcast_zones = json.get("BroadcastZones")?.asText("") ?: "" + val language = json.get("Language")?.asText("") ?: "" + if (ValidString(description)){ + if (ValidString(day) && ValidScheduleDay(day)){ + if (ValidString(time) && ValidScheduleTime(time)){ + if (ValidString(soundpath) && ValidFile(soundpath)){ + if (repeat in 0u..127u){ + if (ValidString(broadcast_zones)){ + val zones = broadcast_zones.split(";") + if (zones.all { zz -> db.broadcastDB.List.any { xx -> xx.description.equals(zz,true) } }){ + if (ValidString(language) && Language.entries.any{ lang -> lang.name == language }){ + val newvalue = ScheduleBank(0u, description, day, time, soundpath, repeat, enable, broadcast_zones, language) + if (db.scheduleDB.Add(newvalue)){ + db.scheduleDB.Resort() + it.result(objectmapper.writeValueAsString(resultMessage("OK"))) + } else it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to add schedule to database"))) + } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Language"))) + } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Contains unsupported BroadcastZones"))) + } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid BroadcastZones"))) + } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Repeat, must be between 0-127"))) + } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Soundpath"))) + } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Time format, must be HH:mm"))) + } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Day format"))) + } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Description"))) } delete("DeleteByIndex/{index}") { // delete by index @@ -785,6 +820,17 @@ class WebApp(val listenPort: Int, val userlist: List>) { it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid XLSX file"))) } } + + //Kirim list message dan broadcast zones untuk ADD/Edit schedule + //TODO add at js file for messagebank and broadcast zones values + get("GetMessageAndBroadcastZones") { + val result = object { + //TODO filter message without input variable + val messages = db.messageDB.List.filter { mb -> !mb.Message_Detail.contains("[") && !mb.Message_Detail.contains("]") } + val broadcastzones = db.broadcastDB.List + } + it.result(objectmapper.writeValueAsString(result)) + } } path("Log") { get("List") { get1 -> @@ -1084,6 +1130,73 @@ class WebApp(val listenPort: Int, val userlist: List>) { } } } + + // Steph : coba tambah untuk QueuePaging Table. Belum ada di JS file(?) + path("QueuePaging"){ + + get("List"){ + it.result(MariaDB.ArrayListtoString(db.queuepagingDB.List)) + } + + delete("List"){ + // truncate queue paging table + if (db.queuepagingDB.Clear()) { + db.queuepagingDB.Get() + it.result(objectmapper.writeValueAsString(resultMessage("OK"))) + } else { + it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to truncate queue paging table"))) + } + } + delete("DeleteByIndex/{index}") { + // delete by index + val index = it.pathParam("index").toUIntOrNull() + if (index == null) { + it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid index"))) + } else { + if (db.queuepagingDB.DeleteByIndex(index.toInt())) { + db.queuepagingDB.Resort() + it.result(objectmapper.writeValueAsString(resultMessage("OK"))) + } else { + it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to delete queue paging with index $index"))) + } + } + } + + } + + // Steph : coba tambah untuk QueueTable Table. Belum ada di JS file(?) + path("QueueTable"){ + + get("List"){ + it.result(MariaDB.ArrayListtoString(db.queuetableDB.List)) + } + + delete("List"){ + // truncate queue table + if (db.queuetableDB.Clear()) { + db.queuetableDB.Get() + it.result(objectmapper.writeValueAsString(resultMessage("OK"))) + } else { + it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to truncate queue sound table"))) + } + } + + delete("DeleteByIndex/{index}") { + // delete by index + val index = it.pathParam("index").toUIntOrNull() + if (index == null) { + it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid index"))) + } else { + if (db.queuetableDB.DeleteByIndex(index.toInt())) { + db.queuetableDB.Resort() + it.result(objectmapper.writeValueAsString(resultMessage("OK"))) + } else { + it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to delete queue sound with index $index"))) + } + } + } + } + } } }.start(listenPort)