feat: reviews

This commit is contained in:
rebelonion
2024-05-12 03:37:41 -05:00
parent 831b99ae40
commit a0fabd3ca6
16 changed files with 642 additions and 34 deletions

View File

@@ -2,6 +2,7 @@ package ani.dantotsu.connections.anilist
import ani.dantotsu.connections.anilist.Anilist.executeQuery
import ani.dantotsu.connections.anilist.api.FuzzyDate
import ani.dantotsu.connections.anilist.api.Query
import kotlinx.serialization.json.JsonObject
class AnilistMutations {
@@ -69,4 +70,10 @@ class AnilistMutations {
val variables = """{"id":"$listId"}"""
executeQuery<JsonObject>(query, variables)
}
suspend fun rateReview(reviewId: Int, rating: String): Query.RateReviewResponse? {
val query = "mutation{RateReview(reviewId:$reviewId,rating:$rating){id mediaId mediaType summary body(asHtml:true)rating ratingAmount userRating score private siteUrl createdAt updatedAt user{id name bannerImage avatar{medium large}}}}"
return executeQuery<Query.RateReviewResponse>(query)
}
}

View File

@@ -1504,6 +1504,13 @@ Page(page:$page,perPage:50) {
return author
}
suspend fun getReviews(mediaId: Int, page: Int = 1, sort: String = "UPDATED_AT_DESC"): Query.ReviewsResponse? {
return executeQuery<Query.ReviewsResponse>(
"""{Page(page:$page,perPage:10){pageInfo{currentPage,hasNextPage,total}reviews(mediaId:$mediaId,sort:$sort){id,mediaId,mediaType,summary,body(asHtml:true)rating,ratingAmount,userRating,score,private,siteUrl,createdAt,updatedAt,user{id,name,bannerImage avatar{medium,large}}}}}""",
force = true
)
}
suspend fun toggleFollow(id: Int): Query.ToggleFollow? {
return executeQuery<Query.ToggleFollow>(
"""mutation{ToggleFollow(userId:$id){id, isFollowing, isFollower}}"""

View File

@@ -299,6 +299,70 @@ class Query {
val following: List<ani.dantotsu.connections.anilist.api.User>?
) : java.io.Serializable
@Serializable
data class ReviewsResponse(
@SerialName("data")
val data: Data
) : java.io.Serializable {
@Serializable
data class Data(
@SerialName("Page")
val page: ReviewPage?
) : java.io.Serializable
}
@Serializable
data class ReviewPage(
@SerialName("pageInfo")
val pageInfo: PageInfo,
@SerialName("reviews")
val reviews: List<Review>?
) : java.io.Serializable
@Serializable
data class RateReviewResponse(
@SerialName("data")
val data: Data
) : java.io.Serializable {
@Serializable
data class Data(
@SerialName("RateReview")
val rateReview: Review
) : java.io.Serializable
}
@Serializable
data class Review(
@SerialName("id")
val id: Int,
@SerialName("mediaId")
val mediaId: Int,
@SerialName("mediaType")
val mediaType: String,
@SerialName("summary")
val summary: String,
@SerialName("body")
val body: String,
@SerialName("rating")
var rating: Int,
@SerialName("ratingAmount")
var ratingAmount: Int,
@SerialName("userRating")
var userRating: String,
@SerialName("score")
val score: Int,
@SerialName("private")
val private: Boolean,
@SerialName("siteUrl")
val siteUrl: String,
@SerialName("createdAt")
val createdAt: Int,
@SerialName("updatedAt")
val updatedAt: Int?,
@SerialName("user")
val user: ani.dantotsu.connections.anilist.api.User?,
) : java.io.Serializable
@Serializable
data class UserProfile(
@SerialName("id")