Compare commits

...

2 Commits

Author SHA1 Message Date
ray650128 8b20758404 加上生成戰報表的功能 2026-08-09 01:44:19 +08:00
ray650128 0741d5846b 修正BattleRecord沒有加上@Serializable註釋 2026-08-09 01:30:40 +08:00
4 changed files with 35 additions and 1 deletions
@@ -1,6 +1,9 @@
package club.sakunadaisuki.pcrediveclanrecordbackend.database.service
import club.sakunadaisuki.pcrediveclanrecordbackend.database.dto.BattleRecordDto
import club.sakunadaisuki.pcrediveclanrecordbackend.database.dto.MemberDto
import club.sakunadaisuki.pcrediveclanrecordbackend.mapper.toEmptyBattleRecordDto
import club.sakunadaisuki.pcrediveclanrecordbackend.model.BattleRecord
import com.mongodb.client.MongoCollection
import com.mongodb.client.MongoDatabase
import com.mongodb.client.model.Filters
@@ -11,10 +14,14 @@ import org.bson.Document
class BattleRecordService(private val database: MongoDatabase) {
var collection: MongoCollection<Document>
var memberCollection: MongoCollection<Document>
init {
database.createCollection("battle_records")
collection = database.getCollection("battle_records")
database.createCollection("member")
memberCollection = database.getCollection("member")
}
// Create new car
@@ -56,4 +63,11 @@ class BattleRecordService(private val database: MongoDatabase) {
)
collection.findOneAndDelete(filter)
}
suspend fun createTable(date: String): List<BattleRecordDto> = withContext(Dispatchers.IO) {
val memberList = memberCollection.find(Filters.eq("leave", false)).toList().map(MemberDto::fromDocument)
val emptyBattleRecordList = memberList.map { it.toEmptyBattleRecordDto(date) }
collection.insertMany(emptyBattleRecordList.map { it.toDocument() })
collection.find(Filters.eq("date", date)).toList().map(BattleRecordDto::fromDocument)
}
}
@@ -1,5 +1,6 @@
package club.sakunadaisuki.pcrediveclanrecordbackend.mapper
import club.sakunadaisuki.pcrediveclanrecordbackend.database.dto.BattleRecordDto
import club.sakunadaisuki.pcrediveclanrecordbackend.database.dto.MemberDto
import club.sakunadaisuki.pcrediveclanrecordbackend.model.Member
import club.sakunadaisuki.pcrediveclanrecordbackend.model.MemberRequest
@@ -36,3 +37,14 @@ fun UpdateMemberRequest.toDto(uid: String): MemberDto {
leave = leave,
)
}
fun MemberDto.toEmptyBattleRecordDto(date: String): BattleRecordDto {
return BattleRecordDto(
date = date,
uid = uid,
playerName = playerName,
discordName = discordName,
discordID = discordID,
attackDetailList = emptyList(),
)
}
@@ -1,8 +1,10 @@
package club.sakunadaisuki.pcrediveclanrecordbackend.model
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import java.time.Instant
@Serializable
data class BattleRecord(
val date: String, // yyyy-MM-dd
var uid: String,
@@ -12,6 +14,7 @@ data class BattleRecord(
@SerialName("attack_detail_list") val attackDetailList: List<AttackDetail>
)
@Serializable
data class AttackDetail(
@SerialName("boss_round") val bossRound: Int, // 周目
@SerialName("boss_index") val bossIndex: Int, // 1~5 號王
@@ -126,7 +126,12 @@ fun Application.configureMongo() {
}
}
post("/battle_record/create_table/{date}") {
val date = call.parameters["date"] ?: throw IllegalArgumentException("No date")
battleRecordService.createTable(date).let { battleRecord ->
call.respond(HttpStatusCode.OK, battleRecord)
}
}
}
}
}