Skip to content

Commit

Permalink
Merge pull request #72 from Mile-Writings/feat/#69
Browse files Browse the repository at this point in the history
#69 [[feat] 카테고리별 글 리스트
  • Loading branch information
sohyundoh authored Jan 11, 2024
2 parents 57e5ae9 + e207ae0 commit 2354c79
Show file tree
Hide file tree
Showing 32 changed files with 238 additions and 63 deletions.
Original file line number Diff line number Diff line change
@@ -1,18 +1,20 @@
package com.mile.controller.moim;

import com.mile.dto.SuccessResponse;
import com.mile.exception.message.SuccessMessage;
import com.mile.moim.serivce.MoimService;
import com.mile.moim.serivce.dto.CategoryListResponse;
import com.mile.moim.serivce.dto.ContentListResponse;
import com.mile.writerName.serivce.dto.PopularWriterListResponse;
import com.mile.moim.serivce.dto.MoimCuriousPostListResponse;
import com.mile.moim.serivce.dto.MoimInfoResponse;
import com.mile.moim.serivce.dto.MoimTopicResponse;
import com.mile.moim.service.MoimService;
import com.mile.moim.service.dto.CategoryListResponse;
import com.mile.moim.service.dto.ContentListResponse;
import com.mile.moim.service.dto.MoimCuriousPostListResponse;
import com.mile.moim.service.dto.MoimInfoResponse;
import com.mile.moim.service.dto.MoimTopicResponse;
import com.mile.writerName.service.dto.PopularWriterListResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.security.Principal;

@RestController
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@

import com.mile.dto.ErrorResponse;
import com.mile.dto.SuccessResponse;
import com.mile.moim.serivce.dto.CategoryListResponse;
import com.mile.moim.serivce.dto.ContentListResponse;
import com.mile.moim.serivce.dto.MoimCuriousPostListResponse;
import com.mile.writerName.serivce.dto.PopularWriterListResponse;
import com.mile.moim.serivce.dto.MoimTopicResponse;
import com.mile.moim.serivce.dto.MoimInfoResponse;
import com.mile.moim.service.dto.CategoryListResponse;
import com.mile.moim.service.dto.ContentListResponse;
import com.mile.moim.service.dto.MoimCuriousPostListResponse;
import com.mile.moim.service.dto.MoimInfoResponse;
import com.mile.moim.service.dto.MoimTopicResponse;
import com.mile.writerName.service.dto.PopularWriterListResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.mile.controller.post;

import com.mile.curious.serivce.dto.CuriousInfoResponse;
import com.mile.curious.service.dto.CuriousInfoResponse;
import com.mile.dto.SuccessResponse;
import com.mile.exception.message.SuccessMessage;
import com.mile.post.service.PostService;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.mile.controller.post;

import com.mile.curious.serivce.dto.CuriousInfoResponse;
import com.mile.curious.service.dto.CuriousInfoResponse;
import com.mile.dto.ErrorResponse;
import com.mile.dto.SuccessResponse;
import com.mile.post.service.dto.CommentCreateRequest;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.mile.controller.topic;

