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