From 8b207584042be725d46428ba173870e9bf92b261 Mon Sep 17 00:00:00 2001 From: Raymond Yang Date: Sun, 9 Aug 2026 01:44:19 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E4=B8=8A=E7=94=9F=E6=88=90=E6=88=B0?= =?UTF-8?q?=E5=A0=B1=E8=A1=A8=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../database/service/BattleRecordService.kt | 14 ++++++++++++++ .../mapper/MemberMapper.kt | 12 ++++++++++++ .../pcrediveclanrecordbackend/plugins/Mongo.kt | 7 ++++++- 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/club/sakunadaisuki/pcrediveclanrecordbackend/database/service/BattleRecordService.kt b/src/main/kotlin/club/sakunadaisuki/pcrediveclanrecordbackend/database/service/BattleRecordService.kt index b0fb6aa..9ade40f 100644 --- a/src/main/kotlin/club/sakunadaisuki/pcrediveclanrecordbackend/database/service/BattleRecordService.kt +++ b/src/main/kotlin/club/sakunadaisuki/pcrediveclanrecordbackend/database/service/BattleRecordService.kt @@ -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 + var memberCollection: MongoCollection 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 = 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) + } } diff --git a/src/main/kotlin/club/sakunadaisuki/pcrediveclanrecordbackend/mapper/MemberMapper.kt b/src/main/kotlin/club/sakunadaisuki/pcrediveclanrecordbackend/mapper/MemberMapper.kt index 2379426..0929c57 100644 --- a/src/main/kotlin/club/sakunadaisuki/pcrediveclanrecordbackend/mapper/MemberMapper.kt +++ b/src/main/kotlin/club/sakunadaisuki/pcrediveclanrecordbackend/mapper/MemberMapper.kt @@ -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 @@ -35,4 +36,15 @@ fun UpdateMemberRequest.toDto(uid: String): MemberDto { discordID = discordID, leave = leave, ) +} + +fun MemberDto.toEmptyBattleRecordDto(date: String): BattleRecordDto { + return BattleRecordDto( + date = date, + uid = uid, + playerName = playerName, + discordName = discordName, + discordID = discordID, + attackDetailList = emptyList(), + ) } \ No newline at end of file diff --git a/src/main/kotlin/club/sakunadaisuki/pcrediveclanrecordbackend/plugins/Mongo.kt b/src/main/kotlin/club/sakunadaisuki/pcrediveclanrecordbackend/plugins/Mongo.kt index e2c252c..4b47bf2 100644 --- a/src/main/kotlin/club/sakunadaisuki/pcrediveclanrecordbackend/plugins/Mongo.kt +++ b/src/main/kotlin/club/sakunadaisuki/pcrediveclanrecordbackend/plugins/Mongo.kt @@ -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) + } + } } } }