You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
digital-rmb-backend/src/main/java/com/yau/digitalrmb/shared/wallet/WalletRuntimeResetControlle...

46 lines
2.2 KiB
Java

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.yau.digitalrmb.shared.wallet;
import com.yau.digitalrmb.identity.domain.UserRole;
import com.yau.digitalrmb.institutionidentity.application.InstitutionKeySubject;
import com.yau.digitalrmb.security.context.AuthContextHolder;
import com.yau.digitalrmb.security.context.JwtUser;
import com.yau.digitalrmb.shared.api.ErrorCode;
import com.yau.digitalrmb.shared.exception.BusinessException;
import com.yau.digitalrmb.shared.api.ApiResponse;
import com.yau.digitalrmb.shared.web.TraceIdFilter;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.slf4j.MDC;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
@RequestMapping("/api/v1/wallet-runtime")
@Tag(name = "钱包运行数据-彻底重开", description = "清空兑换/支付历史并重建模块三投影(教师/管理员专用)")
public class WalletRuntimeResetController {
@Resource
private WalletRuntimeResetService resetService;
@PostMapping("/reset")
@Operation(summary = "彻底重开兑换与支付实验",
description = "删除当前用户的全部兑换/支付订单与流水(含已确权完成的),把涉及币串回退到商业银行库," +
"并清空模块三投影出的共享钱包/银行账户/证书/合约/绑定与实验attempt," +
"随后立即按最新模块三结果重新投影,模块四/五可直接重新开始。仅教师和管理员可调用。")
public ApiResponse<WalletRuntimeResetResult> reset() {
JwtUser jwtUser = AuthContextHolder.get();
Integer roleId = jwtUser.getRoleId();
if (roleId == null || (roleId != UserRole.ADMIN.getId() && roleId != UserRole.TEACHER.getId())) {
throw new BusinessException(ErrorCode.FORBIDDEN, "仅教师或管理员可以彻底重开兑换与支付实验");
}
return ApiResponse.success(resetService.reset(InstitutionKeySubject.from(jwtUser)), traceId());
}
private String traceId() {
return MDC.get(TraceIdFilter.MDC_KEY);
}
}