-
Notifications
You must be signed in to change notification settings - Fork 6
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
[BE] feature/#264 토픽에 대한 즐겨찾기 API #275
Conversation
@RestController | ||
@RequestMapping("/members/bookmarks") | ||
public class BookmarkController { |
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.
즐겨찾기라는게 아무래도, 유저와 관련된 내용이다 보니 위와 같이 URI를 작성하였습니다.
MemberController와 별도의 컨트롤러라는 점에서, 위 URI가 잘못된 구조인 것 같기도 합니다.
의견 부탁드립니다 !
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.
저는 members 빼는 게 더 좋을 것 같습니다!
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.
저도 members 빼는 것에 동의합니다!
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.
젇후영~~~~~!
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.
반영했습니다 ~
@LoginRequired | ||
@PostMapping | ||
public ResponseEntity<Void> addTopicInBookmark( | ||
AuthMember authMember, | ||
@RequestParam Long topicId | ||
) { | ||
Long bookmarkId = bookmarkCommandService.addTopicInBookmark(authMember, topicId); | ||
|
||
return ResponseEntity.created(URI.create("/members/bookmarks/" + bookmarkId)).build(); | ||
} |
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.
즐겨찾기에 대한 Id를 반환해주어야 하는가 ? 라는 질문을 준팍이 하셨던 것 같아서 코멘트 남깁니다.
사용자가 자신의 즐겨찾기 목록에 존재하는 토픽을 삭제하려면, 해당 토픽의 id보다는 해당 즐겨찾기의 id를 요청하는 것이 맞다고 판단했습니다.
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.
즐겨찾기에 같은 토픽이 여러개 들어갈 수 없으니, TopicId와 MemberId로 충분히 탐색할 수 있지 않을까요?
즐겨찾기 Id를 넣어주는 Response를 만들 경우 프론트에서 보여주는 내용은 동일한데 다양한 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.
topicId, memberId로 식별하고, 그렇게 되면 아예 id 대신 두가지를 복합키로 하는 방식도 괜찮아보입니다!
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.
유연성 제한: id 컬럼 없이 memberId와 topicId만 사용하면 테이블 내에서 각 행을 고유하게 식별할 수 있습니다. 하지만 id를 사용하는 경우, 나중에 유연하게 스키마를 변경하거나 다른 관련 정보를 추가하는 데 더 유리할 수 있습니다.
성능 이슈: 복합키로 인덱스를 생성할 경우, 검색 성능이 향상될 수 있지만, 조건에 따라 성능이 저하될 수도 있습니다. 특히 대량의 데이터에서 복합키를 사용하면 인덱스 크기가 커져서 일부 검색 작업에서 더 많은 리소스를 필요로 할 수 있습니다.
복잡성 증가: 복합키를 사용하면 데이터베이스 쿼리 및 조인 작업이 복잡해질 수 있습니다. 특히 다른 테이블과의 조인 작업에서 조금 더 복잡한 SQL문이 필요할 수 있습니다.
데이터 무결성 유지: 복합키를 사용하는 경우, 데이터 무결성을 유지하기 위해 추가적인 제약 조건이나 처리 로직이 필요할 수 있습니다. 이를 관리하는 것도 고려해야 합니다.
확장성 제한: 나중에 테이블에 다른 컬럼을 추가하거나 변경할 때, 복합키가 있는 경우 일부 작업이 더 복잡해질 수 있습니다.
gpt가 복합키를 사용했을 때의 단점은 이렇다고 하네용.
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.
id를 제거하는 방식이 아닌, 삭제 등의 요청에 대해 복합키를 사용하는 방식으로 결정하겠습니다 !
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.
쥬니 고생하셨습니다!
몇가지 사항에 대해 질문 남겼습니다 ㅎㅎ
public static Bookmark createWithAssociatedTopicAndMember(Topic topic, Member member) { | ||
Bookmark bookmark = new Bookmark(topic, member); | ||
|
||
topic.addBookmark(bookmark); | ||
member.addBookmark(bookmark); | ||
|
||
return bookmark; | ||
} |
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.
연관관계를 꼭 맺어줘야할까요?
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.
생각해보니 Members엔 넣어주는게 더편할 수 있겠네요 ㅎㅎ
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.
다시 생각해보니 topic이 북마크된 숫자도 반환해야하니 필요하겠군요
굿굿...
@RestController | ||
@RequestMapping("/members/bookmarks") | ||
public class BookmarkController { |
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.
저는 members 빼는 게 더 좋을 것 같습니다!
@LoginRequired | ||
@PostMapping | ||
public ResponseEntity<Void> addTopicInBookmark( | ||
AuthMember authMember, | ||
@RequestParam Long topicId | ||
) { | ||
Long bookmarkId = bookmarkCommandService.addTopicInBookmark(authMember, topicId); | ||
|
||
return ResponseEntity.created(URI.create("/members/bookmarks/" + bookmarkId)).build(); | ||
} |
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.
즐겨찾기에 같은 토픽이 여러개 들어갈 수 없으니, TopicId와 MemberId로 충분히 탐색할 수 있지 않을까요?
즐겨찾기 Id를 넣어주는 Response를 만들 경우 프론트에서 보여주는 내용은 동일한데 다양한 Response에 대해서 상태 관리를 해줘야하지 않을까하는 생각이 드네용ㅎㅎ
import com.mapbefine.mapbefine.topic.domain.TopicInfo; | ||
import java.time.LocalDateTime; | ||
|
||
public record BookmarkResponse( |
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.
BookMarkResponse 따로 만들어주기보다는 TopicResponse로 통합해서 처리 가능하지 않을까요?
TopicResponse만 있어도 BookMark를 찾는데 필요한 정보는 다 있다는 생각이 드네요 ㅎㅎ
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.
저도 동의합니다.
처음에는 DTO를 통합함으로써 결합도가 높아져 안좋다고 생각했는데,
사실 Bookmark에 대한 Response는 Member가 즐겨찾기를 한 Topic에 대한 응답이기에
도메인 논리로만 생각하더라도 TopicResponse를 반환해도 자연스럽다는 생각이 듭니다!
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.
저는 현재 topicResponse 에 isBookmarked 가 포함되어 있어, 현재 방식도 괜찮아보이긴합니다.
만일 topicResponse 로 반환하게 된다면, TopicResponse.from(Topic topic) 을 호출해야할테고, 그렇다면 무조건 isBookmarked 가 false 로 설정되게 될테니까요.
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.
쥬니 수고많으셨습니당!!
PR에 작성주신 내용을 보니 설계에 대한 고민을 많이 해주신 것 같아서,
설계 관련 질문 위주로 코멘트 남겼습니다!
@RestController | ||
@RequestMapping("/members/bookmarks") | ||
public class BookmarkController { |
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.
저도 members 빼는 것에 동의합니다!
|
||
return bookmark.stream() | ||
.map(BookmarkResponse::from) | ||
.toList(); |
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.
P4. 당장 중요한 부분은 아니고, 반영하지 않아도 좋은데 원분들의 의견이 궁금해져서 코멘트 답니다!!
저는 도메인 List -> DTO List 로 변환하는 로직도 DTO의 정적 팩토리 메서드로 넣는 걸 선호하는데요
서비스에서 변환 로직의 코드를 간략화할 수 있기 때문입니다!
다들 어떠신가요!?
public static List<BookmarkResponse> from(List<Bookmark> bookmarks) {
return bookmarks.stream()
.map(BookmarkResponse::from)
.toList();
}
// 서비스에서는 아래와 같이 간략화할 수 있음
return BookmarkResponse.from(bookmarks);
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.
대부분의 변환 로직이 굉장히 간략화 될 것 같아서 좋을 것 같습니다!
킹치만, 아주 조금 우려가 되는 부분은
public Bookmark toBookmark(Topic topic) {
...
}
return topic.stream()
.map(this::toBookmark)
.map(BookmarkResponse::from)
.toList();
->
List<Bookmark> bookmarks = topic.stream()
.map(this::toBookmark)
.toList();
return BookmarkResponse.from(bookmarks)
(toBookmark 는 예시를 들기 위해서 사용한 임의의 변환 메서드입니다.)
위와 같은 경우 원래 한번의 스트림으로 해결할 수 있었지만, 해당 정팩매를 둠으로써 중간에 toList() 를 통해 추출해내야 한다는 단점도 생길 수 있을 것 같아요.
이런 경우에서만 정팩메를 사용하지 않는다는 저희만의 컨벤션을 만들거나, 혹은 더 나아가 이런 경우는 발생하지 않을 것 같다고 판단되면 추가해도 너무 좋을 것 같습니다!
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.
저도 개인적으로 List 자체를 넘겨주는 것 좋습니다 ㅎㅎ
매튜가 착각한 것 같은데, List로 추출하지 않고 stream에서 한 번에 처리할 수 있지 않나요 !?
|
||
public List<BookmarkResponse> findAllTopicsInBookmark(AuthMember authMember) { | ||
validateNonExistsMember(authMember); | ||
List<Bookmark> bookmark = bookmarkRepository.findAllByMemberId(authMember.getMemberId()); |
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.
P2. 변수명에 s가 붙으면 좋겠네용~~
import com.mapbefine.mapbefine.topic.domain.TopicInfo; | ||
import java.time.LocalDateTime; | ||
|
||
public record BookmarkResponse( |
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.
저도 동의합니다.
처음에는 DTO를 통합함으로써 결합도가 높아져 안좋다고 생각했는데,
사실 Bookmark에 대한 Response는 Member가 즐겨찾기를 한 Topic에 대한 응답이기에
도메인 논리로만 생각하더라도 TopicResponse를 반환해도 자연스럽다는 생각이 듭니다!
|
||
@Id | ||
@GeneratedValue(strategy = GenerationType.IDENTITY) | ||
private Long id; |
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.
P4. Bookmark가 id를 가지도록 하신 이유가 궁금합니다!
사실 Bookmark는 어떤 Member가 어떤 Topic을 즐겨찾기로 저장했는지 확인하기 위한 엔티티이고,
Response 클래스에 준팍의 코멘트처럼, memberId, topicId로도 식별이 가능하기 때문에
별도의 id 없이 복합키를 쓸 수도 있을 것 같아서요!
아니면 Bookmark의 Id를 사용해야 하는 비즈니스 로직이 있을까용?
제가 놓치고 있는 부분이 있을 것 같아 여쭤봅니다!!!
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.
복합키를 기본키로 사용하는 구현 방식이 복잡하여 (Serializable, equals&hashCode 재정의 등) 기본키 자동 생성 전략을 택했는데요 !
즐겨찾기를 삭제할 때, 각 id 값을 통해 삭제를 요청해야 올바른 흐름이라고 생각했어요.
하지만 이럴 경우, 토픽의 데이터를 내려줄 때 즐겨찾기 목록인지 아닌지에 따라 response body가 달라진다는 점에서 프론트에서 관리해야하는 포인트들이 더 생기는 것 같네요.
준팍과 도이의 의견을 일부 반영하여, 내부적으로는 기본키를 유지하되, 비즈니스 로직(즐겿자기 삭제 등)에서는 복합키로 처리하도록 하겠습니다.
+ "from Topic t " | ||
+ "left join t.bookmarks b on b.member.id = :memberId") | ||
List<TopicWithBookmarkStatus> findAllWithBookmarkStatusByMemberId( | ||
@Param("memberId") Long memberId); |
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.
Long에 null을 전달하면 어차피 BookmarkStatus가 모두 false일 것이기 때문에
서비스에서 memberId가 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.
비로그인 사용자라면, 항상 BookmarkStatus가 false이겠죠 ?
비로그인 유저임에도 불구하고 Join 연산을 수행하는 것은 비효율적이라고 생각했습니다.
} | ||
|
||
throw new IllegalArgumentException("즐겨찾기 삭제에 대한 권한이 없습니다."); | ||
} |
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.
P3. canDelete boolean을 반환하는 부분을 canDelete() 메서드로 분리해줘도 좋겠네요!
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.
해당 사항 반영했습니다 ㅏ!
@LoginRequired | ||
@PostMapping | ||
public ResponseEntity<Void> addTopicInBookmark( | ||
AuthMember authMember, | ||
@RequestParam Long topicId | ||
) { | ||
Long bookmarkId = bookmarkCommandService.addTopicInBookmark(authMember, topicId); | ||
|
||
return ResponseEntity.created(URI.create("/members/bookmarks/" + bookmarkId)).build(); | ||
} |
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.
topicId, memberId로 식별하고, 그렇게 되면 아예 id 대신 두가지를 복합키로 하는 방식도 괜찮아보입니다!
} | ||
|
||
return findAllWithBookmarkStatus(member); | ||
} |
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.
토픽 같이보기 기능에서 IsInAtlas를 판단하는 로직과 같이
즐겨찾기에서도 member의 모든 즐겨찾기 토픽을 조회한 뒤, contains로 isBookmarked를 판단할 수도 있을텐데
join으로 푸는 방법을 택하시게 된 이유가 궁금합니다!
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.
실제 성능은 확인해보아야 겠지만, join 연산을 통해 풀어내는 것이 성능적 이점이 있다고 판단했습니다.
select 쿼리 2번 + 자바 코드로 isBookmarked를 판단하기 위한 stream 연산 수행을 join 한 번에 풀어낼 수 있으니까요 !
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.
쥬니짜응 고생하셨어요!
고생이 느껴지는 코드들이네요
멋져부렁
public Long addTopicInBookmark(AuthMember authMember, Long topicId) { | ||
Topic topic = getTopicById(topicId); | ||
validateBookmarkingPermission(authMember, topic); | ||
Member member = getMemberById(authMember); | ||
|
||
Bookmark bookmark = Bookmark.createWithAssociatedTopicAndMember(topic, member); | ||
bookmarkRepository.save(bookmark); | ||
|
||
return bookmark.getId(); | ||
} |
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.
이전 코드들과의 일관성을 위해서 bookmark 를 저장하신건가용?
저는 쥬니짱이 말씀하셨던 것처럼 member 혹은 topic 을 저장하여 cascade 로 bookmark 를 저장하는 것도 좋아보여서요.
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.
음 그리고 사용자가 즐겨찾기를 중복으로 실행하는 경우도 고려할 수 있을 것 같아요 쥬니짱.
물론 화면딴에서는 쥬니짱이 추가해주신 isBookmarked 로 인해 중복으로 즐겨찾기 하는 경우는 막을 수 있겠지만, 악의적인 유저가 Postman 을 이용하여 중복으로 즐겨찾기 요청을 계속 보내게되면 동일한 정보들이 DB 에 저장될 수도 있지 않을까? 하는 우려가 들기도 하네요
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.
물론 화면딴에서는 쥬니짱이 추가해주신 isBookmarked 로 인해 중복으로 즐겨찾기 하는 경우는 막을 수 있겠지만, 악의적인 유저가 Postman 을 이용하여 중복으로 즐겨찾기 요청을 계속 보내게되면 동일한 정보들이 DB 에 저장될 수도 있지 않을까? 하는 우려가 들기도 하네요
아앗.. 포스트맨이 있었군요.
저는 프론트 크루들을 전적으로 신뢰하고 있었기 떄문에, 별다른 검증을 하지 않았는데 ㅎㅎ
해당 사항 반영하였습니다 !
|
||
return bookmark.stream() | ||
.map(BookmarkResponse::from) | ||
.toList(); |
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.
대부분의 변환 로직이 굉장히 간략화 될 것 같아서 좋을 것 같습니다!
킹치만, 아주 조금 우려가 되는 부분은
public Bookmark toBookmark(Topic topic) {
...
}
return topic.stream()
.map(this::toBookmark)
.map(BookmarkResponse::from)
.toList();
->
List<Bookmark> bookmarks = topic.stream()
.map(this::toBookmark)
.toList();
return BookmarkResponse.from(bookmarks)
(toBookmark 는 예시를 들기 위해서 사용한 임의의 변환 메서드입니다.)
위와 같은 경우 원래 한번의 스트림으로 해결할 수 있었지만, 해당 정팩매를 둠으로써 중간에 toList() 를 통해 추출해내야 한다는 단점도 생길 수 있을 것 같아요.
이런 경우에서만 정팩메를 사용하지 않는다는 저희만의 컨벤션을 만들거나, 혹은 더 나아가 이런 경우는 발생하지 않을 것 같다고 판단되면 추가해도 너무 좋을 것 같습니다!
this.member = member; | ||
} | ||
|
||
// TODO: 2023/08/11 필요한 검증이 무엇이 있을까.. 현재로썬 외부에서 검증하는 방법 밖에 ? |
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.
쥬니짱 제가 위에서 코멘트 드렸던 부분
음 그리고 사용자가 즐겨찾기를 중복으로 실행하는 경우도 고려할 수 있을 것 같아요 쥬니짱.
물론 화면딴에서는 쥬니짱이 추가해주신 isBookmarked 로 인해 중복으로 즐겨찾기 하는 경우는 막을 수 있겠지만, 악의적인 유저가 Postman 을 이용하여 중복으로 즐겨찾기 요청을 계속 보내게되면 동일한 정보들이 DB 에 저장될 수도 있지 않을까? 하는 우려가 들기도 하네요
을 여기서 해결할 수 있지 않을까? 싶어요!
(topic/member).alreadyContainsBookmark()
이런 메서드를 만들어 해당 토픽이나 멤버에 현재 추가하려는 bookmark 가 이미 존재하는지 확인한다면
중복으로 저장되는 경우도 쉽게 막을 수 있을 것 같긴한데
쥬니짱짱 생각은 어떠세요?
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.
물론 위 방식을 기용하면 equals, hashcode 를 추가해줘야 할 것 같긴하네요
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.
좋은 방법인 것 같아요 ㅎㅎ
다만, 한 가지 우려되는 부분은 member 혹은 topic에서 OneToMany로 가지고 있기 때문에, 이후에 지연 로딩을 적용할 것이잖아요 ?
즐겨찾기는 매우 가벼운 비즈니스 로직인데, 매번 모든 정보를 가져와야 한다는 점이 걱정되네요 ㅎㅎ
이에따라, Service 계층에서 아래와 같이 검증 로직을 추가하였습니다 !
private void validateBookmarkDuplication(AuthMember authMember, Long topicId) {
if (isExistBookmark(authMember, topicId)) {
throw new IllegalArgumentException("이미 즐겨찾기로 등록된 토픽입니다.");
}
}
private boolean isExistBookmark(AuthMember authMember, Long topicId) {
return bookmarkRepository.existsByMemberIdAndTopicId(authMember.getMemberId(), topicId);
}
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.
네네 제 생각에도 Repository 에서 확인하는 것이 성능상 이점이 있을 것 같지만, 뭔가 조금 더 객체지향적으로 해결하려면 위와 같은 방법을 채택하는 것이 어떨까 해서 말씀드렸었습니당 홍홍홍
import com.mapbefine.mapbefine.topic.domain.TopicInfo; | ||
import java.time.LocalDateTime; | ||
|
||
public record BookmarkResponse( |
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.
저는 현재 topicResponse 에 isBookmarked 가 포함되어 있어, 현재 방식도 괜찮아보이긴합니다.
만일 topicResponse 로 반환하게 된다면, TopicResponse.from(Topic topic) 을 호출해야할테고, 그렇다면 무조건 isBookmarked 가 false 로 설정되게 될테니까요.
@RestController | ||
@RequestMapping("/members/bookmarks") | ||
public class BookmarkController { |
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.
젇후영~~~~~!
@LoginRequired | ||
@PostMapping | ||
public ResponseEntity<Void> addTopicInBookmark( | ||
AuthMember authMember, | ||
@RequestParam Long topicId | ||
) { | ||
Long bookmarkId = bookmarkCommandService.addTopicInBookmark(authMember, topicId); | ||
|
||
return ResponseEntity.created(URI.create("/members/bookmarks/" + bookmarkId)).build(); | ||
} |
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.
유연성 제한: id 컬럼 없이 memberId와 topicId만 사용하면 테이블 내에서 각 행을 고유하게 식별할 수 있습니다. 하지만 id를 사용하는 경우, 나중에 유연하게 스키마를 변경하거나 다른 관련 정보를 추가하는 데 더 유리할 수 있습니다.
성능 이슈: 복합키로 인덱스를 생성할 경우, 검색 성능이 향상될 수 있지만, 조건에 따라 성능이 저하될 수도 있습니다. 특히 대량의 데이터에서 복합키를 사용하면 인덱스 크기가 커져서 일부 검색 작업에서 더 많은 리소스를 필요로 할 수 있습니다.
복잡성 증가: 복합키를 사용하면 데이터베이스 쿼리 및 조인 작업이 복잡해질 수 있습니다. 특히 다른 테이블과의 조인 작업에서 조금 더 복잡한 SQL문이 필요할 수 있습니다.
데이터 무결성 유지: 복합키를 사용하는 경우, 데이터 무결성을 유지하기 위해 추가적인 제약 조건이나 처리 로직이 필요할 수 있습니다. 이를 관리하는 것도 고려해야 합니다.
확장성 제한: 나중에 테이블에 다른 컬럼을 추가하거나 변경할 때, 복합키가 있는 경우 일부 작업이 더 복잡해질 수 있습니다.
gpt가 복합키를 사용했을 때의 단점은 이렇다고 하네용.
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.
수고 많으셨습니당 ~!!
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.
변경된 부분 확인했습니다!! 감사해오오오어어어어어어어엉~
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.
고생하셨습니다 쥬니~
* [FE]Chore/#9 프론트엔드 개발 환경 초기 설정 (#11) * chore: frontend 세팅 초기 설정 * chore: eslint validate 수정 * chore: 초기 환경 설정 (#15) * chore: 모듈 시스템 및 ts-parser 오류 해결 (#26) * design: ThemeProvider와 GlobalStyle 공통 스타일 속성 지정 (#27) * 토픽, 핀에 대한 Entity 및 뼈대코드 작성 (#28) * chore: 초기 환경 설정 * feat: 토픽, 핀에 대한 Entity 및 뼈대코드 작성 Co-authored-by: yoondgu <[email protected]> Co-authored-by: cpot5620 <[email protected]> Co-authored-by: junpakPark <[email protected]> --------- Co-authored-by: yoondgu <[email protected]> Co-authored-by: cpot5620 <[email protected]> Co-authored-by: junpakPark <[email protected]> * [FE]Feat/#16 공통 컴포넌트 구현 (#30) * feat: Button 컴포넌트 구현 * feat: Input 컴포넌트 구현 * feat: Box 컴포넌트 구현 * feat: Flex 컴포넌트 구현 * feat: Layout 컴포넌트 구현 * refactor: Box 컴포넌트 min-height 속성 추가 * feat: Text 컴포넌트 구현 * refactor: Button 컴포넌트 box-sizing 속성 추가 * refactor: App 컴포넌트 화살표 함수로 변경 * feat: 페이지 폴더 생성 * feat: Spacing 컴포넌트 구현 (#34) * [BE] 토픽, 핀에 대한 Entity 구조 변경 (#36) * chore: 초기 환경 설정 * feat: 토픽, 핀에 대한 Entity 및 뼈대코드 작성 Co-authored-by: yoondgu <[email protected]> Co-authored-by: cpot5620 <[email protected]> Co-authored-by: junpakPark <[email protected]> * refactor: Getter 추가 및, Coordinate BaseEntity 상속 제거 Co-authored-by: yoondgu <[email protected]> Co-authored-by: cpot5620 <[email protected]> Co-authored-by: junpakPark <[email protected]> * refactor: 외래키에 Not Null 조건 추가 Co-authored-by: yoondgu <[email protected]> Co-authored-by: cpot5620 <[email protected]> Co-authored-by: junpakPark <[email protected]> * feat: Repository 추가 Co-authored-by: yoondgu <[email protected]> Co-authored-by: cpot5620 <[email protected]> Co-authored-by: junpakPark <[email protected]> * chore: gradlew 업데이트 Co-authored-by: yoondgu <[email protected]> Co-authored-by: cpot5620 <[email protected]> Co-authored-by: junpakPark <[email protected]> * refactor: Entity 구조 변경 Co-authored-by: yoondgu <[email protected]> Co-authored-by: cpot5620 <[email protected]> Co-authored-by: junpakPark <[email protected]> * remove: 주소 관련 entity 삭제 * docs: 백엔드 기능 목록 작성 * feat: soft delete를 위한 삭제 상태 추가 --------- Co-authored-by: jaeyeon kim <[email protected]> Co-authored-by: cpot5620 <[email protected]> Co-authored-by: junpakPark <[email protected]> Co-authored-by: kpeel5839 <[email protected]> * feat: React Router 기능 구현 (#50) * feat: MSW 초기 설정 및 구동 (#51) * feat: PinDetail 페이지 컴포넌트 구현 (#53) * refactor: 공통 컴포넌트 속성 변경 (#54) * [FE]Feat/#31 �토픽 및 핀 생성 페이지 구현 (#55) * feat: NewPin 페이지 컴포넌트 구현 * feat: NewTopic 페이지 컴포넌트 구현 * feat: Textarea 컴포넌트 구현 * refactor: Input 컴포넌트 font-size theme 적용 및 값 수정 * [FE]Feat/#35 토픽 목록 및 핀 목록 페이지 구현 (#60) * feat: 토픽 카드 컴포넌트 구현 * feat: 토픽 목록 페이지 구현 * refactor: 공통 컴포넌트 속성 수정 * feat: 핀 목록 페이지 구현 * [FE]Refactor#61 페이지 컴포넌트 머지 후 싱크 작업 (#62) * refactor: 페이지 컴포넌트 명 수정 (Topics -> Pins) * refactor: 이모지 오타 수정 * fix: key props 에러 해결 * remove: 스토리북 기본 asset 파일 삭제 * refactor: 스타일드 컴포넌트 CSS 카멜 케이스 prop 에러 해결 * rename: 컴포넌트 디렉토리 위치 변경 * design: 공통 컴포넌트에서 필요없는 속성 제거 * style: TODO 주석 추가 * feat: 페이지 컴포넌트 Route 추가 * rename: 페이지 컴포넌트 및 컴포넌트 명 변경 * [FE]Feat/#64 라우터 지정 및 상태 관리 (#66) * refactor: RouterProvider 정의 및 라우팅 관심사 분리 추가로 index.tsx에 React.StrictMode를 추가한다. * feat: 토픽 카드를 클릭하면 SelectedTopic 페이지로 이동하는 라우팅 기능 추가 * refactor: 버튼 명 변경 (TopicCardButton -> MultiSelectButton) * refactor(Button): as 키워드 대신 타입 명시 변환 * feat(Home): 토픽 추가하기 버튼을 누르면 토픽 추가 페이지로 이동하는 기능 추가 * feat: 사용자가 입력한 토픽 정보를 POST 하고 토픽 선택 페이지로 이동 하는 기능 추가 * style(NewTopic): 스타일 컴포넌트 로직 하단으로 배치 * refactor: Box 컴포넌트 cursor 속성 추가 * feat: 토픽 및 핀 타입 추가 * refactor: 토픽 다중 선택 버튼 수정 및 토픽 클릭 범위 수정 * feat: 핀 추가버튼을 눌렀을 때 핀 추가 페이지로 이동하는 기능 추가 * refactor: Layout 스크롤 가능토록 변경 * feat: 사이드바 확장하여 PinDetail 표시하는 기능 추가 * refactor: 개행 및 불필요한 console.log 제거, catch문 리팩토링 * feat: Logo 컴포넌트 추가 * rename: Layout 디렉토리 위치 변경 * refactor: PinPreview에 cursor pointer 효과 추가 * [FE]Feat/#65 MSW get, post 및 Api 구현 (#67) * feat: msw 토픽 목록 조회 기능 구현 * feat: msw 토픽 디테일 보기 기능 구현 * feat: msw 토픽 생성 기능 구현 * feat: msw 핀 생성 기능 구현 * [BE} 핀 관련 기능 구현 완료 (테스트 제외) #63 (#68) * chore: 초기 환경 설정 * feat: 토픽, 핀에 대한 Entity 및 뼈대코드 작성 Co-authored-by: yoondgu <[email protected]> Co-authored-by: cpot5620 <[email protected]> Co-authored-by: junpakPark <[email protected]> * refactor: Getter 추가 및, Coordinate BaseEntity 상속 제거 Co-authored-by: yoondgu <[email protected]> Co-authored-by: cpot5620 <[email protected]> Co-authored-by: junpakPark <[email protected]> * refactor: 외래키에 Not Null 조건 추가 Co-authored-by: yoondgu <[email protected]> Co-authored-by: cpot5620 <[email protected]> Co-authored-by: junpakPark <[email protected]> * feat: Repository 추가 Co-authored-by: yoondgu <[email protected]> Co-authored-by: cpot5620 <[email protected]> Co-authored-by: junpakPark <[email protected]> * chore: gradlew 업데이트 Co-authored-by: yoondgu <[email protected]> Co-authored-by: cpot5620 <[email protected]> Co-authored-by: junpakPark <[email protected]> * refactor: Entity 구조 변경 Co-authored-by: yoondgu <[email protected]> Co-authored-by: cpot5620 <[email protected]> Co-authored-by: junpakPark <[email protected]> * refactor: Builder 패턴 추가 Co-authored-by: cpot5620 <[email protected]> * refactor: BigDecimal 소수점 범위 변경 Co-authored-by: cpot5620 <[email protected]> * feat: 범위 내 핀 조회 기능 구현 Co-authored-by: cpot5620 <[email protected]> * refactor: Entity 구조 변경 Co-authored-by: cpot5620 <[email protected]> * feat: 좌표간의 거리 계산 기능 구현 Co-authored-by: cpot5620 <[email protected]> * refactor: 생성자 파라미터 변경 Co-authored-by: cpot5620 <[email protected]> * feat: 핀 생성 서비스 구현 [#41] Co-authored-by: cpot5620 <[email protected]> * feat: 핀 생성 API 구현 [#41] Co-authored-by: cpot5620 <[email protected]> * refactor: 좌표간의 거리 계산 로직 변경 Co-authored-by: cpot5620 <[email protected]> * feat: 핀 수정 서비스 구현 [#42] Co-authored-by: cpot5620 <[email protected]> * feat: 핀 수정 API 구현 [#42] Co-authored-by: cpot5620 <[email protected]> * feat: 핀 삭제 서비스 구현 [#43] Co-authored-by: cpot5620 <[email protected]> * feat: 핀 삭제 API 구현 [#43] Co-authored-by: cpot5620 <[email protected]> * feat: 핀 목록 조회 서비스 구현 [#38] Co-authored-by: cpot5620 <[email protected]> * feat: 핀 목록 조회 API 구현 [#38] Co-authored-by: cpot5620 <[email protected]> * feat: 핀 상세 조회 서비스 구현 [#40] Co-authored-by: cpot5620 <[email protected]> * feat: 핀 상세 조회 API 구현 [#40] Co-authored-by: cpot5620 <[email protected]> * fix: 핀 삭제 로직 오류 수정 [#43] Co-authored-by: cpot5620 <[email protected]> * rename: PinRepositoryTest -> LocationRepositoryTest Co-authored-by: cpot5620 <[email protected]> --------- Co-authored-by: yoondgu <[email protected]> Co-authored-by: cpot5620 <[email protected]> Co-authored-by: junpakPark <[email protected]> * [BE] 토픽 관련 기능 구현 (#69) * feat: 새로운 토픽 생성 기능 구현 Co-authored-by: yoondgu <[email protected]> * feat: 토픽 병합 기능 구현 Co-authored-by: yoondgu <[email protected]> * refactor: Location, Pin 불필요한 테이블 분리 병합 Co-authored-by: yoondgu <[email protected]> * feat: Topic 수정 및 삭제 기능 구현 Co-authored-by: yoondgu <[email protected]> * feat: Topic 목록 조회 및 상세 조회 기능 구현 Co-authored-by: yoondgu <[email protected]> * feat: Coordinate의 위,경도가 대한민국 내에 있는 지 검증 기능 구현 Co-authored-by: yoondgu <[email protected]> * feat: Coordinate의 위,경도가 대한민국 내에 있는 지 검증 기능 구현 Co-authored-by: yoondgu <[email protected]> * refactor: 핀 생성 및 복제 시 연관관계 편의 메서드 사용 Co-authored-by: yoondgu <[email protected]> * test: 테스트 데이터 추가 및 테스트 코드 리팩터링 Co-authored-by: yoondgu <[email protected]> * style: 코드 컨벤션 통일을 위한 final 키워드 삭제 Co-authored-by: yoondgu <[email protected]> * refactor: 토픽 삭제 soft delete로 변경 Co-authored-by: yoondgu <[email protected]> * chore: DB 환경설정 파일 변경 - SpringBoot 버전 이슈로 인한 data.sql 실행 오류 발생 - 이에 대한 환경 설정 파일 변경 Co-authored-by: yoondgu <[email protected]> * refactor: 토픽에 대한 모든 핀 삭제 기능 변경 - 쿼리 실행 성능 개선을 위해 JPQL 적용 Co-authored-by: yoondgu <[email protected]> * refactor: 코드 컨벤션 정리 및 테스트 케이스 리팩터 Co-authored-by: yoondgu <[email protected]> Co-authored-by: cpot5620 <[email protected]> Co-authored-by: kpeel5839 <[email protected]> --------- Co-authored-by: yoondgu <[email protected]> Co-authored-by: cpot5620 <[email protected]> Co-authored-by: kpeel5839 <[email protected]> * [FE]Refactor/#70 MSW 및 기능 머지 후 싱크 작업 (#71) * refactor: 토픽 카드 Props 명 수정 및 Type 분리 * fix: 새로운 토픽 생성 시 navigate 오류 해결 * refactor: 오타 일괄 수정 * style: 들여쓰기 및 공백 수정 * refactor: 핀 추가 시 쿼리스트링 수정 * refactor: NewPin 컴포넌트 라우터 설정 및 이벤트 핸들러 수정 * refactor: 목 데이터를 JSON에서 자바스크립트 형식으로 변경 * refactor: 사용자가 입력한 값으로 토픽 생성하도록 변경 * style: trailing comma 설정 문제 해결 * refactor: 사용자가 입력한 값으로 핀을 추가하도록 변경 * refactor: PinType updatedAt 속성 추가 * refactor: 핀 ID에 맞게 PinDetail 페이지를 출력하도록 수정 * refactor: MockData 추가 및 핸들러 로직 일부 수정 * test: 공통 컴포넌트 스토리북 구현 (#73) * [BE] 현재 위치 인기 토픽 조회 기능 구현 (#74) * feat: Topic validate 추가 Co-authored-by: yoondgu <[email protected]> * feat: Topic soft Delete 기능 구현 Co-authored-by: yoondgu <[email protected]> * feat: Topic 및 TopicCommandService validation 추가 Co-authored-by: yoondgu <[email protected]> * feat: 현재 위치 인기 토픽 조회 기능 구현 Co-authored-by: yoondgu <[email protected]> * test: 테스트 data.sql 대신 픽스쳐 사용으로 변경 - 쉬운 테스트 격리를 위한 픽스쳐 적용 Co-authored-by: junpakPark <[email protected]> * test: data.sql 파일명 변경으로 도메인 간 테스트 격리 Co-authored-by: junpakPark <[email protected]> --------- Co-authored-by: yoondgu <[email protected]> Co-authored-by: yoondgu <[email protected]> * [BE] 핀 기능 관련 테스트 구현 (#75) * chore: 초기 환경 설정 * feat: 토픽, 핀에 대한 Entity 및 뼈대코드 작성 Co-authored-by: yoondgu <[email protected]> Co-authored-by: cpot5620 <[email protected]> Co-authored-by: junpakPark <[email protected]> * refactor: Getter 추가 및, Coordinate BaseEntity 상속 제거 Co-authored-by: yoondgu <[email protected]> Co-authored-by: cpot5620 <[email protected]> Co-authored-by: junpakPark <[email protected]> * refactor: 외래키에 Not Null 조건 추가 Co-authored-by: yoondgu <[email protected]> Co-authored-by: cpot5620 <[email protected]> Co-authored-by: junpakPark <[email protected]> * feat: Repository 추가 Co-authored-by: yoondgu <[email protected]> Co-authored-by: cpot5620 <[email protected]> Co-authored-by: junpakPark <[email protected]> * chore: gradlew 업데이트 Co-authored-by: yoondgu <[email protected]> Co-authored-by: cpot5620 <[email protected]> Co-authored-by: junpakPark <[email protected]> * refactor: Entity 구조 변경 Co-authored-by: yoondgu <[email protected]> Co-authored-by: cpot5620 <[email protected]> Co-authored-by: junpakPark <[email protected]> * test: PinRepository 테스트 구현 Co-authored-by: kpeel5839 <[email protected]> * refactor: 디미터 법칙 적용 Co-authored-by: kpeel5839 <[email protected]> * refactor: PinCreateRequest 변수 순서 변경 Co-authored-by: kpeel5839 <[email protected]> * test: PinService 핀 생성 테스트 구현 Co-authored-by: kpeel5839 <[email protected]> * test: PinService 핀 수정 및 삭제 테스트 구현 Co-authored-by: kpeel5839 <[email protected]> * refactor: 개행 조정 및 접근 제어자 조정 * test: 핀 목록 조회 서비스 기능 테스트 * test: 핀 단일 조회 서비스 테스트 * test: Pin Entity Validation 테스트 --------- Co-authored-by: jaeyeon kim <[email protected]> Co-authored-by: yoondgu <[email protected]> Co-authored-by: junpakPark <[email protected]> Co-authored-by: kpeel5839 <[email protected]> * chore: 불필요 파일 제거 * [FE]Feat/#77 핀 디테일 수정하기 페이지 구현 (#78) * feat: 핀 상세보기 수정 기능 구현 * fix: msw 에러 해결 * chore: msw 다운그레이드 적용 * refactor: PinDetail 수정하기 UI 변경 * Fix: emoji 아이콘 선택시 발생했던 에러 해결 * refactor: 불필요한 console 코드 삭제 --------- Co-authored-by: Patrick <[email protected]> * feat: cors를 위한 WebMvcConfig 구현 (#80) Co-authored-by: cpot5620 <[email protected]> * [BE] 핀 생성 요청 DTO 수정 (#93) * refactor: Coordinate 정적팩토리 메서드 추가 * refactor: PinCreateRequest 요청 타입 수정 * [BE] RestDocs API 문서화 (#91) * feat: rest docs 를 이용한 문서화 Co-authored-by: yoondgu <[email protected]> * feat: rest docs를 이용한 ControllerTest Co-authored-by: yoondgu <[email protected]> * docs: adoc toc 추가 및 문서 정렬 Co-authored-by: yoondgu <[email protected]> --------- Co-authored-by: yoondgu <[email protected]> * refactor: PinCreateRequest 변경에 따른 테스트 코드 수정 (#94) * [BE] Controller RequestBody 누락으로 인한 코드 수정 (#96) * [Docs] GitHub Issue 및 PR Template 설정 (#37) * chore: .gitignore 추가 * chore: GitHub PR 및 Issue Template * Revert "chore: GitHub PR 및 Issue Template" This reverts commit 65915f72740bbf22899ef7ac52fefa99cde96a8b. * Revert "chore: .gitignore 추가" This reverts commit 1e1865a1cb7f0a279b4e74c12cd0f66631809ff3. * chore: .gitignore 추가 * chore: GitHub Issue 및 PR Template 추가 * [Docs] GitHub Issue Template 파일명 오류 수정 (#39) * chore: .gitignore 추가 * chore: GitHub PR 및 Issue Template * Revert "chore: GitHub PR 및 Issue Template" This reverts commit 65915f72740bbf22899ef7ac52fefa99cde96a8b. * Revert "chore: .gitignore 추가" This reverts commit 1e1865a1cb7f0a279b4e74c12cd0f66631809ff3. * chore: .gitignore 추가 * chore: GitHub Issue 및 PR Template 추가 * chore: GitHub Issue 및 PR Template 추가 * fix: Controller RequestBody 추가 --------- Co-authored-by: 준팍(junpak) <[email protected]> * feat: 시맨틱 태그 적용 (#98) * [FE]Test/#102 공통 컴포넌트 이외의 컴포넌트 스토리북 코드 작성 (#103) * chore: 프로젝트 환경에 맞게 스토리북 세팅 * test: 공통 컴포넌트를 조합한 컴포넌트 스토리북 코드 작성 * test: 페이지 단위 스토리북 코드 작성 * [FE]Refactor/#104 스프린트 2 이후 전반적인 코드 리팩토링 (#105) * refactor: 검색창 input에 placeholder 추가 * refactor: overflow 속성을 scroll에서 auto로 변경 윈도우 OS 에서 scroll 속성은 내용이 overflow 되지 않아도 기본값으로 가로 및 세로에 모든 스크롤이 기본으로 생긴다. 맥 OS 에서 scroll 기본 값은 overflow 되었을 때만이다. 즉 OS간 보이는 화면이 다르므로 auto 속성으로 변경한다. * refactor: useNavigator hook 으로 분리 및 재사용 * design: 중복 태그 제거와 CSS 값 수정 및 잘못된 레이아웃 수정 * refactor: PinDetail 페이지에서 Update 관련 로직 분리 UpdatedPinDetail 페이지 컴포넌트로 분리한다. * refactor: 코드 컨벤션에 따라 이벤트 헨들러 메서드 명 수정 * refactor: form 제어 방식 변경 및 중복 코드 제거 onChangeInput 메서드 방식으로 일괄 수정한다. * refactor: 중복되는 타입을 타입 파일로 분리 * refactor: form 값 제어 중복 로직 useFormValues 훅으로 분리 * rename: useNavigator 잘못된 확장자 명 변경 * refactor: 가독성을 위한 변수명 수정 및 불필요한 로직 제거 * design: 디자인 시안과 다른 부분 수정 * feat: 깃허브 액션 설정 (#108) * [BE] API 명세 수정에 따른 Image 구현 (#110) * [Docs] GitHub Issue 및 PR Template 설정 (#37) * chore: .gitignore 추가 * chore: GitHub PR 및 Issue Template * Revert "chore: GitHub PR 및 Issue Template" This reverts commit 65915f72740bbf22899ef7ac52fefa99cde96a8b. * Revert "chore: .gitignore 추가" This reverts commit 1e1865a1cb7f0a279b4e74c12cd0f66631809ff3. * chore: .gitignore 추가 * chore: GitHub Issue 및 PR Template 추가 * [Docs] GitHub Issue Template 파일명 오류 수정 (#39) * chore: .gitignore 추가 * chore: GitHub PR 및 Issue Template * Revert "chore: GitHub PR 및 Issue Template" This reverts commit 65915f72740bbf22899ef7ac52fefa99cde96a8b. * Revert "chore: .gitignore 추가" This reverts commit 1e1865a1cb7f0a279b4e74c12cd0f66631809ff3. * chore: .gitignore 추가 * chore: GitHub Issue 및 PR Template 추가 * chore: GitHub Issue 및 PR Template 추가 * feat: Topic Image 추가 * refactor: Topic 에 Image 컬럼 추가로 인한 RestDocs 수정 * feat: PinImage 추가 * test: PinController 테스트 구현 (#101) * refactor: PinImage 추가에 따른 dto 수정 * test: 테스트 격리를 위한 sql 작성 --------- Co-authored-by: 준팍(junpak) <[email protected]> Co-authored-by: jaeyeon kim <[email protected]> * [BE] 핀 관련 기능 코드 리팩토링 #90 (#106) * refactor: PinCreateRequest 변경에 따른 테스트 코드 수정 * refactor: Coordinate 매직 넘버 제거 및 메서드 분리(#84) * test: Coordinate 테스트 중첩 클래스 제거(#84) * style: LocationRepository 테스트 개행 수정 (#85) * style: Coordinate 개행 추가 (#84) * refactor: Pin 불필요한 `this` 키워드 제거 (#86) * refactor: PinService 주석 제거 및 메서드 분리 (#87) * refactor: PinController 변수 분리 (#88) * test: Pin 관련 테스트 개행 및 메서드 순서 변경 (#89) * refactor: 가독성을 위한 메서드명 변경 (duplicate -> copy) * refactor: 메서드명 변경 (From -> from) * refactor: 상수 접근 제어자 변경 * test: 좌표 거리 계산 테스트 ParameterizedTest 적용 * style: import * 제거 * test: 검증 테스트 메서드 명 수정 * chore: conflict 해결 * [BE] API 명세 수정에 따른 Image 구현 - 토픽 수정 관련 누락 보완 (#112) * remove: 사용하지 않는 토픽 수정 DTO 삭제 * feat: Topic 수정 로직 및 테스트에 image 필드 추가 반영 * feat: workflows CD 추가 (#120) * refactor: Location Header 접근 허용 설정 (#114) * [FE]Refactor/#109 수정된 API 명세 맞추기 및 백엔드와 연결 (#115) * refactor: 바뀐 api 명세로 코드 수정 * refactor: msw 연결을 백엔드와 연결하도록 코드 수정 * refactor: env파일 end of line 추가 * [BE] Github Action workflows CD refactoring (#122) * feat: workflows CD 추가 * refactor: 빌드 옵션 변경 및 주석 제거 * refactor: 빌드 결과물 파일명 변경 * refactor: 빌드 옵션 변경 (bootJar -> build) * refactor: worflows 파일 분리 (PR) * refactor: worflows 파일 분리 (CI/CD) * refactor: workflows CI/CD 동작 옵션 수정 * feat: 개발 서버 배포 자동화 쉘 스크립트 작성 (#130) * [BE] 개발서버 DB H2에서 MySQL로 이관 (#132) * feat: 개발 서버 구성 파일 작성 * feat: 개발 서버 구성 파일 DDL-auto 옵션 변경 * [FE] Feature/#116 토픽 및 핀 병합할 때 태그 추가되는 기능 구현 (#128) * feat: tag, 병합 및 같이보기 컴포넌트 생성 * feat: 토픽이나 핀 카드에서 버튼 클릭 시 태그 추가되거나 삭제되는 기능 구현 * refactor: tag가 없을 때 early return 하도록 수정 * refactor: tag의 padding값을 space 값으로 삽입 * refactor: selectedTopic에서 삼항연산자를 early return으로 변경 * refactor: early return 조건값 변경 * [FE] Feature/#129 토픽, 핀 병합 및 같이보기 기능 구현 (#137) * feat: tag, 병합 및 같이보기 컴포넌트 생성 * feat: 토픽이나 핀 카드에서 버튼 클릭 시 태그 추가되거나 삭제되는 기능 구현 * feat: 같이보기 및 병합 기능 구현 * feat: context api를 이용해 전역변수 사용 * refactor: api 명세에 맞게 type 변경 * refactor: navigator에 값을 보내도록 수정 * refactor: 서버와 통신하기 위해 base url을 서버 url로 변경 * [FE] 지도 UI 적용 (#138) * feat: tmap 지도 ui 추가 * feat: map 레이아웃 수정 및 에러 수정 * chore: tmap api 버전 변경 * chore: webpack 개발 환경 설정 변경 * refactor: Map 컴포넌트 렌더링 로직 변경 * feat: 토픽 클릭 시 지도 핀 변경 기능 구현 * refactor: context Api 적용 선택된 토픽 핀 표시 * feat: 선택한 토픽 기준으로 지도 표시 범위 이동 * feat: 특정 핀 클릭 이벤트 추가 * feat: 현재 클릭한 핀 애니메이션 적용 * feat: tag 표시 변경 * feat: 지도 클릭시 도로명 주소 가져오기 * feat: 핀 추가하기 페이지로 이동 시 애니메이션 제거 * refactor: 마커 애니메션 제거 로직 위치 변경 * feat: 선택한 좌표 핀 생성시 input에 적용 * feat: 현재 클릭된 마커 표시 기능 구현 * feat: daum post api 적용 * [FE]Refactor/#139 머지 후 싱크 및 에러 해결 작업 (#140) * feat: get fetch api 추가 및 적용 * refactor: 생략된 코드 추가 및 필요없는 코드 삭제 * [BE] 개발 및 운영 서버 구성 파일 및 CI/CD 설정 분리 (#135) * docs: merge workflow 개발서버 전용으로 변경 * �운영 서버 전용 merge workflow 작성.yml * docs: pull-request workflow 운영 브랜치에도 적용 * feat: 운영 서버 구성 파일 작성 * rename: 백엔드 CI/CD workflow 분리를 위한 파일명 변경 * refactor: 백엔드 workflow name 수정, 배포스크립트 경로 수정 - CI, CD workflow가 분리되어있으므로 name을 수정함 - 배포 스크립트 경로 프론트엔드와 백엔드 통일 * [�FE] 프론트엔드 Github Action workflows CD 추가 (#136) * feat: 프론트엔드 CI/CD workflow 파일 작성 * feat: 프론트엔드 CI/CD workflow 파일 수정 - 빌드 권한 부여 * refactor: Artifact 업로드 파일 수정 * refactor: 업로드 및 다운로드 파일 경로 수정 * refactor: 업로드 및 다운로드 파일 경로 수정 * rename: workflow name 수정 - 현재 테스트 실행하지 않으므로 CI/CD가 아닌 CD로 이름 변경 --------- Co-authored-by: zun <[email protected]> * [BE] Truncate 를 위한 DatabaseCleanup 구현 (#118) * [Docs] GitHub Issue 및 PR Template 설정 (#37) * chore: .gitignore 추가 * chore: GitHub PR 및 Issue Template * Revert "chore: GitHub PR 및 Issue Template" This reverts commit 65915f72740bbf22899ef7ac52fefa99cde96a8b. * Revert "chore: .gitignore 추가" This reverts commit 1e1865a1cb7f0a279b4e74c12cd0f66631809ff3. * chore: .gitignore 추가 * chore: GitHub Issue 및 PR Template 추가 * [Docs] GitHub Issue Template 파일명 오류 수정 (#39) * chore: .gitignore 추가 * chore: GitHub PR 및 Issue Template * Revert "chore: GitHub PR 및 Issue Template" This reverts commit 65915f72740bbf22899ef7ac52fefa99cde96a8b. * Revert "chore: .gitignore 추가" This reverts commit 1e1865a1cb7f0a279b4e74c12cd0f66631809ff3. * chore: .gitignore 추가 * chore: GitHub Issue 및 PR Template 추가 * chore: GitHub Issue 및 PR Template 추가 * test : Database Truncate 위한 DatabaseCleanup 구현 * style : 코드 컨벤션으로 인한 개행 추가 * refactor : @Service -> @Component 및 guava 의존성 제거 * fix: guava import 문 제거 * refactor: 메서드, 변수 분리 * refactor: disable/enable Referential query 상수로 변환 --------- Co-authored-by: 준팍(junpak) <[email protected]> * feat: topicId 배열로 get 요청 시, 해당 토픽들 상세 조회 API 구현 (#142) * [FE]Refactor/#143 토픽 같이보기 기능 추가된 명세에 맞게 수정 및 context 코드 변경 (#144) * refactor: 필요없는 context api 삭제 * refactor: context 초기값 위치 변경 * refactor: 같이보기 기능 명세대로 get 요청 url 수정 * refactor: coordinate.id 타입 string으로 변경 * refactor: event에 element 추가 * refactor: 구조할당으로 변경 * refactor: 프론트 workflows 수정 (#146) * refactor: 토픽 카드에 이미지 적용 및 blur처리 (#148) * [FE] CI/CD workflows 코드 재수정 (#149) * refactor: 프론트 workflows 수정 * refactor: 프론트 workflows 수정(cache 적용) * Revert "refactor: 토픽 카드에 이미지 적용 및 blur처리 (#148)" (#150) This reverts commit a22bf36ecd1146975efb3c3d5c5ce929b5abe837. * Revert "[FE] CI/CD workflows 코드 재수정 (#149)" (#152) This reverts commit eadeac78e3c3741a2a6e4ec648bd8f13d026edbd. * Revert "[FE] CI/CD workflows 코드 재수정 (#149)" (#153) This reverts commit eadeac78e3c3741a2a6e4ec648bd8f13d026edbd. * refactor: 토픽 카드에 이미지 적용 및 blur처리 구현 (#154) * Revert "Revert "[FE] CI/CD workflows 코드 재수정 (#149)" (#153)" (#155) This reverts commit b26e127d194736c4e57cd435c14c6f263f79ff6e. * [FE] CICD 코드 working directory 수정 (#156) * refactor: 프론트 workflows 수정 * refactor: 프론트 workflows 수정(cache 적용) * refactor: 프론트 workflows 수정(working directory 수정) * Revert "refactor: 토픽 카드에 이미지 적용 및 blur처리 구현 (#154)" (#158) This reverts commit b3d4aed7fa8a8e7e86dddb6c9633aa62d6d664c2. * refactor: 토픽 카드 이미지 적용 및 blur 처리 구현 (#159) * [FE] CI/CD workflows 코드 수정 (#160) * refactor: 프론트 workflows 수정 * refactor: 프론트 workflows 수정(cache 적용) * refactor: 프론트 workflows 수정(working directory 수정) * refactor: 프론트 workflows 수정(npm 권한 삭제) * Revert "refactor: 토픽 카드 이미지 적용 및 blur 처리 구현 (#159)" (#162) This reverts commit ee755edb66365eca452da8b53c204a7d2b2c464f. * feat: 토픽 카드 이미지 적용 및 blur처리 구현 (#163) * Revert "feat: 토픽 카드 이미지 적용 및 blur처리 구현 (#163)" (#164) This reverts commit 34bd8a44f0df59eefaa3f1ef1ea3897a645454b6. * [FE] CI/CD workflows 코드 수정 (#165) * refactor: 프론트 workflows 수정 * refactor: 프론트 workflows 수정(cache 적용) * refactor: 프론트 workflows 수정(working directory 수정) * refactor: 프론트 workflows 수정(npm 권한 삭제) * refactor: 프론트 workflows 수정(브랜치 범위 변경) * refactor: 프론트 workflows 수정(배포 코드 수정) * refactor: 토픽 카드에 이미지 추가 및 blur 처리 구현 (#166) * fix: CORS 허용 Origin에 개발서버, 운영서버 도메인 추가 (#171) * fix: CORS 허용 여러 Origin 모두 설정하도록 수정 (#174) * [FE] Refactor/#168 전반적인 레이아웃 및 UI 오류 수정 (#179) * refactor: 피그마 시안과 맞지 않는 UI 수정 * refactor: 레이아웃 컴포넌트 오류 (width) 수정 , 스크롤 위치 수정 * refactor: PinPreview 체크 박스 클릭 이벤트 오류 수정 * refactor: 핀 링크 공유 버튼 클릭 시 alert 표시하기 * refactor: prettier 적용 * [FE]Refactor/#169 불필요한 코드, 컨텍스트 제거 (#178) * refactor: tagId Context 제거 후 Router state로 대체 * refactor: 불필요한 import 제거 * fix: li 태그 내부 li 태그 오류 수정 * [FE]Fix/#167 전반적인 지도 오류 수정 및 개선 (#181) * refactor: 선택된 마커 애니메이션 변경 * fix: 핀 클릭 시 중복 생성 에러 해결 * feat: 같이 보기 기능 각 토픽 별 마커 구분 기능 구현 * fix: 마커 변경 * [FE]Refactor/#145 UI 조정 및 머지 후 자잘한 오류 수정 (#183) * fix: 지도를 클릭하여 핀 추가 시 주소 정보가 입력되지 않던 오류 수정 * refactor: 핀 미리보기 상세내용을 3줄까지만 보여주고 ellipsis 하도록 변경 * refactor: PinDetail 페이지 및 PinPreview space 수정 * refactor: 전반적인 space 수정 및 임시 토픽 생성자명 수정 * refactor: 토픽카드 띠 어둡게 처리하여 가독성 개선 * design: 태그 컴포넌트 크기 및 글자크기 조정 * refactor: 확인 버튼 우측으로 이동 및 기본 이미지 삽입 * refactor: 핀 수정하기 페이지 저장 버튼 우측으로 이동 * feat: 각 첫 input 태그에 autoFocus 기능 추가 * refactor: 핀 주소 입력시 keyDown 이벤트를 감지하여 검색창 띄울 수 있도록 변경 * refactor: tabIndex 적용하여 우측 확인버튼 선택 편리성 고려 * refactor: 토픽 공유 기능 추가 및 불필요한 코드 제거 * refactor: 불필요한 import 제거 * refactor: 토픽 추가하기 버튼 포지션 조정 * refactor: 토픽 카드 그림자 추가 및 띠 투명도 조절 * rename: Tag 디렉토리 위치 변경 * refactor: 링크 복사 alert 메세지 수정 * design: 불필요한 코드 제거 * design: 피그마 시안과 맞지 않는 부분 수정 * fix: 같이보기 취소 시에 체크 박스가 해제되지 않던 오류 수정 * refactor: 사용하지 않는 함수 제거 및 멘트 수정 * design: 누락된 height 값 추가 및 클릭 영역 확대 * design: 대체 이미지 기능 구현 및 여백 수정 * [FE]Refactor/#186 map api 리팩토링 (#187) * refactor: 맵 클릭 이벤트 분리 * refactor: 클릭한 위치 관련 관심사 분리 * refactor: 마커 업데이트 로직 관심사 분리 * refactor: 불필요한 의존성 제거 * refactor: 지도 위 마커 적용 로직 분리 * refactor: 도로명 주소 가져오는 로직 분리 * refactor: 불필요한 코드 제거 * feat: pin 이미지 변경 * fix: 초기 핀 생성 에러 수정 * refactor: 보여지는 마커 변경하는 로직 수정 * refactor: 핀 클릭 시 로직 수정 * Merge branch 'develop' of https://github.com/woowacourse-teams/2023-map-befine into refactor/map-api * feat: 토픽 같이 보기 기능 웹 접근성 개선 (#188) * refactor: 핀 관련 에러 수정 (#190) * fix: 같이보기 상태에서 핀 추가시 발생하는 오류 수정 (#192) 1. 토픽이 undefined로 잡히던 오류를 수정한다. 2. 토픽이 오름차순으로 정렬되어 체크박스로 선택한 순서와 화면에 보이는 토픽의 순서가 다른 문제를 해결한다. 3. 핀을 추가한 후에 해당 핀 페이지로 이동하던 오류를 수정한다. 따라서 이전의 같이보기 페이지로 이동한다. * fix: 같이 보기에서 핀 클릭 시 같이 보기가 풀리는 오류 수정 (#193) * fix: 핀 색깔 마지막 타입 에러 수정 (#195) * refactor: 줌 레벨 및 애니메이션 수정 (#197) * [FE]Test/#185 useFormValues 커스텀 훅 테스트 (#198) * chore: testing library 세팅 초기화 (임시) * chore: testing library 세팅 완료 * test: useFormValues 훅 테스트 * test: 불필요한 테스트 코드 제거 * chore: 잘못된 의존성 설치 수정 * [FE]Feature/#184 웹 접근성 개선 (#199) * feat: 웹 접근성 input enter 추가 * refactor: 웹 접근성 적용 안된 부분 적용 * refactor: 토픽 인기 목록에 tab index 추가 * [FE]Feature/#205 Toast 컴포넌트 구현 및 기존 alert 대체 (#206) * feat: Toast 컴포넌트 구현 및 기존 alert 대체 * feat: 토픽 생성, 병합 또는 핀 생성, 뽑아오기 시 토스트 알림 적용 * refactor: 사용하지 않는 변수 _ 처리 * refactor: React. 대신 구조분해 할당으로 import * [FE]Refactor/#207 전반적인 코드 리팩토링 및 추상화 (#208) * rename: api 관련 디렉토리 폴더명 변경 * rename: 상수 폴더명 변경 (const -> constants) * refactor: getApi 중복 로직 제거 및 적용 * refactor: Text 컴포넌트 불필요한 interface 제거 * refactor: Input 컴포넌트 불필요한 속성 제거 및 GlobalStyles로 분리 * style: Textarea 컴포넌트 고정 속성 상위 배치 * style: Button 컴포넌트 고정 속성 상위 배치 * style: Flex 컴포넌트 스타일 선언 방식 일괄 수정 * refactor: Box 컴포넌트 불필요한 interface 제거 및 Image 컴포넌트로 분리 이미지와 관련된 로직은 Image 컴포넌트로 위임한다. * refactor: 잘못된 type 선언 방식 수정 (type -> interface) * refactor: Tag 컴포넌트 리액트 컴포넌트로 변경 * rename: Map 컴포넌트 디렉토리 변경 * refactor: Tag 컴포넌트에 tabIndex 속성 부여 * refactor: isCollapsed DOM 에러 대응 * refactor: 잘못된 스타일드 컴포넌트 명 수정 * design: pinDetail 스크롤 기능 추가 * refactor: Space 컴포넌트가 부모 크기에 의해 사이즈가 변경되는 오류 수정 * [BE] Location 패키지 코드 리팩터링 (#182) * [Docs] GitHub Issue 및 PR Template 설정 (#37) * chore: .gitignore 추가 * chore: GitHub PR 및 Issue Template * Revert "chore: GitHub PR 및 Issue Template" This reverts commit 65915f72740bbf22899ef7ac52fefa99cde96a8b. * Revert "chore: .gitignore 추가" This reverts commit 1e1865a1cb7f0a279b4e74c12cd0f66631809ff3. * chore: .gitignore 추가 * chore: GitHub Issue 및 PR Template 추가 * [Docs] GitHub Issue Template 파일명 오류 수정 (#39) * chore: .gitignore 추가 * chore: GitHub PR 및 Issue Template * Revert "chore: GitHub PR 및 Issue Template" This reverts commit 65915f72740bbf22899ef7ac52fefa99cde96a8b. * Revert "chore: .gitignore 추가" This reverts commit 1e1865a1cb7f0a279b4e74c12cd0f66631809ff3. * chore: .gitignore 추가 * chore: GitHub Issue 및 PR Template 추가 * chore: GitHub Issue 및 PR Template 추가 * feat: member 구현 중 Co-authored-by: jaeyeon kim <[email protected]> * feat: 패키지 분리, AuthMember 구현 Co-authored-by: jaeyeon kim <[email protected]> * feat: MemberArgumentResolver 구현 * feat: AuthTopic 구현 * refactor: API 명세 수정을 위한 임의 커밋 Co-authored-by: jaeyeon kim <[email protected]> * feat: Publicity, Permission 정적 팩토리 및 Converter 추가 * refactor: Topic 에 Publicity, Permission 추가로 인한 테스트 수정 * refactor: 모든 테스트가 통과하도록 수정 * refactor: 모든 테스트가 통과하도록 수정 * feat: Topic 에 관한 CRUD 에 권한 적용 완료 * fix: Converter 반환값 이상으로 인한 오류 해결 * feat: Pin 기능에 권한 설정 추가 * style: 사용하지 않는 import 문 제거 및 접근 제어자 조정 * refactor: .. 지송;;^^ - 패키지 재분배 - AUTH 관련 기능 구현 - TopicController 및 LocationController 분리 Co-authored-by: jaeyeon kim <[email protected]> * refactor: TopicStatus 로직 오류 수정 LocationController 오타 수정 * refactor: 불필요 상수 제거 * refactor: PinResponse 자료형 변경 * feat: Image 클래스 구현 * feat: LocationRepository에 하버사인을 이용한 find 메서드 구현 * refactor: LocationController의 메서드명 변경 * refactor: getTopicsWithPermission의 반환값 변경 * style: 불필요 공백 제거 * refactor: 로직 오류 수정 및 테스트 추가 * test: Topic 패키지 테스트 추가 * refactor: Auth 관련 리팩터링 및 TopicIntegrationTest * refactor: auth 어노테이션 제거 * test: AddressTest 추가 * test: Pin 관련 테스트 추가 * refactor: Coordinate BigDecimal -> Double 로 수정 * refactor: 모든 테스트가 성공하도록 수정 * refactor: LocationRepositoryTest 수정 * refactor: 핀 위치 중복 처리 조회 쿼리 변경 * test: Address 테스트 추가 * refactor: Coordinate 불필요 상수 정리 및 테스트 추가 * refactor: Location 불필요 메서드 정리 및 테스트 추가 * refactor: LocationRepository 불필요 메서드 정리 및 테스트 코드 리팩터링 * refactor: LocationQueryService 메서드 네이밍 수정 및 상수 추가 * test: LocationFixture 작성 및 적용 * refactor: LocationQueryService 및 테스트 리팩터링 * refactor: AuthTopic 객체 제거 * refactor: 오타 수정 및 불필요 메서드 제거 * refactor: git conflict 해결 * style: 불필요 공백 및 import 구문 삭제 * refactor: RestDocs를 위한 Interceptor 조건문 추가 * test: LocationControllerTest 추가 * test: LocationIntegrationTest 추가 * chore: 패키지 네이밍 오타 수정 * refactor: 상수화 및 메서드 분리 * refactor: 불필요 메서드 삭제 * style: 컨벤션 준수 * refactor: URI의 자원 표기 복수형으로 수정 및 불필요 상수 제거 * style: 네이밍 변경 및 공백 추가 * test: authHeader 생성 로직 수정 * refactor: requestBody를 requestParam으로 수정 및 컨벤션 통일 --------- Co-authored-by: jaeyeon kim <[email protected]> Co-authored-by: yoondgu <[email protected]> * refactor: 지도 버전을 변경한다. (#242) * [FE] Refactor/#241 PinDetail 페이지 UI 및 관련 로직 수정, 공용 모달 구현 (#244) * feat: 공용 모달 context 생성 * feat: PinDetail UI 변경 및 모달 추가 * refactor: ModalPortal props 이름 변경 * refactor: 수정하기 기능 수정하기 버튼에 적용 * [FE] Refactor/#245 하단 바 및 선택된 토픽 UI 수정 (#246) * feat: 하단 바 구현 * feat: 바뀐 UI 적용 * refactor: 하단 바 색깔 변경 * [FE]Feature/#236 홈 UI 재배치 및 같이보기 페이지 구현 (#243) * design: 스프린트 4 피그마 시안에 맞게 UI 배치 변경 * refactor: 컴포넌트 레이어 분리 * refactor: 컴포넌트 명을 파일 명과 동일시 변경 * feat: Layout Width 컨텍스트 생성 및 적용 * refactor: 사이드바 확장 기능 보류 (관심사 분리 차원) * feat: TopicCard 컴포넌트의 형태를 두 가지로 구현 * feat: 주제와 관련된 토픽 별로 전체보기 기능 추가 * fix: horizontal router 기능 누락 및 오류 수정 * feat: 모아 보기 기능 및 버튼 추가 * refactor: 토픽 모양을 결정하는 prop명 변경 * refactor: 모아보기 컴포넌트 버튼으로 변경 및 위치 조정 * feat: 각 토픽 컨테이너의 설명문 추가 * fix: 머지 과정에서 누락된 import 추가 (#247) * [BE] Member 관련 기능 개발 (#237) * [Docs] GitHub Issue 및 PR Template 설정 (#37) * chore: .gitignore 추가 * chore: GitHub PR 및 Issue Template * Revert "chore: GitHub PR 및 Issue Template" This reverts commit 65915f72740bbf22899ef7ac52fefa99cde96a8b. * Revert "chore: .gitignore 추가" This reverts commit 1e1865a1cb7f0a279b4e74c12cd0f66631809ff3. * chore: .gitignore 추가 * chore: GitHub Issue 및 PR Template 추가 * [Docs] GitHub Issue Template 파일명 오류 수정 (#39) * chore: .gitignore 추가 * chore: GitHub PR 및 Issue Template * Revert "chore: GitHub PR 및 Issue Template" This reverts commit 65915f72740bbf22899ef7ac52fefa99cde96a8b. * Revert "chore: .gitignore 추가" This reverts commit 1e1865a1cb7f0a279b4e74c12cd0f66631809ff3. * chore: .gitignore 추가 * chore: GitHub Issue 및 PR Template 추가 * chore: GitHub Issue 및 PR Template 추가 * feat: member 구현 중 Co-authored-by: jaeyeon kim <[email protected]> * feat: 패키지 분리, AuthMember 구현 Co-authored-by: jaeyeon kim <[email protected]> * feat: MemberArgumentResolver 구현 * feat: AuthTopic 구현 * refactor: API 명세 수정을 위한 임의 커밋 Co-authored-by: jaeyeon kim <[email protected]> * feat: Publicity, Permission 정적 팩토리 및 Converter 추가 * refactor: Topic 에 Publicity, Permission 추가로 인한 테스트 수정 * refactor: 모든 테스트가 통과하도록 수정 * refactor: 모든 테스트가 통과하도록 수정 * feat: Topic 에 관한 CRUD 에 권한 적용 완료 * fix: Converter 반환값 이상으로 인한 오류 해결 * feat: Pin 기능에 권한 설정 추가 * style: 사용하지 않는 import 문 제거 및 접근 제어자 조정 * refactor: .. 지송;;^^ - 패키지 재분배 - AUTH 관련 기능 구현 - TopicController 및 LocationController 분리 Co-authored-by: jaeyeon kim <[email protected]> * refactor: TopicStatus 로직 오류 수정 LocationController 오타 수정 * refactor: 불필요 상수 제거 * refactor: PinResponse 자료형 변경 * feat: Image 클래스 구현 * feat: LocationRepository에 하버사인을 이용한 find 메서드 구현 * refactor: LocationController의 메서드명 변경 * refactor: getTopicsWithPermission의 반환값 변경 * style: 불필요 공백 제거 * refactor: 로직 오류 수정 및 테스트 추가 * test: Topic 패키지 테스트 추가 * refactor: Auth 관련 리팩터링 및 TopicIntegrationTest * refactor: auth 어노테이션 제거 * test: AddressTest 추가 * test: Pin 관련 테스트 추가 * refactor: Coordinate BigDecimal -> Double 로 수정 * refactor: 모든 테스트가 성공하도록 수정 * refactor: LocationRepositoryTest 수정 * feat: 멤버 단일 조회 기능 추가 * feat: 멤버 목록 조회 기능 구현 * feat : Member 를 Create 하는 기능 추가 * feat : Member 가 만든 Topic 들을 조회하는 기능 추가 * feat : Member 가 본인이 만든 Pin 을 조회하는 기능 추가 * feat : 토픽을 생성한 자가 특정 멤버에게 권한을 주는 기능 추가 * feat : 토픽을 생성한자가 특정 멤버의 권한을 삭제하는 기능 추가 * feat : 해당 토픽에 권한을 가진 모든 유저를 조회 * feat : 권한을 가진 유저를 ID 로 조회하는 기능 추가 * refactor: AuthTopic 객체 제거 * feat : Topic, Pin, Member 에 연관관계 편의 메서드 추가 * refactor: RestDocs를 위한 Interceptor 조건문 추가 * test : Permission 추가와 관련된 Domain Test 작성 * test : 다른 유저에게 권한을 주는 기능 테스트 추가 * test : 권한 부여 인수테스트 추가 * docs : 권한 부여 API 명세 작성 * test : 권한 삭제 Service Test 작성 * test : 권한 삭제 인수테스트 작성 * docs : 권한 삭제 API 명세 작성 * test : memberResponse 정적 팩토리 메서드 테스트 작성 * test : 권한이 있는 멤버 전체를 조회하는 기능 Service Test 작성 * test : 해당 토픽에 권한을 가진 자들을 모두 조회하는 기능 인수테스트 작성 * docs : 해당 토픽에 권한을 가진 유저의 목록을 조회하는 API 명세 작성 * test : MemberDetailResponse 생성 테스트 추가 * test : 권한을 가진 유저를 조회하는 기능 Service Test 추가 * test : 권한을 가진 유저를 조회하는 기능 인수테스트 추가 * docs : 권한을 가진 유저를 조회하는 기능 API 명세 추가 * test : 유저를 저장하는 기능 Service Test 작성 * test : 유저를 저장하는 기능 인수테스트 작성 * docs : 유저를 저장하는 기능 API 명세 작성 * test : 유저를 목록 조회하는 기능 Service Test 작성 * test : 유저를 목록 조회하는 기능 인수테스트 작성 * docs : 유저를 목록 조회하는 기능 API 명세 작성 * refactor : AuthInterceptor mocking 을 RestDocs 에서 실행 * test : 유저 단일 조회 Service Test 작성 * test : 유저 단일 조회 인수테스트 작성 * docs : 유저 단일 조회 API 명세 작성 * test : 유저가 만든 토픽, 핀 조회 Service Test 작성 * test : 유저가 만든 토픽, 핀 조회 인수테스트 작성 * docs : 유저가 만든 토픽, 핀 조회 API 명세 작성 * refactor : MemberInfoTest Role 검증 수정 * refactor : MemberTest 수정 * refactor : ServiceTest 내에서 데이터 준비과정을 Repository 로만 하도록 수정 * refactor : Integeration 테스트에서도 Repository 를 통해 데이터를 준비할 수 있도록 수정 * style : 개행 및 사용하지 않는 import 문 제거 * refactor : 권한 조회시 권한에 대한 ID 값도 반환할 수 있도록 수정 * fix : ignoringFields 에 createdAt, updatedAt 추가 * fix : github action test 에서 깨지는 테스트 수정 * refactor : MemberDetailResponse updateAt -> updatedAt 로 수정 * refactor : Member name -> nickName 으로 수정 * style : 개행 수정 * refactor : Objects.isNull 을 사용하여 null 을 검사하도록 통일 및 Repository 매개변수 수정 * refactor : 부정 조건문 수정 * refactor : MemberInfo Update 삭제 * style : 개행 조정 --------- Co-authored-by: 준팍(junpak) <[email protected]> Co-authored-by: junpakPark <[email protected]> * [FE]Refactor/#248 지도 버전 변경 반영 (#249) * fix: 마커 이벤트 추가 * fix : 지도 검색 팝업 갯수 제한 * fix: 클릭 시 위경도 미출력 에러 해결 * [BE] 핀(Pin) 패키지 코드 리팩터링(PinImage 기능 구현 포함) (#240) * [Docs] GitHub Issue 및 PR Template 설정 (#37) * chore: .gitignore 추가 * chore: GitHub PR 및 Issue Template * Revert "chore: GitHub PR 및 Issue Template" This reverts commit 65915f72740bbf22899ef7ac52fefa99cde96a8b. * Revert "chore: .gitignore 추가" This reverts commit 1e1865a1cb7f0a279b4e74c12cd0f66631809ff3. * chore: .gitignore 추가 * chore: GitHub Issue 및 PR Template 추가 * [Docs] GitHub Issue Template 파일명 오류 수정 (#39) * chore: .gitignore 추가 * chore: GitHub PR 및 Issue Template * Revert "chore: GitHub PR 및 Issue Template" This reverts commit 65915f72740bbf22899ef7ac52fefa99cde96a8b. * Revert "chore: .gitignore 추가" This reverts commit 1e1865a1cb7f0a279b4e74c12cd0f66631809ff3. * chore: .gitignore 추가 * chore: GitHub Issue 및 PR Template 추가 * chore: GitHub Issue 및 PR Template 추가 * feat: member 구현 중 Co-authored-by: jaeyeon kim <[email protected]> * feat: 패키지 분리, AuthMember 구현 Co-authored-by: jaeyeon kim <[email protected]> * feat: MemberArgumentResolver 구현 * feat: AuthTopic 구현 * refactor: API 명세 수정을 위한 임의 커밋 Co-authored-by: jaeyeon kim <[email protected]> * feat: Publicity, Permission 정적 팩토리 및 Converter 추가 * refactor: Topic 에 Publicity, Permission 추가로 인한 테스트 수정 * refactor: 모든 테스트가 통과하도록 수정 * refactor: 모든 테스트가 통과하도록 수정 * feat: Topic 에 관한 CRUD 에 권한 적용 완료 * fix: Converter 반환값 이상으로 인한 오류 해결 * feat: Pin 기능에 권한 설정 추가 * style: 사용하지 않는 import 문 제거 및 접근 제어자 조정 * refactor: .. 지송;;^^ - 패키지 재분배 - AUTH 관련 기능 구현 - TopicController 및 LocationController 분리 Co-authored-by: jaeyeon kim <[email protected]> * refactor: TopicStatus 로직 오류 수정 LocationController 오타 수정 * refactor: 불필요 상수 제거 * refactor: PinResponse 자료형 변경 * feat: Image 클래스 구현 * feat: LocationRepository에 하버사인을 이용한 find 메서드 구현 * refactor: LocationController의 메서드명 변경 * refactor: getTopicsWithPermission의 반환값 변경 * style: 불필요 공백 제거 * refactor: 로직 오류 수정 및 테스트 추가 * test: Topic 패키지 테스트 추가 * refactor: Auth 관련 리팩터링 및 TopicIntegrationTest * refactor: auth 어노테이션 제거 * test: AddressTest 추가 * test: Pin 관련 테스트 추가 * refactor: Coordinate BigDecimal -> Double 로 수정 * refactor: 모든 테스트가 성공하도록 수정 * refactor: LocationRepositoryTest 수정 * feat: 멤버 단일 조회 기능 추가 * feat: 멤버 목록 조회 기능 구현 * feat : Member 를 Create 하는 기능 추가 * feat : Member 가 만든 Topic 들을 조회하는 기능 추가 * feat : Member 가 본인이 만든 Pin 을 조회하는 기능 추가 * feat : 토픽을 생성한 자가 특정 멤버에게 권한을 주는 기능 추가 * feat : 토픽을 생성한자가 특정 멤버의 권한을 삭제하는 기능 추가 * feat : 해당 토픽에 권한을 가진 모든 유저를 조회 * feat : 권한을 가진 유저를 ID 로 조회하는 기능 추가 * refactor: AuthTopic 객체 제거 * chore: AuthToic 변경 사항 반영을 위한 merge * chore: AuthToic 변경 사항 반영을 위한 merge 추가 * refactor: Pin 예외 메시지 수정 - #127 과 내용 통일 * chore: AuthToic 변경 사항 반영을 위한 merge 추가 * feat : Topic, Pin, Member 에 연관관계 편의 메서드 추가 * refactor: RestDocs를 위한 Interceptor 조건문 추가 * refactor: 핀 조회 관련 API 문서화에 인증 헤더 추가 * test : Permission 추가와 관련된 Domain Test 작성 * test : 다른 유저에게 권한을 주는 기능 테스트 추가 * test : 권한 부여 인수테스트 추가 * docs : 권한 부여 API 명세 작성 * test : 권한 삭제 Service Test 작성 * test : 권한 삭제 인수테스트 작성 * docs : 권한 삭제 API 명세 작성 * test : memberResponse 정적 팩토리 메서드 테스트 작성 * test : 권한이 있는 멤버 전체를 조회하는 기능 Service Test 작성 * test : 해당 토픽에 권한을 가진 자들을 모두 조회하는 기능 인수테스트 작성 * docs : 해당 토픽에 권한을 가진 유저의 목록을 조회하는 API 명세 작성 * test : MemberDetailResponse 생성 테스트 추가 * test : 권한을 가진 유저를 조회하는 기능 Service Test 추가 * test : 권한을 가진 유저를 조회하는 기능 인수테스트 추가 * docs : 권한을 가진 유저를 조회하는 기능 API 명세 추가 * test : 유저를 저장하는 기능 Service Test 작성 * test : 유저를 저장하는 기능 인수테스트 작성 * docs : 유저를 저장하는 기능 API 명세 작성 * test : 유저를 목록 조회하는 기능 Service Test 작성 * test : 유저를 목록 조회하는 기능 인수테스트 작성 * docs : 유저를 목록 조회하는 기능 API 명세 작성 * refactor : AuthInterceptor mocking 을 RestDocs 에서 실행 * test : 유저 단일 조회 Service Test 작성 * test : 유저 단일 조회 인수테스트 작성 * docs : 유저 단일 조회 API 명세 작성 * test : 유저가 만든 토픽, 핀 조회 Service Test 작성 * test : 유저가 만든 토픽, 핀 조회 인수테스트 작성 * docs : 유저가 만든 토픽, 핀 조회 API 명세 작성 * refactor: Pin 생성 시 PinInfo를 묶어서 받도록 수정, 중복 테스트 제거 - PinInfo의 필드인 name, description을 직접 받는 대신 PinInfo를 받도록 함. - PinInfo의 필드가 추가될 경우에 Pin의 생성자도 수정할 필요가 없도록 함. - PinTest에서 PinInfoTest와 중복되는 테스트 제거 - PinInfo 업데이트 시 새 객체 할당하도록 하여 검증이 필요한 로직 최소화 (update 관련 테스트 삭제) * refactor: Pin 생성 시 권한 예외처리 추가 * test: 테스트 코드 컨벤션 통일, 도메인 계층 간 테스트 내용 분리, fixture 사용 * refactor: PinImage 생성 시 Image 객체를 전달받도록 수정, getter 추가 - Pin 리팩터링과 마찬가지로, Image의 필드 추가 시에도 생성 메서드 시그니처 변경할 필요 없도록 함. - imageUrl에 어떤 검증 로직이 있는지 명시적으로 보여줄 수 있음. * refactor: 회원 조회 로직 권한 확인 후 수행하도록 변경, 상수 처리 * test: 테스트 클래스 내 픽스쳐 사용 방식 통일, 메서드 순서 변경 * test: Pin copy 테스트 추가 * test: Pin 통합테스트 request 객체 멤버변수로 관리 * feat: PinImage 추가 API 작성, 기존 Pin 생성 및 수정 명세 변경 * test: 중복되는 내용의 PinCommandServiceTest 테스트 삭제 - 하위 계층에서 테스트하는 내용에 대해 테스트하는 메서드 삭제 * feat: 핀 삭제 시 핀 이미지 삭제 구현 * test: 핀 삭제 테스트에서 핀 이미지도 삭제되는지 확인하도록 수정 * refactor: 핀 이미지 추가 시 location 응답헤더 반환하도록 수정 * feat: 핀 이미지 삭제 기능 구현 * feat: 핀 상세 조회 시 이미지 id 반환하도록 수정 * docs: RestDocs 문서화 설정에 새 API 추가 * feat: 핀 복사 시 핀 이미지도 복사하도록 수정 * chore: 불필요한 주석 삭제, 코드 리뷰를 위한 주석 추가 * fix: updatedAt 관련 테스트 실패 해결 * refactor: 중복 거리 상수 단위 표기 * fix: 핀 이미지 삭제 메서드명 수정 * fix: 핀 이미지 관련 핸들러메서드에 LoginRequired 추가 * refactor: 사용하지 않는 Location 헤더값 전달 삭제 * feat: 핀 이미지 삭제 hard delete에서 soft delete으로 변경 * refactor: null 검증 메서드 통일 * test: Pin, PinImage RepositoryTest setUp 메서드 처리 * refactor: Pin 서비스 클래스 메서드 분리 - 조회 및 예외처리 로직 메서드 분리 - 검증 로직 메서드 분리 (TopicCommandService 와 분리 방식 통일) * test: Pin, PinImage RepositoryTest 픽스쳐 적용 * refactor: Pin 조회 서비스 메서드 네이밍 구체화 * refactor: PinQueryServiceTest 픽스쳐 적용 * refactor: Pin 변수명, 개행 수정 * fix: 864b851e 충돌 해결 시 주석 처리 실수 해제, 테스트 실패 해결 * refactor: PinCommandServiceTest 픽스쳐 적용, 테스트 단순화 * test: Pin 서비스 계층 권한 관련 테스트 작성 * refactor: 핀 이미지 제거 메서드명 구체화 * test: 불필요한 객체 생성 삭제 * refactor: 정적 팩터리 메서드 내부에서 객체 생성하도록 변경 - 정적 팩터리 메서드를 의미있게 사용하기 위함 - 다른 도메인에서의 코드와의 통일성을 위해 변경함 --------- Co-authored-by: 준팍(junpak) <[email protected]> Co-authored-by: jaeyeon kim <[email protected]> Co-authored-by: junpakPark <[email protected]> * [BE] Topic 패키지 관련 코드 리팩토링 (#238) * [Docs] GitHub Issue 및 PR Template 설정 (#37) * chore: .gitignore 추가 * chore: GitHub PR 및 Issue Template * Revert "chore: GitHub PR 및 Issue Template" This reverts commit 65915f72740bbf22899ef7ac52fefa99cde96a8b. * Revert "chore: .gitignore 추가" This reverts commit 1e1865a1cb7f0a279b4e74c12cd0f66631809ff3. * chore: .gitignore 추가 * chore: GitHub Issue 및 PR Template 추가 * [Docs] GitHub Issue Template 파일명 오류 수정 (#39) * chore: .gitignore 추가 * chore: GitHub PR 및 Issue Template * Revert "chore: GitHub PR 및 Issue Template" This reverts commit 65915f72740bbf22899ef7ac52fefa99cde96a8b. * Revert "chore: .gitignore 추가" This reverts commit 1e1865a1cb7f0a279b4e74c12cd0f66631809ff3. * chore: .gitignore 추가 * chore: GitHub Issue 및 PR Template 추가 * chore: GitHub Issue 및 PR Template 추가 * feat: member 구현 중 Co-authored-by: jaeyeon kim <[email protected]> * feat: 패키지 분리, AuthMember 구현 Co-authored-by: jaeyeon kim <[email protected]> * feat: MemberArgumentResolver 구현 * feat: AuthTopic 구현 * refactor: API 명세 수정을 위한 임의 커밋 Co-authored-by: jaeyeon kim <[email protected]> * feat: Publicity, Permission 정적 팩토리 및 Converter 추가 * refactor: Topic 에 Publicity, Permission 추가로 인한 테스트 수정 * refactor: 모든 테스트가 통과하도록 수정 * refactor: 모든 테스트가 통과하도록 수정 * feat: Topic 에 관한 CRUD 에 권한 적용 완료 * fix: Converter 반환값 이상으로 인한 오류 해결 * feat: Pin 기능에 권한 설정 추가 * style: 사용하지 않는 import 문 제거 및 접근 제어자 조정 * refactor: .. 지송;;^^ - 패키지 재분배 - AUTH 관련 기능 구현 - TopicController 및 LocationController 분리 Co-authored-by: jaeyeon kim <[email protected]> * refactor: TopicStatus 로직 오류 수정 LocationController 오타 수정 * refactor: 불필요 상수 제거 * refactor: PinResponse 자료형 변경 * feat: Image 클래스 구현 * feat: LocationRepository에 하버사인을 이용한 find 메서드 구현 * refactor: LocationController의 메서드명 변경 * refactor: getTopicsWithPermission의 반환값 변경 * style: 불필요 공백 제거 * refactor: 로직 오류 수정 및 테스트 추가 * test: Topic 패키지 테스트 추가 * refactor: Auth 관련 리팩터링 및 TopicIntegrationTest * refactor: auth 어노테이션 제거 * test: AddressTest 추가 * test: Pin 관련 테스트 추가 * refactor: Coordinate BigDecimal -> Double 로 수정 * refactor: 모든 테스트가 성공하도록 수정 * refactor: LocationRepositoryTest 수정 * refactor: AuthTopic 객체 제거 * refactor: RestDocs를 위한 Interceptor 조건문 추가 * refactor: DTO 변수 타입 수정 (primitive -> wrapper) * refactor: Image 정적 팩토리 메서드 명 변경 (of -> from) * refactor: Image 검증 메서드 부정 조건문 수정 * refactor: enum 클래스 변수명 변경 (title -> value) * refactor: Topic 메서드 내 변수 분리 * refactor: TopicInfo 검증 메서드 수정 * refactor: TopicQueryService 메서드 명 수정 * refactor: 토픽 생성 및 병합 메서드 분리 * refactor: Topic 조회시 검증 로직 추가 * test: TopicRepository soft-deleting 테스트 구현 * test: Topic 권한에 따른 조회 테스트 구현 * test: Topic 권한에 따른 생성 및 병합 수정 삭제 테스트 구현 * test: TopicController 다중 조회 및 핀 병합 테스트 구현 * refactor: 토픽 다중 조회 검증 로직 추가 * refactor: 예외 메세지 수정 및 null 검증 방식 수정 * refactor: 요청에 따른 토픽 생성 분기 시점 변경 * refactor: 토픽 권한 수정 메서드 추가 * refactor: TopicController 변수 명 통일 * style: 예외 메세지 오탈자 수정 * refactor: TopicInfo 불변 객체로 수정 * refactor: TopicStatus 검증 로직 추가 * style: 주석 제거 * refactor: 핀 복사 메서드 수정 * refactor: 핀 조회 메서드 분리 --------- Co-authored-by: 준팍(junpak) <[email protected]> Co-authored-by: jaeyeon kim <[email protected]> Co-authored-by: junpakPark <[email protected]> * [FE]Feature/#201 프론트 테스트 자동화 (#202) * feat: github action 추가 * refactor : 우분투 버전 변경 * [FE] Feature/#204 입력 폼 유효성 검사 (#256) * design: Input 및 Textarea 컴포넌트의 outline 속성 추가 * feat: 유효성 검사 로직 추가 욕설 및 비방어 데이터 셋은 추후 추가한다. * refactor: React DOM 에러 해결 및 옵셔널 부여 * feat: 유효성 검사 form 적용 및 input Container 분리 * refactor: 핀 주소 input 값이 채워져있을 때 입력창 모달을 띄우지 않도록 변경 * feat: maxLength 지정하여 최대 글자 수 제한하는 기능 추가 * refactor: 타입 명 일괄 수정 * feat: 빈 값 유효성 검사 추가 및 유효성 검사 로직 분리 * feat: 현재 입력 글자 수 및 최대 입력 글자 수 표시 * refactor: maxLength 가 넘어가면 입력이 불가하도록 변경 * design: 사용자 입력 값과 maxLength 표시 위치 이격 * fix: 주소를 수정하려고 input 태그를 눌렀을 때 입력창이 뜨지 않는 오류 수정 * refactor: 잘못된 placeholder 수정 * refactor: pinDetail Update 관련 컴포넌트에 유효성 검사 적용 * fix: pinDetail 수정 시 기존 에러 메세지 상태가 유지되는 오류 수정 * fix: 입력 모달창을 통해 주소값을 입력해도 유효성 검사에 걸리는 오류 수정 * refactor: 욕설 및 비방어 데이터셋 업데이트 * chore: github test 오류 수정 * [FE] feature/#266 이미지, 툴팁 공통 컴포넌트 구현 (#268) * feat: 이미지 컴포넌트 구현 * feat: 툴팁 컴포넌트 구현 * [BE] env/#272 CI/CD 테스트를 위한 환경변수 설정 추가 (#273) * chore: 테스트를 위한 환경변수 설정 추가 * chore: 테스트를 위한 환경변수 설정 추가, 배포 전에도 포함 * chore: workflow 간 step name 통일 * [FE] feature/#267 Suspense, ErrorBoundary, ErrorHandling 작업 구현 (#278) * chore: tsconfig 동적 임포트 수행을 위해 module esnext로 변경 * feat: topic 관련 suspense 구현 * refactor: selectedTopic 토픽과 핀 화면 컴포넌트로 따로 분리 * feat: 핀 suspense 구현 및 적용 * feat: 에러 바운더리 코드 작성 * feat: react router로 에러 처리 및 에러 페이지 구현 * refactor: 지도 맵 get api 분리 * fix: 지도에서 좌표 없는 곳 클릭 시 에러 해결 및 toast 메시지 출력 * refactor: error 처리 버튼 내용 변경 * refactor: skeleton 필요없는 타입 삭제 * [FE] feature/#259 로그인 버튼 구현 (관련 리다이렉트 설정), 토큰 관련 작업 (#281) * refactor: getApi 헤더 권한 옵션 추가 * feat: 카카오 로그인 기능 구현 * feat: 로그인 요청 페이지 구현 * feat: 에러 페이지 구현 * feat: 페이지별 권한 부여 * refactor: 하단 바 메뉴 변경 * refactor: 하단 바 메뉴 변경 및 로그인 버튼 클릭 기능 구현 * feat: 로그인 정보 로컬스토리지 저장 * feat: 새로운 지도 생성 페이지 권한 기능 추가 --------- Co-authored-by: ParkGeunCheol <[email protected]> * [BE] feature/#255 소셜로그인 구현 (#277) * [Docs] GitHub Issue 및 PR Template 설정 (#37) * chore: .gitignore 추가 * chore: GitHub PR 및 Issue Template * Revert "chore: GitHub PR 및 Issue Template" This reverts commit 65915f72740bbf22899ef7ac52fefa99cde96a8b. * Revert "chore: .gitignore 추가" This reverts commit 1e1865a1cb7f0a279b4e74c12cd0f66631809ff3. * chore: .gitignore 추가 * chore: GitHub Issue 및 PR Template 추가 * [Docs] GitHub Issue Template 파일명 오류 수정 (#39) * chore: .gitignore 추가 * chore: GitHub PR 및 Issue Template * Revert "chore: GitHub PR 및 Issue Template" This reverts commit 65915f72740bbf22899ef7ac52fefa99cde96a8b. * Revert "chore: .gitignore 추가" This reverts commit 1e1865a1cb7f0a279b4e74c12cd0f66631809ff3. * chore: .gitignore 추가 * chore: GitHub Issue 및 PR Template 추가 * chore: GitHub Issue 및 PR Template 추가 * feat : Oauth 작업중 * feat: 소셜 로그인 및 회원가입 기능 구현 - 민감 정보 환경변수 관리가 아직 진행되지 않아 해당 상수 삭제 후 커밋 Co-authored-by: kpeel5839 <[email protected]> * feat: 사용자 인가를 위한 JWT 토큰 적용 Co-authored-by: kpeel5839 <[email protected]> * refactor : 소셜로그인 플랫폼 확장에 유연하도록 구조 리팩토링 * fix: Location 테스트 간 상수 공유로 인한 격리 문제 해결 * test: 소셜 로그인 적용, 인가 방식 변경으로 인한 테스트 코드 수정 - 소셜 로그인 적용으로 인해 생긴 OauthService를 다른 서비스 테스트에서는 Mock으로 주입함 - 인수 테스트에서 사용하는 AuthHeader 를 변경된 JWT 토큰 방식으로 적용함 * chore: 구성 파일에 인증 인가 관련 환경변수 작성 Co-authored-by: kpeel5839 <[email protected]> * refactor: 소셜 회원가입 시 닉네임 랜덤 생성하도록 변경, 관련 추상화 - KakaoMemberResponse 이전에 OauthServerType을 추상화한 OauthMember 계층 추가 - OauthMember에 필요한 정보만 받아와서, 새로 가입할 Member 객체 생성 - Member 객체 생성 시 닉네임 랜덤 생성 - 이를 통해 Service의 로직을 줄이면서 다른 소셜 로그인 타입에서도 똑같이 닉네임 랜덤 생성 가능하도록 함 - 이를 통해 member 패키지와의 참조 최소화 Co-authored-by: kpeel5839 <[email protected]> * rename: 클래스명 오기 수정 Co-authored-by: kpeel5839 <[email protected]> * rename: oauth 패키지 클래스 정리 - OauthServerTypeConverter common 패키지로 이동 - kakao 구현체, dto 패키지 분리 Co-authored-by: kpeel5839 <[email protected]> * rename: kakao oauth 관련 속성값 클래스명 변경 - 다른 Configuration 클래스들 이름과 겹쳐 혼동의 여지가 있어 수정함 Co-authored-by: kpeel5839 <[email protected]> * rename: 테스트 전용 authHeader 생성 클래스명 변경 Co-authored-by: kpeel5839 <[email protected]> * refactor: 테스트 전용 jwt secret key 환경변수 처리 Co-authored-by: kpeel5839 <[email protected]> * chore : cherry pick 으로 반여잉 되지 않는 사항들을 반영 * test : Kakao Redirect Url 반환을 테스트 * test : OauthService 의 Login 을 테스트 * docs : /oauth/{oauthServerType} API 명세서 작성 * docs : /oauth/login/{oauthServerType} API 명세서 작성 * test : 회원가입이 중복으로 일어나지 않음을 테스트 * chore : 패키지 분리 * docs : oauth.adoc 작성 및 다른 adoc 파일 경로 수정 * refactor : 재 로그인 테스트 보완 및 필요없는 검증 제거 * refactor: 불필요한 메서드 분리 제거 * refactor: stream 사용으로 인덴트 수정 * refactor: null 여부 확인 메서드 통일 * refactor: BearerAuthorizationExtractor 메서드 분리 * refactor : @ConfigurationPropertiesScan 위치 변경 * refactor : /oauth/{oauthServerType} 반환 코드 변경 * refactor : 테스트 실패 원인 파악 --------- Co-authored-by: 준팍(junpak) <[email protected]> Co-authored-by: yoondgu <[email protected]> * [BE] refactor/#279 permission 패키지 분리 (#280) * refactor: Permission Enum 네이밍 변경(PermissionType) * refactor: MemberTopicPermission 네이밍 변경(Permission) 및 패키지 분리 * refactor: Service 및 Controller 분리 * test: 테스트 오류 수정 * refactor: 메서드 네임 수정 * docs: restDocs 추가 * refactor: 메서드 네이밍 변경 * refactor: 서버 주소 변경 (#284) * fix: https (#286) * fix: redirect-url (#287) * fix: get Code (#288) * fix/function-async (#289) * fix: routepage 제거 (#290) * [BE] feature/#264 토픽에 대한 즐겨찾기 API (#275) * feat: Bookmark Entity 구현 * feat: 즐겨찾기 추가 기능 구현 * feat: 즐겨찾기 추가 API 구현 * feat: 즐겨찾기 조회 API 구현 * test: 즐겨찾기 토픽 추가 및 조회 API 테스트 구현 * feat: 즐겨찾기 토픽 단일 및 전체 삭제 기능 구현 * test: 즐겨찾기 토픽 단일 및 전체 삭제 기능 테스트 구현 * feat: 즐겨찾기 토픽 단일 및 전체 삭제 API 구현 * test: 즐겨찾기 토픽 단일 및 전체 삭제 API 테스트 구현 * chore: Bookmark 패키지 분리 * refactor: 메서드 순서 변경 * test: 통합 테스트 @DisplayName 변경 * feat: 토픽에 대한 즐겨찾기 여부 반환 JPQL 구현 * feat: 토픽 조회시, 즐겨찾기 여부 반환 기능 구현 * test: 토픽 조회시, 즐겨찾기 여부 반환 테스트 구현 * style: 개행 수정 * refactor: 즐겨 찾기 삭제 로직 수정 * refactor: 즐겨 찾기 등록시, 검증 로직 추가 * refactor: TopicResponse 매개변수 통일 * refactor: 변수명 수정 * refactor: BookmarkResponse 삭제 * refactor: 사용하지 않는 변수 삭제 * style: restdocs 오탈자 수정 * fix: 데이터 로그 확인 (#291) * fix: url에 api 추가 (#292) * fix: data-shape (#293) * fix : seperate login (#295) * fix: login-error (#296) * [FE] Refactor/#269 reloaction UI (#276) * refactor: Space 컴포넌트 레이아웃간 여백 값 추가 * design: TopicCard UI 변경 * refactor: Home 레이아웃 재배치 및 확장 기능 추가 * design: TopicCard 핀 및 즐겨찾기 UI 여백 수정 * design: 피그마 시안에 따른 전체보기 UI 변경 * refactor: layout size를 변경하는 로직 커스텀 훅으로 분리 및 상수화 * refactor: 모바일 사이즈를 고려하여 sidebar 크기 조정 * refactor: navbar 위치 조정 및 선택 시 하이라이트 기능 추가 * refactor: 토픽 카드 디폴트 이미지 상수화 * design: 잘못된 속성 재배치 * refactor: 불필요한 svg 제거 및 topicInfo UI 재배치 * design: 핀 디테일 및 업데이트 관련 UI 재배치 * design: TopicInfo title size 수정 * fix: 핀 수정이 되지 않던 오류 수정 * refactor: 전체보기 각 항목마다 router 분리 url 공유 대응한다. * feat: 모아보기 페이지 추가 * feat: 즐겨찾기 페이지 추가 * feat: 마이페이지 추가 * refactor: 불필요한 console.log 제거 * fix: router 변경된 url 적용 * design: PinPreview 외 2 UI 재배치 * design: Tag 컴포넌트 다중 선택 일정개수 이상 시 '외' 형식으로 변경 * refactor: Div 모달 생성 및 context 적용 * refactor: 불필요한 import 제거 및 개행 처리 * refactor: Layout Width 값 별로 모달 위치 변경 가능토록 수정 * refactor: navbar 하이라이트 기능이 페이지 이동에 따라 변동되도록 변경 * fix: useEffect 의존성 배열 추가 안되어 발생한 오류 수정 * fix: layoutWidth DOM 에러 수정 * fix: dimmedColor DOM 에러 수정 * feat: NewPin 토픽 id가 없을 때 토픽 선택 모달 띄우는 기능 * design: 핀 뽑아오는 컴포넌트명 수정 및 fixed 부여 * refactor: modal 상태 분리로 인한 수정 * rename: 이미지 컴포넌트 변경 * refactor: 누락된 모달 상태 분리 커밋 기록 * refactor: SVG 컴포넌트를 감싸는 헤드리스 컴포넌트 생성 및 적용 * refactor: 잘못된 타입 수정 * design: 토픽카드 SVG 배치 순서 변경 * design: 핀 상세보기 하단 여백 수정 * design: 토픽인포 여백 수정 * rename: SVG 이미지 파일 변경 * design: 아이콘 버튼 호버링 시 효과 추가 * refactor: 임시 타입 지정 * refactor: 머지 충돌 해결 시 누락된 부분 보완 (#297) * refactor: 인증 인가 관련 수정 (#299) - 액세스 토큰 요청 및 응답 형식 통일 - RestDocs 수정 * [FE] feature/#282 내 정보 관련 컴포넌트 구현 및 getApi 타입 지정 (#303) * feat: 닉네임, 이메일 들 내 정보 관련 컴포넌트 구현 * refactor: getApi 제네릭 타입 지정 및 변경 필요한 타입 수정 * [BE] feature/#250 지도 같이보기 기능 구현 (#257) * feat: 모아보기 기능 구현 * refactor: controller 필드 final 추가 * refactor: URI 및 메서드 네이밍 변경 * test: atlas 테스트 추가 * test: 테스트 코드 리팩터링 * test: 테스트 코드 로직 오류 수정 * refactor: null값 validate 추가 및 개행 추가 * test: 개행 및 DisplayName 수정 * refactor: 메서드 순서 변경 * feat: Response에 isInAtlas 추가 * refactor: convert 로직 간소화 * refactor: 메서드 분리 및 정리 * doc: restDocs 적용 * refactor: MemberController 내 토픽 및 핀 조회 메서드 분리 * [BE] feature/#251 최신 지도 조회 API 구현 (#258) * feat: 최신 토픽 조회 기능 구현 * test: 테스트 추가 및 리팩터링 * test: 테스트 코드 로직 오류 수정 * refactor: null값 validate 추가 및 개행 추가 * test: 개행 및 DisplayName 수정 * test: 개행 및 DisplayName 수정 * docs: restDocs snippets 추가 * refactor: 메서드 순서 변경 * feat: Response에 isInAtlas 추가 * refactor: convert 로직 간소화 * refactor: 메서드 분리 및 정리 * doc: restDocs 적용 * refactor: 메서드 네이밍 수정 * refactor: MemberController 내 토픽 및 핀 조회 메서드 분리 * refactor: 코드 리뷰 반영 * refactor: 코드 리뷰 반영 * refactor: DTO에 작성자 이름 추가 * chore: git conflict 해결 * [BE] hotfix/#311 일부 API 명세 변경, 개발서버 구성환경 수정, 인가 관련 예외 처리 (#312) * [Docs] GitHub Issue 및 PR Template 설정 (#37) * chore: .gitignore 추가 * chore: GitHub PR 및 Issue Template * Revert "chore: GitHub PR 및 Issue Template" This reverts commit 65915f72740bbf22899ef7ac52fefa99cde96a8b. * Revert "chore: .gitignore 추가" This reverts commit 1e1865a1cb7f0a279b4e74c12cd0f66631809ff3. * chore: .gitignore 추가 * chore: GitHub Issue 및 PR Template 추가 * [Docs] GitHub Issue Template 파일명 오류 수정 (#39) * chore: .gitignore 추가 * chore: GitHub PR 및 Issue Template * Revert "chore: GitHub PR 및 Issue Template" This reverts commit 65915f72740bbf22899ef7ac52fefa99cde96a8b. * Revert "chore: .gitignore 추가" This reverts commit 1e1865a1cb7f0a279b4e74c12cd0f66631809ff3. * chore: .gitignore 추가 * chore: GitHub Issue 및 PR Template 추가 * chore: GitHub Issue 및 PR Template 추가 * refactor: 권한 부여 API 명세 변경 - 여러 회원에 대한 권한을 한번에 부여할 수 있도록 변경 - 불필요한 권한 id 반환하지 않도록 변경 - 변경 사항 RestDocs 반영 - 관련 테스트코드 수정 * fix: 권한 부여 API 응답코드 201로 변경 * chore : 개발환경에서는 ddl-auto = update 로 설정 * fix : 파라미터 형식 통일 * fix : RestDocs 문서 수정 * refactor : validateMember 수정 --------- Co-authored-by: 준팍(junpak) <[email protected]> Co-authored-by: jaeyeon kim <[email protected]> * [BE] feature/#253 특정 핀에 대해 내 지도에 저장하기 API (#270) * [Docs] GitHub Issue 및 PR Template 설정 (#37) * chore: .gitignore 추가 * chore: GitHub PR 및 Issue Template * Revert "chore: GitHub PR 및 Issue Template" This reverts commit 65915f72740bbf22899ef7ac52fefa99cde96a8b. * Revert "chore: .gitignore 추가" This reverts commit 1e1865a1cb7f0a279b4e74c12cd0f66631809ff3. * chore: .gitignore 추가 * chore: GitHub Issue 및 PR Template 추가 * [Docs] GitHub Issue Template 파일명 오류 수정 (#39) * chore: .gitignore 추가 * chore: GitHub PR 및 Issue Template * Revert "chore: GitHub PR 및 Issue Template" This reverts commit 65915f72740bbf22899ef7ac52fefa99cde96a8b. * Revert "chore: .gitignore 추가" This reverts commit 1e1865a1cb7f0a279b4e74c12cd0f66631809ff3. * chore: .gitignore 추가 * chore: GitHub Issue 및 PR Template 추가 * chore: GitHub Issue 및 PR Template 추가 * feat: 모아보기 기능 구현 * refactor: controller 필드 final 추가 * refactor: URI 및 메서드 네이밍 변경 * test: atlas 테스트 추가 * test: 테스트 코드 리팩터링 * feat: 최신 토픽 조회 기능 구현 * test: 테스트 추가 및 리팩터링 * test: 테스트 코드 로직 오류 수정 * test: 개행 및 DisplayName 수정 * docs: restDocs snippets 추가 * feat: 핀을 나의 토픽들에 복사하는 기능 구현 완료 * test: copyPin 테스트 케이스 및 restDocs 추가 * refactor: 메서드 분리 및 불필요한 개행 삭제 * refactor: 메서드 네이밍 변경 * refactor: 권한 부여 API 명세 변경 - 여러 회원에 대한 권한을 한번에 부여할 수 있도록 변경 - 불필요한 권한 id 반환하지 않도록 변경 - 변경 사항 RestDocs 반영 - 관련 테스트코드 수정 * fix: 권한 부여 API 응답코드 201로 변경 * chore : 개발환경에서는 ddl-auto = update 로 설정 * fix : 파라미터 형식 통일 * fix : RestDocs 문서 수정 * refactor : validateMember 수정 --------- Co-authored-by: jaeyeon kim <[email protected]> Co-authored-by: yoondgu <[email protected]> Co-authored-by: zun <[email protected]> * [BE] feature/#298 인기 (급상승) 토픽 조회 API (#306) * feat: 모아보기 기능 구현 * refactor: controller 필드 final 추가 * refactor: URI 및 메서드 네이밍 변경 * test: atlas 테스트 추가 * test: 테스트 코드 리팩터링 * test: 테스트 코드 로직 오류 수정 * refactor: null값 validate 추가 및 개행 추가 * test: 개행 및 DisplayName 수정 * refactor: 메서드 순서 변경 * feat: Response에 isInAtlas 추가 * refactor: convert 로직 간소화 * refactor: 메서드 분리 및 정리 * doc: restDocs 적용 * refactor: MemberController 내 토픽 및 핀 조회 메서드 분리 * feat: 인기 토픽 조회 기능 구현 * feat: 인기 토픽 조회 기능 API 구현 * test: 인기 토픽 조회 기능 API 테스트 수정 * style: 코드 라인 길이 포맷 수정 * fix: @Transactional 어노테이션 수정 * test: Atlas RestDocs 테스트 코드 수정 --------- Co-authored-by: junpakPark <[email protected]> Co-authored-by: junpakPark <[email protected]> * [FE] feature/#300 즐겨찾기 페이지 구현 (#308) * feat: 즐겨찾기 페이지 구현 * refactor: Bookmark 페이지 이름 변경 * refactor: 즐겨찾기 서버 요청 후 즐겨찾기 데이터 받아오도록 수정 * [FE] feature/#302 내가 만든 지도 목록 모달에 띄우기 (#310) * feat: 내 지도 토픽 목록 list 컴포넌트 구현 및 모달 창에 적용 * fix: 내 지도 저장 모달 띄웠을 때 PinDetail 포커스 제거 * refactor: 내 지도 목록 모달 서버 요청 후 데이터 받도록 수정 * [FE] feature/#301 내 정보 페이지 구현 (#309) * feat: 내 정보 페이지 구현 * refactor: early return 위치 변경 * refactor: 에러 페이지 width 변경 * refactor: MyInfoPage 이름 수정 * refactor: Profile 내 토픽 get 요청 받아 데이터 받도록 수정 * refactor: 프로필 사진 로그인 됐을 시 카카오 프로필 사진으로 변경 * refactor: MyInfo 수정 버튼 삭제 * [FE] Feature/#304 모아보기 구현 (#307) * refactor: 태그 전역상태 생성 및 핀 이름이 같을 경우 동시 삭제되던 오류 수정 * feat: SeveralSelectedTopics 페이지 구현 제 야무진 뻘짓을 기록합니다.... 혹시나 나중에 이 방식으로 쓰인다면 참고자료가 되길.... * refactor: 모아보기 API 명세에 맞게 GET 기능 구현 제 뻘짓을 만회합니다 * remove: 사용하지 않는 페이지 제거 * feat: 모아보기 버튼 클릭 시 모아보기에 추가 및 상태 표시 아이콘 추가 * design: 모아보기 카운터 UI 재배치 * feat: 모아보기 정책에 맞게 7개까지만 모아볼 수 있도록 변경 * feat: 모아보기 및 즐겨찾기 not focused 버튼 SVG 추가 * refactor: props drilling 으로 인한 불필요한 interface 제거 * remove: 불필요한 페이지 컴포넌트 제거 * design: 모아보기 추가 카운터 애니메이션 구현 * refactor: 불필요한 console.log 제거 * fix: id 타입 에러 수정 * refactor: 불필요한 fragment 제거 * style: 불필요한 개행 제거 * feat: 모아보기 토픽을 한번에 삭제하는 기능 추가 * design: 토스트 위치 수정 및 애니메이션 변경 * rename: SVG 파일 변경 * feat: delete API 추가 * refactor: 토픽 타입 변경으로 인한 수정 및 기능 추가 * refactor: post content type 추가 * refactor: 불필요한 console.log 제거 * refactor: 중복 로직 제거 및 메서드명 변경 * refactor: 기존 메서트 사용 및 불필요한 import 제거 * fix: topicCard 타입 변경된 인터페이스 적용 * feat: 로그인 오류 발생 시 toast 띄우는 에러핸들링 추가 * [FE] Feature/#317 권한 관련 기능 구현 (#318) * refactor :불필요한 페이지 삭제 * refactor: 헤더에 토큰 추가 방식 변경 * feat: 기능 요구사항 구현 * feat: 추가 기능 구현 * fix: 버그 일괄 수정 (#320) * fix: 에러 수정 (#321) * refactor: 리다이렉트 페이지 라우트 (#322) * refactor: 머지 후 모든 오류 및 에러핸들링 수정 (#323) * [BE] feature/#319 커스텀 예외 적용 및 예외 처리 구현 (#329) * feat : Exception 처리 뼈대 코드 구현 * refactor : 토픽의 ID 를 통해서 조회하는 경우의 Exception 을 CustomException 으로 교체 * feat: common 및 member 패키지 커스텀 예외 적용 * feat: topic 패키지 커스텀 예외 적용 Co-authored-by: yoondgu <[email protected]> * feat: pin 패키지 커스텀 예외 적용 Co-authored-by: yoondgu <[email protected]> * feat: Location 및 Atlas 패키지 커스텀 예외 적용 Co-authored-by: yoondgu <[email protected]> * feat: Bookmark 및 Permission 패키지 커스텀 예외 적용 Co-authored-by: yoondgu <[email protected]> * feat: AuthInterceptor 커스텀 예외 적용 및 검증 보완 - 로그인이 필요하지 않은 요청에 대해, 비로그인 유저 id 검증 로직 추가 Co-authored-by: yoondgu <[email protected]> * feat: Auth 및 Oauth 커스텀 예외 적용 및 검증 보완 Co-authored-by: yoondgu <[email protected]> * feat: common ArgumentResolver 예외 메시지 보완 Co-authored-by: yoondgu <[email protected]> * feat: GlobalException 및 GlobalExceptionHandler 적용 Co-authored-by: yoondgu <[email protected]> * refactor: image 검증 정규표현식 수정 Co-authored-by: yoondgu <[email protected]> * feat: 500번대 ExceptionHandler 구현 Co-authored-by: yoondgu <[email protected]> * refactor: 불필요 개행 수정 Co-authored-by: yoondgu <[email protected]> * refactor: 불필요 Getter 어노테이션 제거 Co-authored-by: yoondgu <[email protected]> * refactor: exceptionSource 로깅 개행 추가 Co-authored-by: yoondgu <[email protected]> * refactor: ErrorCode record로 변경 및 ErrorResponse 제거 Co-authored-by: yoondgu <[email protected]> --------- Co-authored-by: yoondgu <[email protected]> * [FE] feature/#331 권한있는 토픽 접근 가능 기능 구현 (#332) * feat: infowindow 삭제 추가 * refactor: postApi 수정 * feat: 지도 선택 기능 추가 * Feat: 내 지도에 추가하기 기능 구현 * refactor: 권한 부여 기능 수정 * [FE] feature/#325 웹 접근성 적용 (#327) * feat: 웹 접근성 적용 * refactor: toast 나올 때 리더기가 읽도록 수정 * refactor: 지도 이미지 label 적용 * [FE] Refactor/#324 (#333) * fix: 상태코드 로직 오류 수정 * refactor: API 잘못된 로직 수정 * refactor: 즐겨찾기 버튼 및 id idx 로직 수정 * refactor: 불필요한 권한 로직 제거 * feat: 에러핸들링 로직 추가 * refactor: 즐겨찾기 및 모아보기 관련 idx 로직 수정 * design: 여백 수정 * feat: 즐겨찾기가 없을 경우 대체페이지 추가 * design: 모든 UI 오류 재배치 * design: UI 재배치 * refactor: Map 핀 이름 기능 추가 홈에서 각 토픽 별로 GET * refactor: 각 페이지에서 항목별로 토픽 카드 보이도록 변경 * feat: 내 현재위치 받아오는 util 함수 작성 * design: 윈도우 오류 대응 * refactor: 누락된 suspense 모두 지정 * refactor: 지도 리스트가 비어있을 경우 대체 페이지 수정 * remove: 불필요한 페이지 제거 * refactor: 파비콘 추가 및 홈 GET url 수정 * design: 버튼 네이밍 변경 * fix: 즐겨찾기 버튼 오류 수정 * fix: 오류 수정 (#336) * [BE] feature/#330 로깅 적용 (#334) * feat: 로깅 적용 Co-authored-by: yoondgu <[email protected]> * feat: JVM 시간 서울로 설정 Co-authored-by: yoondgu <[email protected]> * fix: 이미지 검증 정규표현식 수정 Co-authored-by: yoondgu <[email protected]> * fix: 로그인 사용자 검증 오류 수정 Co-authored-by: yoondgu <[email protected]> * test: 로깅 테스트 환경 분리 Co-authored-by: yoondgu <[email protected]> --------- Co-authored-by: yoondgu <[email protected]> * [BE] hotfix/log 로그인 버그로 인한 인터셉터 수정 및 로그백 일부 수정 (#337) * fix: 인터셉터 로직 수정 및 log-back 수정 Co-authored-by: yoondgu <[email protected]> * fix: log-back 추가encoder Co-authored-by: yoondgu <[email protected]> * fix: 로그 파일 저장 위치 변경 Co-authored-by: yoondgu <[email protected]> --------- Co-authored-by: yoondgu <[email protected]> * [FE] Fix/all (#339) * design: 여백오류 수정 * fix: 지도 줌 아웃 리미트 지정 * refactor: 핀 추가 플로우 여러 상황 대응 * design: 임시 커밋 * fix: 배포 페이지와 마크업이 다른 오류 슈정 * refactor: 임시 커밋 * fix: 배포 페이지와 마크업이 다른 오류 수정 * refactor: 라우터 및 에러페이지 및 디자인 시안 문제 모두 수정 * design: 디자인 시안과 다르지 않던 부분 수정 * refactor: 디자인 정책 및 시안과 맞지 않는 부분 수정 진행 * refactor: 불필요한 console.log 제거 및 타입가드 * fix: 뽑아오기 상태 초기화 * [FE] Fix/all (#340) * refactor: 핀추가 거절 멘트 지정 * design: 배포페이지와 로컬이 다른 오류 수정 * chore: 프로젝트 상세설명 추가 * [BE] hotfix/guest 게스트 조회시 발생하던 버그 해결 (#341) * [Docs] GitHub Issue 및 PR Template 설정 (#37) * chore: .gitignore 추가 * chore: GitHub PR 및 Issue Template * Revert "chore: GitHub PR 및 Issue Template" This reverts commit 65915f72740bbf22899ef7ac52fefa99cde96a8b. * Revert "chore: .gitignore 추가" This reverts commit 1e1865a1cb7f0a279b4e74c12cd0f66631809ff3. * chore: .gitignore 추가 * chore: GitHub Issue 및 PR Template 추가 * [Docs] GitHub Issue Template 파일명 오류 수정 (#39) * chore: .gitignore 추가 * chore: GitHub PR 및 Issue Template * Revert "chore: GitHub PR 및 Issue Template" This reverts commit 65915f72740bbf22899ef7ac52fefa99cde96a8b. * Revert "chore: .gitignore 추가" This reverts commit 1e1865a1cb7f0a279b4e74c12cd0f66631809ff3. * chore: .g…
작업 대상
각 토픽에 대한 즐겨찾기 관련 API
토픽 조회시, 즐겨찾기 여부 반환 로직 추가
관련 이슈
📄 작업 내용
🙋🏻 주의 사항
토픽 조회시, TopicRepository에서 모든 토픽을 조회한 뒤에 각각의 토픽 id를 통해 BookmarkRepository를 매번 조회하는 것은 비효율적이라고 판단하였습니다.
Join 연산을 통해 한 번에 해결할 수 있을 것이라고 판단했고, 이에따라 TopicReposiotry에 JPQL이 다수 추가 되었습니다.
또한, 사용자에 따라 토픽 및 토픽에 대한 즐겨찾기 여부를 반환하기 위한
TopicWithBookmarkStatus
가 추가되었습니다.이를 Dto로 봐야할지.. 의문이긴 합니다만, 제 생각에는 topic.domain 패키지 내부에 repository 패키지를 두고 TopicRepository 및 해당 클래스를 두는 것이 자연스럽다고 생각합니다. (아직 적용한 상태는 아닙니다.)
추가로, 로그인 유저 / 비로그인 유저에 따라 사용하는 메서드를 다르게 하도록 분리했습니다.
(비로그인 유저는 즐겨찾기 여부를 확인할 필요가 없기 때문에, 이로 인해 join 연산을 수행하는 것은 불필요하다고 판단하였습니다.)
JPQL을 사용한 현재 로직에 대해서 궁금한 점이나, 개선해야 할 점 등 다양한 의견 많이 주시면 감사하겠습니다.
제가 작성한 코드임에도 불구하고 마음에 안 드는 부분이 상당수 존재하고, 많은 고민을 해보았지만 더 나은 방안을 찾지 못하였습니다.
현재 구현한 코드를 다 갈아엎고, 단순히 findAll 만을 통해 자바코드로 풀어내는 방안도 고려중이오니, 서슴없이 의견 내주시면 감사하겠습니다.
스크린샷
📎 관련 이슈
closed #264
레퍼런스