FamilyChallengeController.java 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. package com.etotem.cfc.controller;
  2. import com.etotem.cfc.common.Result;
  3. import com.etotem.cfc.entity.FamilyChallenge;
  4. import com.etotem.cfc.service.FamilyChallengeService;
  5. import org.springframework.web.bind.annotation.*;
  6. import javax.annotation.Resource;
  7. import java.util.List;
  8. import java.util.Map;
  9. import com.etotem.cfc.util.ParamUtils;
  10. @RestController
  11. @RequestMapping("/api/health/challenge")
  12. public class FamilyChallengeController {
  13. @Resource
  14. private FamilyChallengeService familyChallengeService;
  15. @PostMapping("/list")
  16. public Result<List<FamilyChallenge>> getList(@RequestAttribute(value = "familyId", required = false) Long familyId,
  17. @RequestAttribute(value = "currentMemberId", required = false) Long currentMemberId) {
  18. if (familyId == null) {
  19. return Result.noFamily("请先创建或加入家庭");
  20. }
  21. return Result.success(familyChallengeService.getActiveChallenges(familyId, currentMemberId));
  22. }
  23. @PostMapping("/history")
  24. public Result<List<FamilyChallenge>> getHistory(@RequestAttribute(value = "familyId", required = false) Long familyId) {
  25. if (familyId == null) {
  26. return Result.noFamily("请先创建或加入家庭");
  27. }
  28. return Result.success(familyChallengeService.getChallengeHistory(familyId));
  29. }
  30. @PostMapping("/progress")
  31. public Result<Void> updateProgress(@RequestBody Map<String, Object> params,
  32. @RequestAttribute(value = "role", required = false) String role,
  33. @RequestAttribute(value = "currentMemberId", required = false) Long currentMemberId) {
  34. if (!"child".equals(role)) {
  35. return Result.error("仅孩子可打卡");
  36. }
  37. if (currentMemberId == null) {
  38. return Result.error("未识别当前成员");
  39. }
  40. Long challengeId = ParamUtils.getLong(params.get("challengeId"));
  41. int delta = params.get("delta") != null
  42. ? Integer.parseInt(params.get("delta").toString()) : 0;
  43. return familyChallengeService.updateProgress(challengeId, currentMemberId, delta);
  44. }
  45. @PostMapping("/respond")
  46. public Result<Void> respondChallenge(@RequestBody Map<String, Object> params,
  47. @RequestAttribute(value = "currentMemberId", required = false) Long currentMemberId) {
  48. if (currentMemberId == null) {
  49. return Result.error("未识别当前成员");
  50. }
  51. Long challengeId = ParamUtils.getLong(params.get("challengeId"));
  52. String action = params.get("action") != null ? params.get("action").toString() : null;
  53. return familyChallengeService.respondChallenge(challengeId, currentMemberId, action);
  54. }
  55. @PostMapping("/templates")
  56. public Result<List<Map<String, Object>>> getTemplates() {
  57. return Result.success(familyChallengeService.getTemplates());
  58. }
  59. @PostMapping("/create")
  60. public Result<Long> createChallenge(@RequestBody Map<String, Object> params,
  61. @RequestAttribute(value = "familyId", required = false) Long familyId,
  62. @RequestAttribute(value = "userId", required = false) Long userId,
  63. @RequestAttribute(value = "currentMemberId", required = false) Long currentMemberId) {
  64. if (currentMemberId == null) {
  65. return Result.error("未识别当前成员");
  66. }
  67. return familyChallengeService.createChallenge(familyId, userId, currentMemberId, params);
  68. }
  69. @PostMapping("/update/{id}")
  70. public Result<Void> updateChallenge(@PathVariable("id") Long challengeId,
  71. @RequestBody Map<String, Object> params,
  72. @RequestAttribute(value = "role", required = false) String role,
  73. @RequestAttribute(value = "familyId", required = false) Long familyId,
  74. @RequestAttribute("userId") Long userId) {
  75. if (!"parent".equals(role)) {
  76. return Result.error("仅家长可修改挑战");
  77. }
  78. return familyChallengeService.updateChallenge(challengeId, userId, familyId, params);
  79. }
  80. @PostMapping("/delete/{id}")
  81. public Result<Void> deleteChallenge(@PathVariable("id") Long challengeId,
  82. @RequestAttribute(value = "role", required = false) String role,
  83. @RequestAttribute(value = "familyId", required = false) Long familyId,
  84. @RequestAttribute("userId") Long userId) {
  85. if (!"parent".equals(role)) {
  86. return Result.error("仅家长可删除挑战");
  87. }
  88. return familyChallengeService.deleteChallenge(challengeId, userId, familyId);
  89. }
  90. }