Skip to content

Commit d05b36e

Browse files
authored
Merge pull request #269 from prgrms-web-devcourse-final-project/develop
배포
2 parents 3570d17 + bc57b5e commit d05b36e

File tree

11 files changed

+193
-174
lines changed

11 files changed

+193
-174
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+

backend/src/main/java/com/ai/lawyer/domain/poll/entity/Poll.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ public class Poll {
3232
@Column(name = "created_at", nullable = false)
3333
private LocalDateTime createdAt;
3434

35+
@Column(name = "updated_at")
36+
private LocalDateTime updatedAt;
37+
3538
@Column(name = "closed_at")
3639
private LocalDateTime closedAt;
3740

backend/src/main/java/com/ai/lawyer/domain/poll/service/PollServiceImpl.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ public PollDto createPoll(PollCreateDto request, Long memberId) {
6565
.voteTitle(request.getVoteTitle())
6666
.status(Poll.PollStatus.ONGOING)
6767
.createdAt(now)
68+
.updatedAt(now)
6869
.reservedCloseAt(request.getReservedCloseAt())
6970
.build();
7071
Poll savedPoll = pollRepository.save(poll);
@@ -371,10 +372,10 @@ public PollDto updatePoll(Long pollId, PollUpdateDto pollUpdateDto, Long memberI
371372
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "예약 종료 시간은 최대 7일 이내여야 합니다.");
372373
}
373374
poll.setReservedCloseAt(reservedCloseAt);
374-
System.out.println("poll에 저장된 reservedCloseAt 값: " + poll.getReservedCloseAt());
375375
}
376-
Poll updated = pollRepository.save(poll);
377-
return convertToDto(updated, null, false);
376+
poll.setUpdatedAt(now); // 투표(Poll) 수정 시 updatedAt 갱신
377+
pollRepository.save(poll);
378+
return getPoll(pollId, memberId);
378379
}
379380

380381
@Override
@@ -429,7 +430,6 @@ public void patchUpdatePoll(Long pollId, PollUpdateDto pollUpdateDto) {
429430
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "예약 종료 시간은 최대 7일 이내여야 합니다.");
430431
}
431432
poll.setReservedCloseAt(reservedCloseAt);
432-
System.out.println("poll에 저장된 reservedCloseAt 값: " + poll.getReservedCloseAt());
433433
}
434434
pollRepository.save(poll);
435435
}
@@ -485,7 +485,6 @@ private PollDto convertToDto(Poll poll, Long memberId, boolean withStatistics) {
485485
.createdAt(poll.getCreatedAt())
486486
.closedAt(poll.getClosedAt())
487487
.expectedCloseAt(expectedCloseAt)
488-
.pollOptions(optionDtos)
489488
.totalVoteCount(totalVoteCount)
490489
.build();
491490
}

backend/src/main/java/com/ai/lawyer/domain/post/controller/PostController.java

Lines changed: 41 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package com.ai.lawyer.domain.post.controller;
22

33
import com.ai.lawyer.domain.poll.dto.PollDto;
4+
import com.ai.lawyer.domain.poll.dto.PollDto.PollStatus;
45
import com.ai.lawyer.domain.post.dto.*;
56
import com.ai.lawyer.domain.post.service.PostService;
6-
import com.ai.lawyer.domain.poll.dto.PollDto;
77
import com.ai.lawyer.domain.member.repositories.MemberRepository;
88
import com.ai.lawyer.global.jwt.TokenProvider;
99
import com.ai.lawyer.global.response.ApiResponse;
@@ -23,6 +23,9 @@
2323

2424
import java.util.List;
2525

26+
import static com.ai.lawyer.domain.poll.entity.Poll.PollStatus.CLOSED;
27+
import static com.ai.lawyer.domain.poll.entity.Poll.PollStatus.ONGOING;
28+
2629
@Tag(name = "Post API", description = "게시글 관련 API")
2730
@RestController
2831
@RequestMapping("/api/posts")
@@ -126,13 +129,17 @@ public ResponseEntity<ApiResponse<PostDto>> getMyPostById(@PathVariable Long pos
126129
return ResponseEntity.ok(new ApiResponse<>(200, "본인 게시글 단일 조회 성공", postDto));
127130
}
128131

