Fixed Directory endpoint and improve anime endpoints

This commit is contained in:
Jéluchu 2024-12-19 12:07:06 +01:00
parent 02125b1403
commit f948ca6b13
28 changed files with 55 additions and 38 deletions

2
.gitignore vendored
View File

@ -47,3 +47,5 @@ out/
gradlew
gradlew.bat
.kotlin/

View File

@ -1,6 +1,5 @@
package com.jeluchu.core.models.jikan.anime
import com.jeluchu.core.models.jikan.anime.Prop
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

View File

@ -3,7 +3,6 @@ package com.jeluchu.core.models.jikan.anime
import com.jeluchu.core.enums.Day
import com.jeluchu.core.utils.toVideoPromo
import com.jeluchu.features.rankings.models.AnimeTopEntity
import com.jeluchu.features.rankings.models.MangaTopEntity
import com.jeluchu.features.schedule.models.DayEntity
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

View File

@ -1,9 +1,7 @@
package fordelete
import com.jeluchu.core.models.jikan.anime.Images
import com.jeluchu.core.models.jikan.people.PeopleData
import com.jeluchu.features.rankings.models.CharacterTopEntity
import com.jeluchu.features.rankings.models.PeopleTopEntity
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

View File

@ -5,10 +5,14 @@ object BaseUrls {
}
object Endpoints {
const val FULL = "full"
const val ANIME = "anime/"
const val SCHEDULES = "schedules"
const val TOP_ANIME = "top/anime"
const val TOP_MANGA = "top/manga"
const val TOP_PEOPLE = "top/people"
const val STATISTICS = "statistics"
const val CHARACTERS = "characters"
const val TOP_CHARACTER = "top/characters"
}
@ -41,5 +45,6 @@ object Collections {
const val ANIME_RANKING = "anime_ranking"
const val MANGA_RANKING = "manga_ranking"
const val PEOPLE_RANKING = "people_ranking"
const val ANIME_DIRECTORY = "anime_directory"
const val CHARACTER_RANKING = "character_ranking"
}

View File

