刘光辉
9 小时以前 06f314545ac3514d7ce28939920866ae8188d31c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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;
    }
}