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 addIssue(ApiIssueAddForm apiIssueAddForm, @RequestParam("files") List files) throws OwlRuntimeException, CloneNotSupportedException { Map 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 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 modifyIssue(ApiIssueModifyForm apiIssueModifyForm) throws OwlRuntimeException, CloneNotSupportedException { Map 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 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; } }