package com.designhub.controller; import com.designhub.common.Result; import com.designhub.entity.UserGoal; import com.designhub.service.UserGoalService; import com.designhub.util.JwtUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import java.util.List; /** * 用户目标Controller */ @Tag(name = "目标管理", description = "用户目标管理相关API") @RestController @RequestMapping("/api/goals") @RequiredArgsConstructor public class UserGoalController { private final UserGoalService userGoalService; private final JwtUtil jwtUtil; @Operation(summary = "创建目标") @PostMapping public Result createGoal( @RequestBody UserGoal goal, @RequestHeader("Authorization") String authHeader) { String token = jwtUtil.extractTokenFromHeader(authHeader); Long userId = jwtUtil.getUserIdFromToken(token); goal.setUserId(userId); return Result.success(userGoalService.createGoal(goal)); } @Operation(summary = "创建预设目标") @PostMapping("/preset/{type}") public Result createPresetGoal( @PathVariable String type, @RequestHeader("Authorization") String authHeader) { String token = jwtUtil.extractTokenFromHeader(authHeader); Long userId = jwtUtil.getUserIdFromToken(token); return Result.success(userGoalService.createPresetGoal(userId, type)); } @Operation(summary = "更新目标") @PutMapping("/{id}") public Result updateGoal(@PathVariable Long id, @RequestBody UserGoal goal) { return Result.success(userGoalService.updateGoal(id, goal)); } @Operation(summary = "更新目标进度") @PutMapping("/{id}/progress") public Result updateProgress( @PathVariable Long id, @RequestParam Integer progressValue) { return Result.success(userGoalService.updateProgress(id, progressValue)); } @Operation(summary = "获取我的目标列表") @GetMapping("/my") public Result> getMyGoals( @RequestParam(required = false) String status, @RequestHeader("Authorization") String authHeader) { String token = jwtUtil.extractTokenFromHeader(authHeader); Long userId = jwtUtil.getUserIdFromToken(token); return Result.success(userGoalService.getUserGoals(userId, status)); } @Operation(summary = "获取我的活跃目标") @GetMapping("/my/active") public Result> getMyActiveGoals( @RequestHeader("Authorization") String authHeader) { String token = jwtUtil.extractTokenFromHeader(authHeader); Long userId = jwtUtil.getUserIdFromToken(token); return Result.success(userGoalService.getActiveGoals(userId)); } @Operation(summary = "获取目标详情") @GetMapping("/{id}") public Result getGoalById(@PathVariable Long id) { return Result.success(userGoalService.getGoalById(id)); } @Operation(summary = "领取目标奖励") @PostMapping("/{id}/claim-reward") public Result claimReward( @PathVariable Long id, @RequestHeader("Authorization") String authHeader) { String token = jwtUtil.extractTokenFromHeader(authHeader); Long userId = jwtUtil.getUserIdFromToken(token); return Result.success(userGoalService.claimReward(id, userId)); } @Operation(summary = "取消目标") @PostMapping("/{id}/cancel") public Result cancelGoal( @PathVariable Long id, @RequestHeader("Authorization") String authHeader) { String token = jwtUtil.extractTokenFromHeader(authHeader); Long userId = jwtUtil.getUserIdFromToken(token); userGoalService.cancelGoal(id, userId); return Result.success(); } @Operation(summary = "删除目标") @DeleteMapping("/{id}") public Result deleteGoal( @PathVariable Long id, @RequestHeader("Authorization") String authHeader) { String token = jwtUtil.extractTokenFromHeader(authHeader); Long userId = jwtUtil.getUserIdFromToken(token); userGoalService.deleteGoal(id, userId); return Result.success(); } }