OWL ITS + 탐지시스템(인터넷 진흥원)
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
128
129
130
131
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());
        }
 
        if (issues.get(0).getIssueCompanies() != null && issues.get(0).getIssueType().getUsePartner() < 1) {
            sb.append(", 업체가 해당 이슈유형에 설정되어 있지 않습니다.");
        }
 
        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.ACCEPTED)
    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;
    }
}