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) + } + } } } }