blob: 3563f413665444a7a4fb344ad893d8cdbeff1b76 [file] [log] [blame]
xiukira687b9cb2025-05-29 15:15:02 +08001package com.g9.g9backend.controller;
2
Seamher01406122025-06-08 19:44:36 +08003import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
4import com.baomidou.mybatisplus.core.toolkit.StringUtils;
5import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
6import com.g9.g9backend.pojo.DTO.GetRewardDTO;
7import com.g9.g9backend.pojo.Reward;
8import com.g9.g9backend.service.RewardService;
9import org.jetbrains.annotations.NotNull;
xiukira687b9cb2025-05-29 15:15:02 +080010import org.slf4j.Logger;
11import org.slf4j.LoggerFactory;
Seamher01406122025-06-08 19:44:36 +080012import org.springframework.http.ResponseEntity;
13import org.springframework.web.bind.annotation.*;
14
15import java.time.LocalDate;
16import java.time.ZoneId;
17import java.util.Date;
18import java.util.List;
19import java.util.Objects;
20import java.util.function.Function;
xiukira687b9cb2025-05-29 15:15:02 +080021
22/**
23 * RewardController 悬赏控制器类,处理与悬赏相关的请求
24 *
25 * @author Seamher
26 */
27@RestController
28@RequestMapping("/reward")
29public class RewardController {
30
Seamher01406122025-06-08 19:44:36 +080031 private final RewardService rewardService;
32
xiukira687b9cb2025-05-29 15:15:02 +080033 private final Logger logger = LoggerFactory.getLogger(RewardController.class);
Seamher01406122025-06-08 19:44:36 +080034
35 public RewardController(RewardService rewardService) {
36 this.rewardService = rewardService;
37 }
38
39 @PostMapping
40 public ResponseEntity<String> postReward(@RequestBody Reward reward) {
41 reward.setCompletedBy(null);
42 reward.setResourceId(null);
43 rewardService.save(reward);
44
45 logger.info("悬赏已发布");
46
47 return ResponseEntity.ok("");
48 }
49
50 @DeleteMapping
51 public ResponseEntity<String> deleteReward(@RequestParam Integer rewardId) {
52 rewardService.removeById(rewardId);
53
54 logger.info("悬赏已删除");
55
56 return ResponseEntity.noContent().build();
57 }
58
59 @GetMapping
60 public ResponseEntity<GetRewardDTO> getReward(@RequestParam Integer pageNumber,
61 @RequestParam Integer rows,
62 @RequestParam String searchValue,
63 @RequestParam String option) {
64 Page<Reward> rewardPage = new Page<>(pageNumber, rows);
65 LambdaQueryWrapper<Reward> rewardQuery = new LambdaQueryWrapper<Reward>()
66 .like(StringUtils.isNotBlank(searchValue), Reward::getRewardName, searchValue);
67
68 if (Objects.equals(option, "赏金最高")) {
69
70 rewardQuery.orderByDesc(Reward::getPrice);
71 } else {
72
73 rewardQuery.orderByDesc(Reward::getCreateAt);
74 }
75
76 Page<Reward> result = rewardService.page(rewardPage, rewardQuery);
77
78 GetRewardDTO getRewardDTO = wrapRewardPage(result, item -> {
79 GetRewardDTO.Reward reward = new GetRewardDTO.Reward();
80 reward.setRewardId(item.getRewardId());
81 reward.setRewardName(item.getRewardName());
82 reward.setRewardPicture(item.getRewardPicture());
83 reward.setUserId(item.getUserId());
84 reward.setPrice(item.getPrice());
85 reward.setCreateAt(item.getCreateAt());
86 return reward;
87 });
88
89 return ResponseEntity.ok(getRewardDTO);
90 }
91
92 @NotNull
93 private <T> GetRewardDTO wrapRewardPage(Page<T> page, Function<T, GetRewardDTO.Reward> mapper) {
94 List<GetRewardDTO.Reward> records = page.getRecords().stream().map(mapper).toList();
95
96 return new GetRewardDTO(records, (int) page.getTotal(), (int) page.getPages(), (int) page.getCurrent(), (int) page.getSize());
97 }
98
99 @GetMapping(value = "/info")
100 public ResponseEntity<Reward> getRewardInfo(@RequestParam Integer rewardId) {
101
102 return ResponseEntity.ok(rewardService.getById(rewardId));
103 }
104
105 @PutMapping("/info")
106 public ResponseEntity<String> putReward(@RequestBody Reward reward) {
107 Reward rewardUpdate = rewardService.getById(reward.getRewardId());
108 rewardUpdate.setRewardName(reward.getRewardName());
109 rewardUpdate.setRewardPicture(reward.getRewardPicture());
110 rewardUpdate.setPrice(reward.getPrice());
111 rewardUpdate.setRewardDescription(reward.getRewardDescription());
112 rewardUpdate.setLastUpdateAt(Date.from(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant()));
113 rewardService.updateById(rewardUpdate);
114
115 return ResponseEntity.ok("");
116 }
117
118 @PostMapping(value = "/completion")
119 public ResponseEntity<String> putRewardCompletion(@RequestBody Reward reward) {
120 Reward rewardUpdate = rewardService.getById(reward.getRewardId());
121 rewardUpdate.setCompletedBy(reward.getCompletedBy());
122 rewardUpdate.setCompletedAt(reward.getCompletedAt());
123 rewardUpdate.setResourceId(reward.getResourceId());
124 rewardService.updateById(rewardUpdate);
125
126 return ResponseEntity.ok("");
127 }
128
129
xiukira687b9cb2025-05-29 15:15:02 +0800130}