OWL ITS + 탐지시스템(인터넷 진흥원)
jhjang
2022-01-13 77a84ace0b0df4c717cf2df5921ce6826ac4ebd2
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
package kr.wisestone.owl.web.controller.Api;
 
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import kr.wisestone.owl.constant.Constants;
import kr.wisestone.owl.constant.MsgConstants;
import kr.wisestone.owl.domain.Issue;
import kr.wisestone.owl.exception.ApiParameterException;
import kr.wisestone.owl.exception.OwlRuntimeException;
import kr.wisestone.owl.service.IssueService;
import kr.wisestone.owl.util.ConvertUtil;
import kr.wisestone.owl.web.controller.BaseController;
import kr.wisestone.owl.web.form.ApiIssueAddForm;
import kr.wisestone.owl.web.form.ApiIssueModifyForm;
import kr.wisestone.owl.web.form.IssueApiForm;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
 
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
/**
 * OWL-API 컨트롤러
 */
@Controller
@RequestMapping("/api")
public class ApiController extends BaseController {
 
    @Autowired
    private IssueService issueService;
 
 
    /**
     * 이슈 추가
     * @param apiIssueAddForm 입력 폼 데이터
     * @param files 파일
     * @return JSON
     * @throws OwlRuntimeException 파라미터 오류시 발생
     * @throws CloneNotSupportedException 이슈 복사 시에 발생
     */
    @PostMapping(value = "/issue")
    @ApiOperation(value = "이슈 추가", notes = "새로운 이슈를 추가한다.")
    @ApiImplicitParams(
            {
                    @ApiImplicitParam(name = "files", dataType = "file"),
                    @ApiImplicitParam(name = "token", paramType = "form"),
                    @ApiImplicitParam(name = "title", paramType = "form"),
                    @ApiImplicitParam(name = "description", paramType = "form"),
                    @ApiImplicitParam(name = "issueTypeId", paramType = "form"),
                    @ApiImplicitParam(name = "customFields", paramType = "form")
            }
    )
 
    @ResponseStatus(HttpStatus.CREATED)
    public
    @ResponseBody
    Map<String, Object> addIssue(ApiIssueAddForm apiIssueAddForm, @RequestParam("files") List<MultipartFile> files)
            throws OwlRuntimeException, CloneNotSupportedException {
        Map<String, Object> resJsonData = new HashMap<>();
 
        IssueApiForm issueApiForm = ConvertUtil.copyProperties(apiIssueAddForm, IssueApiForm.class);
//        String str = request.getParameter(Constants.REQ_KEY_C0NTENT);
        issueApiForm.setMultipartFiles(files);
        issueApiForm.parseCustomFields(apiIssueAddForm.getCustomFields());
        issueApiForm.setApiType(IssueApiForm.ApiType.add);
        // 사용자 정의 필드가 없을 경우 검색을 할 수 없기 때문에 예외처리
        if (issueApiForm.getCustomFieldValues() == null || issueApiForm.getCustomFieldValues().size() == 0) {
            throw new ApiParameterException(this.messageAccessor.getMessage(MsgConstants.API_CUSTOM_FIELD_NOT_EXIST));
        }
 
        List<Issue> issues = this.issueService.addApiIssue(issueApiForm);
        //  버전 생성
        StringBuilder sb = new StringBuilder();
        for (Issue issue : issues) {
            this.issueService.addIssueVersion(issue.getId(), issue.getRegisterId());
            if (sb.length() > 0)
                sb.append(",");
            sb.append(issue.getProject().getProjectKey()).append("-").append(issue.getIssueNumber());
        }
 
        resJsonData.put(Constants.RES_KEY_MSG_SUCCESS, sb.toString());
        return resJsonData;
    }
 
    /**
     * 이슈 상태 수정
     * @param apiIssueModifyForm 수정 폼 데이터
     * @return JSON
     * @throws OwlRuntimeException 파라미터 오류시 발생
     * @throws CloneNotSupportedException 이슈 복사 시에 발생
     */
    @PostMapping(value = "/issue/status")
    @ApiOperation(value = "이슈 상태 수정", notes = "사용자 정의 필드가 동일한 기존 이슈를 변경한다.")
    @ResponseStatus(HttpStatus.OK)
    public
    @ResponseBody
    Map<String, Object> modifyIssue(ApiIssueModifyForm apiIssueModifyForm) throws OwlRuntimeException, CloneNotSupportedException {
        Map<String, Object> resJsonData = new HashMap<>();
        IssueApiForm issueApiForm = ConvertUtil.copyProperties(apiIssueModifyForm, IssueApiForm.class);
        issueApiForm.parseCustomFields(apiIssueModifyForm.getCustomFields());
        issueApiForm.setApiType(IssueApiForm.ApiType.modify);
        // 사용자 정의 필드가 없을 경우 검색을 할 수 없기 때문에 예외처리
        if (issueApiForm.getCustomFieldValues() == null || issueApiForm.getCustomFieldValues().size() == 0) {
            throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_CUSTOM_FIELD_NOT_EXIST));
        }
 
        List<Issue> issues = this.issueService.modifyIssue(issueApiForm, new ArrayList<>());
        if (issues != null && issues.size() > 0) {
            StringBuilder sb = new StringBuilder();
            for (Issue issue : issues) {
                if (sb.length() > 0)
                    sb.append(",");
                sb.append(issue.getProject().getProjectKey()).append("-").append(issue.getIssueNumber());
            }
            resJsonData.put(Constants.RES_KEY_MSG_SUCCESS, sb.toString());
        }
        return resJsonData;
    }
}