Skip to content

Commit

Permalink
[feat #138] 채팅방 목록 조회 API 상태 필드 추가 및 필터링 수정 (#139)
Browse files Browse the repository at this point in the history
* [style] : 코드 리포멧팅

* [style] : 코드 리포멧팅

* [feat] : 채팅방 목록 조회 API 채팅방 상세 필드 추가

* [feat] : 채팅방 상태 리스트 -> 라벨 리스트 변환 함수 추가

* [feat] : 채팅방 목록 조회 상태 필드 리스트로 변경

* [test] : 채팅방 목록 조회 상태 필드 리스트로 변경 테스트 반영
  • Loading branch information
hyun2371 authored Nov 12, 2024
1 parent 20337bb commit 2db3183
Show file tree
Hide file tree
Showing 19 changed files with 453 additions and 442 deletions.
Original file line number Diff line number Diff line change
@@ -1,22 +1,24 @@
package com.dnd.gongmuin.answer.repository;

import com.dnd.gongmuin.answer.domain.Answer;
import com.dnd.gongmuin.member.domain.Member;
import java.util.List;

import org.springframework.data.domain.Slice;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

import com.dnd.gongmuin.answer.domain.Answer;
import com.dnd.gongmuin.member.domain.Member;

@Repository
public interface AnswerRepository extends JpaRepository<Answer, Long> {

Slice<Answer> findByQuestionPostId(Long questionPostId);
Slice<Answer> findByQuestionPostId(Long questionPostId);

List<Answer> findAllByMember(Member member);
List<Answer> findAllByMember(Member member);

@Modifying(flushAutomatically = true, clearAutomatically = true)
@Query("UPDATE Answer a SET a.member = :member WHERE a.member.id = :memberId")
public void updateAnswersMember(Long memberId, Member member);
@Modifying(flushAutomatically = true, clearAutomatically = true)
@Query("UPDATE Answer a SET a.member = :member WHERE a.member.id = :memberId")
void updateAnswersMember(Long memberId, Member member);
}
337 changes: 170 additions & 167 deletions src/main/java/com/dnd/gongmuin/auth/service/AuthService.java

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.dnd.gongmuin.chat.controller;

import java.util.List;

import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
Expand Down Expand Up @@ -58,11 +60,11 @@ public ResponseEntity<CreateChatRoomResponse> createChatRoom(
@Operation(summary = "채팅방 목록 조회 API", description = "회원의 채팅방 목록을 조회한다.")
@GetMapping("/api/chat-rooms")
public ResponseEntity<PageResponse<ChatRoomSimpleResponse>> getChatRoomsByMember(
@RequestParam("status") String status,
@RequestParam("statuses") List<String> statuses,
@AuthenticationPrincipal Member member,
Pageable pageable
) {
PageResponse<ChatRoomSimpleResponse> response = chatRoomService.getChatRoomsByMember(member, status,
PageResponse<ChatRoomSimpleResponse> response = chatRoomService.getChatRoomsByMember(member, statuses,
pageable);
return ResponseEntity.ok(response);
}
Expand Down
10 changes: 10 additions & 0 deletions src/main/java/com/dnd/gongmuin/chat/domain/ChatStatus.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.dnd.gongmuin.chat.domain;

import java.util.Arrays;
import java.util.List;

import com.dnd.gongmuin.chat.exception.ChatErrorCode;
import com.dnd.gongmuin.common.exception.runtime.ValidationException;
Expand All @@ -25,6 +26,15 @@ public static ChatStatus from(String input) {
.orElseThrow(() -> new ValidationException(ChatErrorCode.NOT_FOUND_CHAT_STATUS));
}

public static List<ChatStatus> from(List<String> inputs) {
return inputs.stream()
.map(input -> Arrays.stream(ChatStatus.values())
.filter(status -> status.isEqual(input))
.findAny()
.orElseThrow(() -> new ValidationException(ChatErrorCode.NOT_FOUND_CHAT_STATUS)))
.toList();
}

private boolean isEqual(String input) {
return input.equals(this.label);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ public static ChatRoomSimpleResponse toChatRoomSimpleResponse(
) {
return new ChatRoomSimpleResponse(
chatRoomInfo.chatRoomId(),
chatRoomInfo.chatStatus(),
new MemberInfo(
chatRoomInfo.partnerId(),
chatRoomInfo.partnerNickname(),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package com.dnd.gongmuin.chat.dto.response;

import com.dnd.gongmuin.chat.domain.ChatStatus;
import com.dnd.gongmuin.member.domain.JobGroup;
import com.querydsl.core.annotations.QueryProjection;

public record ChatRoomInfo(
Long chatRoomId,
String chatStatus,
Long partnerId,
String partnerNickname,
String partnerJobGroup,
Expand All @@ -13,13 +15,15 @@ public record ChatRoomInfo(
@QueryProjection
public ChatRoomInfo(
Long chatRoomId,
ChatStatus chatStatus,
Long partnerId,
String partnerNickname,
JobGroup partnerJobGroup,
int partnerProfileImageNo
) {
this(
chatRoomId,
chatStatus.getLabel(),
partnerId,
partnerNickname,
partnerJobGroup.getLabel(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

public record ChatRoomSimpleResponse(
Long chatRoomId,
String chatStatus,
MemberInfo chatPartner,
String latestMessage,
String messageType,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

public interface ChatRoomQueryRepository {

Slice<ChatRoomInfo> getChatRoomsByMember(Member member, ChatStatus chatStatus, Pageable pageable);
Slice<ChatRoomInfo> getChatRoomsByMember(Member member, List<ChatStatus> chatStatuses, Pageable pageable);

List<Long> getAutoRejectedInquirerIds();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,24 +1,18 @@
package com.dnd.gongmuin.chat.repository;

import static com.dnd.gongmuin.chat.domain.QChatRoom.*;
import static com.dnd.gongmuin.member.domain.QMember.*;

import java.time.LocalDateTime;
import java.util.List;

import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Slice;
import org.springframework.data.domain.SliceImpl;
import org.springframework.transaction.annotation.Transactional;

import com.dnd.gongmuin.chat.domain.ChatStatus;
import com.dnd.gongmuin.chat.dto.response.ChatRoomInfo;
import com.dnd.gongmuin.chat.dto.response.QChatRoomInfo;
import com.dnd.gongmuin.credit_history.domain.CreditHistory;
import com.dnd.gongmuin.credit_history.domain.CreditType;
import com.dnd.gongmuin.credit_history.repository.CreditHistoryRepository;
import com.dnd.gongmuin.member.domain.Member;
import com.dnd.gongmuin.member.repository.MemberRepository;
import com.querydsl.core.types.dsl.CaseBuilder;
import com.querydsl.jpa.impl.JPAQueryFactory;

Expand All @@ -28,17 +22,16 @@
public class ChatRoomQueryRepositoryImpl implements ChatRoomQueryRepository {

private final JPAQueryFactory queryFactory;
private final MemberRepository memberRepository;
private final CreditHistoryRepository creditHistoryRepository;

public Slice<ChatRoomInfo> getChatRoomsByMember(
Member member,
ChatStatus chatStatus,
List<ChatStatus> chatStatuses,
Pageable pageable
) {
List<ChatRoomInfo> content = queryFactory
.select(new QChatRoomInfo(
chatRoom.id,
chatRoom.status,
new CaseBuilder()
.when(chatRoom.inquirer.id.eq(member.getId()))
.then(chatRoom.answerer.id)
Expand All @@ -59,7 +52,7 @@ public Slice<ChatRoomInfo> getChatRoomsByMember(
.from(chatRoom)
.where(chatRoom.inquirer.id.eq(member.getId())
.or(chatRoom.answerer.id.eq(member.getId()))
.and(chatRoom.status.eq(chatStatus)))
.and(chatRoom.status.in(chatStatuses)))
.fetch();

boolean hasNext = hasNext(pageable.getPageSize(), content);
Expand All @@ -77,7 +70,6 @@ public List<Long> getAutoRejectedInquirerIds() {
.fetch();
}

@Transactional
public void updateChatRoomStatusRejected() {
queryFactory.update(chatRoom)
.set(chatRoom.status, ChatStatus.REJECTED)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,11 +94,11 @@ public CreateChatRoomResponse createChatRoom(CreateChatRoomRequest request, Memb
}

@Transactional(readOnly = true)
public PageResponse<ChatRoomSimpleResponse> getChatRoomsByMember(Member member, String chatStatus,
public PageResponse<ChatRoomSimpleResponse> getChatRoomsByMember(Member member, List<String> chatStatuses,
Pageable pageable) {
// 회원 채팅방 정보 가져오기
Slice<ChatRoomInfo> chatRoomInfos = chatRoomRepository.getChatRoomsByMember(
member, ChatStatus.from(chatStatus), pageable
member, ChatStatus.from(chatStatuses), pageable
);

// chatRoomId 리스트 추출
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,24 @@
package com.dnd.gongmuin.member.repository;

import com.dnd.gongmuin.member.domain.Member;
import java.util.Optional;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import com.dnd.gongmuin.member.domain.Member;

@Repository
public interface MemberRepository extends JpaRepository<Member, Long>, MemberCustom {
Optional<Member> findBySocialEmail(String socialEmail);
Optional<Member> findBySocialEmail(String socialEmail);

boolean existsByNickname(String nickname);
boolean existsByNickname(String nickname);

boolean existsByOfficialEmail(String officialEmail);
boolean existsByOfficialEmail(String officialEmail);

boolean existsBySocialEmail(String socialEmail);
boolean existsBySocialEmail(String socialEmail);

Member findByOfficialEmail(String officialEmail);
Member findByOfficialEmail(String officialEmail);

Optional<Member> findByRole(String role);
Optional<Member> findByRole(String role);

}
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package com.dnd.gongmuin.notification.repository;

import com.dnd.gongmuin.member.domain.Member;
import com.dnd.gongmuin.notification.domain.Notification;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import com.dnd.gongmuin.member.domain.Member;
import com.dnd.gongmuin.notification.domain.Notification;

@Repository
public interface NotificationRepository extends JpaRepository<Notification, Long>, NotificationCustom {
void deleteByMember(Member member);
void deleteByMember(Member member);
}
Original file line number Diff line number Diff line change
@@ -1,20 +1,22 @@
package com.dnd.gongmuin.question_post.repository;

import com.dnd.gongmuin.member.domain.Member;
import com.dnd.gongmuin.question_post.domain.QuestionPost;
import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

import com.dnd.gongmuin.member.domain.Member;
import com.dnd.gongmuin.question_post.domain.QuestionPost;

@Repository
public interface QuestionPostRepository extends JpaRepository<QuestionPost, Long>, QuestionPostQueryRepository {
boolean existsById(Long id);
boolean existsById(Long id);

List<QuestionPost> findAllByMember(Member member);
List<QuestionPost> findAllByMember(Member member);

@Modifying(flushAutomatically = true, clearAutomatically = true)
@Query("UPDATE QuestionPost q SET q.member = :member WHERE q.member.id = :memberId")
public void updateQuestionPostsMember(Long memberId, Member member);
@Modifying(flushAutomatically = true, clearAutomatically = true)
@Query("UPDATE QuestionPost q SET q.member = :member WHERE q.member.id = :memberId")
public void updateQuestionPostsMember(Long memberId, Member member);
}
Loading

0 comments on commit 2db3183

Please sign in to comment.