package jnpf.limsController; import cn.dev33.satoken.exception.SameTokenInvalidException; import cn.dev33.satoken.same.SaSameUtil; import jnpf.base.ActionResult; import jnpf.exception.DataException; import jnpf.lims.api.ElnSourceApi; import jnpf.lims.api.model.ElnSourceActorRequest; import jnpf.lims.api.model.ElnSourceSnapshot; import jnpf.limsService.provider.LimsElnReadonlyResolver.SourceFailure; import jnpf.limsService.provider.LimsElnSourceActorService; import jnpf.util.NoDataSourceBind; import org.springframework.web.bind.annotation.*; import java.util.Collections; import java.util.List; import java.util.Map; @RestController @RequestMapping("/Internal/lims/elnSources") public class LimsElnSourceActorController implements ElnSourceApi { private final LimsElnSourceActorService service; public LimsElnSourceActorController(LimsElnSourceActorService service) { this.service = service; } @Override @PostMapping("/resolve") @NoDataSourceBind public ActionResult> resolveAsActor(@RequestBody ElnSourceActorRequest request) { SaSameUtil.checkCurrentRequestToken(); return ActionResult.success("OK", service.resolve(request)); } @ExceptionHandler(SameTokenInvalidException.class) public ActionResult unauthorized() { return failure("SOURCE_FORBIDDEN", "Trusted service caller required"); } @ExceptionHandler(DataException.class) public ActionResult invalid(DataException error) { return failure(error instanceof SourceFailure ? ((SourceFailure) error).getCode() : "SOURCE_INVALID", "Source request could not be resolved"); } @ExceptionHandler(org.springframework.dao.DataAccessException.class) public ActionResult unavailable() { return failure("SOURCE_UNAVAILABLE", "Source configuration is unavailable"); } private ActionResult> failure(String code, String message) { ActionResult> result = ActionResult.fail("SOURCE_FORBIDDEN".equals(code) ? 403 : "SOURCE_UNAVAILABLE".equals(code) ? 503 : 400, message); result.setData(Collections.singletonMap("errorCode", code)); return result; } }