Skip to content

Commit

Permalink
Merge branch 'dev' into feat/#203
Browse files Browse the repository at this point in the history
  • Loading branch information
chsua authored Aug 3, 2023
2 parents 1892037 + 626f753 commit 41aa7ff
Show file tree
Hide file tree
Showing 60 changed files with 829 additions and 308 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
import com.votogether.domain.member.entity.Member;
import com.votogether.domain.post.dto.request.PostCreateRequest;
import com.votogether.domain.post.dto.response.PostResponse;
import com.votogether.domain.post.dto.response.VoteOptionStatisticsResponse;
import com.votogether.domain.post.dto.response.detail.PostDetailResponse;
import com.votogether.domain.post.dto.response.vote.VoteOptionStatisticsResponse;
import com.votogether.domain.post.entity.PostClosingType;
import com.votogether.domain.post.entity.PostSortType;
import com.votogether.domain.post.service.PostService;
Expand Down Expand Up @@ -37,38 +38,64 @@ public class PostController {

@Operation(summary = "게시글 작성", description = "게시글을 저장한다.")
@ApiResponses(value = {
@ApiResponse(responseCode = "201", description = "게시물 생성되었습니다."),
@ApiResponse(responseCode = "201", description = "게시글 생성 성공"),
@ApiResponse(responseCode = "400", description = "잘못된 입력입니다.")
})
@PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<Void> save(
@RequestPart(name = "request") @Valid final PostCreateRequest request,
@RequestPart(name = "contentImages") final List<MultipartFile> contentImages,
@RequestPart(name = "optionImages") final List<MultipartFile> optionImages,
@Auth final Member loginMember
@RequestPart @Valid final PostCreateRequest request,
@RequestPart(required = false) final List<MultipartFile> contentImages,
@RequestPart final List<MultipartFile> optionImages,
@Auth final Member member
) {
final long postId = postService.save(request, loginMember, contentImages, optionImages);
System.out.println("PostController.save");

System.out.println("contentImages = " + contentImages);
if (contentImages != null && !contentImages.isEmpty()) {
System.out.println("contentImages = " + contentImages.get(0).getOriginalFilename());
}

System.out.println("optionImages = " + optionImages);
if (optionImages != null && !optionImages.isEmpty()) {
System.out.println("optionImages1 = " + optionImages.get(0).getOriginalFilename());
System.out.println("optionImages2 = " + optionImages.get(1).getOriginalFilename());
}
final long postId = postService.save(request, member, contentImages, optionImages);
return ResponseEntity.created(URI.create("/posts/" + postId)).build();
}

@Operation(summary = "전체 게시글 조회", description = "게시글을 조회한다.")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "게시글을 조회했습니다."),
@ApiResponse(responseCode = "200", description = "게시글 조회 성공"),
@ApiResponse(responseCode = "400", description = "잘못된 입력입니다.")
})
@GetMapping
public ResponseEntity<List<PostResponse>> getAllPost(
final int page,
final PostClosingType postClosingType,
final PostSortType postSortType,
@Auth final Member loginMember
@Auth final Member member
) {
final List<PostResponse> responses =
postService.getAllPostBySortTypeAndClosingType(loginMember, page, postClosingType, postSortType);
postService.getAllPostBySortTypeAndClosingType(member, page, postClosingType, postSortType);

return ResponseEntity.ok(responses);
}

@Operation(summary = "게시글 상세 조회", description = "한 게시글의 상세를 조회한다.")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "게시글 조회 성공"),
@ApiResponse(responseCode = "404", description = "존재하지 않는 게시글")
})
@GetMapping("{postId}")
public ResponseEntity<PostDetailResponse> getPost(
@PathVariable final Long postId,
@Auth final Member member
) {
final PostDetailResponse response = postService.getPostById(postId, member);
return ResponseEntity.ok(response);
}

@Operation(summary = "게시글 투표 통계 조회", description = "게시글 투표에 대한 전체 통계를 조회한다.")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "게시글 투표 통계 조회 성공"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,12 @@
import com.votogether.domain.category.entity.Category;

