Skip to content

Commit 12f1cfc

Browse files
authored
Merge pull request #30 from KONKUK-MAP-Service/feat-spot
✔️ [Fix] : 장소, 댓글 도메인 클라이언트 반환값 수정 #30
2 parents d47d608 + d8ccced commit 12f1cfc

12 files changed

+152
-50
lines changed

src/main/java/com/cona/KUsukKusuk/comment/controller/CommentController.java

+10-9
Original file line numberDiff line numberDiff line change
@@ -76,17 +76,18 @@ public HttpResponse<CommentDeleteResponse> deleteComment(@PathVariable("spotId")
7676
);
7777
}
7878

79-
@GetMapping("/myAllComments/{pageNum}/{commentsInPage}")
79+
@GetMapping("/myAllComments")
8080
@Operation(summary = "자신의 댓글 전체 조회", description = "로그인한 사용자의 댓글을 전체 조회합니다.('페이지 위치:보여지는 댓글 수'형식으로 입력받습니다.)")
81-
public HttpResponse<CommentPaginationResponse> allComments(@PathVariable("pageNum")Long pageNum, @PathVariable("commentsInPage")Long commentsInPage){
82-
User user = commentService.getCurrentUser();
83-
Long userId = user.getId(); //userId 정보
84-
//List<SpotGetResponse> allSpots = spotService.getAllSpots(); //모든 spot 정보
85-
List<CommentGetResponse> commentsByUser = commentService.getUserCommentsOfAllSpots(userId); //사용자가 쓴 comment만
86-
//페이지 네이션 적용
87-
CommentPaginationResponse commentPaginationResponses = commentService.getPagedComments(commentsByUser,pageNum, commentsInPage);
81+
public HttpResponse<List<CommentListResponseDto>> allComments(@RequestParam(defaultValue = "1") int pageNumber,
82+
83+
@RequestParam(defaultValue = "10") int pageSize){
84+
85+
int adjustedPageNumber = pageNumber - 1;
86+
87+
88+
List<CommentListResponseDto> pagedComments = commentService.getPagedComments(adjustedPageNumber, pageSize);
8889
return HttpResponse.okBuild(
89-
commentPaginationResponses);
90+
pagedComments);
9091
}
9192

9293

