commit 03/09/2025

This commit is contained in:
2025-09-03 11:05:30 +07:00
parent ea1defa78e
commit ea04f8d316
14 changed files with 1272 additions and 210 deletions

View File

@@ -2,17 +2,23 @@ package web
import codes.Somecodes
import codes.Somecodes.Companion.ValidDate
import codes.Somecodes.Companion.ValidFile
import codes.Somecodes.Companion.ValidString
import com.fasterxml.jackson.databind.JsonNode
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import content.Category
import database.MariaDB
import database.Soundbank
import io.javalin.Javalin
import io.javalin.apibuilder.ApiBuilder.before
import io.javalin.apibuilder.ApiBuilder.delete
import io.javalin.apibuilder.ApiBuilder.get
import io.javalin.apibuilder.ApiBuilder.patch
import io.javalin.apibuilder.ApiBuilder.path
import io.javalin.apibuilder.ApiBuilder.post
import io.javalin.apibuilder.ApiBuilder.ws
import io.javalin.http.Context
import io.javalin.json.JavalinJackson
import io.javalin.websocket.WsMessageContext
import java.time.LocalDateTime
@@ -36,6 +42,7 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
config ->
config.useVirtualThreads = true
config.staticFiles.add("/webpage")
config.jsonMapper(JavalinJackson(jacksonObjectMapper()))
config.router.apiBuilder {
path("/"){
get { ctx ->
@@ -133,143 +140,250 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
}
path("soundbank.html") {
before {CheckUsers(it)}
get("List"){
// get soundbank list
it.result(MariaDB.ArrayListtoString(db.SoundbankList))
}
delete("List"){
// truncate soundbank table
if (db.Clear_Soundbank()){
it.result("OK")
} else {
it.status(500).result("Failed to truncate soundbank table")
}
}
delete("DeleteByIndex/{index}"){
// delete by index
val index = it.pathParam("index").toUIntOrNull()
if (index == null){
it.status(400).result("Invalid index")
} else{
if (db.Delete_Soundbank_by_index(index)){
it.result("OK")
} else {
it.status(500).result("Failed to delete soundbank with index $index")
}
}
}
}
path("messagebank.html") {
before { CheckUsers(it) }
get("List"){
// get messagebank list
it.result(MariaDB.ArrayListtoString(db.MessagebankList))
}
delete("List"){
// truncate messagebank table
if (db.Clear_Messagebank()){
it.result("OK")
} else {
it.status(500).result("Failed to truncate messagebank table")
}
}
delete("DeleteByIndex/{index}"){
// delete by index
val index = it.pathParam("index").toUIntOrNull()
if (index == null){
it.status(400).result("Invalid index")
} else{
if (db.Delete_Messagebank_by_index(index)){
it.result("OK")
} else {
it.status(500).result("Failed to delete messagebank with index $index")
}
}
}
}
path("language.html") {
before { CheckUsers(it) }
get("List"){
// get language link list
it.result(MariaDB.ArrayListtoString(db.LanguageLinkList))
}
delete("List"){
// truncate language link table
if (db.Clear_LanguageLink()){
it.result("OK")
} else {
it.status(500).result("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("Invalid index")
} else{
if (db.Delete_LanguageLink_by_index(index)){
it.result("OK")
} else {
it.status(500).result("Failed to delete language link with index $index")
}
}
}
}
path("log.html") {
before { CheckUsers(it) }
get("List/<logdate>/<logfilter>"){ get1 ->
val logdate = get1.pathParam("logdate")
val logfilter = get1.pathParam("logfilter")
if (ValidDate(logdate)){
if (ValidString(logfilter)){
// ada log filter
db.GetLog(logdate, logfilter){
get1.result(MariaDB.ArrayListtoString(it))
}
} else {
db.GetLog(logdate){
get1.result(MariaDB.ArrayListtoString(it))
}
}
} else get1.status(400).result("Invalid logdate")
}
}
path("setting.html") {
before { CheckUsers(it) }
}
path("timer.html") {
before { CheckUsers(it) }
get("List"){
// get timer list
it.result(MariaDB.ArrayListtoString(db.SchedulebankList))
}
delete("List"){
// truncate timer table
if (db.Clear_Schedulebank()){
it.result("OK")
} else {
it.status(500).result("Failed to truncate schedulebank table")
}
path("api"){
path("SoundBank"){
get("List"){
// get soundbank list
it.result(MariaDB.ArrayListtoString(db.SoundbankList))
}
}
delete("DeleteByIndex/{index}"){
// delete by index
val index = it.pathParam("index").toUIntOrNull()
if (index == null){
it.status(400).result("Invalid index")
} else{
if (db.Delete_Schedulebank_by_index(index)){
post("Add"){
try {
val addvalue = objectmapper.readValue(it.body(), Soundbank::class.java)
if (ValidString(addvalue.Description)){
if (ValidString(addvalue.TAG)){
if (ValidString(addvalue.Category)){
if (ValidString(addvalue.Language)){
if (ValidString(addvalue.Path)){
// check apakah TAG sudah ada untuk language dan category yang sama
val exists = db.SoundbankList.any { sb ->
sb.TAG == addvalue.TAG && sb.Language == addvalue.Language && sb.Category == addvalue.Category
}
if (!exists){
if (ValidFile(addvalue.Path)){
if (db.Add_Soundbank(addvalue)){
it.result("OK")
} else it.status(500).result("Failed to add soundbank to database")
} else it.status(400).result("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("Invalid Language")
} else it.status(400).result("Invalid Category")
} else it.status(400).result("Invalid TAG")
} else it.status(400).result("Invalid Description")
} catch (_: Exception){
it.status(400).result("Invalid request body")
}
}
delete("List"){
// truncate soundbank table
if (db.Clear_Soundbank()){
it.result("OK")
} else {
it.status(500).result("Failed to delete schedule with index $index")
it.status(500).result("Failed to truncate soundbank table")
}
}
delete("DeleteByIndex/{index}"){
// delete by index
val index = it.pathParam("index").toUIntOrNull()
if (index == null){
it.status(400).result("Invalid index")
} else{
if (db.Delete_Soundbank_by_index(index)){
it.result("OK")
} else {
it.status(500).result("Failed to delete soundbank with index $index")
}
}
}
patch("UpdateByIndex/{index}"){
// update by index
val index = it.pathParam("index").toUIntOrNull()
if (index == null){
// tidak ada path param index
it.status(400).result("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")
} else {
// soundbank dengan index tersebut ditemukan, sekarang update
val json : JsonNode = objectmapper.readTree(it.body())
if (json.isEmpty){
it.status(400).result("UpdateByIndex with index=$index has empty body")
} else {
val _description = json.get("Description").asText()
val _tag = json.get("TAG").asText()
val _category = json.get("Category").asText()
val _language = json.get("Language").asText()
val _path = json.get("Path").asText()
var changed = false
if (ValidString(_description) && _description!=sb.Description){
sb.Description = _description
changed = true
}
if (ValidString(_tag) && _tag!=sb.TAG){
sb.TAG = _tag
changed = true
}
if (ValidString(_category) && _category!=sb.Category){
if (Category.entries.any {
cat -> cat.name == _category
}) {
sb.Category = _category
changed = true
} else {
it.status(400).result("Invalid Category")
return@patch
}
}
if (ValidString(_language) && _language!=sb.Language){
sb.Language = _language
changed = true
}
if (ValidString(_path) && _path!=sb.Path){
if (ValidFile(_path)){
sb.Path = _path
changed = true
} else {
it.status(400).result("Invalid Path, file does not exist")
return@patch
}
}
if (changed){
if (db.Update_Soundbank_by_index(index, sb)){
it.result("OK")
} else it.status(500).result("Failed to update soundbank with index $index")
} else it.status(400).result("Nothing has changed for soundbank with index $index")
}
}
}
}
get("ExportXLSX"){
}
post("ImportXLSX"){
val uploaded = it.uploadedFile("file")
if (uploaded==null){
it.status(400).result("No file uploaded")
return@post
}
}
}
path("MessageBank"){
get("List"){
// get messagebank list
it.result(MariaDB.ArrayListtoString(db.MessagebankList))
}
delete("List"){
// truncate messagebank table
if (db.Clear_Messagebank()){
it.result("OK")
} else {
it.status(500).result("Failed to truncate messagebank table")
}
}
delete("DeleteByIndex/{index}"){
// delete by index
val index = it.pathParam("index").toUIntOrNull()
if (index == null){
it.status(400).result("Invalid index")
} else{
if (db.Delete_Messagebank_by_index(index)){
it.result("OK")
} else {
it.status(500).result("Failed to delete messagebank with index $index")
}
}
}
}
path("LanguageLink"){
get("List"){
// get language link list
it.result(MariaDB.ArrayListtoString(db.LanguageLinkList))
}
delete("List"){
// truncate language link table
if (db.Clear_LanguageLink()){
it.result("OK")
} else {
it.status(500).result("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("Invalid index")
} else{
if (db.Delete_LanguageLink_by_index(index)){
it.result("OK")
} else {
it.status(500).result("Failed to delete language link with index $index")
}
}
}
}
path("ScheduleBank"){
get("List"){
// get timer list
it.result(MariaDB.ArrayListtoString(db.SchedulebankList))
}
delete("List"){
// truncate timer table
if (db.Clear_Schedulebank()){
it.result("OK")
} else {
it.status(500).result("Failed to truncate schedulebank table")
}
}
delete("DeleteByIndex/{index}"){
// delete by index
val index = it.pathParam("index").toUIntOrNull()
if (index == null){
it.status(400).result("Invalid index")
} else{
if (db.Delete_Schedulebank_by_index(index)){
it.result("OK")
} else {
it.status(500).result("Failed to delete schedule with index $index")
}
}
}
}
path("Log"){
get("List/<logdate>/<logfilter>"){ get1 ->
val logdate = get1.pathParam("logdate")
val logfilter = get1.pathParam("logfilter")
if (ValidDate(logdate)){
if (ValidString(logfilter)){
// ada log filter
db.GetLog(logdate, logfilter){
get1.result(MariaDB.ArrayListtoString(it))
}
} else {
db.GetLog(logdate){
get1.result(MariaDB.ArrayListtoString(it))
}
}
} else get1.status(400).result("Invalid logdate")
}
}
}
}