package com.youlai.boot.mini.controller; import com.youlai.boot.common.annotation.Log; import com.youlai.boot.common.annotation.RepeatSubmit; import com.youlai.boot.common.enums.ActionTypeEnum; import com.youlai.boot.common.enums.LogModuleEnum; import com.youlai.boot.common.result.PageResult; import com.youlai.boot.common.result.Result; import com.youlai.boot.framework.security.util.SecurityUtils; import com.youlai.boot.mini.model.query.MyPointRecordQuery; import com.youlai.boot.mini.model.vo.MyPointRecordVO; import com.youlai.boot.mini.model.vo.MyPointVO; import com.youlai.boot.mini.model.vo.SignResultVO; import com.youlai.boot.mini.model.vo.SignStatusVO; import com.youlai.boot.mini.service.MiniPointAccountService; import com.youlai.boot.mini.service.MiniPointRecordService; import com.youlai.boot.mini.service.MiniSignService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springdoc.core.annotations.ParameterObject; import org.springframework.web.bind.annotation.*; @Tag(name = "用户端积分服务相关接口") @RestController @RequestMapping("/api/v1/mini/user/point") @RequiredArgsConstructor public class PointController { private final MiniPointAccountService pointAccountService; private final MiniPointRecordService pointRecordService; private final MiniSignService signService; @Operation(summary = "查询当前用户的积分账户信息") @GetMapping("/my") @Log(module = LogModuleEnum.POINT_ACCOUNT, value = ActionTypeEnum.LIST) public Result getMyPoint() { Long userId = SecurityUtils.getUserId(); MyPointVO myPoint = pointAccountService.getUserPoint(userId); return Result.success(myPoint); } @Operation(summary = "分页查询当前用户的积分流水列表") @GetMapping("/records") @Log(module = LogModuleEnum.POINT_RECORD, value = ActionTypeEnum.LIST) public PageResult getMyPointRecords(@ParameterObject MyPointRecordQuery query) { Long userId = SecurityUtils.getUserId(); return PageResult.success(pointRecordService.pageMyPointRecord(userId, query)); } @Operation(summary = "用户签到") @PostMapping("/sign") @RepeatSubmit @Log(module = LogModuleEnum.SIGN_RECORD, value = ActionTypeEnum.INSERT) public Result sign() { return Result.success(signService.sign()); } @Operation(summary = "查询用户签到状态/当月签到日历") @GetMapping("/sign/status") @Log(module = LogModuleEnum.SIGN_RECORD, value = ActionTypeEnum.LIST) public Result getSignStatus() { return Result.success(signService.getSignStatus()); } @Operation(summary = "用户分享领取奖励") @PostMapping("/share/reward") @Log(module = LogModuleEnum.OTHER, value = ActionTypeEnum.OTHER) public Result shareReward() { Long userId = SecurityUtils.getUserId(); Integer point = pointRecordService.giveShareReward(userId); return Result.success(point); } @Operation(summary = "登记流浪动物领取积分") @PostMapping("/register-animal/reward") @Log(module = LogModuleEnum.OTHER, value = ActionTypeEnum.OTHER) public Result registerAnimalReward( @Parameter(description = "登记的流浪动物ID", required = true) @RequestParam Long animalId) { Long userId = SecurityUtils.getUserId(); Integer point = pointRecordService.giveRegisterAnimalReward(userId, animalId); return Result.success(point); } @Operation(summary = "AI生成扣除积分") @PostMapping("/ai-generate/deduct") @Log(module = LogModuleEnum.OTHER, value = ActionTypeEnum.OTHER) public Result aiGenerateImageDeduct( @Parameter(description = "AI生成任务唯一ID(用于幂等)", required = true) @RequestParam String taskId) { Long userId = SecurityUtils.getUserId(); Integer deductPoint = pointRecordService.deductAiGenerateImagePoint(userId, taskId); return Result.success(deductPoint); } }