public record CategoryResponse(
long id,
Long id,
String name
) {

public static CategoryResponse of(Category category) {
return new CategoryResponse(category.getId(), category.getName());
}

@Override
public String toString() {
return "CategoryResponse{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
import com.votogether.domain.post.entity.PostOption;

public record PostOptionResponse(
long optionId,
Long optionId,
String content,
int voteCount,
double votePercent
Integer voteCount,
Double votePercent
) {

public static PostOptionResponse of(
Expand All @@ -22,14 +22,4 @@ public static PostOptionResponse of(
);
}

@Override
public String toString() {
return "OptionResponse{" +
"optionId=" + optionId +
", content='" + content + '\'' +
", voteCount=" + voteCount +
", votePercent=" + votePercent +
'}';
}

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.votogether.domain.post.dto.response;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.votogether.domain.member.entity.Member;
import com.votogether.domain.post.dto.response.vote.VoteResponse;
import com.votogether.domain.post.entity.Post;
import com.votogether.domain.post.entity.PostBody;
import com.votogether.domain.post.entity.PostCategory;
Expand All @@ -15,8 +17,13 @@ public record PostResponse(
String title,
String content,
List<CategoryResponse> categories,

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm")
LocalDateTime createdAt,

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm")
LocalDateTime deadline,

VoteResponse voteInfo
) {

Expand All @@ -41,7 +48,9 @@ public static PostResponse of(final Post post, final Member loginMember) {
}

private static List<CategoryResponse> getCategories(final Post post) {
return post.getPostCategories().getPostCategories().stream()
return post.getPostCategories()
.getPostCategories()
.stream()
.map(PostCategory::getCategory)
.map(CategoryResponse::of)
.toList();
Expand All @@ -51,7 +60,9 @@ private static List<PostOptionResponse> getOptions(
final Post post,
final Member loginMember
) {
return post.getPostOptions().getPostOptions().stream()
return post.getPostOptions()
.getPostOptions()
.stream()
.map(postOption ->
PostOptionResponse.of(
postOption,
Expand All @@ -62,18 +73,4 @@ private static List<PostOptionResponse> getOptions(
.toList();
}

@Override
public String toString() {
return "PostResponse{" +
"postId=" + postId +
", writer=" + writer +
", title='" + title + '\'' +
", content='" + content + '\'' +
", categories=" + categories +
", createdAt=" + createdAt +
", deadline=" + deadline +
", voteInfo=" + voteInfo +
'}' + "\n\n";
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,4 @@ public static WriterResponse of(final Long id, final String nickname) {
return new WriterResponse(id, nickname);
}

@Override
public String toString() {
return "WriterResponse{" +
"id=" + id +
", nickname='" + nickname + '\'' +
'}';
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
package com.votogether.domain.post.dto.response.detail;

import com.votogether.domain.member.entity.Member;
import com.votogether.domain.post.dto.response.CategoryResponse;
import com.votogether.domain.post.dto.response.WriterResponse;
import com.votogether.domain.post.entity.Post;
import com.votogether.domain.post.entity.PostBody;
import com.votogether.domain.post.entity.PostCategories;
import com.votogether.domain.post.entity.PostCategory;
import com.votogether.domain.post.entity.PostContentImage;
import java.time.LocalDateTime;
import java.util.List;

public record PostDetailResponse(
Long postId,
WriterResponse writer,
String title,
String content,
String imageUrl,
List<CategoryResponse> categories,
LocalDateTime createdAt,
LocalDateTime deadline,
VoteDetailResponse voteInfo
) {

public static PostDetailResponse of(final Post post, final Member loginMember) {
final Member writer = post.getWriter();
final PostBody postBody = post.getPostBody();
final List<PostContentImage> contentImages = postBody.getPostContentImages().getContentImages();
final StringBuilder contentImageUrl = new StringBuilder();

if (!contentImages.isEmpty()) {
contentImageUrl.append(contentImages.get(0).getImageUrl());
}

final PostCategories postCategories = post.getPostCategories();
return new PostDetailResponse(
post.getId(),
WriterResponse.of(writer.getId(), writer.getNickname()),
postBody.getTitle(),
postBody.getContent(),
contentImageUrl.toString(),
getCategories(postCategories.getPostCategories()),
post.getCreatedAt(),
post.getDeadline(),
VoteDetailResponse.of(
post.getPostOptions().getSelectedOptionId(loginMember),
post.getFinalTotalVoteCount(loginMember),
getOptions(post, loginMember)
)
);
}

private static List<CategoryResponse> getCategories(final List<PostCategory> postCategories) {
return postCategories.stream()
.map(PostCategory::getCategory)
.map(CategoryResponse::of)
.toList();
}

private static List<PostOptionDetailResponse> getOptions(
final Post post,
final Member loginMember
) {
return post.getPostOptions().getPostOptions().stream()
.map(postOption ->
PostOptionDetailResponse.of(
postOption,
post.isVisibleVoteResult(loginMember),
post.getFinalTotalVoteCount(loginMember)
)
)
.toList();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.votogether.domain.post.dto.response.detail;

import com.votogether.domain.post.entity.PostOption;

public record PostOptionDetailResponse(
Long optionId,
String content,
String imageUrl,
Integer voteCount,
Double votePercent
) {

public static PostOptionDetailResponse of(
final PostOption postOption,
final Boolean isVisibleVoteResult,
final Long totalVoteCount
) {
return new PostOptionDetailResponse(
postOption.getId(),
postOption.getContent(),
postOption.getImageUrl(),
postOption.getVoteCount(isVisibleVoteResult),
postOption.getVotePercent(totalVoteCount)
);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.votogether.domain.post.dto.response.detail;

import java.util.List;

public record VoteDetailResponse(
Long selectedOptionId,
Long totalVoteCount,
List<PostOptionDetailResponse> options
) {

public static VoteDetailResponse of(
final long selectedOptionId,
final long finalTotalVoteCount,
final List<PostOptionDetailResponse> options
) {
return new VoteDetailResponse(selectedOptionId, finalTotalVoteCount, options);
}

}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.votogether.domain.post.dto.response;
package com.votogether.domain.post.dto.response.vote;

import com.votogether.domain.member.entity.Gender;
import java.util.Map;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.votogether.domain.post.dto.response;
package com.votogether.domain.post.dto.response.vote;

import com.votogether.domain.member.entity.Gender;
import java.util.Arrays;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.votogether.domain.post.dto.response;
package com.votogether.domain.post.dto.response.vote;

import com.votogether.domain.post.dto.response.PostOptionResponse;
import java.util.List;

public record VoteResponse(
Expand Down
Loading

0 comments on commit 41aa7ff

Please sign in to comment.