본문 바로가기

프로그래밍/소개팅 웹 애플리케이션

소개팅 웹 애플리케이션(4)_매칭 기능과 부가 기능

 

먼저 마이페이지 버튼을 클릭하면 내 정보와 메시지함을 확인할수 있습니다.

회원정보수정 버튼을 클릭하면 내 정보를 수정할수 있습니다. 

 

동영상으로 보시면 다음과 같습니다.

 

 

 

이제 이 소개팅 어플을 가장 핵심 기능인 매칭 기능에 대해서 리뷰해보겠습니다.

만보기 매칭이라는 버튼을 클릭하면 내 위치 좌표에서 반경 10km(만보) 이내에 있는 이성 회원을 한명 매칭합니다.

매칭된후에는 쪽지를 보낼수 있으며 계속해서 매칭을 원하는 경우에는 만보기 매칭버튼을 계속 클릭하면 됩니다.

10km이내에 매칭된 회원이 없을때까지 매칭을 할수 있으며 중복된 매칭은 발생하지 않도록 합니다.

QueryDSL을 사용해서 이 기능을 쉽게 구현할수 있었습니다. 이 부분에 대한 코드는 다음과 같습니다.

 

package com.study.board.repositoryImpl;

import com.querydsl.core.types.dsl.Expressions;
import com.querydsl.jpa.impl.JPAQueryFactory;
import com.study.board.entity.Member;
import com.study.board.repositorycustom.MemberRepositoryCustom;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;

import java.util.List;

import static com.study.board.entity.QMember.member;

@Repository
@RequiredArgsConstructor
public class MemberRepositoryImpl implements MemberRepositoryCustom {

    private final JPAQueryFactory queryFactory;

    @Override
    public List<Member> doMatching(Member loginMember) {

        double latitude = loginMember.getCoord().get_lat();
        double longitude = loginMember.getCoord().get_lng();
        double distance = 10;

        return queryFactory.select(member)
                .from(member)
                .where(
                        Expressions.numberTemplate(Double.class,
                                        "6371 * acos(cos(radians({0})) * cos(radians({2})) * cos(radians({3}) - radians({1})) + sin(radians({0})) * sin(radians({2})))",
                                        member.coord._lat, member.coord._lng, latitude, longitude)
                                .loe(distance),
                        member.id.ne(loginMember.getId()),
                        member.sex.ne(loginMember.getSex()),
                        member.id_list.contains(loginMember.getId()).not()


                )
                .fetch();
    }


}

 

위도와 경도로 부터 거리를 구하는 쿼리가 있고 그 거리가 distance보다 작거나 같아야합니다. 계속해서 and 조건으로 같은 성별은 제외하고 이미 매칭된 사람도 제외하면 구현이 끝납니다.

동영상으로 매칭기능과 쪽지 보내기 기능을 확인해 보겠습니다.

 

 

쪽지를 받은 사람으로 로그인 해보고 어떻게 메시지가 왔는지 확인해보겠습니다.

 

 

연락을 받은 순간부터 상대방의 프로필을 확인할수있고 상대방한테 쪽지를 보내서 연락을 이어갈수 있습니다.

다음 글에선 모든 기능을 한꺼번에 정리해보고 코드에 대해서 올려보도록 하겠습니다. 감사합니다.