129-
@Operation(summary = "본인 게시글 전체 조회")
130-
@GetMapping("/my")
131-
public ResponseEntity<ApiResponse<List<PostDto>>> getMyPosts() {
132-
Long memberId = AuthUtil.getAuthenticatedMemberId();
133-
List<PostDto> posts = postService.getMyPosts(memberId);
134-
return ResponseEntity.ok(new ApiResponse<>(200, "본인 게시글 전체 조회 성공", posts));
135-
}
132+
@Operation(summary = "본인 게시글 전체 조회")
133+
@GetMapping("/my")
134+
public ResponseEntity<ApiResponse<Page<PostDto>>> getMyPosts(
135+
@RequestParam(defaultValue = "0") int page,
136+
@RequestParam(defaultValue = "10") int size
137+
) {
138+
Pageable pageable = PageRequest.of(page, size, org.springframework.data.domain.Sort.by("updatedAt").descending());
139+
Long memberId = AuthUtil.getAuthenticatedMemberId();
140+
Page<PostDto> response = postService.getMyPosts(pageable, memberId);
141+
return ResponseEntity.ok(new ApiResponse<>(200, "본인 게시글 전체 조회 성공", response));
142+
}
136143

137144
@Operation(summary = "게시글+투표 동시 등록")
138145
@PostMapping("/createPost")
@@ -148,13 +155,10 @@ public ResponseEntity<ApiResponse<PostPageDto>> getPostsPaged(
148155
@RequestParam(defaultValue = "0") int page,
149156
@RequestParam(defaultValue = "10") int size
150157
) {
151-
Pageable pageable = PageRequest.of(page, size, Sort.by("createdAt").descending());
158+
Pageable pageable = PageRequest.of(page, size, Sort.by("updatedAt").descending());
152159
Long memberId = AuthUtil.getCurrentMemberId();
153-
Page<PostDto> posts = postService.getPostsPaged(pageable, memberId);
154-
if (posts == null) {
155-
posts = new org.springframework.data.domain.PageImpl<>(java.util.Collections.emptyList(), pageable, 0);
156-
}
157-
PostPageDto response = new PostPageDto(posts);
160+
Page<PostDto> pageResult = postService.getPostsPaged(pageable, memberId);
161+
PostPageDto response = new PostPageDto(pageResult);
158162
return ResponseEntity.ok(new ApiResponse<>(200, "페이징 게시글 조회 성공", response));
159163
}
160164

@@ -164,13 +168,10 @@ public ResponseEntity<ApiResponse<PostPageDto>> getOngoingPostsPaged(
164168
@RequestParam(defaultValue = "0") int page,
165169
@RequestParam(defaultValue = "10") int size
166170
) {
167-
Pageable pageable = PageRequest.of(page, size, Sort.by("createdAt").descending());
171+
Pageable pageable = PageRequest.of(page, size, Sort.by("updatedAt").descending());
168172
Long memberId = AuthUtil.getCurrentMemberId();
169-
Page<PostDto> posts = postService.getOngoingPostsPaged(pageable, memberId);
170-
if (posts == null) {
171-
posts = new org.springframework.data.domain.PageImpl<>(java.util.Collections.emptyList(), pageable, 0);
172-
}
173-
PostPageDto response = new PostPageDto(posts);
173+
Page<PostDto> pageResult = postService.getOngoingPostsPaged(pageable, memberId);
174+
PostPageDto response = new PostPageDto(pageResult);
174175
return ResponseEntity.ok(new ApiResponse<>(200, "진행중 투표 게시글 페이징 조회 성공", response));
175176
}
176177

@@ -180,21 +181,19 @@ public ResponseEntity<ApiResponse<PostPageDto>> getClosedPostsPaged(
180181
@RequestParam(defaultValue = "0") int page,
181182
@RequestParam(defaultValue = "10") int size
182183
) {
183-
Pageable pageable = PageRequest.of(page, size, Sort.by("createdAt").descending());
184+
Pageable pageable = PageRequest.of(page, size, Sort.by("updatedAt").descending());
184185
Long memberId = AuthUtil.getCurrentMemberId();
185-
Page<PostDto> posts = postService.getClosedPostsPaged(pageable, memberId);
186-
if (posts == null) {
187-
posts = new org.springframework.data.domain.PageImpl<>(java.util.Collections.emptyList(), pageable, 0);
188-
}
189-
PostPageDto response = new PostPageDto(posts);
186+
Page<PostDto> pageResult = postService.getClosedPostsPaged(pageable, memberId);
187+
PostPageDto response = new PostPageDto(pageResult);
190188
return ResponseEntity.ok(new ApiResponse<>(200, "마감된 투표 게시글 페이징 조회 성공", response));
191189
}
192190

