diff --git a/src/main/java/com/springles/controller/api/ChatRoomController.java b/src/main/java/com/springles/controller/api/ChatRoomController.java index 91539339..d4fea4c9 100644 --- a/src/main/java/com/springles/controller/api/ChatRoomController.java +++ b/src/main/java/com/springles/controller/api/ChatRoomController.java @@ -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; @@ -21,6 +23,8 @@ import org.springframework.web.bind.annotation.*; import org.springframework.security.core.Authentication; +import java.util.List; + @RestController @RequiredArgsConstructor @RequestMapping("v1") @@ -41,8 +45,8 @@ public ResponseEntity 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; @@ -54,35 +58,63 @@ public ResponseEntity createChatRoom(@Valid @RequestBody ChatRoomReqD .build(), HttpStatus.OK); } - /** - /chatrooms?title={title} - /chatrooms?nickname={nickname} - */ - @GetMapping(value = "/chatrooms") - public ResponseEntity searchChatRooms(@RequestParam(value = "title", required = false) String title, - @RequestParam(value = "nickname", required = false) String nickname) { - + // 채팅방 단일 조회 + @GetMapping(value="/chatroom/{roomId}") + public ResponseEntity 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 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 allChatRooms = chatRoomService.findAllChatRooms(); +//// model.addAttribute("allChatRooms", allChatRooms); +// } } // 채팅방 수정 diff --git a/src/main/java/com/springles/controller/api/MemberController.java b/src/main/java/com/springles/controller/api/MemberController.java index 8bc979b9..edfb981b 100644 --- a/src/main/java/com/springles/controller/api/MemberController.java +++ b/src/main/java/com/springles/controller/api/MemberController.java @@ -22,6 +22,21 @@ public class MemberController { private final MemberService memberService; private final CookieService cookieService; + // 멤버 정보 조회 + @GetMapping("/info") + public ResponseEntity 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 signup( diff --git a/src/main/java/com/springles/controller/ui/ChatRoomUiController.java b/src/main/java/com/springles/controller/ui/ChatRoomUiController.java index e0410401..01913b3b 100644 --- a/src/main/java/com/springles/controller/ui/ChatRoomUiController.java +++ b/src/main/java/com/springles/controller/ui/ChatRoomUiController.java @@ -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; @@ -26,7 +27,6 @@ @Slf4j public class ChatRoomUiController { - private final MemberUiController memberUiController; private final ChatRoomService chatRoomService; private final CookieService cookieService; @@ -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 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 allChatRooms = chatRoomService.findAllChatRooms(); - model.addAttribute("allChatRooms", allChatRooms); - } - + public String chatRoomList() { return "home/index"; } } diff --git a/src/main/java/com/springles/controller/ui/ChatUiController.java b/src/main/java/com/springles/controller/ui/ChatUiController.java index 066c42d5..cb5d1cb2 100644 --- a/src/main/java/com/springles/controller/ui/ChatUiController.java +++ b/src/main/java/com/springles/controller/ui/ChatUiController.java @@ -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){ diff --git a/src/main/java/com/springles/controller/ui/MemberUiController.java b/src/main/java/com/springles/controller/ui/MemberUiController.java index bf2c832e..d318f785 100644 --- a/src/main/java/com/springles/controller/ui/MemberUiController.java +++ b/src/main/java/com/springles/controller/ui/MemberUiController.java @@ -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") @@ -43,7 +42,6 @@ public String loginPage(Model model, MemberLoginRequest memberDto) { return "member/login"; } - // 아이디 찾기 페이지 조회 @GetMapping("/vertification-id") public String vertificationId() { diff --git a/src/main/java/com/springles/domain/constants/ResponseCode.java b/src/main/java/com/springles/domain/constants/ResponseCode.java index 7bddde77..5d601856 100644 --- a/src/main/java/com/springles/domain/constants/ResponseCode.java +++ b/src/main/java/com/springles/domain/constants/ResponseCode.java @@ -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", "회원가입 성공"), diff --git a/src/main/java/com/springles/domain/dto/member/MemberSimpleProfileResponse.java b/src/main/java/com/springles/domain/dto/member/MemberSimpleProfileResponse.java new file mode 100644 index 00000000..3c7ad39a --- /dev/null +++ b/src/main/java/com/springles/domain/dto/member/MemberSimpleProfileResponse.java @@ -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(); + } + +} diff --git a/src/main/java/com/springles/exception/constants/ErrorCode.java b/src/main/java/com/springles/exception/constants/ErrorCode.java index f0a8e55b..4f1fe651 100644 --- a/src/main/java/com/springles/exception/constants/ErrorCode.java +++ b/src/main/java/com/springles/exception/constants/ErrorCode.java @@ -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, "등록되지 않은 회원입니다."), diff --git a/src/main/java/com/springles/service/MemberService.java b/src/main/java/com/springles/service/MemberService.java index ce783685..72b4ba71 100644 --- a/src/main/java/com/springles/service/MemberService.java +++ b/src/main/java/com/springles/service/MemberService.java @@ -14,6 +14,9 @@ public interface MemberService { // 사용자 정보 API MemberInfoResponse getUserInfo(String accessToken); + // 메인페이지 사용자 프로필 정보 호출 + MemberSimpleProfileResponse getUserSimpleProfileInfo(String accessToken); + MemberInfoResponse findUserByName(String memberName); // 사용자 프로필 정보 호출 diff --git a/src/main/java/com/springles/service/impl/ChatRoomServiceImpl.java b/src/main/java/com/springles/service/impl/ChatRoomServiceImpl.java index 6535d87e..0a00a1d7 100644 --- a/src/main/java/com/springles/service/impl/ChatRoomServiceImpl.java +++ b/src/main/java/com/springles/service/impl/ChatRoomServiceImpl.java @@ -74,7 +74,6 @@ public List findAllByCloseFalseAndState() { */ @Override public List findAllChatRooms() { - List findAllChatRooms = chatRoomJpaRepository.findAll(); return findAllChatRooms.stream().map(ChatRoomResponseDto::of).toList(); @@ -205,7 +204,7 @@ public List findAllByTitleAndNickname(String searchContent) List list = new ArrayList<>(); - // 만약 검색어가 없다면 NO_CONTENT 반환 + // 검색어가 비어 있는 경우 if (searchContent.isEmpty()) { throw new CustomException(ErrorCode.NO_CONTENT); } @@ -216,13 +215,13 @@ public List 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(); - } // 채팅방 입장 시 채팅 정보 받아오기 diff --git a/src/main/java/com/springles/service/impl/MemberServiceImpl.java b/src/main/java/com/springles/service/impl/MemberServiceImpl.java index 62bc03bf..08391931 100644 --- a/src/main/java/com/springles/service/impl/MemberServiceImpl.java +++ b/src/main/java/com/springles/service/impl/MemberServiceImpl.java @@ -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 optionalMember = memberRepository.findByMemberName(memberName); + if(optionalMember.isEmpty()) { + throw new CustomException(ErrorCode.NOT_FOUND_MEMBER); + } + + Optional 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))); } + /** * 사용자 프로필 정보 반환 */ diff --git a/src/main/resources/static/css/basic.css b/src/main/resources/static/css/basic.css index f3ba9798..28010b09 100644 --- a/src/main/resources/static/css/basic.css +++ b/src/main/resources/static/css/basic.css @@ -3,13 +3,17 @@ html { min-height: 100%; margin: 0; } + body { - background-color:#F5F5F5 + /*background-image : url("../images/mafia.jpg");*/ + /*background-size : cover;*/ } .navbar { padding-left: 40px; padding-right: 40px; + height: 8vh; + background-color:#F5F5F5 } .index-container{ @@ -36,6 +40,8 @@ body { .card-header{ text-align: left; background-color:#666666; + border-top-left-radius: 14px; + border-top-right-radius: 14px; } .form-item { @@ -46,10 +52,7 @@ body { .profile { border-radius: 14px; border: #666666 solid 1px; - /*width: 30vw;*/ height: 30vh; - /*padding: 3px 6px;*/ - /*background-color: blue;*/ } .card-body2 { @@ -64,7 +67,6 @@ body { } .my_bg { - /*background-image: url("../images/profile.png");*/ background-size: 100% 100%; align-items:center; justify-content: center; @@ -134,7 +136,7 @@ body { .cover { display: flex; - justify-content: space-between; + justify-content: flex-end; margin: 10px; } @@ -247,3 +249,6 @@ body { width: 70%; /* Could be more or less, depending on screen size */ } +.password-input { + +} \ No newline at end of file diff --git a/src/main/resources/static/images/mafia.jpg b/src/main/resources/static/images/mafia.jpg new file mode 100644 index 00000000..cb848bc6 Binary files /dev/null and b/src/main/resources/static/images/mafia.jpg differ diff --git a/src/main/resources/templates/chat-room.html b/src/main/resources/templates/chat-room.html index fec679e1..98fa4a9e 100644 --- a/src/main/resources/templates/chat-room.html +++ b/src/main/resources/templates/chat-room.html @@ -169,6 +169,7 @@

참여자

+ diff --git a/src/main/resources/templates/fragments/header.html b/src/main/resources/templates/fragments/header.html index ae412218..cd184613 100644 --- a/src/main/resources/templates/fragments/header.html +++ b/src/main/resources/templates/fragments/header.html @@ -4,20 +4,14 @@ xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
-