-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[COZY-259] feat : 방로직 전체적 수정 및 방나가기 구현 #111
Conversation
리뷰해드려요~Room.java
RoomConverter.java
RoomCreateRequest.java
RoomCreateResponse.java
RoomRepository.java
RoomCommandService.java
RoomQueryService.java
RoomHashtag.java
RoomHashtagConverter.java
RoomHashtagRepository.java
RoomHashtagCommandService.java
ErrorStatus.java
추가 개선 사항:
|
아오 봇 맘에 안들어 |
리뷰해드려요~Hashtag.java - Review 1
RoomHashtag.java - Review 1
RoomRepository.java - Review 1
RoomConverter.java - Review 1
RoomCreateResponse.java - Review 1
RoomType.java - Review 1
RoomController.java - Review 1
RoomQueryService.java - Review 1
RoomHashtagRepository.java - Review 1
RoomHashtagCommandService.java - Review 1
I hope this helps! Let me know if you have any questions. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM~
코맨트 확인해주세용
public Hashtag(String hashtag) { | ||
this.hashtag = hashtag; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
요부분 Builder 어노테이션 사용하면, 빌더 패턴으로 바꿔주세요!
생성자 선언 방식은 일반적으로 잘 사용되지 않는 것으로 알고있습니당.
참고 사이트
@PostMapping("/create-private") | ||
@Operation(summary = "[바니] 초대코드로 방생성 기능", description = "방이름, 프로필이미지, 인원수를 입력합니다.") | ||
@SwaggerApiError({ | ||
ErrorStatus._MEMBER_NOT_FOUND, | ||
ErrorStatus._ROOM_ALREADY_EXISTS | ||
}) | ||
public ResponseEntity<ApiResponse<RoomCreateResponse>> createRoom(@Valid @RequestBody RoomCreateRequest request, | ||
@AuthenticationPrincipal MemberDetails memberDetails) { | ||
RoomCreateResponse response = roomCommandService.createRoom(request, memberDetails.getMember()); | ||
RoomCreateResponse response = roomCommandService.createPrivateRoom(request, memberDetails.getMember()); | ||
return ResponseEntity.ok(ApiResponse.onSuccess(response)); | ||
} | ||
|
||
@PostMapping("/create-public") | ||
@Operation(summary = "[바니]공개 방 생성 기능", description = "방이름, 프로필이미지, 인원수, 해시태그(1-3개)를 입력합니다.") | ||
@SwaggerApiError({ | ||
ErrorStatus._MEMBER_NOT_FOUND, | ||
ErrorStatus._ROOM_ALREADY_EXISTS, | ||
ErrorStatus._DUPLICATE_HASHTAGS | ||
}) | ||
public ResponseEntity<ApiResponse<RoomCreateResponse>> createPublicRoom( | ||
@Valid @RequestBody PublicRoomCreateRequest request, | ||
@AuthenticationPrincipal MemberDetails memberDetails) { | ||
RoomCreateResponse response = roomCommandService.createPublicRoom(request, memberDetails.getMember()); | ||
return ResponseEntity.ok(ApiResponse.onSuccess(response)); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 부분은 API를 따로 나눈 이유가 있을까요?
역할이 비슷해서, 공개/비공개로 나뉘는 requestParam을 통해서 구분해도 괜찮을 것 같기도 해서..~
실제로 프론트에서 방 생성이라는 공개/비공개에 상관없이 동일하지 않나요?
이건 지극히 개인적인 생각이라... 바꿔달라! 까지는 아닙니당
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
방만들기가 프론트 화면에서 공개방만들기 / 비공개방 만들기로 나뉘어 있어서 구분해서 만들었습니다!!..
src/main/java/com/cozymate/cozymate_server/domain/room/controller/RoomController.java
Show resolved
Hide resolved
@NotBlank | ||
@Size(max=12) | ||
@Pattern(regexp = "^(?!\\s)[가-힣a-zA-Z0-9\\s]+(?<!\\s)$", message = "한글, 영어, 숫자 및 공백만 입력해주세요. 단, 공백은 처음이나 끝에 올 수 없습니다.") | ||
private String name; | ||
@NotNull | ||
@Min(0) | ||
@Max(15) | ||
private Integer profileImage; | ||
@NotNull | ||
@Min(2) | ||
@Max(6) | ||
private Integer maxMateNum; | ||
@Size(min = 1, max = 3, message = "해시태그는 1개에서 3개까지 입력할 수 있습니다.") | ||
private List<@NotBlank @Pattern(regexp = "^(?!_)[가-힣a-zA-Z0-9]+(_[가-힣a-zA-Z0-9]+)*(?<!_)$", | ||
message = "해시태그는 한글, 영어, 숫자 및 '_'만 사용할 수 있으며, '_'는 앞이나 뒤에 올 수 없습니다.") String> hashtags; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
NotNull이나 Min Max 어노테이션등에서도 message로 에러 발생시 표시할 내용 적어주면 좋습니당.
import lombok.Setter; | ||
|
||
@Getter | ||
@Setter |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Setter 필요한가요?
|
||
public interface RoomHashtagRepository extends JpaRepository<RoomHashtag, Long> { | ||
|
||
@Query("select concat('#', h.hashtag) from RoomHashtag rh join rh.hashtag h where rh.room.id = :roomId") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
프론트에서 이거 # 붙이지 말아달래요
@NoArgsConstructor(access = AccessLevel.PROTECTED) | ||
@Builder | ||
@Entity | ||
public class Hashtag extends BaseTimeEntity { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
잠깐 궁금증인데
Hashtag 테이블을 따로 만들 필요가 있을까요?
그냥 방 정보에 String으로 저장해도 문제없지 않을까? 하는 생각이 있어서
모두의 의견을 들어보고 싶습니당
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
찾아봤을때는 추후에 해시태그로 뭔가를 하는 기능이 확장된다하면 Hashtag 테이블을 따로 만드는게 좋다기에 이렇게 했는데... 따로 둘 필요는 없을까요??
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
흠 Hashtag 종류가 정해져있으면 따로 만드는게 좋은데, 지금은 그냥 입력된 String이 Hashtag라서 중복되는게 많을까? 하는 생각이 들긴 합니다!
일단 이렇게 두고 나중에 변경하시져
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
json 활용해서 임베디드 값타입 활용해보는게 어떨까여? 개인적인 의견입니다아
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Json 타입 써서 어캐 활용해요?
어떻게 활용할지 감이 잘 안와서..ㅎ
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
class Room{
..
hastag = {
value = ["#금연",..,]
}
}
이런식으로여
물론 hash tag를 따로 클래스 빼서 관리할수 있습니다
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
사실 처음에 구현할때는 값타입으로 했었는데 값타입을 쓰면 해시태그 수정이 좀 어렵고 나중에 해시태그로 방을 필터링 하는게 복잡해진다고 하더라고요.... 근데 지금처럼 하면 테이블이 복잡해지긴 해서......... 어떻게 하는게 좋을지 고민이 되네요
리뷰해드려요~Room.java - Review 1
RoomRepository.java - Review 1
RoomController.java - Review 1
RoomConverter.java - Review 1
RoomCreateRequest.java
RoomCreateResponse.java
RoomStatus.java
RoomType.java
RoomRepository.java
RoomCommandService.java
RoomQueryService.java
RoomHashtag.java
RoomHashtagConverter.java
RoomHashtagRepository.java
RoomHashtagCommandService.java
추가 개선 사항: Room.java - Suggestion 1
RoomConverter.java - Suggestion 1
RoomCreateRequest.java - Suggestion 1
RoomCreateResponse.java - Suggestion 1
RoomStatus.java - Suggestion 1
RoomType.java - Suggestion 1
RoomRepository.java - Suggestion 1
RoomCommandService.java - Suggestion 1
RoomQueryService.java - Suggestion 1
RoomHashtag.java - Suggestion 1
RoomHashtagConverter.java - Suggestion 1
RoomHashtagRepository.java - Suggestion 1
RoomHashtagCommandService.java - Suggestion 1
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM~ 코멘트 남겼습니다.
@NoArgsConstructor(access = AccessLevel.PROTECTED) | ||
@Builder | ||
@Entity | ||
public class Hashtag extends BaseTimeEntity { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
json 활용해서 임베디드 값타입 활용해보는게 어떨까여? 개인적인 의견입니다아
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Room에 대학정보 있어야 할거 같아요 지금은 전체방이 다 조회 되지만 대학정보가 있어야 해당 학교 방 조회에 용이하니..
일단 당장보다는 제가 대학관련 api 올리면 그때 ㄱㄱ하시죠
대학교 없는 방 있을수도 있으니 NON 이라는 대학교 제가 만들어 둘게여
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
NON 대학교 있는게 나을까요? 그냥 null로 있어도 될거같은데
null에 대한 처리를 따로 해줘야해서 그런건가용?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
넹 nullPointerException을 최대한 지양 하려구여
@NoArgsConstructor(access = AccessLevel.PROTECTED) | ||
@Builder | ||
@Entity | ||
public class Hashtag extends BaseTimeEntity { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
class Room{
..
hastag = {
value = ["#금연",..,]
}
}
이런식으로여
물론 hash tag를 따로 클래스 빼서 관리할수 있습니다
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
넹 nullPointerException을 최대한 지양 하려구여
#️⃣ 요약 설명
📝 작업 내용
공개방/초대코드 방 만들기
해시태그 저장 과정
방 삭제/나가기
Mate의 EntryStatus에 EXITED 추가
재입장을 고려하여 방 입장 기능 수정
Mate에 방 퇴장, 재입장 관련 메소드 추가
방 이름 중복 검사
동작 확인
좌심방을 나가보겠습니다
Room
Mate
entryStatus에 EXIT을 추가한 이유
그래서 일단 이런 방식으로 했는데… 혹시 더 좋은 방법이 있을까요? 의견 부탁드립니다
아무튼 나가면 isExit가 true가 되고 entryStatus는 EXITED가 되고 EXITED 상태인 방은 참여중인 방으로 안칩니다
참여중인 방이 있는지 여부 조회하면 없다고 나옴
방에 나간 멤버와 관련된 데이터들은 그대로 있습니다
공개방을 만들어보겠습니다
중복된 해시태그 입력했을 때
해시태그 3개 넘어가게 작성했을때, 입력 안했을 때
해시태그가 형식에 안맞을 때 (지금은 해시태그 형식을 임의로 설정해뒀습니다)
성공적으로 생성되었을때
todo 생성했고
rule도 만들었습니다
방을 나가보겠습니다
최후의 1인이 나가면서 방 자체가 사라졌고 모든 데이터도 날라갔습니다 (피드,롤,투두 등등)
이제 첫번째로 나갔던 좌심방 방에 다시 들어가보겠습니다
일단 방 정보를 조회하면 나갔던 바니는 뜨지 않는 것을 확인할 수 있습니다 (방정보 조회할때 방 타입과 해시태그도 같이 조회되도록 수정했습니다)
재입장에 성공했습니다
mate, room 모두 정상입니다
💬 리뷰 요구사항(선택)