Skip to content

Commit

Permalink
Merge branch 'develop' into feat/#69
Browse files Browse the repository at this point in the history
  • Loading branch information
sohyundoh committed Jan 11, 2024
2 parents f9ecc91 + 57e5ae9 commit 0ab58c3
Show file tree
Hide file tree
Showing 20 changed files with 351 additions and 26 deletions.
5 changes: 4 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,10 @@ ex. #123 [feat] 로그인 구현


## 📍 Architecture
<img src="https://github.com/Mile-Writings/Mile-Server/assets/116873401/f3eaa175-19fc-4ceb-8ab4-49687ddebf0e" width = "900" >
![image](https://github.com/Mile-Writings/Mile-Server/assets/79795051/3fadfcd5-ae4b-420a-bc5b-313aca7b5b11)

## 🤍 ERD
<img width="718" alt="image" src="https://github.com/Mile-Writings/Mile-Server/assets/79795051/ce6b8805-0547-46f0-a571-563165ddd372">

## 👨🏻‍💻 Stack
| Stack | Version | Content |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,13 @@

import com.mile.dto.SuccessResponse;
import com.mile.exception.message.SuccessMessage;
import com.mile.moim.service.MoimService;
import com.mile.moim.dto.CategoryListResponse;
import com.mile.moim.dto.ContentListResponse;
import com.mile.moim.dto.MoimInfoResponse;
import com.mile.moim.dto.MoimTopicResponse;
import com.mile.writerName.service.dto.PopularWriterListResponse;
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 lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
Expand Down Expand Up @@ -35,7 +36,7 @@ public SuccessResponse<ContentListResponse> getTopicsFromMoim(
@Override
@GetMapping("/{moimId}/authenticate")
public SuccessResponse getAuthenticationOfMoim(
final Long moimId,
@PathVariable final Long moimId,
final Principal principal
) {
return SuccessResponse.of(SuccessMessage.MOIM_AUTHENTICATE_SUCCESS, moimService.getAuthenticateUserOfMoim(moimId, Long.valueOf(principal.getName())));
Expand All @@ -61,7 +62,7 @@ public SuccessResponse<MoimTopicResponse> getTopicFromMoim(
@GetMapping("/{moimId}/info")
@Override
public SuccessResponse<MoimInfoResponse> getMoimInfo(
final Long moimId
@PathVariable final Long moimId
) {
return SuccessResponse.of(SuccessMessage.MOIM_INFO_SUCCESS, moimService.getMoimInfo(moimId));
}
Expand All @@ -74,4 +75,11 @@ public SuccessResponse<CategoryListResponse> getCategoryList(
) {
return SuccessResponse.of(SuccessMessage.CATEGORY_LIST_SEARCH_SUCCESS, moimService.getCategoryList(moimId));
}

@GetMapping("/{moimId}/mostCuriousPost")
public SuccessResponse<MoimCuriousPostListResponse> getMostCuriousPostByMoim(
@PathVariable final Long moimId
) {
return SuccessResponse.of(SuccessMessage.MOIM_TOP_2_POST_GET_SUCCESS, moimService.getMostCuriousPostFromMoim(moimId));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,12 @@

import com.mile.dto.ErrorResponse;
import com.mile.dto.SuccessResponse;
import com.mile.moim.dto.CategoryListResponse;
import com.mile.moim.dto.ContentListResponse;
import com.mile.writerName.service.dto.PopularWriterListResponse;
import com.mile.moim.dto.MoimTopicResponse;
import com.mile.moim.dto.MoimInfoResponse;
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 io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
Expand Down Expand Up @@ -94,6 +95,21 @@ SuccessResponse<MoimInfoResponse> getMoimInfo(
final Long moimId
);


@Operation(summary = "글모임 뷰 - 궁금해요 상위 게시글 2개")
@ApiResponses(
value = {
@ApiResponse(responseCode = "200", description = "궁금해요 상위 2개의 글이 조회 완료되었습니다."),
@ApiResponse(responseCode = "404", description = "해당 글모임이 존재하지 않습니다.",
content = @Content(schema = @Schema(implementation = ErrorResponse.class))),
@ApiResponse(responseCode = "500", description = "서버 내부 오류입니다.",
content = @Content(schema = @Schema(implementation = ErrorResponse.class)))
}
)
SuccessResponse<MoimCuriousPostListResponse> getMostCuriousPostByMoim(
@PathVariable final Long moimId
);

@Operation(summary = "카테고리 리스트 조회")
@ApiResponses(
value = {
Expand All @@ -102,7 +118,7 @@ SuccessResponse<MoimInfoResponse> getMoimInfo(
content = @Content(schema = @Schema(implementation = ErrorResponse.class)))
}
)
public SuccessResponse<CategoryListResponse> getCategoryList(
SuccessResponse<CategoryListResponse> getCategoryList(
@PathVariable final Long moimId
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@
import com.mile.post.service.PostService;
import com.mile.post.service.dto.CommentCreateRequest;
import com.mile.post.service.dto.CommentListResponse;
import com.mile.post.service.dto.PostGetResponse;
import com.mile.post.service.dto.PostPutRequest;
import com.mile.post.service.dto.TemporaryPostGetResponse;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
Expand Down Expand Up @@ -97,7 +99,7 @@ public SuccessResponse getAuthenticateWrite(
@Override
public SuccessResponse putPost(
@PathVariable final Long postId,
@RequestBody final PostPutRequest putRequest,
@Valid @RequestBody final PostPutRequest putRequest,
final Principal principal
) {
postService.updatePost(postId, Long.valueOf(principal.getName()), putRequest);
Expand All @@ -113,4 +115,21 @@ public SuccessResponse deletePost(
postService.deletePost(postId, Long.valueOf(principal.getName()));
return SuccessResponse.of(SuccessMessage.POST_DELETE_SUCCESS);
}

@Override
@GetMapping("/temporary/{postId}")
public SuccessResponse<TemporaryPostGetResponse> getTemporaryPost(
@PathVariable final Long postId,
final Principal principal
) {
return SuccessResponse.of(SuccessMessage.TEMPORARY_POST_GET_SUCCESS,
postService.getTemporaryPost(postId, Long.valueOf(principal.getName())));
}

@GetMapping("/{postId}")
public SuccessResponse<PostGetResponse> getPost(
@PathVariable final Long postId
) {
return SuccessResponse.of(SuccessMessage.POST_GET_SUCCESS, postService.getPost(postId));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
import com.mile.dto.SuccessResponse;
import com.mile.post.service.dto.CommentCreateRequest;
import com.mile.post.service.dto.CommentListResponse;
import com.mile.post.service.dto.PostGetResponse;
import com.mile.post.service.dto.PostPutRequest;
import com.mile.post.service.dto.TemporaryPostGetResponse;
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 Expand Up @@ -161,4 +163,33 @@ SuccessResponse deletePost(
@PathVariable final Long postId,
final Principal principal
);

@Operation(summary = "임시저장글 조회")
@ApiResponses(
value = {
@ApiResponse(responseCode = "200", description = "임시저장글 조회가 완료되었습니다."),
@ApiResponse(responseCode = "404", description = "해당 글은 존재하지 않습니다.",
content = @Content(schema = @Schema(implementation = ErrorResponse.class))),
@ApiResponse(responseCode = "500", description = "서버 내부 오류입니다.",
content = @Content(schema = @Schema(implementation = ErrorResponse.class)))
}
)
SuccessResponse<TemporaryPostGetResponse> getTemporaryPost(
@PathVariable final Long postId,
final Principal principal
);

@Operation(summary = "글 조회")
@ApiResponses(
value = {
@ApiResponse(responseCode = "200", description = "글 조회가 완료되었습니다."),
@ApiResponse(responseCode = "404", description = "해당 글은 존재하지 않습니다.",
content = @Content(schema = @Schema(implementation = ErrorResponse.class))),
@ApiResponse(responseCode = "500", description = "서버 내부 오류입니다.",
content = @Content(schema = @Schema(implementation = ErrorResponse.class)))
}
)
SuccessResponse<PostGetResponse> getPost(
@PathVariable final Long postId
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ public enum ErrorMessage {
INVALID_BUCKET_PREFIX(HttpStatus.BAD_REQUEST.value(), "유효하지 않는 S3 버킷 디렉터리 이름입니다."),
VALIDATION_REQUEST_MISSING_EXCEPTION(HttpStatus.BAD_REQUEST.value(), "요청 값이 유효하지 않습니다."),
BEARER_LOST_ERROR(HttpStatus.BAD_REQUEST.value(), "토큰의 요청에 Bearer이 담겨 있지 않습니다."),
POST_NOT_TEMPORARY_ERROR(HttpStatus.BAD_REQUEST.value(), "해당 글은 임시저장글이 아닙니다."),

IMAGE_EXTENSION_INVALID_ERROR(HttpStatus.BAD_REQUEST.value(), "이미지 확장자는 jpg, png, webp만 가능합니다."),
IMAGE_SIZE_INVALID_ERROR(HttpStatus.BAD_REQUEST.value(), "이미지 사이즈는 5MB를 넘을 수 없습니다."),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ public enum SuccessMessage {
POST_DELETE_SUCCESS(HttpStatus.OK.value(), "글 삭제가 완료되었습니다."),
CATEGORY_LIST_SEARCH_SUCCESS(HttpStatus.OK.value(), "카테고리 리스트 조회가 완료되었습니다."),
MOIM_TOPIC_GET_SUCCESS(HttpStatus.OK.value(), "글감 조회가 완료되었습니다."),
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
8 changes: 4 additions & 4 deletions module-common/src/main/java/com/mile/utils/DateUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -46,21 +46,21 @@ public static String getStringDateOfLocalDate(
private static String getKoreanString(
final LocalDateTime localDateTime
) {
return getYearStringValueOfLocalDate(localDateTime) + YEAR
+ getMonthStringValueOfLocalDate(localDateTime) + MONTH
return getYearStringValueOfLocalDate(localDateTime) + YEAR + " "
+ getMonthStringValueOfLocalDate(localDateTime) + MONTH + " "
+ getDayOfMonthStringValueOfLocalDate(localDateTime) + DAY;
}

private static String getYearStringValueOfLocalDate(
final LocalDateTime localDateTime
) {
return localDateTime.getMonth().toString();
return String.valueOf(localDateTime.getYear());
}

private static String getMonthStringValueOfLocalDate(
final LocalDateTime localDateTime
) {
return localDateTime.getMonth().toString();
return String.valueOf(localDateTime.getMonthValue());
}

private static String getDayOfMonthStringValueOfLocalDate(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.mile.moim.serivce.dto;


import java.util.List;

public record MoimCuriousPostListResponse(
List<MoimMostCuriousPostResponse> postList
) {
public static MoimCuriousPostListResponse of(
List<MoimMostCuriousPostResponse> postList
) {
return new MoimCuriousPostListResponse(postList);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.mile.moim.serivce.dto;

import com.mile.post.domain.Post;

public record MoimMostCuriousPostResponse(
String imageUrl,
String topic,
String title,
String content
) {
public static MoimMostCuriousPostResponse of(
String imageUrl,
String topic,
String title,
String content
) {
return new MoimMostCuriousPostResponse(imageUrl, topic, title, content);
}
}
16 changes: 12 additions & 4 deletions module-domain/src/main/java/com/mile/moim/service/MoimService.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,14 @@
import com.mile.moim.dto.CategoryListResponse;
import com.mile.moim.dto.MoimAuthenticateResponse;
import com.mile.moim.repository.MoimRepository;
import com.mile.moim.dto.ContentListResponse;
import com.mile.moim.dto.MoimInfoResponse;
import com.mile.moim.dto.MoimTopicResponse;
import com.mile.topic.service.TopicService;
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.post.service.PostCuriousService;
import com.mile.topic.serivce.TopicService;
import com.mile.utils.DateUtil;
import com.mile.writerName.domain.WriterName;
import java.util.List;
Expand All @@ -27,6 +31,7 @@ public class MoimService {
private final WriterNameService writerNameService;
private final TopicService topicService;
private final MoimRepository moimRepository;
private final PostCuriousService postCuriousService;

private static final int NUMBER_OF_MOST_CURIOUS_WRITERS = 2;

Expand Down Expand Up @@ -98,6 +103,9 @@ public MoimInfoResponse getMoimInfo(
);
}

public MoimCuriousPostListResponse getMostCuriousPostFromMoim(final Long moimId) {
return postCuriousService.getMostCuriousPostByMoim(findById(moimId));
}
public CategoryListResponse getCategoryList(
final Long moimId
) {
Expand Down
2 changes: 2 additions & 0 deletions module-domain/src/main/java/com/mile/post/domain/Post.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.mile.post.service.dto.PostPutRequest;
import com.mile.topic.domain.Topic;
import com.mile.writerName.domain.WriterName;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
Expand All @@ -22,6 +23,7 @@ public class Post extends BaseTimeEntity {
@ManyToOne
private WriterName writerName;
private String title;
@Column(length = 50000)
private String content;
private String imageUrl;
private int curiousCount;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.mile.post.repository;

import com.mile.moim.domain.Moim;
import com.mile.post.domain.Post;

import java.util.List;

public interface PostRepositoryCustom {
List<Post> findTop2ByMoimOrderByCuriousCountDesc(final Moim requestMoim);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.mile.post.repository;

import com.mile.moim.domain.Moim;
import com.mile.post.domain.Post;
import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor;

import java.util.List;
import java.util.stream.Collectors;

import static com.mile.moim.domain.QMoim.moim;
import static com.mile.post.domain.QPost.post;

@RequiredArgsConstructor
public class PostRepositoryImpl implements PostRepositoryCustom {
private final JPAQueryFactory jpaQueryFactory;

// select post from post join moim
public List<Post> findTop2ByMoimOrderByCuriousCountDesc(final Moim requestMoim) {
return jpaQueryFactory.selectFrom(post)
.join(moim)
.on(post.topic.moim.eq(requestMoim))
.orderBy(post.curiousCount.desc())
.stream().limit(2).collect(Collectors.toList());
}

}
Loading

0 comments on commit 0ab58c3

Please sign in to comment.