diff --git a/src/database/MariaDB.kt b/src/database/MariaDB.kt index b80d882..c8b50e1 100644 --- a/src/database/MariaDB.kt +++ b/src/database/MariaDB.kt @@ -670,7 +670,7 @@ class MariaDB( val statement = connection.createStatement() val resultSet = statement?.executeQuery("SELECT * FROM ${super.dbName}") val workbook = XSSFWorkbook() - val sheet = workbook.createSheet("languagelinking") + val sheet = workbook.createSheet("LanguageLink") val headerRow = sheet.createRow(0) val headers = arrayOf("Index", "TAG", "Language") for ((colIndex, header) in headers.withIndex()) { diff --git a/src/web/WebApp.kt b/src/web/WebApp.kt index afbd0c0..89c8b31 100644 --- a/src/web/WebApp.kt +++ b/src/web/WebApp.kt @@ -9,6 +9,7 @@ import codes.Somecodes.Companion.ValidIPV4 import codes.Somecodes.Companion.ValidScheduleDay import codes.Somecodes.Companion.ValidScheduleTime import codes.Somecodes.Companion.ValidString +import codes.Somecodes.Companion.ValidStrings import com.fasterxml.jackson.databind.JsonNode import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import content.Category @@ -90,6 +91,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { it.sessionAttribute("user", user.first) //println("User ${user.first} logged in") // Redirect to home page + //db.Add_Log("WEB", "User ${user.first} logged in") it.redirect("home.html") } } @@ -281,6 +283,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { if (db.soundDB.Add(addvalue)) { db.soundDB.Resort() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) + db.Add_Log("AAS", "Added Sound Bank: $addvalue") } else it.status(500) .result(objectmapper.writeValueAsString(resultMessage("Failed to add soundbank to database"))) } else it.status(400) @@ -298,6 +301,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { if (db.soundDB.Clear()) { db.soundDB.Get() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) + db.Add_Log("AAS", "Clear Sound Bank table") } else { it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to truncate soundbank table"))) } @@ -311,6 +315,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { if (db.soundDB.DeleteByIndex(index.toInt())) { db.soundDB.Resort() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) + db.Add_Log("AAS", "Deleted Sound Bank with index $index") } else { it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to delete soundbank with index $index"))) } @@ -380,6 +385,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { if (db.soundDB.UpdateByIndex(index.toInt(), sb)) { db.soundDB.Resort() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) + db.Add_Log("AAS", "Updated Soundbank $sb") } else it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to update soundbank with index $index"))) } else it.status(400) .result(objectmapper.writeValueAsString(resultMessage("Nothing has changed for soundbank with index $index"))) @@ -449,6 +455,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { if (db.messageDB.Add(mb)){ db.messageDB.Resort() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) + db.Add_Log("AAS", "Added Messagebank: $mb") } else it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to add messagebank to database"))) } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Message_TAGS"))) } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Message_Detail"))) @@ -462,6 +469,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { if (db.messageDB.Clear()) { db.messageDB.Get() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) + db.Add_Log("AAS", "Clear Message Bank table") } else { it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to truncate messagebank table"))) } @@ -475,6 +483,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { if (db.messageDB.DeleteByIndex(index.toInt())) { db.messageDB.Resort() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) + db.Add_Log("AAS", "Deleted Message Bank with index $index") } else { it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to delete messagebank with index $index"))) } @@ -535,6 +544,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { if (db.messageDB.UpdateByIndex(index.toInt(), mb)) { db.messageDB.Resort() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) + db.Add_Log("AAS", "Updated Messagebank $mb") } else it.status(500) .result(objectmapper.writeValueAsString(resultMessage("Failed to update messagebank with index $index"))) } else it.status(400) @@ -595,6 +605,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { if (db.languageDB.Add(newvalue)){ db.languageDB.Resort() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) + db.Add_Log("AAS", "Added Language Link: $newvalue") } else { it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to add language link to database"))) //println("Failed to add language link to database") @@ -617,6 +628,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { if (db.languageDB.Clear()) { db.languageDB.Resort() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) + db.Add_Log("AAS", "Clear Language Link table") } else { it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to truncate language link table"))) } @@ -630,6 +642,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { if (db.languageDB.DeleteByIndex(index.toInt())) { db.languageDB.Resort() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) + db.Add_Log("AAS", "Deleted Language Link with index $index") } else { it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to delete language link with index $index"))) } @@ -664,6 +677,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { if (db.languageDB.UpdateByIndex(index.toInt(), ll)) { db.languageDB.Resort() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) + db.Add_Log("AAS", "Updated Language Link $ll") } else it.status(500) .result(objectmapper.writeValueAsString(resultMessage("Failed to update language link with index $index"))) } else it.status(400) @@ -716,6 +730,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { if (db.scheduleDB.Clear()) { db.scheduleDB.Get() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) + db.Add_Log("AAS", "Clear Schedule Bank table") } else { it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to truncate schedulebank table"))) } @@ -754,9 +769,9 @@ class WebApp(val listenPort: Int, val userlist: List>) { language ) if (db.scheduleDB.Add(newvalue)){ - db.scheduleDB.Resort() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) + db.Add_Log("AAS", "Added Schedule Bank: $newvalue") } 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"))) @@ -776,6 +791,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { if (db.scheduleDB.DeleteByIndex(index.toInt())) { db.scheduleDB.Resort() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) + db.Add_Log("AAS", "Deleted Schedule Bank with index $index") } else { it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to delete schedule with index $index"))) } @@ -855,6 +871,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { if (db.scheduleDB.UpdateByIndex(index.toInt(), sb)) { db.scheduleDB.Resort() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) + db.Add_Log("AAS", "Updated Schedule : $sb") } else it.status(500) .result(objectmapper.writeValueAsString(resultMessage("Failed to update schedule with index $index"))) } else it.status(400) @@ -890,15 +907,185 @@ class WebApp(val listenPort: Int, val userlist: List>) { db.scheduleDB.Resort() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) } else { - it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to import schedulebank from XLSX"))) + it.status(500) + .result(objectmapper.writeValueAsString(resultMessage("Failed to import schedulebank from XLSX"))) + } + } catch (e: Exception) { + it.status(400) + .result(objectmapper.writeValueAsString(resultMessage("Invalid XLSX file"))) + } + } + } + path("UserManagement") { + get("List") { + it.result(objectmapper.writeValueAsString(db.userDB.List)) + } + delete("List") { + if (db.userDB.Clear()) { + db.userDB.Get() + it.result(objectmapper.writeValueAsString(resultMessage("OK"))) + db.Add_Log("AAS", "Clear User Management table") + } else { + it.status(500) + .result(objectmapper.writeValueAsString(resultMessage("Failed to truncate user table"))) + } + } + post("Add") { ctx -> + val json: JsonNode = objectmapper.readTree(ctx.body()) + val username = json.get("username").asText("") + val password = json.get("password").asText("") + val location = json.get("location").asText("") + val airline_tags = json.get("airline_tags").asText("") + val city_tags = json.get("city_tags").asText("") + val messagebank_ann_id = json.get("messagebank_ann_id").asText("") + val broadcastzones = json.get("broadcastzones").asText("") + if (ValidStrings(listOf(username, password, location, airline_tags, city_tags, messagebank_ann_id, broadcastzones))) { + if (!db.Username_exists(username)) { + // check apakah ada airline tag yang tidak ada di soundbank + val atags = airline_tags.split(";").map { it.trim() } + .filter { it.isNotEmpty() }.distinct() + val airlinetags = db.Get_AirlineCode_Tags() + if (atags.all { tag -> airlinetags.any { it == tag } }) { + // check apakah ada city tag yang tidak ada di soundbank + val ctags = city_tags.split(";").map { it.trim() } + .filter { it.isNotEmpty() }.distinct() + val citytags = db.Get_City_Tags() + if (ctags.all { tag -> citytags.any { it == tag } }) { + val bzdesc = + broadcastzones.split(";").map { it.trim() } + .filter { it.isNotEmpty() }.distinct() + val bzlist = db.Get_BroadcastZone_List() + if (bzdesc.all { desc -> bzlist.any { it == desc } }) { + val mbids = messagebank_ann_id.split(";") + .map { it.trim() } + .filter { it.isNotEmpty() }.distinct() + .mapNotNull { it.toUIntOrNull() } + val mbankids = db.Get_MessageID_List() + if (mbids.all { id -> mbankids.any { it == id } }) { + // semua valid, tambain ke database + val newuser = UserDB( + 0u, + username, + password, + location, + airline_tags, + city_tags, + messagebank_ann_id, + broadcastzones + ) + if (db.userDB.Add(newuser)) { + db.userDB.Resort() + ctx.result(objectmapper.writeValueAsString(resultMessage("OK") )) + db.Add_Log("AAS", "Added User: $newuser") + } else ctx.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to add user to database"))) + } else ctx.status(400).result(objectmapper.writeValueAsString(resultMessage("Some ANN_ID not found in Messagebank") )) + } else ctx.status(400).result(objectmapper.writeValueAsString(resultMessage("Some broadcast zone tags not found in soundbank")) ) + } else ctx.status(400).result(objectmapper.writeValueAsString(resultMessage("Some city tags not found in soundbank"))) + } else ctx.status(400).result(objectmapper.writeValueAsString(resultMessage("Some airline tags not found in soundbank"))) + } else ctx.status(400).result(objectmapper.writeValueAsString("Username already exists")) + } else ctx.status(400).result(objectmapper.writeValueAsString(resultMessage("Not all fields have value"))) + } + 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.userDB.DeleteByIndex(index.toInt())) { + db.userDB.Resort() + it.result(objectmapper.writeValueAsString(resultMessage("OK"))) + db.Add_Log("AAS", "Deleted User with index $index") + } else it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to delete user with index $index"))) + } + } + patch("UpdateByIndex/{index}"){ ctx -> + // update by index + val index = ctx.pathParam("index").toUIntOrNull() + if (index!=null){ + val user = db.userDB.List.find { xx -> xx.index == index } + if (user!=null){ + val json : JsonNode = objectmapper.readTree(ctx.body()) + if (!json.isEmpty){ + val _username = json.get("username").asText("") + val _password = json.get("password").asText("") + val _location = json.get("location").asText("") + val _airline_tags = json.get("airline_tags").asText("") + val _city_tags = json.get("city_tags").asText("") + val _messagebank_ann_id = json.get("messagebank_ann_id").asText("") + val _broadcastzones = json.get("broadcastzones").asText("") + if (ValidStrings(listOf(_username, _password, _location, _airline_tags, _city_tags, _messagebank_ann_id, _broadcastzones))) { + val _otherusername = db.userDB.List.find { xx -> xx.username.equals(_username, true) && xx.index != index } + if (_otherusername == null) { + // belum ada user lain yang pakai username ini + val atags = _airline_tags.split(";").map { it.trim() }.filter { it.isNotEmpty() }.distinct() + val ctags = _city_tags.split(";").map { it.trim() }.filter { it.isNotEmpty() }.distinct() + val msgids = _messagebank_ann_id.split(";").map { it.trim() }.filter { it.isNotEmpty() }.distinct().mapNotNull { it.toUIntOrNull() } + val bzdesc = _broadcastzones.split(";").map { it.trim() }.filter { it.isNotEmpty() }.distinct() + + val airline_tags = db.Get_AirlineCode_Tags() + val city_tags = db.Get_City_Tags() + val msgbankids = db.Get_MessageID_List() + val bzlist = db.Get_BroadcastZone_List() + if (atags.all { tag -> airline_tags.any { it == tag } }) { + if (ctags.all { tag -> city_tags.any { it == tag } }) { + if (msgids.all { tag -> msgbankids.any { it == tag } }) { + if (bzdesc.all { tag -> bzlist.any { it == tag } }) { + val editeduser = UserDB(index, _username, _password, _location, _airline_tags, _city_tags, _messagebank_ann_id, _broadcastzones) + if (!user.isEqual(editeduser)){ + if (db.userDB.UpdateByIndex(index.toInt(), editeduser)){ + db.userDB.Resort() + ctx.result(objectmapper.writeValueAsString(resultMessage("OK"))) + db.Add_Log("AAS", "Updated User : $editeduser") + } else ctx.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to update user with index $index"))) + } else ctx.status(400).result(objectmapper.writeValueAsString(resultMessage("Nothing has changed for user with index $index"))) + } else ctx.status(400).result(objectmapper.writeValueAsString(resultMessage("Some broadcast zone is not found in Broadcast Zone list"))) + } else ctx.status(400).result(objectmapper.writeValueAsString(resultMessage("Some ANN_ID not found in Messagebank"))) + } else ctx.status(400).result(objectmapper.writeValueAsString(resultMessage("Some city tags not found in soundbank"))) + } else ctx.status(400).result(objectmapper.writeValueAsString("Some airline tags not found in soundbank")) + } else ctx.status(400).result(objectmapper.writeValueAsString(resultMessage("Username already exists for another user"))) + } else ctx.status(400).result(objectmapper.writeValueAsString(resultMessage("Not all fiels have value"))) + } else ctx.status(400).result(objectmapper.writeValueAsString(resultMessage("UpdateByIndex with index=$index has empty body"))) + } else ctx.status(400).result(objectmapper.writeValueAsString(resultMessage("User with index $index not found"))) + } else ctx.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid index"))) + } + get("ExportXLSX") { + val xlsxdata = db.userDB.Export_XLSX() + if (xlsxdata != null) { + it.header( + "Content-Type", + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" + ) + it.header("Content-Disposition", "attachment; filename=\"userdb.xlsx\"") + it.outputStream().use { out -> + xlsxdata.write(out) + } + } else { + it.status(500) + .result(objectmapper.writeValueAsString(resultMessage("Failed to export user table to XLSX"))) + } + } + post("ImportXLSX") { + val uploaded = it.uploadedFile("file") + if (uploaded == null) { + it.status(400) + .result(objectmapper.writeValueAsString(resultMessage("No file uploaded"))) + return@post + } + try { + val xlsx = XSSFWorkbook(uploaded.content()) + if (db.userDB.Import_XLSX(xlsx)) { + db.userDB.Resort() + it.result(objectmapper.writeValueAsString(resultMessage("OK"))) + } else { + it.status(500) + .result(objectmapper.writeValueAsString(resultMessage("Failed to import user table from XLSX"))) } } catch (e: Exception) { 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 + //TODO kirim list message dan broadcast zones untuk ADD/Edit schedule get("GetMessageAndBroadcastZones") { val result = object { val messages = db.messageDB.List @@ -967,24 +1154,20 @@ class WebApp(val listenPort: Int, val userlist: List>) { } path("BroadcastZones"){ get("List") { - // TODO : temporary, convert BroadcastZones to BroadcastZonesHtml, karena harus revisi javascript di Bootstrap Studio -// val newlist: ArrayList = db.broadcastDB.List.map { xx -> -// BroadcastZonesHtml( -// xx.index, -// xx.description, -// xx.SoundChannel, -// xx.id, -// xx.bp -// ) -// } as ArrayList - it.result(MariaDB.ArrayListtoString(db.broadcastDB.List)) } - delete("List"){ + get("BroadcastZoneDescriptions") { ctx -> + val value = db.broadcastDB.List + .distinctBy { it.description } + .map { it.description } + ctx.result(objectmapper.writeValueAsString(value)) + } + delete("List") { // truncate broadcast zones table if (db.broadcastDB.Clear()) { db.broadcastDB.Get() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) + db.Add_Log("AAS", "Clear Broadcast Zones table") } else { it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to truncate broadcast zones table"))) } @@ -1003,6 +1186,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { if (db.broadcastDB.Add(newbp)){ db.broadcastDB.Resort() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) + db.Add_Log("AAS","Added Broadcast Zone: $newbp") } else it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to add broadcast zone to database"))) } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Relay"))) } else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Box"))) @@ -1018,6 +1202,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { if (db.broadcastDB.DeleteByIndex(index.toInt())) { db.broadcastDB.Resort() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) + db.Add_Log("AAS", "Deleted Broadcast Zone with index $index") } else { it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to delete broadcast zone with index $index"))) } @@ -1062,6 +1247,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { if (db.broadcastDB.UpdateByIndex(index.toInt(), bz)) { db.broadcastDB.Resort() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) + db.Add_Log("AAS", "Updated Broadcast Zone : $bz") } else it.status(500) .result(objectmapper.writeValueAsString(resultMessage("Failed to update broadcast zone with index $index"))) } else it.status(400) @@ -1110,11 +1296,15 @@ class WebApp(val listenPort: Int, val userlist: List>) { get("List"){ it.result(MariaDB.ArrayListtoString(db.soundchannelDB.List)) } - delete("List"){ + get("SoundChannelDescriptions") { + it.result(objectmapper.writeValueAsString(db.Get_SoundChannel_List())) + } + delete("List") { // truncate sound channel table if (db.soundchannelDB.Clear()) { db.soundchannelDB.Get() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) + db.Add_Log("AAS", "Clear Sound Channel table") } else { it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to truncate sound channel table"))) } @@ -1148,23 +1338,26 @@ class WebApp(val listenPort: Int, val userlist: List>) { } else { // cek apakah ada soundchannel lain yang pakai ip dan channel yang sama - if (db.soundchannelDB.List.any { xx -> xx.index != index && _ip.equals(xx.ip) && _channel.equals(xx.channel, true) }) { - println("Another sound channel already uses IP $_ip and channel $_channel") - it.status(400).result(objectmapper.writeValueAsString(resultMessage("Another sound channel already uses IP $_ip and channel $_channel"))) - return@patch + val othersc = db.soundchannelDB.List.filter { sc -> sc.ip == _ip }.filter { sc -> sc.index != index } + if (othersc.isNotEmpty()){ + it.status(400).result(objectmapper.writeValueAsString(resultMessage("This IP address is already used by another sound channel"))) + } else { + // ada sesuatu yang ganti + val newsc = SoundChannel(0u, _channel, _ip) + if (db.soundchannelDB.UpdateByIndex(index.toInt(), newsc)) { + println("Updated sound channel with index $index") + + db.soundchannelDB.Resort() + it.result(objectmapper.writeValueAsString(resultMessage("OK"))) + db.Add_Log("AAS", "Updated Sound Channel : $newsc") + } else { + println("Failed to update sound channel with index $index") + it.status(500) + .result(objectmapper.writeValueAsString(resultMessage("Failed to update sound channel with index $index"))) + } } - // ada sesuatu yang ganti - val newsc = SoundChannel(0u, _channel, _ip) - if (db.soundchannelDB.UpdateByIndex(index.toInt(),newsc)){ - println("Updated sound channel with index $index") - db.soundchannelDB.Resort() - it.result(objectmapper.writeValueAsString(resultMessage("OK"))) - } else { - println("Failed to update sound channel with index $index") - it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to update sound channel with index $index"))) - return@patch - } + } } else { @@ -1181,7 +1374,6 @@ class WebApp(val listenPort: Int, val userlist: List>) { } - } get("ExportXLSX"){ val xlsxdata = db.soundchannelDB.Export_XLSX() @@ -1213,23 +1405,23 @@ class WebApp(val listenPort: Int, val userlist: List>) { it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to import sound channel from XLSX"))) } } catch (e: Exception) { - it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid XLSX file"))) + it.status(400) + .result(objectmapper.writeValueAsString(resultMessage("Invalid XLSX file"))) } } } // 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"))) + db.Add_Log("AAS", "Clear queue paging table") } else { it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to truncate queue paging table"))) } @@ -1243,6 +1435,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { if (db.queuepagingDB.DeleteByIndex(index.toInt())) { db.queuepagingDB.Resort() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) + db.Add_Log("AAS", "Deleted queue paging with index $index") } else { it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to delete queue paging with index $index"))) } @@ -1254,21 +1447,20 @@ class WebApp(val listenPort: Int, val userlist: List>) { // 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"))) + db.Add_Log("AAS", "Clear Automatic Queue Table") + } 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() @@ -1278,6 +1470,7 @@ class WebApp(val listenPort: Int, val userlist: List>) { if (db.queuetableDB.DeleteByIndex(index.toInt())) { db.queuetableDB.Resort() it.result(objectmapper.writeValueAsString(resultMessage("OK"))) + db.Add_Log("AAS", "Deleted Automatic Queue Table with index $index") } else { it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to delete queue sound with index $index"))) }