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;
|
}
|
}
|