Skip to content

Commit

Permalink
Merge pull request #62 from SWEET-DEVELOPERS/feature/#56-member
Browse files Browse the repository at this point in the history
[feat] 진행중인 선물방 API구현
  • Loading branch information
hysong4u authored Jan 13, 2024
2 parents cb2a6fa + 0d69c98 commit a439322
Show file tree
Hide file tree
Showing 8 changed files with 169 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
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.domain.member.dto.response.MyPageResponseDto;
import org.sopt.sweet.global.common.SuccessResponse;
import org.sopt.sweet.global.config.auth.UserId;
import org.springframework.http.ResponseEntity;
Expand Down Expand Up @@ -65,4 +66,59 @@ public ResponseEntity<SuccessResponse<?>> getClosedRoom(
) @UserId Long userId
);

@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("active-room")
public ResponseEntity<SuccessResponse<?>> getActiveRoom(
@Parameter(
description = "Authorization token에서 얻은 userId, 임의입력하면 대체됩니다.",
required = true,
example = "12345"
) @UserId Long userId
);

@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("/mypage")
public MyPageResponseDto getMyPage(
@Parameter(
description = "Authorization token에서 얻은 userId, 임의입력하면 대체됩니다.",
required = true,
example = "12345"
) @UserId Long userId
);


}
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,29 @@ public ResponseEntity<SuccessResponse<?>> getToken(@PathVariable Long memberId){
return SuccessResponse.created(memberTokenResponseDto);
}

@GetMapping("closed-room")
@GetMapping("/closed-room")
public ResponseEntity<SuccessResponse<?>> getClosedRoom(@UserId Long userId) {
final List<ClosedRoomResponseDto> closedRoomResponseDto = memberService.getClosedRoom(userId);
return SuccessResponse.ok(closedRoomResponseDto);
}

@GetMapping("/active-room")
public ResponseEntity<SuccessResponse<?>> getActiveRoom(@UserId Long userId) {
final List<ActiveRoomResponseDto>activeRoomResponseDto = memberService.getActiveRoom(userId);
return SuccessResponse.ok(activeRoomResponseDto);
}

