Skip to content

Commit a46726f

Browse files
authored
Merge pull request #103 from Cod2-Crafters/feat-random-memberinfo
메인 페이지에 random memberinfo 반환 API 추가
2 parents 637a162 + 94fd947 commit a46726f

File tree

4 files changed

+56
-2
lines changed

4 files changed

+56
-2
lines changed

src/main/java/com/codecrafter/commenting/controller/MemberController.java

+14
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@
44
import com.codecrafter.commenting.domain.entity.MemberAuth;
55
import com.codecrafter.commenting.domain.request.SignInRequest;
66
import com.codecrafter.commenting.domain.request.SignUpRequest;
7+
import com.codecrafter.commenting.domain.response.MemberInfoResponse;
78
import com.codecrafter.commenting.domain.response.SignInResponse;
89
import com.codecrafter.commenting.domain.response.SignUpResponse;
910
import com.codecrafter.commenting.service.MemberService;
1011
import io.swagger.v3.oas.annotations.Operation;
1112
import io.swagger.v3.oas.annotations.Parameter;
13+
import java.util.List;
1214
import lombok.RequiredArgsConstructor;
1315
import lombok.extern.slf4j.Slf4j;
1416
import org.springframework.http.HttpHeaders;
@@ -100,4 +102,16 @@ public ResponseEntity<ApiResponse> checkEmailDuplicate(@Parameter(description =
100102
// log.info("getUser memberAuth : {}", memberAuth.getId());
101103
// return memberAuth.getEmail();
102104
// }
105+
106+
@Operation(summary = "회원 정보 랜덤 조회",
107+
description = """
108+
회원 정보 랜덤 조회</br>
109+
{host}/api/member/random
110+
""")
111+
@GetMapping("/random")
112+
public ResponseEntity<ApiResponse> getRandomMembers() {
113+
List<MemberInfoResponse> memberInfoResponses = memberService.getRandomMembers();
114+
return ResponseEntity.ok().body(ApiResponse.success(memberInfoResponses));
115+
}
116+
103117
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.codecrafter.commenting.domain.response;
2+
3+
import com.codecrafter.commenting.domain.entity.MemberInfo;
4+
5+
public record MemberInfoResponse(
6+
Long id,
7+
String avatarPath,
8+
String nickName
9+
) {
10+
public static MemberInfoResponse from(MemberInfo memberInfo) {
11+
return new MemberInfoResponse(memberInfo.getId(), memberInfo.getAvatarPath(), memberInfo.getNickname());
12+
}
13+
}
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,21 @@
11
package com.codecrafter.commenting.repository;
22

33
import com.codecrafter.commenting.domain.entity.MemberInfo;
4-
import java.time.LocalDate;
54
import java.time.LocalDateTime;
65
import java.util.List;
76
import java.util.Optional;
87
import org.springframework.data.jpa.repository.JpaRepository;
8+
import org.springframework.data.jpa.repository.Query;
99

1010
public interface MemberInfoRepository extends JpaRepository<MemberInfo, Long> {
1111
Optional<MemberInfo> findByEmail(String email);
1212
List<MemberInfo> findByCreatedAtBefore(LocalDateTime cutoffDate);
1313

14+
@Query(
15+
value = """
16+
SELECT m.id
17+
FROM MemberInfo m
18+
"""
19+
)
20+
List<Long> findAllIds();
1421
}

src/main/java/com/codecrafter/commenting/service/MemberService.java

+21-1
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
package com.codecrafter.commenting.service;
22

3-
import com.codecrafter.commenting.config.SecurityUtil;
43
import com.codecrafter.commenting.config.jwt.TokenProvider;
54
import com.codecrafter.commenting.domain.entity.MemberAuth;
65
import com.codecrafter.commenting.domain.entity.MemberInfo;
76
import com.codecrafter.commenting.domain.entity.MemberSetting;
87
import com.codecrafter.commenting.domain.enumeration.Provider;
98
import com.codecrafter.commenting.domain.request.SignInRequest;
109
import com.codecrafter.commenting.domain.request.SignUpRequest;
10+
import com.codecrafter.commenting.domain.response.MemberInfoResponse;
1111
import com.codecrafter.commenting.domain.response.SignInResponse;
1212
import com.codecrafter.commenting.domain.response.SignUpResponse;
1313
import com.codecrafter.commenting.exception.AuthenticationFailedException;
@@ -16,7 +16,10 @@
1616
import com.codecrafter.commenting.repository.MemberSettingRepository;
1717
import io.jsonwebtoken.Claims;
1818
import jakarta.validation.Valid;
19+
import java.util.Collections;
20+
import java.util.List;
1921
import java.util.Optional;
22+
import java.util.concurrent.ThreadLocalRandom;
2023
import lombok.RequiredArgsConstructor;
2124
import lombok.extern.slf4j.Slf4j;
2225
import org.springframework.dao.DataIntegrityViolationException;
@@ -29,6 +32,7 @@
2932
@Slf4j
3033
@Transactional(readOnly = true)
3134
public class MemberService {
35+
3236
private final MemberAuthRepository memberAuthRepository;
3337
private final MemberInfoRepository memberInfoRepository;
3438
private final MemberSettingRepository memberSettingRepository;
@@ -107,4 +111,20 @@ public boolean chkDupEmail(String email) {
107111
return false;
108112
}
109113

114+
@Transactional(readOnly = true)
115+
public List<MemberInfoResponse> getRandomMembers() {
116+
List<Long> ids = memberInfoRepository.findAllIds();
117+
Collections.shuffle(ids, ThreadLocalRandom.current());
118+
119+
ids = ids.stream()
120+
.limit(10)
121+
.toList();
122+
123+
List<MemberInfo> memberInfos = memberInfoRepository.findAllById(ids);
124+
125+
return memberInfos.stream()
126+
.map(MemberInfoResponse::from)
127+
.toList();
128+
}
129+
110130
}

0 commit comments

Comments
 (0)