From 9f8395fab13ca4b230a0f7d62636e209745c91d4 Mon Sep 17 00:00:00 2001
From: lrj <owen.stl@gmail.com>
Date: 星期日, 28 九月 2025 14:16:18 +0800
Subject: [PATCH] feat: 完善注册流程的文件上传功能

---
 backend/src/main/java/com/rongyichuang/activity/resolver/ActivityResolver.java |  102 +++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 98 insertions(+), 4 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..eb19b1e 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) {
         PageRequest pageRequest = new PageRequest(page, size);
-        return activityService.findCompetitions(pageRequest, name);
+        return activityService.findActivities(pageRequest, name);
     }
     
     /**
@@ -48,8 +62,8 @@
      * 鑾峰彇姣旇禌鐨勬墍鏈夐樁娈�
      */
     @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 +71,7 @@
      */
     @QueryMapping
     public List<ActivityResponse> ongoingActivities() {
-        return activityService.findOngoingCompetitions();
+        return activityService.findOngoingActivities();
     }
     
     /**
@@ -75,4 +89,84 @@
     public Boolean deleteActivity(@Argument Long id) {
         return activityService.deleteActivity(id);
     }
+    
+    /**
+     * 瑙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