Skip to content

Commit 6931ff7

Browse files
committed
Fixed Simple Anime Entity and move tags to suggestion endpoint
1 parent b0fd2e8 commit 6931ff7

File tree

5 files changed

+35
-16
lines changed

5 files changed

+35
-16
lines changed

src/main/kotlin/com/jeluchu/core/models/SimpleAnimeEntity.kt

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@ package com.jeluchu.core.models
33
import com.jeluchu.core.extensions.getDocumentSafe
44
import com.jeluchu.core.extensions.getIntSafe
55
import com.jeluchu.core.extensions.getStringSafe
6-
import com.jeluchu.features.anime.mappers.documentToMultipleLanguageLists
7-
import com.jeluchu.features.anime.models.anime.MultipleLanguageLists
8-
import com.jeluchu.features.anime.models.tags.TagsAnimeEntity
6+
import com.jeluchu.core.utils.SeasonCalendar
97
import kotlinx.serialization.Serializable
108
import org.bson.Document
119

@@ -15,13 +13,26 @@ data class SimpleAnimeEntity(
1513
val type: String,
1614
val title: String,
1715
val image: String,
18-
val score: String
19-
)
16+
val score: String,
17+
val season: SeasonInfo
18+
) {
19+
@Serializable
20+
data class SeasonInfo(
21+
val year: Int? = null,
22+
val station: String? = null
23+
)
24+
}
2025

2126
fun documentToSimpleAnimeEntity(doc: Document) = SimpleAnimeEntity(
2227
malId = doc.getIntSafe("malId"),
2328
title = doc.getStringSafe("title"),
2429
type = doc.getStringSafe("type"),
2530
score = doc.getStringSafe("score"),
26-
image = doc.getStringSafe("poster")
31+
image = doc.getStringSafe("poster"),
32+
season = doc.getDocumentSafe("season")?.let { documentToSeasonInfo(it) } ?: SimpleAnimeEntity.SeasonInfo(),
33+
)
34+
35+
fun documentToSeasonInfo(doc: Document) = SimpleAnimeEntity.SeasonInfo(
36+
year = doc.getIntSafe("year"),
37+
station = doc.getStringSafe("station")
2738
)

src/main/kotlin/com/jeluchu/core/utils/Constants.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ object Routes {
7474
const val SEASON_PARAMS = "/{year}/{season}"
7575
const val DAY = "/{day}"
7676
const val THEMES = "/themes"
77+
const val SUGGESTIONS = "/suggestions"
7778
const val YEAR_INDEX = "/yearIndex"
7879
}
7980

src/main/kotlin/com/jeluchu/features/anime/routes/AnimeRoutes.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,12 @@ fun Route.animeEndpoints(
1818
) = route(Routes.ANIME) {
1919
getToJson { service.getAnimeByType(call) }
2020
getToJson(Routes.ID) { service.getAnimeByMalId(call) }
21-
getToJson(Routes.TAGS) { tagsService.getAnimeByAnyTag(call) }
2221
getToJson(Routes.LAST_EPISODES) { service.getLastEpisodes(call) }
2322

23+
route(Routes.SUGGESTIONS) {
24+
getToJson { tagsService.getAnimeByAnyTag(call) }
25+
}
26+
2427
route(Routes.SEASON) {
2528
getToJson { seasonService.getAnimeBySeason(call) }
2629
getToJson(Routes.YEAR_INDEX) { seasonService.getYearsAndSeasons(call) }

src/main/kotlin/com/jeluchu/features/anime/services/SeasonService.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class SeasonService(
2525
) {
2626
suspend fun getAnimeBySeason(call: RoutingCall) {
2727
val year = call.request.queryParameters["year"]?.toInt() ?: SeasonCalendar.currentYear
28-
val station = parseSeasons(call.request.queryParameters["season"] ?: SeasonCalendar.currentSeason.name)
28+
val station = parseSeasons(call.request.queryParameters["station"] ?: SeasonCalendar.currentSeason.name)
2929
?: SeasonCalendar.currentSeason
3030

3131
val query = directory.find(

src/main/kotlin/com/jeluchu/features/anime/services/TagsService.kt

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.jeluchu.features.anime.services
22

3+
import com.jeluchu.core.enums.AnimeStatusTypes
34
import com.jeluchu.core.models.documentToSimpleAnimeEntity
45
import com.jeluchu.core.utils.Collections
56
import com.mongodb.client.MongoCollection
@@ -17,23 +18,26 @@ class TagsService(
1718
private val directory: MongoCollection<Document> = database.getCollection(Collections.ANIME_DIRECTORY)
1819
) {
1920
suspend fun getAnimeByAnyTag(call: RoutingCall) {
20-
val tagsParam = call.request.queryParameters["tags"].orEmpty()
21+
val tags = call.request.queryParameters["tags"].orEmpty()
2122

22-
val tags = if (tagsParam.isNotEmpty()) {
23-
tagsParam.split(",").map { it.trim() }
23+
val tagsList = if (tags.isNotEmpty()) {
24+
tags.split(",").map { it.trim() }
2425
} else emptyList()
2526

26-
if (tags.isEmpty()) {
27+
if (tagsList.isEmpty()) {
2728
call.respond(HttpStatusCode.BadRequest, "No tags provided")
2829
return
2930
}
3031

3132
val query = directory.find(
32-
Filters.or(
33-
Filters.`in`("tags.es", tags),
34-
Filters.`in`("tags.en", tags),
33+
Filters.and(
34+
Filters.or(
35+
Filters.`in`("tags.es", tagsList),
36+
Filters.`in`("tags.en", tagsList)
37+
),
38+
Filters.`in`("status", listOf(AnimeStatusTypes.FINISHED, AnimeStatusTypes.ONGOING)),
3539
Filters.ne("type", "MUSIC"),
36-
Filters.ne("type", "PV"),
40+
Filters.ne("type", "PV")
3741
)
3842
)
3943
.toList()

0 commit comments

Comments
 (0)