From 0e4184057a436ca465685b3f1bc6d352e020eae0 Mon Sep 17 00:00:00 2001 From: anian Date: Mon, 15 Jun 2026 20:22:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=B1=BB=E5=88=AB=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 ++ api-docs/openapi/v3_0/doubanApi.json | 37 +++++++++++++++++++ gradle.properties | 2 +- .../java/la/moony/douban/DoubanEndpoint.java | 20 +++++++++- .../resources/extensions/roleTemplate.yaml | 2 +- 5 files changed, 61 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index dc32612..55d6565 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,9 @@ > 基于原作者v1.2.2代码修改 +#### v1.2.2-2 +1. 新增类别接口`/apis/api.douban.moony.la/v1alpha1/doubanmovies/-/types`(基于原作者v1.2.5代码) + #### v1.2.2-1 1. 修改前台页面路由为/books 2. 控制台类别value不再限制 diff --git a/api-docs/openapi/v3_0/doubanApi.json b/api-docs/openapi/v3_0/doubanApi.json index ba7fbbd..aa6c583 100644 --- a/api-docs/openapi/v3_0/doubanApi.json +++ b/api-docs/openapi/v3_0/doubanApi.json @@ -144,6 +144,28 @@ "tags" : [ "api.douban.moony.la/v1alpha1/DoubanMovie" ] } }, + "/apis/api.douban.moony.la/v1alpha1/doubanmovies/-/types" : { + "get" : { + "description" : "List all douban types.", + "operationId" : "ListTypes", + "responses" : { + "default" : { + "content" : { + "*/*" : { + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/DoubanTypeVo" + } + } + } + }, + "description" : "default response" + } + }, + "tags" : [ "api.douban.moony.la/v1alpha1/DoubanMovie" ] + } + }, "/apis/api.douban.moony.la/v1alpha1/doubanmovies/-/getDoubanDetail" : { "get" : { "description" : "getDoubanDetail.", @@ -851,6 +873,21 @@ } } }, + "DoubanTypeVo" : { + "type" : "object", + "properties" : { + "doubanCount" : { + "type" : "integer", + "format" : "int32" + }, + "key" : { + "type" : "string" + }, + "name" : { + "type" : "string" + } + } + }, "JsonPatch" : { "minItems" : 1, "uniqueItems" : true, diff --git a/gradle.properties b/gradle.properties index a39fa5c..5f874f4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1 +1 @@ -version=1.2.2-1 +version=1.2.2-2 diff --git a/src/main/java/la/moony/douban/DoubanEndpoint.java b/src/main/java/la/moony/douban/DoubanEndpoint.java index 062c6f9..9da8475 100644 --- a/src/main/java/la/moony/douban/DoubanEndpoint.java +++ b/src/main/java/la/moony/douban/DoubanEndpoint.java @@ -2,8 +2,10 @@ package la.moony.douban; import io.swagger.v3.oas.annotations.enums.ParameterIn; import la.moony.douban.extension.DoubanMovie; +import la.moony.douban.finders.DoubanFinder; import la.moony.douban.service.DoubanService; import la.moony.douban.vo.DoubanMovieVo; +import la.moony.douban.vo.DoubanTypeVo; import org.apache.commons.lang3.StringUtils; import org.springdoc.webflux.core.fn.SpringdocRouteBuilder; import org.springframework.stereotype.Component; @@ -25,9 +27,12 @@ public class DoubanEndpoint implements CustomEndpoint { private final DoubanService doubanService; + private final DoubanFinder doubanFinder; - public DoubanEndpoint(DoubanService doubanService) { + + public DoubanEndpoint(DoubanService doubanService, DoubanFinder doubanFinder) { this.doubanService = doubanService; + this.doubanFinder = doubanFinder; } @Override @@ -43,6 +48,13 @@ public class DoubanEndpoint implements CustomEndpoint { ); DoubanMovieQuery.buildParameters(builder); }) + .GET("doubanmovies/-/types", this::ListTypes, + builder -> builder.operationId("ListTypes") + .description("List all douban types.") + .tag(doubanMovieTag) + .response(responseBuilder() + .implementationArray(DoubanTypeVo.class) + )) .GET("doubanmovies/-/genres", this::ListGenres, builder -> builder.operationId("ListGenres") .description("List all douban genres.") @@ -87,6 +99,12 @@ public class DoubanEndpoint implements CustomEndpoint { .flatMap(result -> ServerResponse.ok().bodyValue(result)); } + private Mono ListTypes(ServerRequest request) { + return doubanFinder.listAllType() + .collectList() + .flatMap(result -> ServerResponse.ok().bodyValue(result)); + } + private Mono getDoubanDetail(ServerRequest request) { String url = request.queryParam("url").orElse(null); return doubanService.getDoubanDetail(url) diff --git a/src/main/resources/extensions/roleTemplate.yaml b/src/main/resources/extensions/roleTemplate.yaml index 6f5c1c8..8aa5b8b 100644 --- a/src/main/resources/extensions/roleTemplate.yaml +++ b/src/main/resources/extensions/roleTemplate.yaml @@ -10,7 +10,7 @@ metadata: rbac.authorization.halo.run/display-name: "查看朋友圈提交模板" rules: - apiGroups: [ "api.douban.moony.la" ] - resources: [ "doubanmovies","doubanmovies/genres","doubanmovies/getDoubanDetail"] + resources: [ "doubanmovies","doubanmovies/types","doubanmovies/genres","doubanmovies/getDoubanDetail"] verbs: [ "get", "list" ] ---