193191
@Operation(summary = "진행중인 투표 Top N 조회")
194192
@GetMapping("/top/ongoingList")
195193
public ResponseEntity<ApiResponse<List<PostDto>>> getTopNOngoingPolls(@RequestParam(defaultValue = "3") int size) {
196194
Long memberId = AuthUtil.getCurrentMemberId();
197-
List<PostDto> posts = postService.getTopNPollsByStatus(PollDto.PollStatus.ONGOING, size, memberId);
195+
List<PostDto> posts = postService.getTopNPollsByStatus(
196+
PollStatus.valueOf(ONGOING.name()), size, memberId);
198197
String message = String.format("진행중인 투표 Top %d 조회 성공", size);
199198
return ResponseEntity.ok(new ApiResponse<>(200, message, posts));
200199
}
@@ -203,7 +202,8 @@ public ResponseEntity<ApiResponse<List<PostDto>>> getTopNOngoingPolls(@RequestPa
203202
@GetMapping("/top/closedList")
204203
public ResponseEntity<ApiResponse<List<PostDto>>> getTopNClosedPolls(@RequestParam(defaultValue = "3") int size) {
205204
Long memberId = AuthUtil.getCurrentMemberId();
206-
List<PostDto> posts = postService.getTopNPollsByStatus(PollDto.PollStatus.CLOSED, size, memberId);
205+
List<PostDto> posts = postService.getTopNPollsByStatus(
206+
PollStatus.valueOf(CLOSED.name()), size, memberId);
207207
String message = String.format("종료된 투표 Top %d 조회 성공", size);
208208
return ResponseEntity.ok(new ApiResponse<>(200, message, posts));
209209
}
@@ -212,15 +212,17 @@ public ResponseEntity<ApiResponse<List<PostDto>>> getTopNClosedPolls(@RequestPar
212212
@GetMapping("/top/ongoing")
213213
public ResponseEntity<ApiResponse<PostDto>> getTopOngoingPoll() {
214214
Long memberId = AuthUtil.getCurrentMemberId();
215-
PostDto post = postService.getTopPollByStatus(PollDto.PollStatus.ONGOING, memberId);
215+
PostDto post = postService.getTopPollByStatus(
216+
PollStatus.valueOf(ONGOING.name()), memberId);
216217
return ResponseEntity.ok(new ApiResponse<>(200, "진행중인 투표 Top 1 조회 성공", post));
217218
}
218219

219220
@Operation(summary = "마감된 투표 Top 1 조회")
220221
@GetMapping("/top/closed")
221222
public ResponseEntity<ApiResponse<PostDto>> getTopClosedPoll() {
222223
Long memberId = AuthUtil.getCurrentMemberId();
223-
PostDto post = postService.getTopPollByStatus(PollDto.PollStatus.CLOSED, memberId);
224+
PostDto post = postService.getTopPollByStatus(
225+
PollStatus.valueOf(CLOSED.name()), memberId);
224226
return ResponseEntity.ok(new ApiResponse<>(200, "마감된 투표 Top 1 조회 성공", post));
225227
}
226228

@@ -230,10 +232,10 @@ public ResponseEntity<ApiResponse<PostPageDto>> getMyOngoingPostsPaged(
230232
@RequestParam(defaultValue = "0") int page,
231233
@RequestParam(defaultValue = "10") int size
232234
) {
233-
Pageable pageable = PageRequest.of(page, size, Sort.by("createdAt").descending());
235+
Pageable pageable = PageRequest.of(page, size, Sort.by("updatedAt").descending());
234236
Long memberId = AuthUtil.getAuthenticatedMemberId();
235-
Page<PostDto> posts = postService.getMyOngoingPostsPaged(pageable, memberId);
236-
PostPageDto response = new PostPageDto(posts);
237+
Page<PostDto> pageResult = postService.getMyOngoingPostsPaged(pageable, memberId);
238+
PostPageDto response = new PostPageDto(pageResult);
237239
return ResponseEntity.ok(new ApiResponse<>(200, "내가 참여한 진행중 투표 게시글 페이징 조회 성공", response));
238240
}
239241

@@ -243,10 +245,10 @@ public ResponseEntity<ApiResponse<PostPageDto>> getMyClosedPostsPaged(
243245
@RequestParam(defaultValue = "0") int page,
244246
@RequestParam(defaultValue = "10") int size
245247
) {
246-
Pageable pageable = PageRequest.of(page, size, Sort.by("createdAt").descending());
248+
Pageable pageable = PageRequest.of(page, size, Sort.by("updatedAt").descending());
247249
Long memberId = AuthUtil.getAuthenticatedMemberId();
248-
Page<PostDto> posts = postService.getMyClosedPostsPaged(pageable, memberId);
249-
PostPageDto response = new PostPageDto(posts);
250+
Page<PostDto> pageResult = postService.getMyClosedPostsPaged(pageable, memberId);
251+
PostPageDto response = new PostPageDto(pageResult);
250252
return ResponseEntity.ok(new ApiResponse<>(200, "내가 참여한 마감 투표 게시글 페이징 조회 성공", response));
251253
}
252254

@@ -256,10 +258,10 @@ public ResponseEntity<ApiResponse<PostPageDto>> getMyVotedPostsPaged(
256258
@RequestParam(defaultValue = "0") int page,
257259
@RequestParam(defaultValue = "10") int size
258260
) {
259-
Pageable pageable = PageRequest.of(page, size, Sort.by("createdAt").descending());
261+
Pageable pageable = PageRequest.of(page, size, Sort.by("updatedAt").descending());
260262
Long memberId = AuthUtil.getAuthenticatedMemberId();
261-
Page<PostDto> posts = postService.getMyVotedPostsPaged(pageable, memberId);
262-
PostPageDto response = new PostPageDto(posts);
263+
Page<PostDto> pageResult = postService.getMyVotedPostsPaged(pageable, memberId);
264+
PostPageDto response = new PostPageDto(pageResult);
263265
return ResponseEntity.ok(new ApiResponse<>(200, "내가 참여한 모든 투표 게시글 페이징 조회 성공", response));
264266
}
265267
}

backend/src/main/java/com/ai/lawyer/domain/post/dto/PostDto.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,6 @@ public class PostDto {
1717
private String postContent;
1818
private String category;
1919
private LocalDateTime createdAt;
20+
private LocalDateTime updatedAt;
2021
private PollDto poll;
2122
}

backend/src/main/java/com/ai/lawyer/domain/post/entity/Post.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ public class Post {
3737
@Column(name = "created_at")
3838
private LocalDateTime createdAt;
3939

40+
@Column(name = "updated_at")
41+
private LocalDateTime updatedAt;
42+
4043
@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true)
4144
@JoinColumn(name = "poll_id", foreignKey = @ForeignKey(name = "FK_POST_POLL"))
4245
private Poll poll;

backend/src/main/java/com/ai/lawyer/domain/post/repository/PostRepository.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
import com.ai.lawyer.domain.member.entity.Member;
44
import com.ai.lawyer.domain.post.entity.Post;
5+
import com.ai.lawyer.domain.poll.entity.Poll.PollStatus;
6+
import org.springframework.data.domain.Page;
7+
import org.springframework.data.domain.Pageable;
58
import org.springframework.data.jpa.repository.JpaRepository;
69
import org.springframework.data.jpa.repository.Modifying;
710
import org.springframework.data.jpa.repository.Query;
@@ -21,4 +24,9 @@ public interface PostRepository extends JpaRepository<Post, Long> {
2124
@Modifying
2225
@Query("DELETE FROM Post p WHERE p.member.memberId = :memberId")
2326
void deleteByMemberIdValue(@Param("memberId") Long memberId);
27+
28+
Page<Post> findByMember(Member member, Pageable pageable);
29+
Page<Post> findByPoll_Status(PollStatus status, Pageable pageable);
30+
Page<Post> findByPoll_StatusAndPoll_PollIdIn(PollStatus status, List<Long> pollIds, Pageable pageable);
31+
Page<Post> findByPoll_PollIdIn(List<Long> pollIds, Pageable pageable);
2432
}

backend/src/main/java/com/ai/lawyer/domain/post/service/PostService.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import com.ai.lawyer.domain.post.dto.PostUpdateDto;
88
import com.ai.lawyer.domain.post.dto.PostWithPollCreateDto;
99
import com.ai.lawyer.domain.post.dto.PostSimpleDto;
10-
import com.ai.lawyer.domain.poll.dto.PollDto;
10+
import com.ai.lawyer.domain.poll.dto.PollDto.PollStatus;
1111
import org.springframework.data.domain.Page;
1212
import org.springframework.data.domain.Pageable;
1313

@@ -30,7 +30,7 @@ public interface PostService {
3030

3131
// ===== 본인 게시글 관련 =====
3232
PostDto getMyPostById(Long postId, Long requesterMemberId);
33-
List<PostDto> getMyPosts(Long requesterMemberId);
33+
Page<PostDto> getMyPosts(Pageable pageable, Long requesterMemberId);
3434

3535
// ===== 페이징 관련 =====
3636
Page<PostDto> getPostsPaged(Pageable pageable, Long memberId);
@@ -41,6 +41,6 @@ public interface PostService {
4141
Page<PostDto> getMyVotedPostsPaged(Pageable pageable, Long memberId);
4242

4343
// ===== 투표 Top 관련 =====
44-
List<PostDto> getTopNPollsByStatus(PollDto.PollStatus status, int n, Long memberId);
45-
PostDto getTopPollByStatus(PollDto.PollStatus status, Long memberId);
44+
PostDto getTopPollByStatus(PollStatus status, Long memberId);
45+
List<PostDto> getTopNPollsByStatus(PollStatus status, int n, Long memberId);
4646
}

0 commit comments

Comments
 (0)