Skip to content

Commit

Permalink
Merge pull request Techit-Springles#232 from ujumom/refactor/Techit-S…
Browse files Browse the repository at this point in the history
…pringles#208-index-page-api-controller

Refactor/Techit-Springles#208 index page api controller
  • Loading branch information
ujumom committed Sep 8, 2023
2 parents 19524c4 + 50f67f4 commit 3fb35c5
Show file tree
Hide file tree
Showing 16 changed files with 342 additions and 241 deletions.
72 changes: 52 additions & 20 deletions src/main/java/com/springles/controller/api/ChatRoomController.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import com.springles.domain.dto.member.MemberCreateRequest;
import com.springles.domain.dto.member.MemberInfoResponse;
import com.springles.domain.dto.response.ResResult;
import com.springles.exception.CustomException;
import com.springles.exception.constants.ErrorCode;
import com.springles.jwt.JwtTokenUtils;
import com.springles.service.ChatRoomService;
import com.springles.service.CookieService;
Expand All @@ -21,6 +23,8 @@
import org.springframework.web.bind.annotation.*;
import org.springframework.security.core.Authentication;

import java.util.List;

@RestController
@RequiredArgsConstructor
@RequestMapping("v1")
Expand All @@ -41,8 +45,8 @@ public ResponseEntity<ResResult> createChatRoom(@Valid @RequestBody ChatRoomReqD
Long id = info.getId();
String memberName = info.getMemberName();

log.info("MemberCreateRequest.getMemberName() = {}",((MemberCreateRequest) auth.getPrincipal()).getMemberName()); // 인증 된 멤버 이름
log.info("MemberCreateRequest.isAuthenticated() = {}", auth.isAuthenticated()); // 인증 되었다면 true
// log.info("MemberCreateRequest.getMemberName() = {}",((MemberCreateRequest) auth.getPrincipal()).getMemberName()); // 인증 된 멤버 이름
// log.info("MemberCreateRequest.isAuthenticated() = {}", auth.isAuthenticated()); // 인증 되었다면 true

// 응답 메시지 return
ResponseCode responseCode = ResponseCode.CHATROOM_CREATE;
Expand All @@ -54,35 +58,63 @@ public ResponseEntity<ResResult> createChatRoom(@Valid @RequestBody ChatRoomReqD
.build(), HttpStatus.OK);
}

