Skip to content
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

Feat #38 매칭 필터링 및 알고리즘 구현 #38

Open
wants to merge 21 commits into
base: dev
Choose a base branch
from

Conversation

huncozyboy
Copy link
Member

@huncozyboy huncozyboy commented Jan 16, 2025

📌 관련 이슈

관련 이슈 번호 #30
Close #

🚀 작업 내용

  • 사용자가 입력한 출발지, 도착지, 태그 조건에 맞는 활성 상태의 매칭 방을 검색하는 로직(findRoom 메서드)
    *거리 조건은 300m 이내로 설정했고, 태그가 비어있는 경우에도 처리할 수 있도록 설정하였습니다
  1. 멤버 아이디로 사용자 조회 및, 해당 특정 사용자가 방에 이미 방에 존재하는지 조회
  2. ST_Distance_Sphere를 활용하여 출발지(300m 이내) 도착지(300m 이내)의 매칭 방을 필터링
  3. 검색된 매칭 방 리스트에서 ACTIVE 상태인 방만 검색되도록 필터링
  4. 태그 조건(criteria)이 주어진 경우, 태그 조건을 만족하는 방만 추가로 필터링
  5. 위 조건에 맞는 방이 있으면 해당 방에 참가할 수 있도록 방의 정보를 조회
  6. 조건에 맞는 방이 없다면 해당 방을 생성
  • 전체 매칭방을 리스트로 조회(페이지네이션 방식)
  1. 페이지 번호랑 페이지 사이즈를 입력받아 조회
  2. 페이지 번호가 유효하지 않은 경우 예외처리
  3. 매칭 방의 정렬 기준은 id를 기준으로 내림차순으로 정렬
  4. pageable로 매칭방의 리스트를 반환

📸 스크린샷

SSE 구독 후 포스트맨에서 테스트 진행했습니다
image

DB에 매칭방 생성까지 확인했습니다
image

추가로 동일한 유저가 똑같은 조건의 방을 생성하려고 할시, 이미 존재하는 매칭방이라는 예외를 던져주도록 설계했습니다
image

📢 리뷰 요구사항

주영님과 충돌을 방지하고자 매칭시 필터링 로직이랑 전체 매칭방 리스트 조회 먼저 해당 PR에서 작업해서 머지하도록 하고,
블랙리스트와 친구추가는 별도의 이슈를 생성해서 추후에 작업하도록 협의했습니다

현재 저희가 출발지(가천대학교 정문, 1번출구) 와 도착지(가천대학교 기숙사, AI 공학관)로 정해져있는 설계였기에
Haversine이랑 Radian을 통한 위도 경도 계산법은 사용하지 않았습니다
하지만 추후에 앱으로 마이그레이션 후 출발지와 도착지를 지도에서 동적으로 선택할 수 있도록 확장되는 경우에는 리팩토링이 필요해보입니다

@huncozyboy huncozyboy added 🔨 Refactor 코드 리팩토링 ✨ Feature 기능 개발 및 요구사항 변경 반영 labels Jan 16, 2025
@huncozyboy huncozyboy self-assigned this Jan 16, 2025
@huncozyboy huncozyboy linked an issue Jan 16, 2025 that may be closed by this pull request
3 tasks
@soyesenna soyesenna self-requested a review January 16, 2025 15:58
Copy link
Collaborator

@soyesenna soyesenna left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨어요!!

Comment on lines 32 to 33
Members user = memberRepository.findById(userId)
.orElseThrow(MemberNotFoundException::new);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

MemberService에 findById 메서드가 있습니다!!
해당 메서드를 사용하는게 좋아보여요

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

MemberService에 예외처리까지 되어있는 메서드를 사용하면,
불필요한 메서드 추가랑 예외처리를 안해줘도 될거같네요. 수정 완료했습니다 !

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✨ Feature 기능 개발 및 요구사항 변경 반영 🔨 Refactor 코드 리팩토링
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Feat]: #30 매칭 필터링 및 알고리즘 구현
2 participants