From 375c18a6d2713ff19b22093eec57315992d8333f Mon Sep 17 00:00:00 2001
From: Codex Assistant <codex@example.com>
Date: 星期四, 06 十一月 2025 13:33:52 +0800
Subject: [PATCH] 增加评审下载
---
backend/src/main/java/com/rongyichuang/activity/resolver/ActivityResolver.java | 117 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 112 insertions(+), 5 deletions(-)
diff --git a/backend/src/main/java/com/rongyichuang/activity/resolver/ActivityResolver.java b/backend/src/main/java/com/rongyichuang/activity/resolver/ActivityResolver.java
index 3ab5319..afeaee8 100644
--- a/backend/src/main/java/com/rongyichuang/activity/resolver/ActivityResolver.java
+++ b/backend/src/main/java/com/rongyichuang/activity/resolver/ActivityResolver.java
@@ -5,13 +5,21 @@
import com.rongyichuang.activity.service.ActivityService;
import com.rongyichuang.common.dto.PageRequest;
import com.rongyichuang.common.dto.PageResponse;
+import com.rongyichuang.common.dto.response.MediaResponse;
+import com.rongyichuang.common.enums.MediaTargetType;
+import com.rongyichuang.common.repository.MediaRepository;
+import com.rongyichuang.common.entity.Media;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.graphql.data.method.annotation.Argument;
import org.springframework.graphql.data.method.annotation.MutationMapping;
import org.springframework.graphql.data.method.annotation.QueryMapping;
+import org.springframework.graphql.data.method.annotation.SchemaMapping;
import org.springframework.stereotype.Controller;
+import org.springframework.util.StringUtils;
import java.util.List;
+import java.util.stream.Collectors;
@Controller
public class ActivityResolver {
@@ -19,13 +27,19 @@
@Autowired
private ActivityService activityService;
+ @Autowired
+ private MediaRepository mediaRepository;
+
+ @Value("${app.media-url}")
+ private String mediaBaseUrl;
+
/**
* 鍒嗛〉鏌ヨ姣旇禌鍒楄〃
*/
@QueryMapping
- public PageResponse<ActivityResponse> activities(@Argument int page, @Argument int size, @Argument String name) {
+ public PageResponse<ActivityResponse> activities(@Argument int page, @Argument int size, @Argument String name, @Argument Integer state) {
PageRequest pageRequest = new PageRequest(page, size);
- return activityService.findCompetitions(pageRequest, name);
+ return activityService.findActivities(pageRequest, name, state);
}
/**
@@ -45,11 +59,19 @@
}
/**
+ * 鑾峰彇鎵�鏈夋瘮璧涢樁娈碉紙鐢ㄤ簬璇勫椤甸潰涓嬫媺閫夋嫨锛�
+ */
+ @QueryMapping
+ public List<ActivityResponse> allActivityStages() {
+ return activityService.findAllStagesForSelection();
+ }
+
+ /**
* 鑾峰彇姣旇禌鐨勬墍鏈夐樁娈�
*/
@QueryMapping
- public List<ActivityResponse> activityStages(@Argument Long competitionId) {
- return activityService.findStagesByCompetitionId(competitionId);
+ public List<ActivityResponse> activityStages(@Argument Long activityId) {
+ return activityService.findStagesByActivityId(activityId);
}
/**
@@ -57,7 +79,7 @@
*/
@QueryMapping
public List<ActivityResponse> ongoingActivities() {
- return activityService.findOngoingCompetitions();
+ return activityService.findOngoingActivities();
}
/**
@@ -75,4 +97,89 @@
public Boolean deleteActivity(@Argument Long id) {
return activityService.deleteActivity(id);
}
+
+ @MutationMapping
+ public Boolean updateActivityState(@Argument Long id, @Argument Integer state) {
+ return activityService.updateActivityState(id, state);
+ }
+
+ /**
+ * 瑙f瀽Activity鐨刢overImage瀛楁
+ */
+ @SchemaMapping(typeName = "Activity", field = "coverImage")
+ public MediaResponse coverImage(ActivityResponse activity) {
+ List<Media> mediaList = mediaRepository.findByTargetTypeAndTargetIdAndState(
+ MediaTargetType.ACTIVITY.getValue(), activity.getId(), 1);
+
+ // 鏌ユ壘绗竴涓浘鐗囩被鍨嬬殑濯掍綋浣滀负灏侀潰鍥�
+ return mediaList.stream()
+ .filter(media -> media.getMediaType() != null && media.getMediaType() == 1) // 1琛ㄧず鍥剧墖
+ .findFirst()
+ .map(this::convertToMediaResponse)
+ .orElse(null);
+ }
+
+ /**
+ * 瑙f瀽Activity鐨刬mages瀛楁
+ */
+ @SchemaMapping(typeName = "Activity", field = "images")
+ public List<MediaResponse> images(ActivityResponse activity) {
+ List<Media> mediaList = mediaRepository.findByTargetTypeAndTargetIdAndState(
+ MediaTargetType.ACTIVITY.getValue(), activity.getId(), 1);
+
+ // 杩斿洖鎵�鏈夊浘鐗囩被鍨嬬殑濯掍綋
+ return mediaList.stream()
+ .filter(media -> media.getMediaType() != null && media.getMediaType() == 1) // 1琛ㄧず鍥剧墖
+ .map(this::convertToMediaResponse)
+ .collect(Collectors.toList());
+ }
+
+ /**
+ * 瑙f瀽Activity鐨剉ideos瀛楁
+ */
+ @SchemaMapping(typeName = "Activity", field = "videos")
+ public List<MediaResponse> videos(ActivityResponse activity) {
+ List<Media> mediaList = mediaRepository.findByTargetTypeAndTargetIdAndState(
+ MediaTargetType.ACTIVITY.getValue(), activity.getId(), 1);
+
+ // 杩斿洖鎵�鏈夎棰戠被鍨嬬殑濯掍綋
+ return mediaList.stream()
+ .filter(media -> media.getMediaType() != null && media.getMediaType() == 2) // 2琛ㄧず瑙嗛
+ .map(this::convertToMediaResponse)
+ .collect(Collectors.toList());
+ }
+
+ /**
+ * 灏哅edia瀹炰綋杞崲涓篗ediaResponse
+ */
+ private MediaResponse convertToMediaResponse(Media media) {
+ MediaResponse response = new MediaResponse();
+ response.setId(media.getId());
+ response.setName(media.getName());
+ response.setPath(media.getPath());
+ response.setFileSize(media.getFileSize());
+ response.setFileExt(media.getFileExt());
+ response.setMediaType(media.getMediaType());
+ response.setTargetType(media.getTargetType());
+ response.setTargetId(media.getTargetId());
+ response.setThumbPath(media.getThumbPath());
+ response.setDuration(media.getDuration());
+ response.setDescription(media.getDescription());
+
+ // 璁剧疆瀹屾暣URL
+ if (mediaBaseUrl != null && !mediaBaseUrl.isEmpty() && media.getPath() != null) {
+ String base = mediaBaseUrl.endsWith("/") ? mediaBaseUrl.substring(0, mediaBaseUrl.length() - 1) : mediaBaseUrl;
+ String path = media.getPath().startsWith("/") ? media.getPath() : ("/" + media.getPath());
+ response.setFullUrl(base + path);
+ }
+
+ // 璁剧疆缂╃暐鍥惧畬鏁碪RL
+ if (mediaBaseUrl != null && !mediaBaseUrl.isEmpty() && media.getThumbPath() != null) {
+ String base = mediaBaseUrl.endsWith("/") ? mediaBaseUrl.substring(0, mediaBaseUrl.length() - 1) : mediaBaseUrl;
+ String thumbPath = media.getThumbPath().startsWith("/") ? media.getThumbPath() : ("/" + media.getThumbPath());
+ response.setFullThumbUrl(base + thumbPath);
+ }
+
+ return response;
+ }
}
\ No newline at end of file
--
Gitblit v1.8.0