Skip to content

Commit f25f17d

Browse files
authored
optimize: EpisodeEndpoint (#703)
1 parent 8a80481 commit f25f17d

File tree

7 files changed

+52
-11
lines changed

7 files changed

+52
-11
lines changed

api/src/main/java/run/ikaros/api/core/subject/EpisodeOperate.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@ public interface EpisodeOperate extends AllowPluginOperate {
1212

1313
Flux<Episode> findAllBySubjectId(Long subjectId);
1414

15-
Mono<Episode> findBySubjectIdAndGroupAndSequence(Long subjectId, EpisodeGroup group,
15+
Mono<Episode> findBySubjectIdAndGroupAndSequenceAndName(
16+
Long subjectId, EpisodeGroup group, Float sequence, String name);
17+
18+
Flux<Episode> findBySubjectIdAndGroupAndSequence(Long subjectId, EpisodeGroup group,
1619
Float sequence);
1720

1821
Mono<Long> countBySubjectId(Long subjectId);

server/src/main/java/run/ikaros/server/core/attachment/service/impl/AttachmentReferenceServiceImpl.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,8 @@ public Mono<Void> matchingAttachmentsAndSubjectEpisodes(Long subjectId, Long[] a
135135
.switchIfEmpty(Mono.error(new AttachmentRefMatchingException(
136136
"Matching fail, episode not fond by seq=" + seq
137137
+ " and subjectId=" + subjectId
138-
+ " and ep group=" + group))))
138+
+ " and ep group=" + group)))
139+
.collectList().map(episodeEntities -> episodeEntities.get(0)))
139140
.flatMap(episodeEntity -> repository
140141
.existsByTypeAndReferenceId(EPISODE, episodeEntity.getId())
141142
.filter(exists -> !exists)

server/src/main/java/run/ikaros/server/core/episode/DefaultEpisodeOperate.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,14 @@ public Flux<Episode> findAllBySubjectId(Long subjectId) {
3434
}
3535

3636
@Override
37-
public Mono<Episode> findBySubjectIdAndGroupAndSequence(Long subjectId, EpisodeGroup group,
37+
public Mono<Episode> findBySubjectIdAndGroupAndSequenceAndName(
38+
Long subjectId, EpisodeGroup group, Float sequence, String name) {
39+
return service.findBySubjectIdAndGroupAndSequenceAndName(
40+
subjectId, group, sequence, name);
41+
}
42+
43+
@Override
44+
public Flux<Episode> findBySubjectIdAndGroupAndSequence(Long subjectId, EpisodeGroup group,
3845
Float sequence) {
3946
return service.findBySubjectIdAndGroupAndSequence(subjectId, group, sequence);
4047
}

server/src/main/java/run/ikaros/server/core/episode/DefaultEpisodeService.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,15 +67,28 @@ public Flux<Episode> findAllBySubjectId(Long subjectId) {
6767
}
6868

6969
@Override
70-
public Mono<Episode> findBySubjectIdAndGroupAndSequence(Long subjectId, EpisodeGroup group,
71-
Float sequence) {
70+
public Mono<Episode> findBySubjectIdAndGroupAndSequenceAndName(
71+
Long subjectId, EpisodeGroup group, Float sequence, String name) {
7272
Assert.isTrue(subjectId >= 0, "'subjectId' must >= 0.");
7373
Assert.notNull(group, "'group' must not be null");
7474
Assert.isTrue(sequence >= 0, "'sequence' must >= 0.");
75-
return episodeRepository.findBySubjectIdAndGroupAndSequence(subjectId, group, sequence)
75+
Assert.hasText(name, "'name' must not be empty.");
76+
return episodeRepository.findBySubjectIdAndGroupAndSequenceAndName(
77+
subjectId, group, sequence, name)
7678
.flatMap(episodeEntity -> copyProperties(episodeEntity, new Episode()));
7779
}
7880

81+
@Override
82+
public Flux<Episode> findBySubjectIdAndGroupAndSequence(Long subjectId, EpisodeGroup group,
83+
Float sequence) {
84+
Assert.isTrue(subjectId >= 0, "'subjectId' must >= 0.");
85+
Assert.notNull(group, "'group' must not be null");
86+
Assert.isTrue(sequence >= 0, "'sequence' must >= 0.");
87+
return episodeRepository.findBySubjectIdAndGroupAndSequence(
88+
subjectId, group, sequence
89+
).flatMap(episodeEntity -> copyProperties(episodeEntity, new Episode()));
90+
}
91+
7992
@Override
8093
public Mono<Void> deleteById(Long episodeId) {
8194
Assert.isTrue(episodeId >= 0, "'episodeId' must >= 0.");

server/src/main/java/run/ikaros/server/core/episode/EpisodeEndpoint.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@
44
import static org.springdoc.core.fn.builders.requestbody.Builder.requestBodyBuilder;
55

66
import io.swagger.v3.oas.annotations.enums.ParameterIn;
7+
import java.nio.charset.StandardCharsets;
78
import lombok.extern.slf4j.Slf4j;
89
import org.springdoc.core.fn.builders.apiresponse.Builder;
910
import org.springdoc.webflux.core.fn.SpringdocRouteBuilder;
1011
import org.springframework.stereotype.Component;
12+
import org.springframework.util.Base64Utils;
1113
import org.springframework.web.reactive.function.server.RouterFunction;
1214
import org.springframework.web.reactive.function.server.ServerRequest;
1315
import org.springframework.web.reactive.function.server.ServerResponse;
@@ -40,7 +42,7 @@ public RouterFunction<ServerResponse> endpoint() {
4042
.implementation(Episode.class))
4143
.response(Builder.responseBuilder()
4244
.implementation(Episode.class))
43-
)
45+
)
4446

4547
.PUT("/episode", this::putEpisode,
4648
builder -> builder.operationId("PutEpisode")
@@ -50,7 +52,7 @@ public RouterFunction<ServerResponse> endpoint() {
5052
.implementation(Episode.class))
5153
.response(Builder.responseBuilder()
5254
.implementation(Episode.class))
53-
)
55+
)
5456

5557
.DELETE("/episode/id/{id}", this::deleteById,
5658
builder -> builder.operationId("DeleteById")
@@ -96,6 +98,12 @@ public RouterFunction<ServerResponse> endpoint() {
9698
.required(true)
9799
.in(ParameterIn.QUERY)
98100
.implementation(Float.class))
101+
.parameter(parameterBuilder()
102+
.name("name")
103+
.description("episode name, need base64 encode.")
104+
.required(true)
105+
.in(ParameterIn.QUERY)
106+
.implementation(String.class))
99107
.response(Builder.responseBuilder().implementation(Episode.class)))
100108

101109
.GET("/episodes/subjectId/{id}", this::getAllBySubjectId,
@@ -190,7 +198,10 @@ private Mono<ServerResponse> getBySubjectIdAndGroupAndSequence(ServerRequest req
190198
EpisodeGroup group =
191199
EpisodeGroup.valueOf(request.queryParam("group").orElse(EpisodeGroup.MAIN.name()));
192200
Float sequence = Float.valueOf(request.queryParam("sequence").orElse("0"));
193-
return episodeService.findBySubjectIdAndGroupAndSequence(subjectId, group, sequence)
201+
String rawName = request.queryParam("name").orElse("");
202+
String name = new String(Base64Utils.decodeFromString(rawName), StandardCharsets.UTF_8);
203+
return episodeService.findBySubjectIdAndGroupAndSequenceAndName(
204+
subjectId, group, sequence, name)
194205
.flatMap(episode -> ServerResponse.ok().bodyValue(episode));
195206
}
196207

server/src/main/java/run/ikaros/server/core/episode/EpisodeService.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@ public interface EpisodeService {
1515

1616
Flux<Episode> findAllBySubjectId(Long subjectId);
1717

18-
Mono<Episode> findBySubjectIdAndGroupAndSequence(Long subjectId, EpisodeGroup group,
18+
Mono<Episode> findBySubjectIdAndGroupAndSequenceAndName(
19+
Long subjectId, EpisodeGroup group, Float sequence, String name);
20+
21+
Flux<Episode> findBySubjectIdAndGroupAndSequence(Long subjectId, EpisodeGroup group,
1922
Float sequence);
2023

2124
Mono<Void> deleteById(Long episodeId);

server/src/main/java/run/ikaros/server/store/repository/EpisodeRepository.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ Flux<EpisodeEntity> findAllBySubjectIdOrderByGroupDescSequenceAscAirTimeAscCreat
1616

1717
Mono<Void> deleteAllBySubjectId(Long subjectId);
1818

19-
Mono<EpisodeEntity> findBySubjectIdAndGroupAndSequence(Long subjectId, EpisodeGroup group,
19+
Flux<EpisodeEntity> findBySubjectIdAndGroupAndSequence(Long subjectId, EpisodeGroup group,
2020
Float sequence);
21+
22+
Mono<EpisodeEntity> findBySubjectIdAndGroupAndSequenceAndName(
23+
Long subjectId, EpisodeGroup group, Float sequence, String name);
2124
}

0 commit comments

Comments
 (0)