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

[Refactor] discord webhook 카테고리별 평점 높은 3개씩 출력되도록 변경 #29

Merged
merged 2 commits into from
Nov 20, 2023

Conversation

CheorHyeon
Copy link
Contributor

@CheorHyeon CheorHyeon commented Nov 20, 2023

🌿 PR타입

  • 기능 추가
  • 버그 수정
  • 의존성, 환경 변수, 빌드 관련 코드 업데이트
  • 기타 사소한 수정

❗️관련 이슈[#]

close #28

📑 개요

  • 디스코드 webhook 발생 시 음식점 카테고리별 리뷰 점수 높은 순으로 3개씩 추천합니다.

🧷 변경사항

  • src/main/java/com/wanted/restaurant/boundedContext/discord/WebHookService.java

    • 이전PR 에서 마찬가지로 아래의 json 구조를 작성해서 웹훅을 보내야 메세지가 발송됩니다.
      image
    • 따라서 각 구조에 맞게 조정하였으며, 만일 등록된 식당이 없거나 위/경도가 서버에 등록된 위치가 아니라면 실패 메세지를 보냅니다.
    • 실패인지 판단은 RsData 클래스의 isFail 메서드로 확인합니다(msg : "F-"로 시작하는지 확인)
  • src/main/java/com/wanted/restaurant/boundedContext/restaurant/dto/LunchDTO.java

    • nativeQuery의 결과를 DTO객체로 매핑하기 위해 내부에 LunchDTOInterface를 두었습니다.
    • nativeQuery의 결과를 바로 DTO 객체로 매핑하기 위해 getter를 구현한 인터페이스로 결과를 받고, 이를 서비스 단에서 리스트화 하여 사용합니다.
  • src/main/java/com/wanted/restaurant/boundedContext/restaurant/repository/RestaurantRepository.java

    • getRestaurantByCategoryTop3 : 파티션 내에 순서를 부여하기 위한 ROW_NUMBER() OVER(PARTITION BY 구문을 사용하였습니다.
    • 평점 순으로 내림차순 한 식당명의 결과를 rn에 담는다. (각 그룹은 업종(중식 등)으로 묶인다)
      • 최대 거리 안에 있는 것들 중에서 3번 순서까지 가져온다.(각 그룹별 3개씩)
    • ROW_NUMBER : 결과에 순번, 순위를 매기는 함수
      • PARTITION BY : 동일 그룹으로 묶어줄 칼럼 명 지정
      • ORDER BY : PARTITION 정의에 지정된 컬럼에 대한 정렬 수행
    • [MySQL] ROW_NUMBER() 함수 블로그 글
  • src/main/java/com/wanted/restaurant/boundedContext/restaurant/service/RestaurantService.java

    • toLunchDTO() 결과로 받은 인터페이스 리스트를 DTO 객체의 리스트로 변화 시키는 메서드

📷 스크린샷

discord1

성공! 아래의 json 형태로 보냈습니다!

{
		"embeds":[
		{
			"color":15258703,
			"title":"오늘의 점메추!",
			"fields":[
			{
				"inline":"true",
				"name":"일식",
				"value":
				"**- 식당 이름** 다께야우동 \n **- 주소** 경기도 안양시 동안구 평촌대로227번길 50 (호계동,2층) \n **- 평점** 4.00 \n\n**- 식당 이름** 쥰스시 \n **- 주소** 경기도 안양시 동안구 관평로170번길 33 (관양동, 평촌주공공이204호) \n **- 평점** 0.00 \n\n**- 식당 이름** 최고당돈가스 \n **- 주소** 경기도 안양시 동안구 평촌대로 140 (평촌동, 아트상가빌딩112,113) \n **- 평점** 0.00 \n"
			},
			{
				"inline":"true",
				"name":"김밥(도시락)",
				"value":
				"**- 식당 이름** 본도시락 안양범계점 \n **- 주소** 경기도 안양시 동안구 시민대로131번길 9 (호계동, 지상1층) \n **- 평점** 5.00 \n\n**- 식당 이름** 할미손도시락호계점(안양시니어클럽) \n **- 주소** 경기도 안양시 동안구 귀인로79번길 29, 1층 (호계동) \n **- 평점** 0.00 \n\n**- 식당 이름** 김밥천국 \n **- 주소** 경기도 안양시 동안구 관평로170번길 43 (관양동, 훼미리타운101호) \n **- 평점** 0.00 \n"
			}
                       ]                // fields끝
	} // embeds[0] 
] // embed 끝 ,
		"content":"점심시간 30분 전! 아래 식당을 추천드립니다!"
	}

👀 기타

  • 디스코드 웹훅 관련
    • 원래는 Member중에서 알람 허용한 사용자를 추출하고, 해당 멤버의 주소에 맞는 데이터를 추출해야 하지만, 현재 시스템은 디스코드 채널 웹훅 하나만 있기에 경기도 안양시로 추출하였습니다.
    • 실제 서비스화 된다면 사용자의 위치를 받아서 변수로 넣어주면 됩니다.

@CheorHyeon CheorHyeon added the enhancement New feature or request label Nov 20, 2023
@CheorHyeon CheorHyeon self-assigned this Nov 20, 2023
@CheorHyeon CheorHyeon merged commit cf5b3da into main Nov 20, 2023
@CheorHyeon CheorHyeon deleted the #28/refactor-discord branch November 20, 2023 15:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Refactor] 디스코드 웹훅 코드 수정
1 participant