Skip to content

Commit

Permalink
Merge pull request #288 from codesquad-members-2023-team6/dev
Browse files Browse the repository at this point in the history
클라이언트 요청에 맞게 ResponseMessage 객체를 사용한 응답구현
  • Loading branch information
lvalentine6 committed Jun 1, 2023
2 parents eca91c6 + 413eba2 commit 0b4af24
Show file tree
Hide file tree
Showing 9 changed files with 84 additions and 28 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,11 @@
import com.team6.issue_tracker.domain.comment.service.CommentService;
import com.team6.issue_tracker.domain.comment.domain.Comment;
import com.team6.issue_tracker.domain.comment.dto.CreateCommentRequest;
import com.team6.issue_tracker.global.util.ResponseMessage;
import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@RestController
Expand All @@ -21,9 +24,10 @@ public class CommentController {
description = "사용자는 코멘트를 등록할 수 있다."
)
@PostMapping("/comment")
public void createComment(@PathVariable("issueIdx") long issueIdx, @RequestBody CreateCommentRequest request) {
public ResponseEntity<ResponseMessage<Void>> createComment(@PathVariable("issueIdx") long issueIdx, @RequestBody CreateCommentRequest request) {
//TODO 유효성 검증
commentService.saveComment(Comment.newComment(request.getContents(), issueIdx, request.getWriterIdx()));
return ResponseMessage.of(HttpStatus.CREATED, "Comment created successfully", null);
}

@Operation(
Expand All @@ -32,12 +36,13 @@ public void createComment(@PathVariable("issueIdx") long issueIdx, @RequestBody
description = "사용자는 코멘트를 수정할 수 있다."
)
@PutMapping("/comment/{commentIdx}")
public void updateComment(@PathVariable("issueIdx") long issueIdx,
@PathVariable("commentIdx") long commentIdx,
@RequestBody CommentDto commentDto) {
public ResponseEntity<ResponseMessage<Void>> updateComment(@PathVariable("issueIdx") long issueIdx,
@PathVariable("commentIdx") long commentIdx,
@RequestBody CommentDto commentDto) {
//TODO 작성자 검증
//TODO 유효성 검증
commentService.saveComment(commentDto.toUpdatedComment(issueIdx));
return ResponseMessage.of(HttpStatus.OK, "Comment updated successfully", null);
}

@Operation(
Expand All @@ -46,9 +51,10 @@ public void updateComment(@PathVariable("issueIdx") long issueIdx,
description = "사용자는 코멘트를 삭제할 수 있다."
)
@DeleteMapping("/comment/{commentIdx}")
public void deleteComment(@PathVariable("commentIdx") long commentIdx) {
public ResponseEntity<ResponseMessage<Void>> deleteComment(@PathVariable("commentIdx") long commentIdx) {
//TODO 작성자 검증
//TODO 유효성 검증
commentService.deleteComment(commentIdx);
return ResponseMessage.of(HttpStatus.OK, "Comment deleted successfully", null);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,12 @@
import com.team6.issue_tracker.domain.issue.dto.*;
import com.team6.issue_tracker.domain.issue.service.IssueService;
import com.team6.issue_tracker.domain.issue.service.IssueUpdateService;
import com.team6.issue_tracker.global.util.ResponseMessage;
import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@Slf4j
Expand All @@ -23,8 +26,9 @@ public class IssueController {
description = "사용자는 이슈 상세 정보를 볼 수 있다."
)
@GetMapping("/issue/{issueIdx}")
public IssueDetail getIssueDetails(@PathVariable("issueIdx") long issueIdx) {
return issueService.findById(issueIdx);
public ResponseEntity<ResponseMessage<IssueDetail>> getIssueDetails(@PathVariable("issueIdx") long issueIdx) {
IssueDetail issueDetail = issueService.findById(issueIdx);
return ResponseMessage.of(HttpStatus.OK, "Issue details retrieved successfully", issueDetail);
}

@Operation(
Expand All @@ -33,8 +37,9 @@ public IssueDetail getIssueDetails(@PathVariable("issueIdx") long issueIdx) {
description = "사용자는 새로운 이슈를 작성할 수 있다."
)
@PostMapping("/issue")
public void postNewIssue(@RequestBody CreateIssueRequest request) {
public ResponseEntity<ResponseMessage<Void>> postNewIssue(@RequestBody CreateIssueRequest request) {
issueService.saveIssue(request.toIssue());
return ResponseMessage.of(HttpStatus.CREATED, "New issue created successfully", null);
}

@Operation(
Expand All @@ -43,9 +48,10 @@ public void postNewIssue(@RequestBody CreateIssueRequest request) {
description = "사용자는 원하는 이슈를 다중 선택해 상태를 변경할 수 있다."
)
@PatchMapping("/issue")
public void updateIssuesStatus(UpdateIssueListStatusRequest request) {
public ResponseEntity<ResponseMessage<Void>> updateIssuesStatus(UpdateIssueListStatusRequest request) {
//TODO 유효성 검사
issueUpdateService.updateIssueListStatus(request.getIssueIdx(), request.getStatus());
return ResponseMessage.of(HttpStatus.OK, "Issue status updated successfully", null);
}

@Operation(
Expand All @@ -54,9 +60,10 @@ public void updateIssuesStatus(UpdateIssueListStatusRequest request) {
description = "사용자는 이슈 상태만 수정할 수 있다."
)
@PatchMapping("/issue/{issueIdx}/status")
public void updateIssuesStatus(@RequestBody UpdateIssueStatusRequest request, @PathVariable("issueIdx") long issueIdx) {
public ResponseEntity<ResponseMessage<Void>> updateIssuesStatus(@RequestBody UpdateIssueStatusRequest request, @PathVariable("issueIdx") long issueIdx) {
//TODO 유효성 검사
issueUpdateService.updateIssueStatus(issueIdx, request.getStatus());
return ResponseMessage.of(HttpStatus.OK, "Issue status updated successfully", null);
}

@Operation(
Expand All @@ -65,9 +72,10 @@ public void updateIssuesStatus(@RequestBody UpdateIssueStatusRequest request, @P
description = "사용자는 이슈 제목만 수정할 수 있다."
)
@PatchMapping("/issue/{issueIdx}/title")
public void updateIssuesTitle(@RequestBody UpdateIssueTitleRequest request, @PathVariable("issueIdx") long issueIdx) {
public ResponseEntity<ResponseMessage<Void>> updateIssuesTitle(@RequestBody UpdateIssueTitleRequest request, @PathVariable("issueIdx") long issueIdx) {
//TODO 유효성 검사
issueUpdateService.updateIssueTitle(issueIdx, request.getTitle());
return ResponseMessage.of(HttpStatus.OK, "Issue title updated successfully", null);
}

@Operation(
Expand All @@ -76,9 +84,10 @@ public void updateIssuesTitle(@RequestBody UpdateIssueTitleRequest request, @Pat
description = "사용자는 이슈 담당자만 수정할 수 있다."
)
@PatchMapping("/issue/{issueIdx}/assignee")
public void updateIssuesAssignee(@RequestBody UpdateIssueAssigneeRequest request, @PathVariable("issueIdx") long issueIdx) {
public ResponseEntity<ResponseMessage<Void>> updateIssuesAssignee(@RequestBody UpdateIssueAssigneeRequest request, @PathVariable("issueIdx") long issueIdx) {
//TODO 유효성 검사
issueUpdateService.updateIssueAssignee(issueIdx, request.getAssigneeIdx());
return ResponseMessage.of(HttpStatus.OK, "Issue assignee updated successfully", null);
}

@Operation(
Expand All @@ -87,10 +96,10 @@ public void updateIssuesAssignee(@RequestBody UpdateIssueAssigneeRequest request
description = "사용자는 이슈를 수정할 수 있다."
)
@PutMapping("/issue/{issueId}")
public void updateIssueContents(IssueDetail issueDetail) {
public ResponseEntity<ResponseMessage<Void>> updateIssueContents(IssueDetail issueDetail) {
//TODO 유효성 검사
Issue updatedIssue = issueDetail.fromDto(issueDetail);
issueUpdateService.updateIssue(updatedIssue);
return ResponseMessage.of(HttpStatus.OK, "Issue content updated successfully", null);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,11 @@

import com.team6.issue_tracker.domain.label.dto.LabelDetail;
import com.team6.issue_tracker.domain.label.service.LabelService;
import com.team6.issue_tracker.global.util.ResponseMessage;
import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

Expand All @@ -21,7 +24,8 @@ public class LabelController {
description = "사용자는 레이블 목록을 볼 수 있다."
)
@GetMapping("/label")
public List<LabelDetail> readLabelList() {
return labelService.getAllLabelDetails();
public ResponseEntity<ResponseMessage<List<LabelDetail>>> readLabelList() {
List<LabelDetail> labelDetailList = labelService.getAllLabelDetails();
return ResponseMessage.of(HttpStatus.OK, "Label details retrieved successfully", labelDetailList);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,11 @@

import com.team6.issue_tracker.domain.member.dto.MemberDetail;
import com.team6.issue_tracker.domain.member.service.MemberService;
import com.team6.issue_tracker.global.util.ResponseMessage;
import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

Expand All @@ -22,8 +25,9 @@ public class MemberController {
description = "사용자는 회원 목록을 볼 수 있다."
)
@GetMapping("/members")
public List<MemberDetail> findAll() {
return new ArrayList<>(memberService.getAllMembers().values());
public ResponseEntity<ResponseMessage<List<MemberDetail>>> findAll() {
List<MemberDetail> memberList = new ArrayList<>(memberService.getAllMembers().values());
return ResponseMessage.of(HttpStatus.OK, "member details retrieved successfully", memberList);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,11 @@

import com.team6.issue_tracker.domain.milestone.dto.MilestoneDetail;
import com.team6.issue_tracker.domain.milestone.service.MilestoneService;
import com.team6.issue_tracker.global.util.ResponseMessage;
import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

Expand All @@ -21,7 +24,8 @@ public class MilestoneController {
description = "사용자는 마일스톤 목록을 볼 수 있다."
)
@GetMapping("/milestones")
public List<MilestoneDetail> findAll() {
return milestoneService.getAllMilestonesWithIssueNum();
public ResponseEntity<ResponseMessage<List<MilestoneDetail>>> findAll() {
List<MilestoneDetail> milestoneDetails = milestoneService.getAllMilestonesWithIssueNum();
return ResponseMessage.of(HttpStatus.OK, "Milestone details retrieved successfully", milestoneDetails);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,11 @@
import com.team6.issue_tracker.domain.page.dto.IssuePageResponse;
import com.team6.issue_tracker.domain.page.exception.NoPageSearchElementException;
import com.team6.issue_tracker.domain.page.service.PageService;
import com.team6.issue_tracker.global.util.ResponseMessage;
import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

Expand All @@ -21,10 +24,12 @@ public class PageController {
description = "사용자는 이슈 목록을 필터링하여 볼 수 있다. page, status 는 필수 파라미터입니다."
)
@GetMapping("/issue")
public IssuePageResponse findAllIssueOpenList(IssuePageRequest requestParams) throws NoPageSearchElementException {
public ResponseEntity<ResponseMessage<IssuePageResponse>> findAllIssueOpenList(IssuePageRequest requestParams) throws NoPageSearchElementException {
if (requestParams.getPage()== null || requestParams.getStatus()==null) {
throw new NoPageSearchElementException("필수 파라미터 page, status 와 함께 요청해주세요.");
}
return pageService.getAPage(requestParams.getPage(), requestParams.toFilter());

IssuePageResponse issuePageResponse = pageService.getAPage(requestParams.getPage(), requestParams.toFilter());
return ResponseMessage.of(HttpStatus.OK, "Issue page retrieved successfully", issuePageResponse);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,11 @@
import com.team6.issue_tracker.global.cloud.domain.Directory;
import com.team6.issue_tracker.global.cloud.dto.FileUploadResult;
import com.team6.issue_tracker.global.cloud.service.ImageHostService;
import com.team6.issue_tracker.global.util.ResponseMessage;
import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
Expand All @@ -24,7 +27,8 @@ public class ImageHostController {
description = "사용자는 이미지를 업로드할 수 있다."
)
@PostMapping(value = "/resource", consumes = "multipart/form-data")
public FileUploadResult testUp(@RequestPart MultipartFile files) throws IOException {
return imageHostService.upload(files, Directory.ISSUE);
public ResponseEntity<ResponseMessage<FileUploadResult>> testUp(@RequestPart MultipartFile files) throws IOException {
FileUploadResult fileUploadResult = imageHostService.upload(files, Directory.ISSUE);
return ResponseMessage.of(HttpStatus.OK, "Image uploaded successfully", fileUploadResult);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,11 @@ public SecurityConfig(JwtService jwtService) {
protected void configure(HttpSecurity http) throws Exception {
http .csrf().disable()
.authorizeRequests()
.antMatchers("/**",
"/", "/login/**","/oauth/**",
"/issue/**",/*임시 오픈 이슈*/
.antMatchers("/", "/login/**","/oauth/**",
"/issue/**", "/**",
"/error", "/swagger-ui/**",
"/v3/**", "auth/**").permitAll()
"/v3/**", "auth/**",
"/issue?status=open&page=0&maxPageNum=10").permitAll()
.anyRequest().authenticated()
.and()
.sessionManagement()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.team6.issue_tracker.global.util;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;

@Getter
@Slf4j
@AllArgsConstructor
public class ResponseMessage<T> {
private HttpStatus status;
private String message;
private T data;

public static <T> ResponseEntity<ResponseMessage<T>> of(HttpStatus status, String message, T data) {
return new ResponseEntity<>(new ResponseMessage<>(status, message, data), status);
}
}

0 comments on commit 0b4af24

Please sign in to comment.