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<List<ElnSourceSnapshot>> 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<Map<String, String>> failure(String code, String message) {
|
ActionResult<Map<String, String>> result = ActionResult.fail("SOURCE_FORBIDDEN".equals(code) ? 403
|
: "SOURCE_UNAVAILABLE".equals(code) ? 503 : 400, message);
|
result.setData(Collections.singletonMap("errorCode", code));
|
return result;
|
}
|
}
|