user module API
POST /resource
POST /resource/purchase
POST /resource/like
POST /resource/collection
Change-Id: I3d9f342a34321ae10b31976ee583188b5386dccb
diff --git a/src/main/java/com/g9/g9backend/controller/ResourceController.java b/src/main/java/com/g9/g9backend/controller/ResourceController.java
index b01898d..b6726cf 100644
--- a/src/main/java/com/g9/g9backend/controller/ResourceController.java
+++ b/src/main/java/com/g9/g9backend/controller/ResourceController.java
@@ -1,9 +1,18 @@
package com.g9.g9backend.controller;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.g9.g9backend.mapper.UserPurchaseMapper;
+import com.g9.g9backend.pojo.*;
+import com.g9.g9backend.pojo.DTO.*;
+import com.g9.g9backend.service.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
+import java.util.Date;
+
/**
* ResourceController 资源控制器类,处理与资源相关的请求
@@ -14,5 +23,204 @@
@RequestMapping("/resource")
public class ResourceController {
+ private final ResourceService resourceService;
+
+ private final GameplayService gameplayService;
+
+ private final RewardService rewardService;
+
+ private final UserUploadService userUploadService;
+
+ private final CommunityService communityService;
+
+ private final UserService userService;
+
+ private final UserPurchaseService userPurchaseService;
+
+ private final UserLikeService userLikeService;
+
+ private final UserCollectionService userCollectionService;
+
+ private final NotificationService notificationService;
+
+ public ResourceController(ResourceService resourceService, GameplayService gameplayService, RewardService rewardService, UserUploadService userUploadService, CommunityService communityService, UserService userService, UserPurchaseMapper userPurchaseMapper, UserPurchaseService userPurchaseService, UserLikeService userLikeService, UserCollectionService userCollectionService, NotificationService notificationService) {
+ this.resourceService = resourceService;
+ this.gameplayService = gameplayService;
+ this.rewardService = rewardService;
+ this.userUploadService = userUploadService;
+ this.communityService = communityService;
+ this.userService = userService;
+ this.userPurchaseService = userPurchaseService;
+ this.userLikeService = userLikeService;
+ this.userCollectionService = userCollectionService;
+ this.notificationService = notificationService;
+ }
+
private final Logger logger = LoggerFactory.getLogger(ResourceController.class);
-}
+
+ /**
+ * 上传资源
+ *
+ * @param postResourceDTO 上传资源信息
+ * @return 上传资源结果
+ */
+ @PostMapping
+ public ResponseEntity<String> uploadResource(@RequestBody PostResourceDTO postResourceDTO) {
+ // 存资源
+ Resource resource = postResourceDTO.getResource();
+ resourceService.save(resource);
+ // 存玩法列表
+ String[] gameplayList = postResourceDTO.getGameplayList();
+ for (String gameplayName : gameplayList) {
+ Gameplay gameplay = new Gameplay();
+ gameplay.setGameplayName(gameplayName);
+ gameplay.setResourceId(postResourceDTO.getResource().getResourceId());
+ gameplayService.save(gameplay);
+ }
+ // 完成对应悬赏
+ if (postResourceDTO.getCompleteRewardId() != 0) {
+ UpdateWrapper<Reward> rewardUpdate = new UpdateWrapper<>();
+ rewardUpdate.eq("reward_id", postResourceDTO.getCompleteRewardId()).set("completed_by", postResourceDTO.getUserId()).set("completed_at", postResourceDTO.getResource().getUploadTime()).set("resource_id", postResourceDTO.getResource().getResourceId());
+ rewardService.update(rewardUpdate);
+ }
+ // 存用户上传表
+ UserUpload userUpload = new UserUpload();
+ userUpload.setUserId(postResourceDTO.getUserId());
+ userUpload.setResourceId(postResourceDTO.getResource().getResourceId());
+ userUploadService.save(userUpload);
+ // 创建资源社区
+ Community community = new Community();
+ community.setCommunityName(postResourceDTO.getResource().getResourceName());
+ community.setType(postResourceDTO.getResource().getClassify());
+ community.setResourceId(postResourceDTO.getResource().getResourceId());
+ communityService.save(community);
+ return ResponseEntity.ok("");
+ }
+
+ /**
+ * 购买资源
+ *
+ * @param userResourceDTO 购买资源信息
+ * @return 购买资源结果
+ */
+ @PostMapping("purchase")
+ public ResponseEntity<String> purchaseResource(@RequestBody UserResourceDTO userResourceDTO) {
+
+ QueryWrapper<User> userQuery = new QueryWrapper<>();
+ userQuery.eq("user_id", userResourceDTO.getUserId());
+ User user = userService.getOne(userQuery);
+
+ QueryWrapper<Resource> ResourceQuery = new QueryWrapper<>();
+ ResourceQuery.eq("resource_id", userResourceDTO.getResourceId());
+ Resource resource = resourceService.getOne(ResourceQuery);
+
+ if (user.getCredits() < resource.getPrice()) {
+ // 积分余额不足
+ logger.info("The balance of points is insufficient to cover the price of this resource: {}", resource.getPrice());
+ return ResponseEntity.status(412).body("");
+ } else {
+ // 扣除用户积分
+ UpdateWrapper<User> userUpdate = new UpdateWrapper<>();
+ userUpdate.eq("user_id", user.getUserId()).set("credits", user.getCredits() - resource.getPrice());
+ userService.update(userUpdate);
+ // 添加购买资源记录
+ UserPurchase userPurchase = new UserPurchase();
+ userPurchase.setUserId(user.getUserId());
+ userPurchase.setResourceId(resource.getResourceId());
+ userPurchaseService.save(userPurchase);
+ // 给上传该资源的用户发送通知
+ Notification notification = new Notification();
+ QueryWrapper<UserUpload> userUploadQuery = new QueryWrapper<>();
+ userUploadQuery.eq("resource_id", userResourceDTO.getResourceId());
+ UserUpload userUpload = userUploadService.getOne(userUploadQuery);
+ notification.setUserId(userUpload.getUserId());
+ notification.setTitle("资源被购买");
+ notification.setContent("你的资源:" + resource.getResourceName() + " 被: " + user.getUsername() + " 购买了!");
+ notification.setCreateAt(new Date());
+ notification.setRead(false);
+ notification.setTriggeredBy(userResourceDTO.getUserId());
+ notification.setRelatedId(userResourceDTO.getResourceId());
+ notificationService.save(notification);
+ return ResponseEntity.ok("");
+ }
+ }
+
+ /**
+ * 点赞资源
+ *
+ * @param userResourceDTO 点赞资源信息
+ * @return 点赞资源结果
+ */
+ @PostMapping("like")
+ public ResponseEntity<String> likeResource(@RequestBody UserResourceDTO userResourceDTO) {
+
+ QueryWrapper<User> userQuery = new QueryWrapper<>();
+ userQuery.eq("user_id", userResourceDTO.getUserId());
+ User user = userService.getOne(userQuery);
+
+ QueryWrapper<Resource> ResourceQuery = new QueryWrapper<>();
+ ResourceQuery.eq("resource_id", userResourceDTO.getResourceId());
+ Resource resource = resourceService.getOne(ResourceQuery);
+
+ UserLike userLike = new UserLike();
+ userLike.setUserId(userResourceDTO.getUserId());
+ userLike.setResourceId(userResourceDTO.getResourceId());
+ userLikeService.save(userLike);
+
+ // 给上传该资源的用户发送通知
+ Notification notification = new Notification();
+ QueryWrapper<UserUpload> userUploadQuery = new QueryWrapper<>();
+ userUploadQuery.eq("resource_id", userResourceDTO.getResourceId());
+ UserUpload userUpload = userUploadService.getOne(userUploadQuery);
+ notification.setUserId(userUpload.getUserId());
+ notification.setTitle("资源被点赞");
+ notification.setContent("你的资源:" + resource.getResourceName() + " 被: " + user.getUsername() + " 点赞了!");
+ notification.setCreateAt(new Date());
+ notification.setRead(false);
+ notification.setTriggeredBy(userResourceDTO.getUserId());
+ notification.setRelatedId(userResourceDTO.getResourceId());
+ notificationService.save(notification);
+
+ return ResponseEntity.ok("");
+ }
+
+ /**
+ * 收藏资源
+ *
+ * @param userResourceDTO 收藏资源信息
+ * @return 收藏资源结果
+ */
+ @PostMapping("collection")
+ public ResponseEntity<String> collectResource(@RequestBody UserResourceDTO userResourceDTO) {
+
+ QueryWrapper<User> userQuery = new QueryWrapper<>();
+ userQuery.eq("user_id", userResourceDTO.getUserId());
+ User user = userService.getOne(userQuery);
+
+ QueryWrapper<Resource> ResourceQuery = new QueryWrapper<>();
+ ResourceQuery.eq("resource_id", userResourceDTO.getResourceId());
+ Resource resource = resourceService.getOne(ResourceQuery);
+
+ UserCollection userCollection = new UserCollection();
+ userCollection.setUserId(userResourceDTO.getUserId());
+ userCollection.setResourceId(userResourceDTO.getResourceId());
+ userCollectionService.save(userCollection);
+
+
+ // 给上传该资源的用户发送通知
+ Notification notification = new Notification();
+ QueryWrapper<UserUpload> userUploadQuery = new QueryWrapper<>();
+ userUploadQuery.eq("resource_id", userResourceDTO.getResourceId());
+ UserUpload userUpload = userUploadService.getOne(userUploadQuery);
+ notification.setUserId(userUpload.getUserId());
+ notification.setTitle("资源被收藏");
+ notification.setContent("你的资源:" + resource.getResourceName() + " 被: " + user.getUsername() + " 收藏了!");
+ notification.setCreateAt(new Date());
+ notification.setRead(false);
+ notification.setTriggeredBy(userResourceDTO.getUserId());
+ notification.setRelatedId(userResourceDTO.getResourceId());
+ notificationService.save(notification);
+
+ return ResponseEntity.ok("");
+ }
+}
\ No newline at end of file