src/main/java/com/cona/KUsukKusuk/comment/dto/CommentGetResponse.java

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ public static CommentGetResponse of(Long commentNum, Comment comment,LocalDateTi
1818
.commentId(comment.getId())
1919
.comment(comment.getComment())
2020
.userId(comment.getUser().getId())
21+
2122
.createDate(createDate)
2223
.build();
2324
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.cona.KUsukKusuk.comment.dto;
2+
3+
import com.cona.KUsukKusuk.comment.domain.Comment;
4+
import com.cona.KUsukKusuk.spot.domain.Spot;
5+
import com.cona.KUsukKusuk.user.dto.BoomarkLikeResponseDto;
6+
import com.cona.KUsukKusuk.user.dto.PageInfo;
7+
import java.time.LocalDateTime;
8+
import lombok.Builder;
9+
10+
@Builder
11+
public record CommentListResponseDto(
12+
String spotName,
13+
Long spotId,
14+
String usersComment,
15+
String review,
16+
LocalDateTime CommentcreateDate,
17+
18+
String author,
19+
20+
21+
String spotImageurl,
22+
long totalElements,
23+
int page,
24+
int size,
25+
int totalPages
26+
) {
27+
28+
public static CommentListResponseDto of (Comment comment, PageInfo pageInfo){
29+
return CommentListResponseDto.builder()
30+
.spotName(comment.getSpot().getSpotName())
31+
.spotImageurl(comment.getSpot().getImageUrls().get(0))
32+
.CommentcreateDate(comment.getCreatedDate())
33+
.spotId(comment.getId())
34+
.review(comment.getSpot().getReview())
35+
.author(comment.getUser().getNickname())
36+
.usersComment(comment.getComment())
37+
.totalElements(pageInfo.getTotalElements())
38+
.page(pageInfo.getPage())
39+
.size(pageInfo.getSize())
40+
.totalPages(pageInfo.getTotalPages())
41+
.build();
42+
}
43+
44+
45+
}

src/main/java/com/cona/KUsukKusuk/comment/repository/CommentRepository.java

+4
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,13 @@
22

33
import com.cona.KUsukKusuk.comment.domain.Comment;
44
import com.cona.KUsukKusuk.user.domain.User;
5+
import java.util.List;
6+
import java.util.Optional;
57
import org.springframework.data.jpa.repository.JpaRepository;
68

79
public interface CommentRepository extends JpaRepository<Comment, Long> {
810
void deleteAllByUser(User user);
911

12+
List<Comment> findByUser(User user);
13+
1014
}

src/main/java/com/cona/KUsukKusuk/comment/service/CommentService.java

+53-35
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.cona.KUsukKusuk.comment.domain.Comment;
44
import com.cona.KUsukKusuk.comment.dto.CommentGetResponse;
5+
import com.cona.KUsukKusuk.comment.dto.CommentListResponseDto;
56
import com.cona.KUsukKusuk.comment.dto.CommentPaginationResponse;
67
import com.cona.KUsukKusuk.comment.exception.CommentNotFoundException;
78
import com.cona.KUsukKusuk.comment.exception.CommentUserNotMatchedException;
@@ -10,22 +11,29 @@
1011
import com.cona.KUsukKusuk.spot.exception.SpotNotFoundException;
1112
import com.cona.KUsukKusuk.spot.repository.SpotRepository;
1213
import com.cona.KUsukKusuk.user.domain.User;
14+
import com.cona.KUsukKusuk.user.dto.BoomarkLikeResponseDto;
15+
import com.cona.KUsukKusuk.user.dto.PageInfo;
1316
import com.cona.KUsukKusuk.user.service.UserService;
17+
import java.util.stream.Collectors;
18+
import lombok.extern.slf4j.Slf4j;
1419
import org.springframework.stereotype.Service;
1520

1621
import java.util.ArrayList;
1722
import java.util.List;
1823

1924
@Service
25+
@Slf4j
2026
public class CommentService {
2127
private final CommentRepository commentRepository;
2228
private final SpotRepository spotRepository;
2329
private final UserService userService;
30+
2431
public CommentService(CommentRepository commentRepository, SpotRepository spotRepository, UserService userService) {
2532
this.commentRepository = commentRepository;
2633
this.spotRepository = spotRepository;
2734
this.userService = userService;
2835
}
36+
2937
public Comment save(Comment comment) {
3038
Comment savedComment = commentRepository.save(comment);
3139
return savedComment;
@@ -37,13 +45,14 @@ public User getCurrentUser() {
3745
return user;
3846
}
3947

40-
public Spot getCurrentSpot(Long spotId) {
48+
public Spot getCurrentSpot(Long spotId) {
4149
Spot spot = spotRepository.findById(spotId)
4250
.orElseThrow(() -> new SpotNotFoundException());
4351
return spot;
4452
}
4553

46-
public Comment getCurrentComment(String commentUserName , Spot spot, Long commentId) throws CommentNotFoundException, CommentUserNotMatchedException {
54+
public Comment getCurrentComment(String commentUserName, Spot spot, Long commentId)
55+
throws CommentNotFoundException, CommentUserNotMatchedException {
4756
List<Comment> commentList = spot.getComments();
4857
Comment wantToUpdate = null; // 초기화를 null로 설정
4958
for (Comment comment : commentList) {
@@ -59,10 +68,11 @@ public Comment getCurrentComment(String commentUserName , Spot spot, Long commen
5968
}
6069

6170
//commentUserName과 comment의 작성자 일치 확인
62-
if (wantToUpdate.getUser().getUserId().equals(commentUserName))
71+
if (wantToUpdate.getUser().getUserId().equals(commentUserName)) {
6372
return wantToUpdate;
64-
else
73+
} else {
6574
throw new CommentUserNotMatchedException("Don't have authority to update the comment.");
75+
}
6676

6777
}
6878

@@ -71,46 +81,54 @@ public void delete(Comment comment) {
7181
}
7282

7383

74-
public List<CommentGetResponse> getUserCommentsOfAllSpots(Long userId) {
75-
//목표 : 사용자가 쓴 comment만 list<CommentGetResponse> 형태로 반환
76-
List<Comment> comments = commentRepository.findAll();
77-
List<CommentGetResponse> commentsByuser = new ArrayList<>();
78-
Long cNum = 0L;
79-
for (Comment c : comments)
80-
{
81-
if (c.getUser().getId().equals(userId))
82-
commentsByuser.add(CommentGetResponse.of(++cNum,c,c.getCreatedDate()));
84+
public List<CommentListResponseDto> getUserCommentsOfAllSpots(Long userId) {
85+
// 사용자가 쓴 comment만 가져오기
86+
User user = getCurrentUser();
87+
List<Comment> comments = commentRepository.findByUser(user);
88+
List<CommentListResponseDto> commentsByUser = new ArrayList<>();
89+
90+
// 가져온 comment를 CommentListResponseDto로 변환하여 리스트에 추가
91+
for (Comment comment : comments) {
92+
CommentListResponseDto commentDto = CommentListResponseDto.builder()
93+
.spotName(comment.getSpot().getSpotName())
94+
.spotId(comment.getSpot().getId())
95+
.review(comment.getSpot().getReview())
96+
.CommentcreateDate(comment.getSpot().getCreatedDate())
97+
.author(comment.getUser().getNickname())
98+
.spotImageurl(comment.getSpot().getImageUrls().get(0))
99+
.build();
100+
commentsByUser.add(commentDto);
83101
}
84102

85-
return commentsByuser;
86-
103+
return commentsByUser;
87104
}
88105

89-
public CommentPaginationResponse getPagedComments(List<CommentGetResponse> commentsByUser, Long pageNum, Long commentsInPage){
90-
//commentsByuser 한 객체마다 pagination 해줘서 pagedComments 에 넣어주기
91-
List<CommentPaginationResponse> pagedComments = new ArrayList<>();
106+
public List<CommentListResponseDto> getPagedComments( int
107+
pageNumber
108+
, int pageSize) {
109+
110+
User user = getCurrentUser();
111+
List<Comment> comments = commentRepository.findByUser(user);
112+
System.out.println("comments.size() = " + comments.size());
113+
List<CommentListResponseDto> pagedResponse = new ArrayList<>();
92114

93-
Long totalComments = (long) commentsByUser.size();
94-
Long amountInBlock = commentsInPage;
95-
Long lastPage = totalComments / amountInBlock; // 전체 페이지 수
96-
// 나머지가 0보다 큰 경우에는 몫에 1을 더해주기
97-
if (totalComments % amountInBlock > 0) {
98-
lastPage++;
99-
}
100-
if (pageNum > lastPage || pageNum <= 0) {//요청하는 페이지가 존재하지 않는 경우
101-
return null;
102-
}
103115

104-
Long curPageNum = 1L;
116+
int start = Math.min(pageNumber * pageSize, comments.size());
117+
int end = Math.min((pageNumber + 1) * pageSize, comments.size());
105118

106-
for (int i = 0; i < totalComments; i += amountInBlock) {
107-
int endIndex = (int) Math.min(i + amountInBlock, commentsByUser.size());
108-
List<CommentGetResponse> currentPageComments = commentsByUser.subList(i, endIndex);
109-
pagedComments.add(CommentPaginationResponse.of(currentPageComments, totalComments, curPageNum, lastPage, (long) (endIndex-i)));
110-
curPageNum++;
119+
if (start > end) {
120+
start = end;
111121
}
122+
PageInfo pageInfo = new PageInfo();
123+
pageInfo.setTotalElements(comments.size());
124+
pageInfo.setPage(pageNumber + 1);
125+
pageInfo.setSize(pageSize);
126+
pageInfo.setTotalPages((int) Math.ceil((double) comments.size() / pageSize));
112127

128+
List<Comment> pagedcomments = comments.subList(start, end);
113129

114-
return pagedComments.get((int) (pageNum - 1));
130+
return pagedcomments.stream()
131+
.map(comment -> CommentListResponseDto.of(comment, pageInfo))
132+
.collect(Collectors.toList());
115133
}
116134
}

src/main/java/com/cona/KUsukKusuk/global/domain/BaseEntity.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import jakarta.persistence.EntityListeners;
55
import jakarta.persistence.MappedSuperclass;
66
import java.time.LocalDateTime;
7+
import java.time.ZoneId;
78
import lombok.Getter;
89
import org.springframework.data.annotation.CreatedDate;
910
import org.springframework.data.annotation.LastModifiedDate;
@@ -16,8 +17,9 @@ public abstract class BaseEntity {
1617

1718
@CreatedDate
1819
@Column(updatable = false)
19-
public LocalDateTime createdDate = LocalDateTime.now().plusHours(9);
20+
public LocalDateTime createdDate = LocalDateTime.now(ZoneId.of("Asia/Seoul")); // 한국 시간으로 생성 날짜 설정
2021

2122
@LastModifiedDate
22-
public LocalDateTime updatedDate = LocalDateTime.now().plusHours(9);
23+
public LocalDateTime updatedDate = LocalDateTime.now(ZoneId.of("Asia/Seoul")); // 한국 시간으로 수정 날짜 설정
2324
}
25+

src/main/java/com/cona/KUsukKusuk/global/s3/S3Service.java

+10-1
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ public List<String> updateImages(List<MultipartFile> files, String userId) throw
129129

130130

131131
public void deleteSpotImages(Spot spot,User user) {
132-
//현재 url에서 키 값을 추출해서 그대로 해당 키의 버킷 객체를
132+
//현재 url에서 키 값을 추출해서 그대로 해당 키의 버킷 객체를 삭제(전부삭제)
133133

134134
List<String> imageUrls = spot.getImageUrls();
135135
if(!imageUrls.isEmpty()){
@@ -141,5 +141,14 @@ public void deleteSpotImages(Spot spot,User user) {
141141

142142
}
143143
}
144+
public void deleteImagebyUrl(User member,String url) {
145+
146+
147+
148+
if (url != null) {
149+
String key = extractString(url, member.getUserId());
150+
amazonS3.deleteObject(bucket, key);
151+
}
152+
}
144153

145154
}

src/main/java/com/cona/KUsukKusuk/spot/dto/CommentResponse.java

+1
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,6 @@ public class CommentResponse {
1414
private String author;
1515
boolean deletable;
1616
private LocalDateTime createdDate;
17+
private String profileImage;
1718

1819
}

src/main/java/com/cona/KUsukKusuk/spot/dto/SpotDetailResponse.java

+3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.cona.KUsukKusuk.spot.dto;
22

33
import com.cona.KUsukKusuk.spot.domain.Spot;
4+
import java.time.LocalDateTime;
45
import java.util.List;
56
import lombok.Builder;
67

@@ -14,6 +15,7 @@ public record SpotDetailResponse(Long spotId,
1415
String author,
1516
Boolean bookmark,
1617
Boolean like,
18+
LocalDateTime createDate,
1719

1820

1921
String review) {
@@ -29,6 +31,7 @@ public static SpotDetailResponse fromSpot(Spot spot,Boolean isBookmark, Boolean
2931
.review(spot.getReview())
3032
.author(spot.getUser().getNickname())
3133
.bookmark(isBookmark)
34+
.createDate(spot.getCreatedDate())
3235
.like(isLike)
3336
.build();
3437
}

src/main/java/com/cona/KUsukKusuk/spot/dto/SpotUpdateRequest.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@ public record SpotUpdateRequest (
1515

1616

1717

18-
String review
18+
String review,
19+
20+
int deleteImageindex
1921
){
2022

2123
}

src/main/java/com/cona/KUsukKusuk/spot/service/SpotService.java

+15-2
Original file line numberDiff line numberDiff line change
@@ -130,9 +130,21 @@ public Spot updateSpot(Long spotId,List<MultipartFile> images, SpotUpdateRequest
130130
if (!spot.getUser().equals(user)) {
131131
throw new UserNotFoundException(HttpExceptionCode.USER_NOT_MATCH);
132132
}
133+
int deleteImageindex = spotUpdateRequest.deleteImageindex();
134+
135+
136+
List<String> imageUrls = spot.getImageUrls();
137+
138+
if (deleteImageindex>=1 && deleteImageindex<=imageUrls.size()) {
139+
String deleteimageurl = imageUrls.get(deleteImageindex-1);
140+
imageUrls.remove(deleteImageindex-1);
141+
//해당 인덱스에 대응하는 이미지 삭제후 다시 저장(영속).
142+
spot.setImageUrls(imageUrls);
143+
s3Service.deleteImagebyUrl(user,deleteimageurl);
144+
}
133145

134146
if (!images.get(0).isEmpty()) {
135-
//이미지가 존재할 경우
147+
//이미지가 존재할 경우 기존 이미지 전부 삭제후 새로운 이미지 업로드
136148
s3Service.deleteSpotImages(spot,user);
137149
List<String> imagesurl = s3Service.uploadImages(images, username);
138150
spot.setImageUrls(imagesurl);
@@ -182,7 +194,8 @@ private CommentResponse mapToCommentResponse(Comment comment, boolean currentUse
182194
comment.getComment(),
183195
comment.getUser().getNickname(),
184196
deletable,
185-
comment.getCreatedDate()
197+
comment.getCreatedDate(),
198+
comment.getUser().getProfileimage()
186199
);
187200
}
188201

src/main/java/com/cona/KUsukKusuk/user/service/UserService.java

+3
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,9 @@ public String refreshToken(String encryptedRefreshToken) {
111111
//redis에서 해당 키 검색해서 해당 토큰에 대응하는 key 추출
112112
String userId = redisService.getValues(pureRefreshToken);
113113

114+
if (!redisService.checkExistsValue(userId)) {
115+
throw new IncorrectRefreshTokenException();
116+
}
114117
User user = userRepository.findByUserId(userId)
115118
.orElseThrow(UserNotFoundException::new);
116119

0 commit comments

Comments
 (0)