commit 11/09/2025

This commit is contained in:
2025-09-11 16:03:33 +07:00
parent 34fc71cfbc
commit b692e2c2c9
8 changed files with 767 additions and 211 deletions

View File

@@ -3,7 +3,6 @@ package web
import codes.Somecodes
import codes.Somecodes.Companion.ListAudioFiles
import codes.Somecodes.Companion.ValiDateForLogHtml
import codes.Somecodes.Companion.ValidDate
import codes.Somecodes.Companion.ValidFile
import codes.Somecodes.Companion.ValidScheduleDay
import codes.Somecodes.Companion.ValidScheduleTime
@@ -66,13 +65,13 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
val username = it.formParam("username")
val password = it.formParam("password")
if (username == null || password == null) {
it.status(400).result("Username and password are required")
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Username and password are required")))
return@post
}
// Check if user exists in userlist
val user = userlist.find { it.first == username && it.second == password }
if (user == null) {
it.status(401).result("Invalid username or password")
it.status(401).result(objectmapper.writeValueAsString(resultMessage("Invalid username or password")))
return@post
}
// Set user session
@@ -208,40 +207,43 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
if (!exists) {
if (ValidFile(addvalue.Path)) {
if (db.Add_Soundbank(addvalue)) {
it.result(objectmapper.writeValueAsString(mapOf("message" to "OK")))
db.Resort_Soundbank_by_Description()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else it.status(500)
.result("Failed to add soundbank to database")
.result(objectmapper.writeValueAsString(resultMessage("Failed to add soundbank to database")))
} else it.status(400)
.result("Invalid Path, file does not exist")
.result(objectmapper.writeValueAsString(resultMessage("Invalid Path, file does not exist")))
} else it.status(400)
.result("TAG=${addvalue.TAG} already exists for the same Language=${addvalue.Language} and Category=${addvalue.Category}")
} else it.status(400).result("Invalid Path")
} else it.status(400).result(objectmapper.writeValueAsString(mapOf("message" to "Invalid Language")))
} else it.status(400).result(objectmapper.writeValueAsString(mapOf("message" to "Invalid Category")))
} else it.status(400).result(objectmapper.writeValueAsString(mapOf("message" to "Invalid TAG")))
} else it.status(400).result(objectmapper.writeValueAsString(mapOf("message" to "Invalid Description")))
.result(objectmapper.writeValueAsString(resultMessage("TAG=${addvalue.TAG} already exists for the same Language=${addvalue.Language} and Category=${addvalue.Category}")))
} else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Path")))
} else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Language")))
} else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Category")))
} else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid TAG")))
} else it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Description")))
} catch (_: Exception) {
it.status(400).result("Invalid request body")
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid request body")))
}
}
delete("List") {
// truncate soundbank table
if (db.Clear_Soundbank()) {
it.result(objectmapper.writeValueAsString(mapOf("message" to "OK")))
db.Reload_Soundbank()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else {
it.status(500).result("Failed to truncate soundbank table")
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to truncate soundbank table")))
}
}
delete("DeleteByIndex/{index}") {
// delete by index
val index = it.pathParam("index").toUIntOrNull()
if (index == null) {
it.status(400).result(objectmapper.writeValueAsString(mapOf("message" to "Invalid index")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid index")))
} else {
if (db.Delete_Soundbank_by_index(index)) {
it.result(objectmapper.writeValueAsString(mapOf("message" to "OK")))
db.Resort_Soundbank_by_Description()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else {
it.status(500).result("Failed to delete soundbank with index $index")
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to delete soundbank with index $index")))
}
}
}
@@ -250,17 +252,17 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
val index = it.pathParam("index").toUIntOrNull()
if (index == null) {
// tidak ada path param index
it.status(400).result(objectmapper.writeValueAsString(mapOf("message" to "Invalid index")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid index")))
} else {
val sb = db.SoundbankList.find { xx -> xx.index == index }
if (sb == null) {
// soundbank dengan index tersebut tidak ditemukan
it.status(404).result("Soundbank with index $index not found")
it.status(404).result(objectmapper.writeValueAsString(resultMessage("Soundbank with index $index not found")))
} else {
// soundbank dengan index tersebut ditemukan, sekarang update
val json: JsonNode = objectmapper.readTree(it.body())
if (json.isEmpty) {
it.status(400).result(objectmapper.writeValueAsString(mapOf("message" to "UpdateByIndex with index=$index has empty body")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("UpdateByIndex with index=$index has empty body")))
} else {
val _description = json.get("Description").asText()
val _tag = json.get("TAG").asText()
@@ -283,7 +285,7 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
sb.Category = _category
changed = true
} else {
it.status(400).result(objectmapper.writeValueAsString(mapOf("message" to "Invalid Category")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Category")))
return@patch
}
}
@@ -296,16 +298,17 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
sb.Path = _path
changed = true
} else {
it.status(400).result("Invalid Path, file does not exist")
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Path, file does not exist")))
return@patch
}
}
if (changed) {
if (db.Update_Soundbank_by_index(index, sb)) {
it.result(objectmapper.writeValueAsString(mapOf("message" to "OK")))
} else it.status(500).result("Failed to update soundbank with index $index")
db.Resort_Soundbank_by_Description()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to update soundbank with index $index")))
} else it.status(400)
.result("Nothing has changed for soundbank with index $index")
.result(objectmapper.writeValueAsString(resultMessage("Nothing has changed for soundbank with index $index")))
}
}
}
@@ -322,24 +325,25 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
xlsxdata.write(out)
}
} else {
it.status(500).result("Failed to export soundbank to XLSX")
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to export soundbank to XLSX")))
}
}
post("ImportXLSX") {
val uploaded = it.uploadedFile("file")
if (uploaded == null) {
it.status(400).result(objectmapper.writeValueAsString(mapOf("message" to "No file uploaded")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("No file uploaded")))
return@post
}
try {
val xlsx = XSSFWorkbook(uploaded.content())
if (db.Import_Soundbank_XLSX(xlsx)) {
it.result(objectmapper.writeValueAsString(mapOf("message" to "OK")))
db.Resort_Soundbank_by_Description()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else {
it.status(500).result("Failed to import soundbank from XLSX")
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to import soundbank from XLSX")))
}
} catch (e: Exception) {
it.status(400).result(objectmapper.writeValueAsString(mapOf("message" to "Invalid XLSX file")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid XLSX file")))
}
}
}
@@ -354,21 +358,23 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
delete("List") {
// truncate messagebank table
if (db.Clear_Messagebank()) {
it.result(objectmapper.writeValueAsString(mapOf("message" to "OK")))
db.Reload_Messagebank()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else {
it.status(500).result(objectmapper.writeValueAsString(mapOf("message" to "Failed to truncate messagebank table")))
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to truncate messagebank table")))
}
}
delete("DeleteByIndex/{index}") {
// delete by index
val index = it.pathParam("index").toUIntOrNull()
if (index == null) {
it.status(400).result(objectmapper.writeValueAsString(mapOf("message" to "Invalid index")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid index")))
} else {
if (db.Delete_Messagebank_by_index(index)) {
it.result(objectmapper.writeValueAsString(mapOf("message" to "OK")))
db.Resort_Messagebank_by_ANN_ID()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else {
it.status(500).result(objectmapper.writeValueAsString(mapOf("message" to "Failed to delete messagebank with index $index")))
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to delete messagebank with index $index")))
}
}
}
@@ -376,15 +382,15 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
// update messagebank by index
val index = it.pathParam("index").toUIntOrNull()
if (index == null) {
it.status(400).result(objectmapper.writeValueAsString(mapOf("message" to "Invalid index")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid index")))
} else {
val mb = db.MessagebankList.find { xx -> xx.index == index }
if (mb == null) {
it.status(404).result(objectmapper.writeValueAsString(mapOf("message" to "Messagebank with index $index not found")))
it.status(404).result(objectmapper.writeValueAsString(resultMessage("Messagebank with index $index not found")))
} else {
val json: JsonNode = objectmapper.readTree(it.body())
if (json.isEmpty) {
it.status(400).result(objectmapper.writeValueAsString(mapOf("message" to "UpdateByIndex with index=$index has empty body")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("UpdateByIndex with index=$index has empty body")))
} else {
val _description = json.get("Description").asText()
val _language = json.get("Language").asText()
@@ -411,7 +417,7 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
mb.Voice_Type = _voice_type
changed = true
} else {
it.status(400).result(objectmapper.writeValueAsString(mapOf("message" to "Invalid Voice_Type")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Voice_Type")))
return@patch
}
}
@@ -425,11 +431,12 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
}
if (changed) {
if (db.Update_Messagebank_by_index(index, mb)) {
it.result(objectmapper.writeValueAsString(mapOf("message" to "OK")))
db.Resort_Messagebank_by_ANN_ID()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else it.status(500)
.result(objectmapper.writeValueAsString(mapOf("message" to "Failed to update messagebank with index $index")))
.result(objectmapper.writeValueAsString(resultMessage("Failed to update messagebank with index $index")))
} else it.status(400)
.result(objectmapper.writeValueAsString(mapOf("message" to "Nothing has changed for messagebank with index $index")))
.result(objectmapper.writeValueAsString(resultMessage("Nothing has changed for messagebank with index $index")))
}
}
}
@@ -446,24 +453,25 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
xlsxdata.write(out)
}
} else {
it.status(500).result(objectmapper.writeValueAsString(mapOf("message" to "Failed to export messagebank to XLSX")))
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to export messagebank to XLSX")))
}
}
post("ImportXLSX") {
val uploaded = it.uploadedFile("file")
if (uploaded == null) {
it.status(400).result(objectmapper.writeValueAsString(mapOf("message" to "No file uploaded")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("No file uploaded")))
return@post
}
try {
val xlsx = XSSFWorkbook(uploaded.content())
if (db.Import_Messagebank_XLSX(xlsx)) {
it.result(objectmapper.writeValueAsString(mapOf("message" to "OK")))
db.Resort_Messagebank_by_ANN_ID()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else {
it.status(500).result(objectmapper.writeValueAsString(mapOf("message" to "Failed to import messagebank from XLSX")))
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to import messagebank from XLSX")))
}
} catch (e: Exception) {
it.status(400).result(objectmapper.writeValueAsString(mapOf("message" to "Invalid XLSX file")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid XLSX file")))
}
}
}
@@ -477,35 +485,51 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
val json: JsonNode = objectmapper.readTree(it.body())
val tag = json.get("tag").asText()
val languages = json.get("language").asText().split(";")
println("Add Language Link, tag=$tag, languages=$languages")
if (ValidString(tag)){
if (languages.all { xx -> Language.entries.any { yy -> yy.name== xx} }){
if (db.LanguageLinkList.any { ll -> ll.TAG==tag }){
if (languages.all { xx -> Language.entries.any { yy -> yy.name.equals(xx,true)} }){
if (!db.LanguageLinkList.any { ll -> ll.TAG.equals(tag,true) }) {
val newvalue = LanguageLink(0u, tag, languages.joinToString(";"))
if (db.Add_LanguageLink(newvalue)){
it.result(objectmapper.writeValueAsString(mapOf("message" to "OK")))
} else it.status(500).result(objectmapper.writeValueAsString(mapOf("message" to "Failed to add language link to database")))
} else it.status(400).result(objectmapper.writeValueAsString(mapOf("message" to "TAG=$tag already exists")))
} else it.status(400).result(objectmapper.writeValueAsString(mapOf("message" to "Contains unsupported language")))
} else it.status(400).result(objectmapper.writeValueAsString(mapOf("message" to "Invalid tag or language")))
db.Resort_LanguageLink_by_TAG()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else {
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to add language link to database")))
println("Failed to add language link to database")
}
} else {
it.status(400).result(objectmapper.writeValueAsString(resultMessage("TAG=$tag already exists")))
println("TAG=$tag already exists")
}
} else {
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Contains unsupported language")))
println("Contains unsupported language")
}
} else {
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid tag or language")))
println("Invalid tag")
}
}
delete("List") {
// truncate language link table
if (db.Clear_LanguageLink()) {
it.result(objectmapper.writeValueAsString(mapOf("message" to "OK")))
db.Reload_LanguageLink()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else {
it.status(500).result(objectmapper.writeValueAsString(mapOf("message" to "Failed to truncate language link table")))
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to truncate language link table")))
}
}
delete("DeleteByIndex/{index}") {
// delete by index
val index = it.pathParam("index").toUIntOrNull()
if (index == null) {
it.status(400).result(objectmapper.writeValueAsString(mapOf("message" to "Invalid index")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid index")))
} else {
if (db.Delete_LanguageLink_by_index(index)) {
it.result(objectmapper.writeValueAsString(mapOf("message" to "OK")))
db.Resort_LanguageLink_by_TAG()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else {
it.status(500).result(objectmapper.writeValueAsString(mapOf("message" to "Failed to delete language link with index $index")))
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to delete language link with index $index")))
}
}
}
@@ -513,15 +537,15 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
// update by index
val index = it.pathParam("index").toUIntOrNull()
if (index == null) {
it.status(400).result(objectmapper.writeValueAsString(mapOf("message" to "Invalid index")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid index")))
} else {
val ll = db.LanguageLinkList.find { xx -> xx.index == index }
if (ll == null) {
it.status(404).result(objectmapper.writeValueAsString(mapOf("message" to "Language link with index $index not found")))
it.status(404).result(objectmapper.writeValueAsString(resultMessage("Language link with index $index not found")))
} else {
val json: JsonNode = objectmapper.readTree(it.body())
if (json.isEmpty) {
it.status(400).result(objectmapper.writeValueAsString(mapOf("message" to "UpdateByIndex with index=$index has empty body")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("UpdateByIndex with index=$index has empty body")))
} else {
val _tag = json.get("tag").asText()
val _language = json.get("language").asText()
@@ -536,11 +560,12 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
}
if (changed) {
if (db.Update_LanguageLink_by_index(index, ll)) {
it.result(objectmapper.writeValueAsString(mapOf("message" to "OK")))
db.Resort_LanguageLink_by_TAG()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else it.status(500)
.result(objectmapper.writeValueAsString(mapOf("message" to "Failed to update language link with index $index")))
.result(objectmapper.writeValueAsString(resultMessage("Failed to update language link with index $index")))
} else it.status(400)
.result(objectmapper.writeValueAsString(mapOf("message" to "Nothing has changed for language link with index $index")))
.result(objectmapper.writeValueAsString(resultMessage("Nothing has changed for language link with index $index")))
}
}
}
@@ -557,24 +582,25 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
xlsxdata.write(out)
}
} else {
it.status(500).result(objectmapper.writeValueAsString(mapOf("message" to "Failed to export language link to XLSX")))
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to export language link to XLSX")))
}
}
post("ImportXLSX") {
val uploaded = it.uploadedFile("file")
if (uploaded == null) {
it.status(400).result(objectmapper.writeValueAsString(mapOf("message" to "No file uploaded")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("No file uploaded")))
return@post
}
try {
val xlsx = XSSFWorkbook(uploaded.content())
if (db.Import_LanguageLink_XLSX(xlsx)) {
it.result(objectmapper.writeValueAsString(mapOf("message" to "OK")))
db.Resort_LanguageLink_by_TAG()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else {
it.status(500).result(objectmapper.writeValueAsString(mapOf("message" to "Failed to import language link from XLSX")))
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to import language link from XLSX")))
}
} catch (e: Exception) {
it.status(400).result(objectmapper.writeValueAsString(mapOf("message" to "Invalid XLSX file")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid XLSX file")))
}
}
}
@@ -586,21 +612,23 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
delete("List") {
// truncate timer table
if (db.Clear_Schedulebank()) {
it.result(objectmapper.writeValueAsString(mapOf("message" to "OK")))
db.Reload_Schedulebank()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else {
it.status(500).result(objectmapper.writeValueAsString(mapOf("message" to "Failed to truncate schedulebank table")))
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to truncate schedulebank table")))
}
}
delete("DeleteByIndex/{index}") {
// delete by index
val index = it.pathParam("index").toUIntOrNull()
if (index == null) {
it.status(400).result(objectmapper.writeValueAsString(mapOf("message" to "Invalid index")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid index")))
} else {
if (db.Delete_Schedulebank_by_index(index)) {
it.result(objectmapper.writeValueAsString(mapOf("message" to "OK")))
db.Resort_Schedulebank_by_Day_Time()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else {
it.status(500).result("Failed to delete schedule with index $index")
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to delete schedule with index $index")))
}
}
}
@@ -608,15 +636,15 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
// update by index
val index = it.pathParam("index").toUIntOrNull()
if (index == null) {
it.status(400).result(objectmapper.writeValueAsString(mapOf("message" to "Invalid index")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid index")))
} else {
val sb = db.SchedulebankList.find { xx -> xx.index == index }
if (sb == null) {
it.status(404).result("Schedule with index $index not found")
it.status(404).result(objectmapper.writeValueAsString(resultMessage("Schedule with index $index not found")))
} else {
val json: JsonNode = objectmapper.readTree(it.body())
if (json.isEmpty) {
it.status(400).result(objectmapper.writeValueAsString(mapOf("message" to "UpdateByIndex with index=$index has empty body")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("UpdateByIndex with index=$index has empty body")))
} else {
val _description = json.get("Description").asText()
val _time = json.get("Time").asText()
@@ -636,7 +664,7 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
sb.Time = _time
changed = true
} else {
it.status(400).result("Invalid Time format, must be HH:mm")
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Time format, must be HH:mm")))
return@patch
}
}
@@ -645,7 +673,7 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
sb.Day = _day
changed = true
} else {
it.status(400).result("Invalid Day format")
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Day format")))
return@patch
}
}
@@ -670,17 +698,18 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
sb.Language = _language
changed = true
} else {
it.status(400).result(objectmapper.writeValueAsString(mapOf("message" to "Invalid Language")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid Language")))
return@patch
}
}
if (changed) {
if (db.Update_Schedulebank_by_index(index, sb)) {
it.result(objectmapper.writeValueAsString(mapOf("message" to "OK")))
db.Resort_Schedulebank_by_Day_Time()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else it.status(500)
.result(objectmapper.writeValueAsString(mapOf("message" to "Failed to update schedule with index $index")))
.result(objectmapper.writeValueAsString(resultMessage("Failed to update schedule with index $index")))
} else it.status(400)
.result(objectmapper.writeValueAsString(mapOf("message" to "Nothing has changed for schedule with index $index")))
.result(objectmapper.writeValueAsString(resultMessage("Nothing has changed for schedule with index $index")))
}
}
}
@@ -697,24 +726,25 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
xlsxdata.write(out)
}
} else {
it.status(500).result(objectmapper.writeValueAsString(mapOf("message" to "Failed to export schedulebank to XLSX")))
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to export schedulebank to XLSX")))
}
}
post("ImportXLSX") {
val uploaded = it.uploadedFile("file")
if (uploaded == null) {
it.status(400).result(objectmapper.writeValueAsString(mapOf("message" to "No file uploaded")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("No file uploaded")))
return@post
}
try {
val xlsx = XSSFWorkbook(uploaded.content())
if (db.Import_Schedulebank_XLSX(xlsx)) {
it.result(objectmapper.writeValueAsString(mapOf("message" to "OK")))
db.Resort_Schedulebank_by_Day_Time()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else {
it.status(500).result("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(mapOf("message" to "Invalid XLSX file")))
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid XLSX file")))
}
}
}
@@ -735,7 +765,7 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
}
} else {
println("Invalid logdate=$logdate")
get1.status(400).result("Invalid logdate")
get1.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid logdate")))
}
}
get("ExportXLSX") { get1 ->
@@ -758,11 +788,86 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
xlsxdata.write(out)
}
} else {
get1.status(500).result("Failed to export log to XLSX")
get1.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to export log to XLSX")))
}
} else get1.status(400).result("Invalid logdate")
} else get1.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid logdate")))
}
}
path("BroadcastZones"){
get("List") {
// get broadcast zones list
it.result(MariaDB.ArrayListtoString(db.BroadcastZoneList))
}
delete("List"){
// truncate broadcast zones table
if (db.Clear_BroadcastZones()) {
db.GetBroadcastZones()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else {
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to truncate broadcast zones table")))
}
}
post("Add") {
// Parse JSON from request body
val json: JsonNode = objectmapper.readTree(it.body())
val zone = json.get("zone").asText()
val description = json.get("description").asText()
println("Add Broadcast Zone, zone=$zone, description=$description")
// TODO continue tomorrow
}
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.Delete_BroadcastZones_by_index(index)) {
db.Resort_BroadcastZones_by_description()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else {
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to delete broadcast zone with index $index")))
}
}
}
post("UpdateByIndex/{index}") {
// TODO continue tomorrow
}
get("ExportXLSX") {
val xlsxdata = db.Export_BroadcastZones_XLSX()
if (xlsxdata != null) {
it.header(
"Content-Type",
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
)
it.header("Content-Disposition", "attachment; filename=\"broadcastzones.xlsx\"")
it.outputStream().use { out ->
xlsxdata.write(out)
}
} else {
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to export broadcast zones 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.Import_BroadcastZones_XLSX(xlsx)) {
db.Resort_BroadcastZones_by_description()
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else {
it.status(500).result(objectmapper.writeValueAsString(resultMessage("Failed to import broadcast zones from XLSX")))
}
} catch (e: Exception) {
it.status(400).result(objectmapper.writeValueAsString(resultMessage("Invalid XLSX file")))
}
}
}
}
}
}.start(listenPort)