add comment, reward, total
Change-Id: Ib3d9f5f11b51e4bbf4dc5a553315ff3fd9110efb
diff --git a/src/main/java/com/g9/g9backend/controller/RewardController.java b/src/main/java/com/g9/g9backend/controller/RewardController.java
index c5b316b..3563f41 100644
--- a/src/main/java/com/g9/g9backend/controller/RewardController.java
+++ b/src/main/java/com/g9/g9backend/controller/RewardController.java
@@ -1,9 +1,23 @@
package com.g9.g9backend.controller;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.g9.g9backend.pojo.DTO.GetRewardDTO;
+import com.g9.g9backend.pojo.Reward;
+import com.g9.g9backend.service.RewardService;
+import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+import java.util.function.Function;
/**
* RewardController 悬赏控制器类,处理与悬赏相关的请求
@@ -14,5 +28,103 @@
@RequestMapping("/reward")
public class RewardController {
+ private final RewardService rewardService;
+
private final Logger logger = LoggerFactory.getLogger(RewardController.class);
+
+ public RewardController(RewardService rewardService) {
+ this.rewardService = rewardService;
+ }
+
+ @PostMapping
+ public ResponseEntity<String> postReward(@RequestBody Reward reward) {
+ reward.setCompletedBy(null);
+ reward.setResourceId(null);
+ rewardService.save(reward);
+
+ logger.info("悬赏已发布");
+
+ return ResponseEntity.ok("");
+ }
+
+ @DeleteMapping
+ public ResponseEntity<String> deleteReward(@RequestParam Integer rewardId) {
+ rewardService.removeById(rewardId);
+
+ logger.info("悬赏已删除");
+
+ return ResponseEntity.noContent().build();
+ }
+
+ @GetMapping
+ public ResponseEntity<GetRewardDTO> getReward(@RequestParam Integer pageNumber,
+ @RequestParam Integer rows,
+ @RequestParam String searchValue,
+ @RequestParam String option) {
+ Page<Reward> rewardPage = new Page<>(pageNumber, rows);
+ LambdaQueryWrapper<Reward> rewardQuery = new LambdaQueryWrapper<Reward>()
+ .like(StringUtils.isNotBlank(searchValue), Reward::getRewardName, searchValue);
+
+ if (Objects.equals(option, "赏金最高")) {
+
+ rewardQuery.orderByDesc(Reward::getPrice);
+ } else {
+
+ rewardQuery.orderByDesc(Reward::getCreateAt);
+ }
+
+ Page<Reward> result = rewardService.page(rewardPage, rewardQuery);
+
+ GetRewardDTO getRewardDTO = wrapRewardPage(result, item -> {
+ GetRewardDTO.Reward reward = new GetRewardDTO.Reward();
+ reward.setRewardId(item.getRewardId());
+ reward.setRewardName(item.getRewardName());
+ reward.setRewardPicture(item.getRewardPicture());
+ reward.setUserId(item.getUserId());
+ reward.setPrice(item.getPrice());
+ reward.setCreateAt(item.getCreateAt());
+ return reward;
+ });
+
+ return ResponseEntity.ok(getRewardDTO);
+ }
+
+ @NotNull
+ private <T> GetRewardDTO wrapRewardPage(Page<T> page, Function<T, GetRewardDTO.Reward> mapper) {
+ List<GetRewardDTO.Reward> records = page.getRecords().stream().map(mapper).toList();
+
+ return new GetRewardDTO(records, (int) page.getTotal(), (int) page.getPages(), (int) page.getCurrent(), (int) page.getSize());
+ }
+
+ @GetMapping(value = "/info")
+ public ResponseEntity<Reward> getRewardInfo(@RequestParam Integer rewardId) {
+
+ return ResponseEntity.ok(rewardService.getById(rewardId));
+ }
+
+ @PutMapping("/info")
+ public ResponseEntity<String> putReward(@RequestBody Reward reward) {
+ Reward rewardUpdate = rewardService.getById(reward.getRewardId());
+ rewardUpdate.setRewardName(reward.getRewardName());
+ rewardUpdate.setRewardPicture(reward.getRewardPicture());
+ rewardUpdate.setPrice(reward.getPrice());
+ rewardUpdate.setRewardDescription(reward.getRewardDescription());
+ rewardUpdate.setLastUpdateAt(Date.from(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant()));
+ rewardService.updateById(rewardUpdate);
+
+ return ResponseEntity.ok("");
+ }
+
+ @PostMapping(value = "/completion")
+ public ResponseEntity<String> putRewardCompletion(@RequestBody Reward reward) {
+ Reward rewardUpdate = rewardService.getById(reward.getRewardId());
+ rewardUpdate.setCompletedBy(reward.getCompletedBy());
+ rewardUpdate.setCompletedAt(reward.getCompletedAt());
+ rewardUpdate.setResourceId(reward.getResourceId());
+ rewardService.updateById(rewardUpdate);
+
+ return ResponseEntity.ok("");
+ }
+
+
}