[더미 데이터]
INSERT IGNORE INTO region (id, name, created_at, updated_at)
VALUES (1, '서울', NOW(), NOW()),
(2, '부산', NOW(), NOW()),
(3, '인천', NOW(), NOW());
INSERT IGNORE INTO store (id, name, address, score, region_id, created_at, updated_at)
VALUES (1, 'Store 1', '서울시 서대문구 이화여대길 52', 4.5, 1, NOW(), NOW()),
(2, 'Store 2', '서울시 마포구 연남동', 3.8, 1, NOW(), NOW()),
(3, 'Store 3', '서울시 동작구 흑석동', 2.2, 1, NOW(), NOW()),
(4, '요아정', '서울시 용산구 이태원동', 4.0, 1, NOW(), NOW()),
(5, '요아정', '서울시 서대문구 이화여대길 52', 3.2, 1, NOW(), NOW()),
(6, '요아정', '서울시 강남구 대치동', 4.5, 1, NOW(), NOW());
INSERT IGNORE INTO mission (id, title, store_id, created_at, updated_at)
VALUES (1, 'Store 1-미션 1', 1, NOW(), NOW()),
(2, 'Store 1-미션 2', 1, NOW(), NOW()),
(3, 'Store 2-미션 1', 2, NOW(), NOW()),
(4, 'Store 3-미션 1', 3, NOW(), NOW());
INSERT IGNORE INTO review (id, content, score, store_id, created_at, updated_at)
VALUES (1, '너무 좋아요!', 5.0, 1, NOW(), NOW()),
(2, '분위기 짱~', 3.0, 1, NOW(), NOW()),
(3, '서비스가 좋습니다', 4.8, 2, NOW(), NOW()),
(4, '음식이 맛있고 사장님이 친절해요', 4.5, 3, NOW(), NOW());
INSERT INTO member (id, name, email, address, phone_number, created_at, updated_at)
VALUES (1, '권유민', '[email protected]', '산본', '010-2567-3221', NOW(), NOW());
INSERT INTO member_mission (id, member_id, mission_id, status, created_at, updated_at)
VALUES (1, 1, 1, 'IN_PROGRESS', NOW(), NOW()),
(2, 1, 2, 'COMPLETED', NOW(), NOW()),
(3, 1, 3, 'IN_PROGRESS', NOW(), NOW()),
(4, 1, 4, 'COMPLETED', NOW(), NOW());
[🔥미션 - JPA 및 테이블 구현]
▪️ 진행중, 진행 완료한 미션 조회 쿼리
@Repository
@RequiredArgsConstructor
public class MissionRepositoryImpl implements MissionRepositoryCustom {
private final JPAQueryFactory jpaQueryFactory;
private final QMission mission = QMission.mission;
private final QStore store = QStore.store;
private final QMember member = QMember.member;
private final QMemberMission memberMission = QMemberMission.memberMission;
//진행중 미션 조회
@Override
public List<Mission> findInProgressMissions(Long memberId, Long cursor) {
return jpaQueryFactory
.selectFrom(mission)
.join(mission.store, store).fetchJoin()
.join(memberMission).on(memberMission.mission.eq(mission))
.join(member).on(memberMission.member.eq(member))
.where(
member.id.eq(memberId),
memberMission.status.eq(MissionStatus.IN_PROGRESS),
mission.id.lt(cursor)
)
.orderBy(mission.id.desc())
.limit(10)
.fetch();
}
//진행완료 미션 조회
@Override
public List<Mission> findCompletedMissions(Long memberId, Long cursor) {
return jpaQueryFactory
.selectFrom(mission)
.join(mission.store, store).fetchJoin()
.join(memberMission).on(memberMission.mission.eq(mission))
.join(member).on(memberMission.member.eq(member))
.where(
member.id.eq(memberId),
memberMission.status.eq(MissionStatus.COMPLETED),
mission.id.lt(cursor)
)
.orderBy(mission.id.desc())
.limit(10)
.fetch();
}
}
▪️ 마이페이지(멤버) 조회 쿼리
@Repository
@RequiredArgsConstructor
public class MemberRepositoryImpl implements MemberRepositoryCustom {
private final JPAQueryFactory jpaQueryFactory;
private final QMember member = QMember.member;
@Override
public Member findMemberById(Long memberId) {
return jpaQueryFactory
.selectFrom(member)
.where(member.id.eq(memberId))
.fetchOne();
}
}