/**
/chatrooms?title={title}
/chatrooms?nickname={nickname}
*/
@GetMapping(value = "/chatrooms")
public ResponseEntity<ResResult> searchChatRooms(@RequestParam(value = "title", required = false) String title,
@RequestParam(value = "nickname", required = false) String nickname) {

// 채팅방 단일 조회
@GetMapping(value="/chatroom/{roomId}")
public ResponseEntity<ResResult> readChatRoom(
@PathVariable Long roomId
){

Object chatRooms = null;
ResponseCode responseCode = ResponseCode.CHATROOM_READ;

// title 로 검색
if (title != null) { chatRooms = chatRoomService.findChatRoomByTitle(title);}

// 방장 이름으로 검색
else if (nickname != null) { chatRooms = chatRoomService.findChatRoomByNickname(nickname); }
return new ResponseEntity<>(
ResResult.builder()
.responseCode(responseCode)
.code(responseCode.getCode())
.message(responseCode.getMessage())
.data(chatRoomService.findChatRoomByChatRoomId(roomId))
.build(), HttpStatus.OK);
}

// 대기중인 모든 채팅방
else { chatRooms = chatRoomService.findAllChatRooms(); }
// 채팅방 전체 조회
@GetMapping(value = "/chatrooms")
public ResponseEntity<ResResult> readChatRooms() {

ResponseCode responseCode = ResponseCode.CHATROOM_SEARCH;
ResponseCode responseCode = ResponseCode.CHATROOM_READ;

return new ResponseEntity<>(
ResResult.builder()
.responseCode(responseCode)
.code(responseCode.getCode())
.message(responseCode.getMessage())
.data(chatRooms)
.data(chatRoomService.findAllChatRooms())
.build(), HttpStatus.OK);

}

/**
/chatrooms?title={title}
/chatrooms?nickname={nickname}
*/
// 채팅방 검색
@GetMapping(value = "/chatroom/search")
public ResponseEntity<?> searchChatRooms(
@RequestParam(value = "content", required = false, defaultValue = "") String content
) {
ResponseCode responseCode = ResponseCode.CHATROOM_SEARCH;
return new ResponseEntity<>(
ResResult.builder()
.responseCode(responseCode)
.code(responseCode.getCode())
.message(responseCode.getMessage())
.data(chatRoomService.findAllByTitleAndNickname(content))
.build(), HttpStatus.OK);

// // 일치하는 방이 하나도 없을 때
//// model.addAttribute("errorMessage", String.format("'%s'에 해당하는 유저 또는 방을 찾지 못해 전체 목록을 불러옵니다.",searchContent));
// // 전체 채팅 목록 불러오기
// List<ChatRoomResponseDto> allChatRooms = chatRoomService.findAllChatRooms();
//// model.addAttribute("allChatRooms", allChatRooms);
// }
}

// 채팅방 수정
Expand Down
15 changes: 15 additions & 0 deletions src/main/java/com/springles/controller/api/MemberController.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,21 @@ public class MemberController {
private final MemberService memberService;
private final CookieService cookieService;

// 멤버 정보 조회
@GetMapping("/info")
public ResponseEntity<ResResult> profileInfo(HttpServletRequest request) {
// 멤버 정보 가져오기
String accessToken = (String)request.getAttribute("accessToken");
ResponseCode responseCode = ResponseCode.MEMBER_DETAIL;
return ResponseEntity.ok(
ResResult.builder()
.responseCode(responseCode)
.code(responseCode.getCode())
.message(responseCode.getMessage())
.data(memberService.getUserSimpleProfileInfo(accessToken))
.build());
}

// 회원가입
@PostMapping("/signup")
public ResponseEntity<ResResult> signup(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.springles.controller.ui;


import com.springles.controller.api.MemberController;
import com.springles.domain.dto.chatroom.ChatRoomReqDTO;
import com.springles.domain.dto.chatroom.ChatRoomResponseDto;
import com.springles.domain.dto.member.MemberInfoResponse;
Expand All @@ -26,7 +27,6 @@
@Slf4j
public class ChatRoomUiController {

private final MemberUiController memberUiController;
private final ChatRoomService chatRoomService;
private final CookieService cookieService;

Expand All @@ -38,39 +38,7 @@ public String chatroom() {

// 채팅방 목록 페이지 (전체 조회)
@GetMapping("index")
public String chatRoomList(Model model,
HttpServletRequest request,
@RequestParam(value = "search-content", required = false, defaultValue = "") String searchContent
) {
// 목록 전체 조회
String accessToken = cookieService.atkFromCookie(request);

// 회원 정보 호출
// MemberInfoResponse info = memberUiController.info(accessToken);
// 회원 프로필 정보 호출
MemberProfileResponse profileInfo = memberUiController.profileInfo(accessToken);
model.addAttribute("member",profileInfo);
// 채팅방 검색
try {
List<ChatRoomResponseDto> allByTitleAndNickname = chatRoomService.findAllByTitleAndNickname(searchContent);
model.addAttribute("allChatRooms", allByTitleAndNickname);

} catch (CustomException e) {

// 검색어가 비어있다면
if (searchContent.isBlank()) {
model.addAttribute("errorMessage", e.getMessage());
}

// 검색어가 비어 있지 않고 방을 찾지 못했을 때
else{
model.addAttribute("errorMessage", String.format("'%s'에 해당하는 유저 또는 방을 찾지 못해 전체 목록을 불러옵니다.",searchContent) );
}

List<ChatRoomResponseDto> allChatRooms = chatRoomService.findAllChatRooms();
model.addAttribute("allChatRooms", allChatRooms);
}

public String chatRoomList() {
return "home/index";
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,12 +122,9 @@ public String quickEnterRoom( HttpServletRequest request, Model model){
model.addAttribute("nextUrl", String.format("/v1/add"));
return "check/confirm";
}


}



// url 공유 하기 버튼
@GetMapping("{roomId}/detail")
public String roomDetails(@PathVariable("roomId") Long id , Model model){
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,13 @@
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.view.RedirectView;


@Controller
@RequestMapping("v1")
Expand All @@ -43,7 +42,6 @@ public String loginPage(Model model, MemberLoginRequest memberDto) {
return "member/login";
}


// 아이디 찾기 페이지 조회
@GetMapping("/vertification-id")
public String vertificationId() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ public enum ResponseCode {
CHATROOM_UPDATE(HttpStatus.CREATED, "201", "채팅방 수정 성공"),
CHATROOM_DELETE(HttpStatus.NO_CONTENT, "201", "채팅방 삭제 성공"),
CHATROOM_SEARCH(HttpStatus.OK,"200", "채팅방 검색 완료"),
CHATROOM_READ(HttpStatus.OK,"200", "채팅방 조회 완료"),

/* AUTH */
MEMBER_SAVE(HttpStatus.CREATED, "201", "회원가입 성공"),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.springles.domain.dto.member;

import com.springles.domain.constants.GameRole;
import com.springles.domain.constants.Level;
import com.springles.domain.constants.ProfileImg;
import com.springles.domain.entity.MemberGameInfo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@Builder
@AllArgsConstructor
@RequiredArgsConstructor
public class MemberSimpleProfileResponse {
private String nickname; // 게임 닉네임
private String profileImg;
private Level level; // 유저 레벨
private Long memberId;

public static MemberSimpleProfileResponse of(MemberGameInfo memberGameInfo, Long memberId) {
return MemberSimpleProfileResponse.builder()
.memberId(memberId)
.nickname(memberGameInfo.getNickname())
.profileImg(memberGameInfo.getProfileImg().getFileUrl())
.level(memberGameInfo.getLevel())
.build();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ public enum ErrorCode {
NOT_FOUND_ROOM(HttpStatus.NOT_FOUND, "방을 찾을 수 없습니다."),
USER_NOT_OWNER(HttpStatus.UNAUTHORIZED, "수정 권한이 없습니다."),
NOT_FOUND_QUICK_ENTRY_ROOM(HttpStatus.NOT_FOUND, "빠른 입장이 가능한 방을 찾을 수 없습니다."),
EMTPY_KEYWORD(HttpStatus.BAD_REQUEST, "검색어가 비어있습니다."),

/* MEMBER */
MEMBER_NOT_FOUND(HttpStatus.NOT_FOUND, "등록되지 않은 회원입니다."),
Expand Down
3 changes: 3 additions & 0 deletions src/main/java/com/springles/service/MemberService.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ public interface MemberService {
// 사용자 정보 API
MemberInfoResponse getUserInfo(String accessToken);

// 메인페이지 사용자 프로필 정보 호출
MemberSimpleProfileResponse getUserSimpleProfileInfo(String accessToken);

MemberInfoResponse findUserByName(String memberName);

// 사용자 프로필 정보 호출
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,6 @@ public List<ChatRoomResponseDto> findAllByCloseFalseAndState() {
*/
@Override
public List<ChatRoomResponseDto> findAllChatRooms() {

List<ChatRoom> findAllChatRooms = chatRoomJpaRepository.findAll();
return findAllChatRooms.stream().map(ChatRoomResponseDto::of).toList();

Expand Down Expand Up @@ -205,7 +204,7 @@ public List<ChatRoomResponseDto> findAllByTitleAndNickname(String searchContent)

List<ChatRoomResponseDto> list = new ArrayList<>();

// 만약 검색어가 없다면 NO_CONTENT 반환
// 검색어가 비어 있는 경우
if (searchContent.isEmpty()) {
throw new CustomException(ErrorCode.NO_CONTENT);
}
Expand All @@ -216,13 +215,13 @@ public List<ChatRoomResponseDto> findAllByTitleAndNickname(String searchContent)
list.addAll(chatRoomByTitle);
list.addAll(chatRoomByNickname);

// 검색 결과가 비어있다면 NOT_FOUND_ROOM 반환
// 검색 결과 일치하는 채팅방이 없는 경우 ''에 대한 검색 결과는 없습니다.
if (list.isEmpty()) {
throw new CustomException(ErrorCode.NOT_FOUND_ROOM);
}

// 검색 결과 반환
return list.stream().distinct().toList();

}

// 채팅방 입장 시 채팅 정보 받아오기
Expand Down
20 changes: 20 additions & 0 deletions src/main/java/com/springles/service/impl/MemberServiceImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -49,12 +49,32 @@ public MemberInfoResponse getUserInfo(String accessToken) {
.orElseThrow(() -> new CustomException(ErrorCode.NOT_FOUND_MEMBER)));
}


/**
* 메인페이지 사용자 프로필 간단 정보 조회
*/
public MemberSimpleProfileResponse getUserSimpleProfileInfo(String accessToken) {
String memberName = jwtTokenUtils.parseClaims(accessToken).getSubject();

Optional<Member> optionalMember = memberRepository.findByMemberName(memberName);
if(optionalMember.isEmpty()) {
throw new CustomException(ErrorCode.NOT_FOUND_MEMBER);
}

Optional<MemberGameInfo> optionalMemberGameInfo = memberGameInfoJpaRepository.findByMemberId(optionalMember.get().getId());

return MemberSimpleProfileResponse.of(optionalMemberGameInfo.get(), optionalMember.get().getId());
}



@Override
public MemberInfoResponse findUserByName(String memberName) {
return MemberInfoResponse.of(memberRepository.findByMemberName(memberName)
.orElseThrow(() -> new CustomException(ErrorCode.NOT_FOUND_MEMBER)));
}


/**
* 사용자 프로필 정보 반환
*/
Expand Down
Loading

0 comments on commit 3fb35c5

Please sign in to comment.