You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

98 lines
4.2 KiB

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.form.MiniDeductPointForm;
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 jakarta.validation.Valid;
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<MyPointVO> 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<MyPointRecordVO> 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<SignResultVO> sign() {
return Result.success(signService.sign());
}
@Operation(summary = "查询用户签到状态/当月签到日历")
@GetMapping("/sign/status")
@Log(module = LogModuleEnum.SIGN_RECORD, value = ActionTypeEnum.LIST)
public Result<SignStatusVO> getSignStatus() {
return Result.success(signService.getSignStatus());
}
@Operation(summary = "用户分享领取奖励")
@PostMapping("/share/reward")
@Log(module = LogModuleEnum.OTHER, value = ActionTypeEnum.OTHER)
public Result<Integer> 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<Integer> 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 = "通用扣减积分接口")
@PostMapping("/deduct")
@Log(module = LogModuleEnum.POINT_RECORD, value = ActionTypeEnum.UPDATE, title = "通用扣减积分")
public Result<Integer> deductPoint(@Valid @RequestBody MiniDeductPointForm form) {
Long userId = SecurityUtils.getUserId();
Integer deductPoint = pointRecordService.deductPoint(userId, form.getRuleCode(), form.getBizId());
return Result.success(deductPoint);
}
}