All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.hiczp.picacomic.api.service.comic.ComicService.kt Maven / Gradle / Ivy

The newest version!
package com.hiczp.picacomic.api.service.comic

import com.hiczp.caeruleum.annotation.*
import com.hiczp.picacomic.api.service.Page
import com.hiczp.picacomic.api.service.Response
import com.hiczp.picacomic.api.service.SortType
import com.hiczp.picacomic.api.service.awaitElements
import com.hiczp.picacomic.api.service.comic.model.*
import com.hiczp.picacomic.api.service.comment.model.CommentRequest
import com.hiczp.picacomic.api.service.comment.model.CommentsResponse
import com.hiczp.picacomic.api.utils.JSON_UTF8

@DefaultContentType(JSON_UTF8)
interface ComicService {
    /**
     * 取得漫画列表
     * category 生效时, 其他条件不生效
     *
     * @param page 分页
     * @param category 分类, 来自于 Category.title
     * @param tags 标签, 不明确格式
     * @param author 作者
     * @param finished 是否完结
     * @param sortType 排序条件, 在某些分类不工作
     * @param translate 翻译
     * @param creatorId 上传者
     */
    @Get("/comics")
    suspend fun search(
        @Query page: Int = 1,
        @Query("c") category: String? = null,
        @Query("t") tags: String? = null,
        @Query("a") author: String? = null,
        @Query("f") finished: Boolean? = null,
        @Query("s") sortType: SortType = SortType.DEPRECIATION_DESC,
        @Query("ct") translate: String? = null,
        @Query("ca") creatorId: String? = null
    ): Response>

    /**
     * 高级搜索
     */
    @Post("advanced-search")
    suspend fun advancedSearch(
        @Query page: Int = 1,
        @Body advancedSearchRequest: AdvancedSearchRequest
    ): Response>

    suspend fun advancedSearch(
        keyword: String,
        categories: List = emptyList(),
        sort: SortType = SortType.DEPRECIATION_DESC,
        page: Int = 1
    ) = advancedSearch(page, AdvancedSearchRequest(keyword, categories, sort))

    @Get("{comicId}")
    suspend fun getDetail(@Path comicId: String): Response

    @Get("{comicId}/eps")
    suspend fun getEpisodes(
        @Path comicId: String,
        @Query page: Int = 1
    ): Response>

    suspend fun getAllEpisodesAsync(comicId: String) =
        Page.travelAllAsync { getEpisodes(comicId, it).data }

    suspend fun getAllEpisodes(comicId: String) =
        getAllEpisodesAsync(comicId).awaitElements()

    @Get("{comicId}/comments")
    suspend fun getComments(
        @Path comicId: String,
        @Query page: Int = 1
    ): Response

    suspend fun getAllCommentsAsync(comicId: String) =
        Page.travelAllAsync { getComments(comicId, it).data.comments }

    suspend fun getAllComments(comicId: String) =
        getAllCommentsAsync(comicId).awaitElements()

    /**
     * 哔咔留言版 其实是一个漫画下面的评论区
     */
    suspend fun getMessageBoardComments(page: Int = 1) =
        getComments("5822a6e3ad7ede654696e482", page)

    /**
     * 发送评论
     */
    @Post("{comicId}/comments")
    suspend fun sendComment(@Path comicId: String, @Body commentRequest: CommentRequest): Response

    suspend fun sendComment(comicId: String, content: String) =
        sendComment(comicId, CommentRequest(content))

    /**
     * 得到漫画本体(每个图像的路径)
     *
     * @param order 第几话, 来自 Episode.order
     */
    @Get("{comicId}/order/{order}/pages")
    suspend fun getPages(
        @Path comicId: String,
        @Path("order") order: Int,
        @Query page: Int = 1
    ): Response

    suspend fun getAllPagesAsync(comicId: String, order: Int) =
        Page.travelAllAsync { getPages(comicId, order, it).data.pages }

    suspend fun getAllPages(comicId: String, order: Int) =
        getAllPagesAsync(comicId, order).awaitElements()

    /**
     * 喜欢某漫画, 再次调用则不喜欢
     */
    @Post("{comicId}/like")
    suspend fun like(@Path comicId: String): Response

    /**
     * 收藏某漫画, 再次调用则取消收藏
     */
    @Post("{comicId}/favourite")
    suspend fun favourite(@Path comicId: String): Response

    @Get("{comicId}/recommendation")
    suspend fun getRecommendation(@Path comicId: String): Response>

    /**
     * 哔咔排行榜 -> 最热门
     *
     * @param tt TimeType, 例如 H24, D7, D30
     * @param ct 不明确, 例如 VC
     */
    @Get("leaderboard")
    suspend fun getLeaderBoard(
        @Query("tt") tt: String = "H24",
        @Query("ct") ct: String = "VC"
    ): Response>

    /**
     * 哔咔排行榜 -> 骑士榜
     */
    @Get("knight-leaderboard")
    suspend fun getKnightLeaderBoard(): Response>

    @Get("random")
    suspend fun random(): Response>
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy