From f8a1328a03d557e7ba4ab6f84822eca8c61b1286 Mon Sep 17 00:00:00 2001 From: Raymond Yang Date: Tue, 11 Aug 2026 11:14:47 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E4=B8=8A=E6=96=B0=E5=A2=9E=E6=95=B4?= =?UTF-8?q?=E6=9C=88=E7=9A=84=E8=A1=A8=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../database/service/BattleRecordService.kt | 27 +++++++++++++++++++ .../plugins/Mongo.kt | 9 ++++++- 2 files changed, 35 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 1de9b20..97adac8 100644 --- a/src/main/kotlin/club/sakunadaisuki/pcrediveclanrecordbackend/database/service/BattleRecordService.kt +++ b/src/main/kotlin/club/sakunadaisuki/pcrediveclanrecordbackend/database/service/BattleRecordService.kt @@ -11,6 +11,8 @@ import com.mongodb.client.model.Filters.and import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import org.bson.Document +import java.time.LocalDate +import java.time.YearMonth class BattleRecordService(private val database: MongoDatabase) { var collection: MongoCollection @@ -70,4 +72,29 @@ class BattleRecordService(private val database: MongoDatabase) { collection.insertMany(emptyBattleRecordList.map { it.toDocument() }) collection.find(Filters.eq("date", date)).toList().map(BattleRecordDto::fromDocument) } + + suspend fun createTableMonth(date: String): List> = withContext(Dispatchers.IO) { + val memberList = memberCollection.find(Filters.eq("leave", false)).toList().map(MemberDto::fromDocument) + + // 1. 指定年份與月份(例如:2026年8月) + val dateSplit = date.split("-").map { it.toInt() } + val yearMonth = YearMonth.of(dateSplit[0], dateSplit[1]) + + // 2. 取得該月最後一天的 LocalDate 物件 + val lastDayOfMonth = yearMonth.atEndOfMonth() + + // 3. 取得最後 5 天的日期列表(由舊到新排序) + val lastFiveDays: List = (4 downTo 0).map { lastDayOfMonth.minusDays(it.toLong()) } + + // 4. Temp list + val tables = mutableListOf>() + + // 5. 寫入資料 + lastFiveDays.forEach { date -> + val emptyBattleRecordList = memberList.map { it.toEmptyBattleRecordDto(date.toString()) } + tables.add(emptyBattleRecordList) + collection.insertMany(emptyBattleRecordList.map { it.toDocument() }) + } + tables + } } diff --git a/src/main/kotlin/club/sakunadaisuki/pcrediveclanrecordbackend/plugins/Mongo.kt b/src/main/kotlin/club/sakunadaisuki/pcrediveclanrecordbackend/plugins/Mongo.kt index 2ad654a..ddf8308 100644 --- a/src/main/kotlin/club/sakunadaisuki/pcrediveclanrecordbackend/plugins/Mongo.kt +++ b/src/main/kotlin/club/sakunadaisuki/pcrediveclanrecordbackend/plugins/Mongo.kt @@ -130,12 +130,19 @@ fun Application.configureMongo() { } } - post("/battle_record/create_table/{date}") { + post("/battle_record/create_table_day/{date}") { val date = call.parameters["date"] ?: throw IllegalArgumentException("No date") battleRecordService.createTable(date).let { battleRecord -> call.respond(HttpStatusCode.OK, battleRecord) } } + + post("/battle_record/create_table_month/{date}") { + val date = call.parameters["date"] ?: throw IllegalArgumentException("No date") + battleRecordService.createTableMonth(date).let { battleRecordList -> + call.respond(HttpStatusCode.OK, battleRecordList) + } + } } } }