import com.mile.dto.SuccessResponse;
import com.mile.exception.message.SuccessMessage;
import com.mile.topic.service.TopicService;
import com.mile.topic.service.dto.PostListInTopicResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RequiredArgsConstructor
@RestController
@RequestMapping("/api/topic")
public class TopicController implements TopicControllerSwagger {

private final TopicService topicService;

@Override
@GetMapping("/{topicId}")
public SuccessResponse<PostListInTopicResponse> getPostListByTopic(
@PathVariable Long topicId
) {
return SuccessResponse.of(SuccessMessage.MOIM_POST_GET_SUCCESS, topicService.getPostListByTopic(topicId));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.mile.controller.topic;


import com.mile.dto.ErrorResponse;
import com.mile.dto.SuccessResponse;
import com.mile.topic.service.dto.PostListInTopicResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.PathVariable;

@Tag(name = "Topic")
public interface TopicControllerSwagger {

@Operation(summary = "글모임뷰 - 글감 별 글 List")
@ApiResponses(
value = {
@ApiResponse(responseCode = "200", description = "카테고리별 글 리스트 조회가 완료되었습니다."),
@ApiResponse(responseCode = "404", description = "1. 해당 글감이 존재하지 않습니다.\n 2. 해당 글감의 글이 존재하지 않습니다.",
content = @Content(schema = @Schema(implementation = ErrorResponse.class))),
@ApiResponse(responseCode = "500", description = "서버 내부 오류입니다.",
content = @Content(schema = @Schema(implementation = ErrorResponse.class)))

}
)
SuccessResponse<PostListInTopicResponse> getPostListByTopic(
@PathVariable Long topicId
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,13 @@ public enum ErrorMessage {
HANDLER_NOT_FOUND(HttpStatus.NOT_FOUND.value(), "요청하신 URL은 정보가 없습니다."),
COMMENT_NOT_FOUND(HttpStatus.NOT_FOUND.value(), "해당 댓글이 존재하지 않습니다."),
CURIOUS_NOT_FOUND(HttpStatus.NOT_FOUND.value(), "해당 궁금해요는 존재하지 않습니다."),
TOPIC_NOT_FOUND(HttpStatus.NOT_FOUND.value(), "해당 주제가 존재하지 않습니다."),
TOPIC_NOT_FOUND(HttpStatus.NOT_FOUND.value(), "해당 글감이 존재하지 않습니다."),
KEYWORD_NOT_FOUND(HttpStatus.NOT_FOUND.value(), "해당 글모임의 글감 키워드가 존재하지 않습니다."),
WRITERS_NOT_FOUND(HttpStatus.NOT_FOUND.value(), "해당 모임의 작가가 요청한 개수 이상 존재하지 않습니다"),
WRITER_NOT_FOUND(HttpStatus.NOT_FOUND.value(), "해당 작가는 존재하지 않습니다."),
RECCOMEND_NOT_FOUND(HttpStatus.NOT_FOUND.value(), "추천 글감을 받아오는데 실패했습니다."),
MOIM_TOPIC_NOT_FOUND(HttpStatus.NOT_FOUND.value(), "해당 모임의 주제가 존재하지 않습니다."),
MOIM_TOPIC_NOT_FOUND(HttpStatus.NOT_FOUND.value(), "해당 모임의 글감이 존재하지 않습니다."),
TOPIC_POST_NOT_FOUND(HttpStatus.NOT_FOUND.value(), "해당 글감의 글이 존재하지 않습니다."),
MOIM_POST_NOT_FOUND(HttpStatus.NOT_FOUND.value(), "해당 모임의 글이 존재하지 않습니다."),
/*
Bad Request
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ public enum SuccessMessage {
TEMPORARY_POST_GET_SUCCESS(HttpStatus.OK.value(), "임시저장글 조회가 완료되었습니다."),
MOIM_TOP_2_POST_GET_SUCCESS(HttpStatus.OK.value(), "궁금해요 상위 2개의 글이 조회 완료되었습니다."),
POST_GET_SUCCESS(HttpStatus.OK.value(), "글 조회가 완료되었습니다."),
MOIM_POST_GET_SUCCESS(HttpStatus.OK.value(), "카테고리별 글 리스트 조회가 완료되었습니다."),
/*
201 CREATED
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
package com.mile.curious.serivce;
package com.mile.curious.service;

import com.mile.curious.domain.Curious;
import com.mile.curious.repository.CuriousRepository;
import com.mile.curious.serivce.dto.CuriousInfoResponse;
import com.mile.curious.service.dto.CuriousInfoResponse;
import com.mile.exception.message.ErrorMessage;
import com.mile.exception.model.ConflictException;
import com.mile.exception.model.NotFoundException;
import com.mile.post.domain.Post;
import com.mile.user.domain.User;
import com.mile.writerName.domain.WriterName;
import com.mile.writerName.serivce.WriterNameService;
import com.mile.writerName.service.WriterNameService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.mile.curious.serivce.dto;
package com.mile.curious.service.dto;

public record CuriousInfoResponse(boolean isCurious, Integer curiousCount) {
public static CuriousInfoResponse of(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,23 +1,24 @@
package com.mile.moim.serivce;
package com.mile.moim.service;

import com.mile.exception.message.ErrorMessage;
import com.mile.exception.model.ForbiddenException;
import com.mile.exception.model.NotFoundException;
import com.mile.moim.domain.Moim;
import com.mile.moim.service.dto.CategoryListResponse;
import com.mile.moim.service.dto.ContentListResponse;
import com.mile.moim.service.dto.MoimAuthenticateResponse;
import com.mile.moim.repository.MoimRepository;
import com.mile.moim.serivce.dto.CategoryListResponse;
import com.mile.moim.serivce.dto.ContentListResponse;
import com.mile.moim.serivce.dto.MoimAuthenticateResponse;
import com.mile.moim.serivce.dto.MoimCuriousPostListResponse;
import com.mile.moim.serivce.dto.MoimInfoResponse;
import com.mile.moim.serivce.dto.MoimTopicResponse;
import com.mile.moim.service.dto.MoimCuriousPostListResponse;
import com.mile.moim.service.dto.MoimInfoResponse;
import com.mile.moim.service.dto.MoimTopicResponse;
import com.mile.post.service.PostCuriousService;
import com.mile.topic.serivce.TopicService;
import com.mile.topic.service.TopicService;
import com.mile.utils.DateUtil;
import com.mile.writerName.domain.WriterName;
import com.mile.writerName.serivce.WriterNameService;
import com.mile.writerName.serivce.dto.PopularWriterListResponse;
import java.util.List;

import com.mile.writerName.service.WriterNameService;
import com.mile.writerName.service.dto.PopularWriterListResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.mile.moim.serivce.dto;
package com.mile.moim.service.dto;

import com.mile.topic.serivce.dto.CategoryResponse;
import com.mile.topic.service.dto.CategoryResponse;
import java.util.List;

public record CategoryListResponse(List<CategoryResponse> categoryList) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.mile.moim.serivce.dto;
package com.mile.moim.service.dto;

import com.mile.topic.serivce.dto.ContentResponse;
import com.mile.topic.service.dto.ContentResponse;

import java.util.List;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.mile.moim.serivce.dto;
package com.mile.moim.service.dto;

public record MoimAuthenticateResponse(
boolean isMember
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.mile.moim.serivce.dto;
package com.mile.moim.service.dto;


import java.util.List;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.mile.moim.serivce.dto;
package com.mile.moim.service.dto;

public record MoimInfoResponse(

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
package com.mile.moim.serivce.dto;

import com.mile.post.domain.Post;
package com.mile.moim.service.dto;

public record MoimMostCuriousPostResponse(
String imageUrl,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.mile.moim.serivce.dto;
package com.mile.moim.service.dto;

public record MoimTopicResponse(
String content
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
package com.mile.post.repository;

import com.mile.post.domain.Post;
import com.mile.topic.domain.Topic;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface PostRepository extends JpaRepository<Post, Long>, PostRepositoryCustom {
boolean existsPostByIdAndWriterNameId(final Long postId, final Long userId);

List<Post> findByTopic(final Topic topic);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import com.mile.exception.message.ErrorMessage;
import com.mile.exception.model.ForbiddenException;
import com.mile.exception.model.NotFoundException;
import com.mile.moim.serivce.MoimService;
import com.mile.moim.service.MoimService;
import com.mile.post.domain.Post;
import com.mile.post.repository.PostRepository;
import lombok.RequiredArgsConstructor;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
import com.mile.exception.message.ErrorMessage;
import com.mile.exception.model.NotFoundException;
import com.mile.moim.domain.Moim;
import com.mile.moim.serivce.dto.MoimCuriousPostListResponse;
import com.mile.moim.serivce.dto.MoimMostCuriousPostResponse;
import com.mile.moim.service.dto.MoimCuriousPostListResponse;
import com.mile.moim.service.dto.MoimMostCuriousPostResponse;
import com.mile.post.domain.Post;
import com.mile.post.repository.PostRepository;
import lombok.RequiredArgsConstructor;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.mile.post.service;

import com.mile.exception.message.ErrorMessage;
import com.mile.exception.model.NotFoundException;
import com.mile.post.domain.Post;
import com.mile.post.repository.PostRepository;
import com.mile.topic.domain.Topic;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
@RequiredArgsConstructor
public class PostGetService {

private final PostRepository postRepository;


public List<Post> findByTopic(
final Topic topic
) {
List<Post> postList = postRepository.findByTopic(topic);
isPostListEmpty(postList);
return postList;
}

private void isPostListEmpty(
List<Post> postList
) {
if(postList.isEmpty()) {
throw new NotFoundException(ErrorMessage.MOIM_TOPIC_NOT_FOUND);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

import com.mile.aws.utils.S3Service;
import com.mile.comment.service.CommentService;
import com.mile.curious.serivce.CuriousService;
import com.mile.curious.serivce.dto.CuriousInfoResponse;
import com.mile.curious.service.CuriousService;
import com.mile.curious.service.dto.CuriousInfoResponse;
import com.mile.exception.message.ErrorMessage;
import com.mile.exception.model.BadRequestException;
import com.mile.exception.model.NotFoundException;
Expand All @@ -17,9 +17,9 @@
import com.mile.post.service.dto.TemporaryPostGetResponse;
import com.mile.post.service.dto.WriterAuthenticateResponse;
import com.mile.topic.domain.Topic;
import com.mile.topic.serivce.TopicService;
import com.mile.topic.service.TopicService;
import com.mile.user.service.UserService;
import com.mile.writerName.serivce.WriterNameService;
import com.mile.writerName.service.WriterNameService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.mile.post.service.dto;

import com.mile.post.domain.Post;
import com.mile.utils.DateUtil;

public record PostListResponse(
Long postId,
String postTitle,
String postContent,
String writerName,
String createdAt,
int curiousCount,
String imageUrl
) {
private static final int SUBSTRING_START = 0;
private static final int SUBSTRING_END_WITH_IMAGE = 104;
private static final int SUBSTRING_END_WITHOUT_IMAGE = 166;

public static PostListResponse of(final Post post) {
return new PostListResponse(post.getId(), post.getTitle(), getSubString(post),
post.getWriterName().getName(),
DateUtil.getStringWithTimeOfLocalDate(post.getCreatedAt()),
post.getCuriousCount(),
post.getImageUrl());
}

private static String getSubString(final Post post) {
if (post.getImageUrl().isEmpty()) {
return post.getContent().substring(SUBSTRING_START, SUBSTRING_END_WITHOUT_IMAGE);
} else {
return post.getContent().substring(SUBSTRING_START, SUBSTRING_END_WITH_IMAGE);
}
}
}
Loading

0 comments on commit 2354c79

Please sign in to comment.