From 5552904983571d537f185c7f70a3d36b21d4e9c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9luchu?= Date: Fri, 4 Jul 2025 14:38:19 +0200 Subject: [PATCH] Fixed schedule endpoint --- .../com/jeluchu/core/utils/ParseDocuments.kt | 35 ------------------ .../rankings/services/RankingsService.kt | 2 +- .../schedule/services/ScheduleService.kt | 36 +++++++++++-------- 3 files changed, 23 insertions(+), 50 deletions(-) diff --git a/src/main/kotlin/com/jeluchu/core/utils/ParseDocuments.kt b/src/main/kotlin/com/jeluchu/core/utils/ParseDocuments.kt index 5f630dc..fd32baf 100644 --- a/src/main/kotlin/com/jeluchu/core/utils/ParseDocuments.kt +++ b/src/main/kotlin/com/jeluchu/core/utils/ParseDocuments.kt @@ -1,44 +1,9 @@ package com.jeluchu.core.utils -import com.jeluchu.features.rankings.models.AnimeTopEntity -import com.jeluchu.features.schedule.models.DayEntity -import com.jeluchu.features.schedule.models.ScheduleData import kotlinx.serialization.KSerializer -import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json import org.bson.Document -fun parseTopDataToDocuments(data: ScheduleData): List { - val documents = mutableListOf() - fun processDay(dayList: List?) { - dayList?.forEach { animeData -> - val animeJsonString = Json.encodeToString(animeData) - val document = Document.parse(animeJsonString) - documents.add(document) - } - } - - processDay(data.monday) - processDay(data.tuesday) - processDay(data.wednesday) - processDay(data.thursday) - processDay(data.friday) - processDay(data.saturday) - processDay(data.sunday) - - return documents -} - -fun parseTopDataToDocuments(data: List?): List { - val documents = mutableListOf() - data?.forEach { animeData -> - val animeJsonString = Json.encodeToString(animeData) - val document = Document.parse(animeJsonString) - documents.add(document) - } - return documents -} - fun parseDataToDocuments(data: List?, serializer: KSerializer): List { val documents = mutableListOf() data?.forEach { item -> diff --git a/src/main/kotlin/com/jeluchu/features/rankings/services/RankingsService.kt b/src/main/kotlin/com/jeluchu/features/rankings/services/RankingsService.kt index f2979c3..76b6eb9 100644 --- a/src/main/kotlin/com/jeluchu/features/rankings/services/RankingsService.kt +++ b/src/main/kotlin/com/jeluchu/features/rankings/services/RankingsService.kt @@ -368,7 +368,7 @@ class RankingsService( }.orEmpty().take(11).distinctBy { it.malId } val documentsToInsert = parseDataToDocuments(response, AnimeTopEntity.serializer()) - if (documentsToInsert.isNotEmpty()) animeRankingTopTen .insertMany(documentsToInsert) + if (documentsToInsert.isNotEmpty()) animeRankingTopTen.insertMany(documentsToInsert) timers.update(timerKey) val elements = documentsToInsert.map { documentToAnimeTopEntity(it) } diff --git a/src/main/kotlin/com/jeluchu/features/schedule/services/ScheduleService.kt b/src/main/kotlin/com/jeluchu/features/schedule/services/ScheduleService.kt index cdb9f12..47b7345 100644 --- a/src/main/kotlin/com/jeluchu/features/schedule/services/ScheduleService.kt +++ b/src/main/kotlin/com/jeluchu/features/schedule/services/ScheduleService.kt @@ -11,6 +11,7 @@ import com.jeluchu.core.models.ErrorResponse import com.jeluchu.core.models.jikan.anime.AnimeData.Companion.toDayEntity import com.jeluchu.core.utils.* import com.jeluchu.features.anime.mappers.documentToScheduleDayEntity +import com.jeluchu.features.schedule.models.DayEntity import com.jeluchu.features.schedule.models.ScheduleData import com.jeluchu.features.schedule.models.ScheduleEntity import com.mongodb.client.MongoDatabase @@ -37,22 +38,20 @@ class ScheduleService( if (needsUpdate) { schedules.deleteMany(Document()) + val documents = mutableListOf() - val response = ScheduleData( - sunday = getSchedule(Day.SUNDAY).data?.map { it.toDayEntity(Day.SUNDAY) }.orEmpty(), - friday = getSchedule(Day.FRIDAY).data?.map { it.toDayEntity(Day.FRIDAY) }.orEmpty(), - monday = getSchedule(Day.MONDAY).data?.map { it.toDayEntity(Day.MONDAY) }.orEmpty(), - tuesday = getSchedule(Day.TUESDAY).data?.map { it.toDayEntity(Day.TUESDAY) }.orEmpty(), - thursday = getSchedule(Day.THURSDAY).data?.map { it.toDayEntity(Day.THURSDAY) }.orEmpty(), - saturday = getSchedule(Day.SATURDAY).data?.map { it.toDayEntity(Day.SATURDAY) }.orEmpty(), - wednesday = getSchedule(Day.WEDNESDAY).data?.map { it.toDayEntity(Day.WEDNESDAY) }.orEmpty() - ) + Day.entries.forEach { day -> + val animes = getSchedule(day).data?.map { it.toDayEntity(day) }.orEmpty() + val documentsToInsert = parseDataToDocuments(animes, DayEntity.serializer()) + if (documentsToInsert.isNotEmpty()) { + documents.addAll(documentsToInsert) + schedules.insertMany(documentsToInsert) + } + } - val elements = parseTopDataToDocuments(response) - if (elements.isNotEmpty()) schedules.insertMany(elements) timers.update(TimerKey.SCHEDULE) - call.respond(HttpStatusCode.OK, elements.documentWeekMapper()) + call.respond(HttpStatusCode.OK, documents.documentWeekMapper()) } else { val elements = schedules.find().toList() call.respond(HttpStatusCode.OK, elements.documentWeekMapper()) @@ -78,7 +77,16 @@ class ScheduleService( ) private fun List.documentWeekMapper(): String { - val directory = map { documentToScheduleDayEntity(it) } - return Json.encodeToString(directory) + val elements = map { documentToScheduleDayEntity(it) } + + return Json.encodeToString(ScheduleData( + monday = elements.filter { it.day == Day.MONDAY.name.lowercase() }, + tuesday = elements.filter { it.day == Day.TUESDAY.name.lowercase() }, + wednesday = elements.filter { it.day == Day.WEDNESDAY.name.lowercase() }, + thursday = elements.filter { it.day == Day.THURSDAY.name.lowercase() }, + friday = elements.filter { it.day == Day.FRIDAY.name.lowercase() }, + saturday = elements.filter { it.day == Day.SATURDAY.name.lowercase() }, + sunday = elements.filter { it.day == Day.SUNDAY.name.lowercase() } + )) } } \ No newline at end of file