@GetMapping("/mypage")
public MyPageResponseDto getMyPage(@UserId Long userId) {
List<ClosedRoomResponseDto> top2ClosedRooms = memberService.getTop2ClosedRooms(userId);
List<ActiveRoomResponseDto> top2ActiveRooms = memberService.getTop2ActiveRooms(userId);
MemberInfoDto MemberInfo = memberService.getMemberInfo(userId);

return new MyPageResponseDto(
MemberInfo,
top2ClosedRooms,
top2ActiveRooms
);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package org.sopt.sweet.domain.member.dto.response;

import java.time.LocalDateTime;

;

public record ActiveRoomResponseDto(
Long roomId,
String imageUrl,
String gifteeName,
int gifterNumber,
LocalDateTime tournamentStartDate,
Boolean isOwner

) {


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.sopt.sweet.domain.member.dto.response;

public record MemberInfoDto(
String nickname,
String profileImage
) {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package org.sopt.sweet.domain.member.dto.response;

import java.util.List;

public record MyPageResponseDto(
MemberInfoDto memberInfo,
List<ClosedRoomResponseDto> closedRooms,
List<ActiveRoomResponseDto> activeRooms) {
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
package org.sopt.sweet.domain.member.service;

import lombok.RequiredArgsConstructor;

import org.sopt.sweet.domain.member.dto.response.ActiveRoomResponseDto;
import org.sopt.sweet.domain.member.dto.response.ClosedRoomResponseDto;
import org.sopt.sweet.domain.member.dto.response.MemberInfoDto;
import org.sopt.sweet.domain.member.dto.response.MemberTokenResponseDto;
import org.sopt.sweet.domain.member.entity.Member;
import org.sopt.sweet.domain.member.repository.MemberRepository;
import org.sopt.sweet.domain.room.entity.Room;
import org.sopt.sweet.domain.room.entity.RoomMember;
Expand All @@ -15,6 +19,7 @@
import java.time.LocalDateTime;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

@RequiredArgsConstructor
Expand Down Expand Up @@ -44,8 +49,6 @@ private String issueNewRefreshToken(Long memberId) {

public List<ClosedRoomResponseDto> getClosedRoom(Long memberId) {
List<RoomMember> roomMembers = roomMemberRepository.findByMemberId(memberId);
System.out.println(memberId);
System.out.println("/"+ LocalDateTime.now());
List<ClosedRoomResponseDto> closedRooms = roomMembers.stream()
.map(RoomMember::getRoom)
.filter(room -> room.getDeliveryDate().isBefore(LocalDateTime.now()))
Expand All @@ -65,5 +68,55 @@ private ClosedRoomResponseDto mapToClosedRoomResponseDto(Room room) {
}


public List<ActiveRoomResponseDto> getActiveRoom(Long memberId) {
List<RoomMember> roomMembers = roomMemberRepository.findByMemberId(memberId);
List<ActiveRoomResponseDto> activeRooms = roomMembers.stream()
.map(RoomMember::getRoom)
.filter(room -> room.getDeliveryDate().isAfter(LocalDateTime.now()))
.sorted(Comparator.comparing(room -> getRoomMemberCreationTime(room, memberId), Comparator.reverseOrder()))
.map(room -> mapToActiveRoomResponseDto(room, memberId))
.collect(Collectors.toList());
return activeRooms;
}

private ActiveRoomResponseDto mapToActiveRoomResponseDto(Room room, Long memberId) {
return new ActiveRoomResponseDto(
room.getId(),
room.getImageUrl(),
room.getGifteeName(),
room.getGifterNumber(),
room.getTournamentStartDate(),
isOwner(memberId, room.getId())
);
}
private LocalDateTime getRoomMemberCreationTime(Room room, Long memberId) {
Optional<RoomMember> roomMember = roomMemberRepository.findByMemberIdAndRoom(memberId, room);
return roomMember.map(RoomMember::getCreateDate).orElse(LocalDateTime.MIN);
}

public Boolean isOwner(Long memberId, Long roomId) {
Optional<Member> member = memberRepository.findById(memberId);
Optional<Room> room = roomRepository.findById(roomId);
Boolean isOwner = member.get().getId().equals(room.get().getHost().getId());
return isOwner;
}

public List<ClosedRoomResponseDto> getTop2ClosedRooms(Long memberId) {
List<ClosedRoomResponseDto> closedRooms = getClosedRoom(memberId);
return closedRooms.size() > 2 ? closedRooms.subList(0, 2) : closedRooms;
}

public List<ActiveRoomResponseDto> getTop2ActiveRooms(Long memberId) {
List<ActiveRoomResponseDto> activeRooms = getActiveRoom(memberId);
return activeRooms.size() > 2 ? activeRooms.subList(0, 2) : activeRooms;
}


public MemberInfoDto getMemberInfo(Long memberId) {
Optional<Member> member = memberRepository.findById(memberId);
return new MemberInfoDto(
member.get().getNickName(),
member.get().getProfileImg()
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,12 @@
import jakarta.persistence.*;
import lombok.*;
import org.sopt.sweet.domain.member.entity.Member;
import org.sopt.sweet.global.common.BaseTimeEntity;

@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity
public class RoomMember {
public class RoomMember extends BaseTimeEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,7 @@ public interface RoomMemberRepository extends JpaRepository<RoomMember, Long> {
RoomMember findByRoomIdAndMemberId(Long roomId, Long memberId);

List<RoomMember> findByMemberId(Long memberId);

Optional<RoomMember> findByMemberIdAndRoom(Long memberId, Room room);

}

0 comments on commit a439322

Please sign in to comment.