@ -1,9 +1,9 @@
package com.jeluchu.core.utils
import com.example.models.VideoPromo
import com.jeluchu.core.models.jikan.anime.ImageFormat
import com.jeluchu.core.models.jikan.anime.Trailer
import com.jeluchu.features.anime.models.anime.Images
import com.jeluchu.features.anime.models.anime.VideoPromo
fun Trailer.toVideoPromo() = VideoPromo(
url = url.orEmpty(),

View File

@ -1,12 +1,14 @@
package com.jeluchu.features.anime.mappers
import com.example.models.*
import com.jeluchu.core.extensions.*
import com.jeluchu.features.anime.models.anime.Images
import com.jeluchu.features.anime.models.anime.*
import com.jeluchu.features.anime.models.directory.AnimeDirectoryEntity
import com.jeluchu.features.rankings.models.AnimeTopEntity
import com.jeluchu.features.schedule.models.DayEntity
import org.bson.Document
import java.sql.Timestamp
import java.time.ZonedDateTime
import java.time.format.DateTimeFormatter
fun documentToAnimeDirectoryEntity(doc: Document) = AnimeDirectoryEntity(
rank = doc.getIntSafe("rank"),
@ -26,7 +28,7 @@ fun documentToAnimeDirectoryEntity(doc: Document) = AnimeDirectoryEntity(
fun documentToMoreInfoEntity(doc: Document): MoreInfoEntity {
return MoreInfoEntity(
id = doc.getLongSafe("id"),
id = doc.getObjectId("_id").toString(),
malId = doc.getIntSafe("malId"),
title = doc.getStringSafe("title"),
poster = doc.getStringSafe("poster"),
@ -155,9 +157,14 @@ fun documentToIndividual(doc: Document): Individual {
fun documentToMergedEpisode(doc: Document): MergedEpisode {
return MergedEpisode(
number = doc.getIntSafe("number", 0),
ids = doc.getListSafe<Document>("ids").map { documentToAnimeSource(it) }.toMutableList(),
nextEpisodeDate = doc.getStringSafe("nextEpisodeDate")
malId = doc.getIntSafe("malId"),
title = doc.getStringSafe("title"),
titleJapanese = doc.getStringSafe("titleJapanese"),
titleRomanji = doc.getStringSafe("titleRomanji"),
aired = doc.getStringSafe("aired", ZonedDateTime.now().format(DateTimeFormatter.ISO_OFFSET_DATE_TIME)),
score = doc.getFloatSafe("score"),
filler = doc.getBooleanSafe("filler"),
recap = doc.getBooleanSafe("recap")
)
}

View File

@ -1,4 +1,4 @@
package com.example.models
package com.jeluchu.features.anime.models.anime
import kotlinx.serialization.Serializable

View File

@ -1,4 +1,4 @@
package com.example.models
package com.jeluchu.features.anime.models.anime
import kotlinx.serialization.Serializable

View File

@ -1,4 +1,4 @@
package com.example.models
package com.jeluchu.features.anime.models.anime
import kotlinx.serialization.Serializable

View File

@ -1,4 +1,4 @@
package com.example.models
package com.jeluchu.features.anime.models.anime
import kotlinx.serialization.Serializable

View File

@ -1,4 +1,4 @@
package com.example.models
package com.jeluchu.features.anime.models.anime
import kotlinx.serialization.Serializable

View File

@ -1,4 +1,4 @@
package com.example.models
package com.jeluchu.features.anime.models.anime
import kotlinx.serialization.Serializable

View File

@ -1,4 +1,4 @@
package com.example.models
package com.jeluchu.features.anime.models.anime
import kotlinx.serialization.Serializable

View File

@ -1,4 +1,4 @@
package com.example.models
package com.jeluchu.features.anime.models.anime
import kotlinx.serialization.Serializable

View File

@ -1,4 +1,4 @@
package com.example.models
package com.jeluchu.features.anime.models.anime
import kotlinx.serialization.Serializable

View File

@ -1,4 +1,4 @@
package com.example.models
package com.jeluchu.features.anime.models.anime
import kotlinx.serialization.Serializable

View File

@ -1,10 +1,16 @@
package com.example.models
package com.jeluchu.features.anime.models.anime
import kotlinx.serialization.Serializable
@Serializable
data class MergedEpisode(
var number: Int,
var ids: MutableList<AnimeSource> = mutableListOf(),
var nextEpisodeDate: String = ""
var malId: Int,
var title: String,
var titleJapanese: String,
var titleRomanji: String,
var aired: String,
var score: Float,
var filler: Boolean,
var recap: Boolean,
)

View File

@ -1,4 +1,4 @@
package com.example.models
package com.jeluchu.features.anime.models.anime
import kotlinx.serialization.Serializable
import kotlinx.serialization.encodeToString
@ -7,8 +7,8 @@ import org.bson.Document
@Serializable
data class MoreInfoEntity(
val id: Long? = null,
var malId: Int = 0,
val id: String = "",
var title: String = "",
var poster: String = "",
var cover: String = "",

View File

@ -1,4 +1,4 @@
package com.example.models
package com.jeluchu.features.anime.models.anime
import kotlinx.serialization.Serializable

View File

@ -1,4 +1,4 @@
package com.example.models
package com.jeluchu.features.anime.models.anime
import kotlinx.serialization.Serializable

View File

@ -1,4 +1,4 @@
package com.example.models
package com.jeluchu.features.anime.models.anime
import kotlinx.serialization.Serializable

View File

@ -1,4 +1,4 @@
package com.example.models
package com.jeluchu.features.anime.models.anime
import kotlinx.serialization.Serializable

View File

@ -1,4 +1,4 @@
package com.example.models
package com.jeluchu.features.anime.models.anime
import kotlinx.serialization.Serializable

View File

@ -1,6 +1,5 @@
package com.example.models
package com.jeluchu.features.anime.models.anime
import com.jeluchu.features.anime.models.anime.Images
import kotlinx.serialization.Serializable
@Serializable

View File

@ -8,8 +8,10 @@ import io.ktor.server.routing.*
fun Route.animeEndpoints(
mongoDatabase: MongoDatabase,
service: AnimeService = AnimeService(mongoDatabase)
service: AnimeService = AnimeService(mongoDatabase),
) {
getToJson(Routes.DIRECTORY) { service.getDirectory(call) }
getToJson(Routes.ANIME_DETAILS) { service.getAnimeByMalId(call) }
route(Routes.DIRECTORY) {
getToJson { service.getDirectory(call) }
}
}

View File

@ -1,6 +1,6 @@
package com.jeluchu.features.rankings.models
import com.example.models.VideoPromo
import com.jeluchu.features.anime.models.anime.VideoPromo
import kotlinx.serialization.Serializable
@Serializable

View File

@ -1,7 +1,7 @@
package com.jeluchu.features.schedule.models
import com.jeluchu.core.models.jikan.search.Pagination
import com.jeluchu.core.models.jikan.anime.AnimeData
import com.jeluchu.core.models.jikan.search.Pagination
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable