Skip to content

Commit

Permalink
Merge pull request #68 from Book-Mile/feat/#67
Browse files Browse the repository at this point in the history
[Feat/#67] 해당 그룹 랜덤글 4개 반환 & 이미지 로직 개선 & 조회 성능 개선
  • Loading branch information
82everywin authored Feb 15, 2025
2 parents d8001c9 + fefc0d8 commit bbaa48e
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 41 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ public ResponseEntity<CommonResponse<Long>> updateRecord(@PathVariable Long reco
.body(CommonResponse.from(UPDATE_RECORD.getMessage(), updateRecord));
}

@Operation(summary = "글 2 사진 2", description = "해당 그룹의 랜덤한 사람의 랜덤한 기록의 사진과 글들 반환합니다")
@Operation(summary = "랜덤 기록 반환", description = "해당 그룹의 랜덤한 사람의 랜덤한 기록의 사진과 글들 반환합니다")
@GetMapping("/random")
public ResponseEntity<CommonResponse<List<RecentRecordResDto>>> viewRandomRecord(@RequestParam Long groupId) {
List<RecentRecordResDto> recentRecordResDtos = recordService.viewRandomRecord(groupId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,10 @@
import jakarta.persistence.OneToMany;
import java.util.ArrayList;
import java.util.List;

import lombok.*;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Entity
@Getter
Expand All @@ -33,6 +35,12 @@ public class Record extends BaseEntity {
@JoinColumn(name = "usergroup_id", nullable = false)
private UserGroup userGroup;

@Column
private Long userId;

@Column
private Long groupId;

@Column
private String text;

Expand All @@ -44,18 +52,22 @@ public class Record extends BaseEntity {
private List<Image> images = new ArrayList<>();

@Builder
public Record(UserGroup userGroup, String text, Integer currentPage) {
public Record(UserGroup userGroup, Long userId, Long groupId, String text, Integer currentPage) {
this.userGroup = userGroup;
this.userId = userId;
this.groupId = groupId;
this.text = text;
this.currentPage = currentPage;
}

public static Record from(UserGroup userGroup, RecordReqDto recordReqDto) {
return Record.builder()
.userGroup(userGroup)
.text(recordReqDto.getText())
.currentPage(recordReqDto.getCurrentPage())
.build();
return Record.builder()
.userGroup(userGroup)
.userId(userGroup.getUser().getId())
.groupId(userGroup.getGroup().getId())
.text(recordReqDto.getText())
.currentPage(recordReqDto.getCurrentPage())
.build();
}

public void update(UpdateRecordReqDto updateRecordReqDto) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
public interface RecordRepository extends JpaRepository<Record, Long> {
List<Record> findAllByUserGroupId(Long userGroupId);

@Query(value = "SELECT * FROM record WHERE usergroup_id = :userGroupId ORDER BY RAND()", nativeQuery = true)
List<Record> findAllRandomSortByUserGroupId(Long userGroupId);
@Query(value = "SELECT * FROM record WHERE group_id = :groupId ORDER BY RAND() LIMIT 4", nativeQuery = true)
List<Record> findRandomRecordByGroupId(Long groupId);

}
Original file line number Diff line number Diff line change
Expand Up @@ -89,43 +89,38 @@ public Long updateRecord(Long recordId, UpdateRecordReqDto updateRecordReqDto) {
return record.getId();
}

/* 고쳐야함!!!!!!!!!
* groupId를 사용해서 userId 리스트 가져오기
* userId 리스트 가져오면 갖고 있는 groupId와 리스트 안 userId와 조합 해서
/* groupId를 사용해서 userEmail 리스트 가져오기
* userEmail 리스트 가져오면 갖고 있는 groupId와 리스트 안 userId와 조합 해서
* userGroupId 가져온다음
* userGroupId 사용해서 Record 리스트 가져와서
* Record에서 이미지 저장이 되어있는거 가져오가
* Record에서 이미지 저장이 되어있는거 가져오
* */
/* r고치기 !!!
* 아 그냥 레코드 엔티티에 user_id, group_id 추가해줘서 저장해서 쿼리 어떻게 어떻게 잘 날려서 하는거로 하자~
* */
@Override
public List<RecentRecordResDto> viewRandomRecord(Long groupId) {
List<String> userEmails = userGroupRepository.findUserEmailRandomSortByGroupId(groupId);
List<User> users = new ArrayList<>();
for (String userEmail : userEmails) {
users.add(findUserByEmail(userEmail));
}
List<RecentRecordResDto> recentRecordResDtos = new ArrayList<>();
Random random = new Random();
for (User user : users) {
UserGroup userGroup = getUserGroup(groupId, user.getId());

List<Record> records = recordRepository.findAllRandomSortByUserGroupId(userGroup.getId());

for (Record record : records) {
if (record.getImages().isEmpty()) { // 이미지 리스트 비어있으면 그냥 이미지 없는거로 추가
recentRecordResDtos
.add(RecentRecordResDto
.createRecentRecord(user, record, null));
} else { // 안 비어있으면 기록의 첫번째 이미지로 추가
int randomImageIndex = random.nextInt(record.getImages().size());
recentRecordResDtos
.add(RecentRecordResDto
.createRecentRecord(user,
record,
record.getImages().get(randomImageIndex).getImageUrl()));
}
break;
List<Record> randomRecords = recordRepository.findRandomRecordByGroupId(groupId);
List<RecentRecordResDto> recentRecordResDtos = new ArrayList<>();

for (Record record : randomRecords) {
User user = findUserById(record.getUserId());

if (record.getImages().isEmpty()) { // 이미지 리스트 비어있으면 그냥 이미지 없는거로 추가
recentRecordResDtos
.add(RecentRecordResDto
.createRecentRecord(user, record, null));
} else { // 안 비어있으면 기록의 첫번째 이미지로 추가
int randomImageIndex = random.nextInt(record.getImages().size());
recentRecordResDtos
.add(RecentRecordResDto
.createRecentRecord(user,
record,
record.getImages().get(randomImageIndex).getImageUrl()));
}
}

return recentRecordResDtos;
}

Expand All @@ -139,6 +134,11 @@ private User findUserByEmail(String userEmail) {
.orElseThrow(() -> new CustomException(USER_NOT_FOUND));
}

private User findUserById(Long userId) {
return userRepository.findById(userId)
.orElseThrow(() -> new CustomException(USER_NOT_FOUND));
}

private UserGroup getUserGroup(Long userId, Long groupId) {
return userGroupRepository.findByUserIdAndGroupId(userId, groupId)
.orElseThrow(() -> new CustomException(NO_USER_OR_NO_GROUP));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public interface UserGroupRepository extends JpaRepository<UserGroup, Long> {
List<UserGroup> findGroupsByUserEmailAndStatus(@Param("userEmail") String userEmail,
@Param("status") GroupStatus status);

@Query(value = "SELECT email FROM user_group WHERE group_id = :groupId ORDER BY RAND()", nativeQuery = true)
@Query(value = "SELECT u.email FROM user_group ug JOIN user u ON ug.user_id = u.user_id WHERE group_id = :groupId ORDER BY RAND()", nativeQuery = true)
List<String> findUserEmailRandomSortByGroupId(Long groupId);

}

0 comments on commit bbaa48e

Please sign in to comment.