Skip to content

Commit

Permalink
Merge pull request #60 from SWEET-DEVELOPERS/feature/#57-member
Browse files Browse the repository at this point in the history
[feat] 종료된 선물방 API 구현
  • Loading branch information
hysong4u authored Jan 13, 2024
2 parents 0f72743 + b0d20ea commit cb2a6fa
Show file tree
Hide file tree
Showing 6 changed files with 92 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -33,4 +37,32 @@ ResponseEntity<SuccessResponse<?>> 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<SuccessResponse<?>> getClosedRoom(
@Parameter(
description = "Authorization token에서 얻은 userId, 임의입력하면 대체됩니다.",
required = true,
example = "12345"
) @UserId Long userId
);

}
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -27,5 +31,11 @@ public ResponseEntity<SuccessResponse<?>> getToken(@PathVariable Long memberId){
return SuccessResponse.created(memberTokenResponseDto);
}

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


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

public record ClosedRoomResponseDto(
Long roomId,
String imageUrl,
String gifteeName,
int gifterNumber
) {

}
Original file line number Diff line number Diff line change
@@ -1,19 +1,31 @@
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
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);
Expand All @@ -30,4 +42,28 @@ 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()))
.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()
);
}



}
3 changes: 2 additions & 1 deletion src/main/java/org/sopt/sweet/domain/room/entity/Room.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,15 @@
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;

@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Table(name = "room")
@Entity
public class Room {
public class Room extends BaseTimeEntity {

private static final int DEFAULT_NUMBER = 1;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,6 @@ public interface RoomMemberRepository extends JpaRepository<RoomMember, Long> {

int countByRoomIdAndTournamentParticipationIsTrue(Long roomId);
RoomMember findByRoomIdAndMemberId(Long roomId, Long memberId);

List<RoomMember> findByMemberId(Long memberId);
}

0 comments on commit cb2a6fa

Please sign in to comment.