From e9ae78d7caac7867153f544f838b5511fd4573ae Mon Sep 17 00:00:00 2001 From: hysong4u Date: Sat, 13 Jan 2024 14:40:28 +0900 Subject: [PATCH 1/6] =?UTF-8?q?[feat]=20=EC=A2=85=EB=A3=8C=EB=90=9C=20?= =?UTF-8?q?=EC=84=A0=EB=AC=BC=EB=B0=A9=20=EC=A1=B0=ED=9A=8C=20API=20swagge?= =?UTF-8?q?r=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/member/controller/MemberApi.java | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/main/java/org/sopt/sweet/domain/member/controller/MemberApi.java b/src/main/java/org/sopt/sweet/domain/member/controller/MemberApi.java index 6aa2e2a..ffd6805 100644 --- a/src/main/java/org/sopt/sweet/domain/member/controller/MemberApi.java +++ b/src/main/java/org/sopt/sweet/domain/member/controller/MemberApi.java @@ -3,11 +3,15 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; 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.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; import org.sopt.sweet.global.common.SuccessResponse; +import org.sopt.sweet.global.config.auth.UserId; import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; @Tag(name = "회원", description = "회원 관련 API") public interface MemberApi { @@ -33,4 +37,32 @@ ResponseEntity> getToken( @Parameter(description = "멤버 고유 id", required = true) Long memberId ); + + @Operation( + summary = "종료된 선물방 조회 API", + responses = { + @ApiResponse( + responseCode = "200", + content = @Content( + mediaType = "application/json", + schema = @Schema(implementation = SuccessResponse.class) + ) + ), + @ApiResponse( + responseCode = "401", + description = "Unauthorized", + content = @Content + ) + }, + security = @SecurityRequirement(name = "token") + ) + @GetMapping("closed-room") + public ResponseEntity> getClosedRoom( + @Parameter( + description = "Authorization token에서 얻은 userId, 임의입력하면 대체됩니다.", + required = true, + example = "12345" + ) @UserId Long userId + ); + } From 2b05f35f740af3231efbd67f3e6404e849c78c8f Mon Sep 17 00:00:00 2001 From: hysong4u Date: Sat, 13 Jan 2024 14:41:27 +0900 Subject: [PATCH 2/6] =?UTF-8?q?[feat]=20=EC=A2=85=EB=A3=8C=EB=90=9C=20?= =?UTF-8?q?=EC=84=A0=EB=AC=BC=EB=B0=A9=20=EC=A1=B0=ED=9A=8C=20API=20Dto=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/dto/response/ClosedRoomResponseDto.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/main/java/org/sopt/sweet/domain/member/dto/response/ClosedRoomResponseDto.java diff --git a/src/main/java/org/sopt/sweet/domain/member/dto/response/ClosedRoomResponseDto.java b/src/main/java/org/sopt/sweet/domain/member/dto/response/ClosedRoomResponseDto.java new file mode 100644 index 0000000..49a8098 --- /dev/null +++ b/src/main/java/org/sopt/sweet/domain/member/dto/response/ClosedRoomResponseDto.java @@ -0,0 +1,10 @@ +package org.sopt.sweet.domain.member.dto.response; + +public record ClosedRoomResponseDto( + Long roomId, + String imageUrl, + String gifteeName, + int gifterNumber +) { + +} From e068a504a2822cdf92babfb72c4d793f191f7f2e Mon Sep 17 00:00:00 2001 From: hysong4u Date: Sat, 13 Jan 2024 14:41:44 +0900 Subject: [PATCH 3/6] =?UTF-8?q?[feat]=20=EC=A2=85=EB=A3=8C=EB=90=9C=20?= =?UTF-8?q?=EC=84=A0=EB=AC=BC=EB=B0=A9=20=EC=A1=B0=ED=9A=8C=20API=20Contro?= =?UTF-8?q?ller=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/member/controller/MemberController.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/org/sopt/sweet/domain/member/controller/MemberController.java b/src/main/java/org/sopt/sweet/domain/member/controller/MemberController.java index 5f3785d..7e5a261 100644 --- a/src/main/java/org/sopt/sweet/domain/member/controller/MemberController.java +++ b/src/main/java/org/sopt/sweet/domain/member/controller/MemberController.java @@ -1,12 +1,16 @@ package org.sopt.sweet.domain.member.controller; import lombok.RequiredArgsConstructor; +import org.sopt.sweet.domain.member.dto.response.ClosedRoomResponseDto; import org.sopt.sweet.domain.member.dto.response.MemberTokenResponseDto; import org.sopt.sweet.domain.member.service.MemberService; import org.sopt.sweet.global.common.SuccessResponse; +import org.sopt.sweet.global.config.auth.UserId; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import java.util.List; + @RequiredArgsConstructor @RequestMapping("/api/member") @RestController @@ -27,5 +31,11 @@ public ResponseEntity> getToken(@PathVariable Long memberId){ return SuccessResponse.created(memberTokenResponseDto); } + @GetMapping("closed-room") + public ResponseEntity> getClosedRoom(@UserId Long userId) { + final List closedRoomResponseDto = memberService.getClosedRoom(userId); + return SuccessResponse.ok(closedRoomResponseDto); + } + } From 1b732276301b2e2de1d4d9358065e0b7f8f80993 Mon Sep 17 00:00:00 2001 From: hysong4u Date: Sat, 13 Jan 2024 14:42:06 +0900 Subject: [PATCH 4/6] =?UTF-8?q?[feat]=20=EC=A2=85=EB=A3=8C=EB=90=9C=20?= =?UTF-8?q?=EC=84=A0=EB=AC=BC=EB=B0=A9=20=EC=A1=B0=ED=9A=8C=20API=20Servic?= =?UTF-8?q?e=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/member/service/MemberService.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/main/java/org/sopt/sweet/domain/member/service/MemberService.java b/src/main/java/org/sopt/sweet/domain/member/service/MemberService.java index d9c9bea..daeb933 100644 --- a/src/main/java/org/sopt/sweet/domain/member/service/MemberService.java +++ b/src/main/java/org/sopt/sweet/domain/member/service/MemberService.java @@ -1,12 +1,22 @@ package org.sopt.sweet.domain.member.service; import lombok.RequiredArgsConstructor; +import org.sopt.sweet.domain.member.dto.response.ClosedRoomResponseDto; import org.sopt.sweet.domain.member.dto.response.MemberTokenResponseDto; import org.sopt.sweet.domain.member.repository.MemberRepository; +import org.sopt.sweet.domain.room.entity.Room; +import org.sopt.sweet.domain.room.entity.RoomMember; +import org.sopt.sweet.domain.room.repository.RoomMemberRepository; +import org.sopt.sweet.domain.room.repository.RoomRepository; import org.sopt.sweet.global.config.auth.jwt.JwtProvider; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.time.LocalDateTime; +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; + @RequiredArgsConstructor @Service @Transactional @@ -14,6 +24,8 @@ public class MemberService { private final JwtProvider jwtProvider; private final MemberRepository memberRepository; + private final RoomRepository roomRepository; + private final RoomMemberRepository roomMemberRepository; public MemberTokenResponseDto getToken(Long memberId) { String accessToken = issueNewAccessToken(memberId); @@ -30,4 +42,28 @@ private String issueNewRefreshToken(Long memberId) { } + public List getClosedRoom(Long memberId) { + List roomMembers = roomMemberRepository.findByMemberId(memberId); + System.out.println(memberId); + System.out.println("/"+ LocalDateTime.now()); + List closedRooms = roomMembers.stream() + .map(RoomMember::getRoom) + .filter(room -> room.getDeliveryDate().isBefore(LocalDateTime.now())) + .sorted(Comparator.comparing(Room::getDeliveryDate).reversed()) + .map(this::mapToClosedRoomResponseDto) + .collect(Collectors.toList()); + return closedRooms; + } + + private ClosedRoomResponseDto mapToClosedRoomResponseDto(Room room) { + return new ClosedRoomResponseDto( + room.getId(), + room.getImageUrl(), + room.getGifteeName(), + room.getGifterNumber() + ); + } + + + } \ No newline at end of file From c33cd925b249cc65118c19122181979f0a42947e Mon Sep 17 00:00:00 2001 From: hysong4u Date: Sat, 13 Jan 2024 14:42:45 +0900 Subject: [PATCH 5/6] =?UTF-8?q?[feat]=20=EC=A2=85=EB=A3=8C=EB=90=9C=20?= =?UTF-8?q?=EC=84=A0=EB=AC=BC=EB=B0=A9=20=EC=A1=B0=ED=9A=8C=20API=20Reposi?= =?UTF-8?q?tory=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sopt/sweet/domain/room/repository/RoomMemberRepository.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/org/sopt/sweet/domain/room/repository/RoomMemberRepository.java b/src/main/java/org/sopt/sweet/domain/room/repository/RoomMemberRepository.java index 4f7eead..7c38c69 100644 --- a/src/main/java/org/sopt/sweet/domain/room/repository/RoomMemberRepository.java +++ b/src/main/java/org/sopt/sweet/domain/room/repository/RoomMemberRepository.java @@ -14,4 +14,6 @@ public interface RoomMemberRepository extends JpaRepository { int countByRoomIdAndTournamentParticipationIsTrue(Long roomId); RoomMember findByRoomIdAndMemberId(Long roomId, Long memberId); + + List findByMemberId(Long memberId); } From b0d20ea467e34100aef96a7f0c38b6ba56ba45c5 Mon Sep 17 00:00:00 2001 From: hysong4u Date: Sat, 13 Jan 2024 14:43:34 +0900 Subject: [PATCH 6/6] =?UTF-8?q?[feat]=20room=20=EC=97=94=ED=8B=B0=ED=8B=B0?= =?UTF-8?q?=20BaseTimeEntity=20=EC=83=81=EC=86=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/org/sopt/sweet/domain/room/entity/Room.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/sopt/sweet/domain/room/entity/Room.java b/src/main/java/org/sopt/sweet/domain/room/entity/Room.java index 5175a80..7e448d4 100644 --- a/src/main/java/org/sopt/sweet/domain/room/entity/Room.java +++ b/src/main/java/org/sopt/sweet/domain/room/entity/Room.java @@ -4,6 +4,7 @@ import lombok.*; import org.sopt.sweet.domain.room.constant.TournamentDuration; import org.sopt.sweet.domain.member.entity.Member; +import org.sopt.sweet.global.common.BaseTimeEntity; import java.time.LocalDateTime; @@ -11,7 +12,7 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) @Table(name = "room") @Entity -public class Room { +public class Room extends BaseTimeEntity { private static final int DEFAULT_NUMBER = 1;