Skip to content

Conversation

@PicturePark1101
Copy link
Contributor

@PicturePark1101 PicturePark1101 commented Apr 4, 2025

작업내용

  • 이 화면 API를 작업했습니다.
구현부분

상세설명_ & 캡쳐

[구현]

  • QueryDSL을 사용해서 동적정렬로 구현했습니다.
	@Override
	public List<Limjang> findAllByMemberAndDeletedIsFalseOrderByParamV2(Member member, LimjangSortOptions sort) {
		return queryFactory
			.selectFrom(limjang)
			.join(limjang.limjangPrice, limjangPrice).fetchJoin()
			.join(limjang.addressEntity, address).fetchJoin()
			.leftJoin(limjang.report, report).fetchJoin()
			.where(limjang.memberId.eq(member))
			.where(limjang.deleted.isFalse())
			.orderBy(getOrderByLimjangSortOptions(sort))
			.fetch();
	}

	private OrderSpecifier[] getOrderByLimjangSortOptions(LimjangSortOptions sort) {
		List<OrderSpecifier> orders = new ArrayList<>();
		switch (sort) {
			case UPDATED -> orders.add(new OrderSpecifier(DESC, limjang.updatedAt));
			case STAR -> {
				orders.add(
					new OrderSpecifier<>(DESC, report.totalRate.coalesce(0f), OrderSpecifier.NullHandling.NullsLast));
				orders.add(new OrderSpecifier<>(DESC, limjang.createdAt));
			}
			case CREATED -> orders.add(new OrderSpecifier<>(DESC, limjang.createdAt));
		}
		return orders.toArray(new OrderSpecifier[orders.size()]);
	}
  • 발생하는 쿼리는 아래와 같습니다. (별점으로 정렬한 결과)
Hibernate: 
    select
...필드생략
    from
        limjang l1_0 
    join
        limjang_price lp1_0 
            on lp1_0.price_id=l1_0.price_id 
    join
        address ae1_0 
            on ae1_0.address_id=l1_0.address_id 
    left join
        report r1_0 
            on l1_0.limjang_id=r1_0.limjang_id 
    where
        l1_0.member_id=? 
        and l1_0.deleted=? 
    order by
        coalesce(r1_0.total_rate, ?) desc,
        l1_0.created_at desc
Hibernate: 
    select
        s1_0.scrap_id,
        s1_0.created_at,
        s1_0.limjang_id,
        s1_0.updated_at 
    from
        scrap s1_0 
    where
        s1_0.limjang_id in (?, ?, ?, ?, ?, ?)
Hibernate: 
    select
        il1_0.limjang_id,
        il1_0.image_id,
        il1_0.created_at,
        il1_0.image_url,
        il1_0.updated_at 
    from
        image il1_0 
    where
        il1_0.limjang_id in ... 생략

로컬에서 테스트 완료

{
  "isSuccess": true,
  "code": "COMMON200",
  "message": "성공입니다.",
  "result": {
    "notes": [
      {
        "noteId": 6,
        "purposeType": "RESIDENTIAL_PURPOSE",
        "propertyType": "OFFICE_TEL",
        "priceType": "MONTHLY_RENT",
        "name": "내집",
        "imageUrl": [
          "https://{버킷명}.s3.ap-northeast-2.amazonaws.com/image/578802c0-508c-4d74-85ee-5804b7d7fac0IMG_2144.PNG"
        ],
        "isScraped": true,
        "rate": null,
        "price": "100000",
        "monthlyRent": "100",
        "pyong": 10,
        "floor": "5",
        "address": "경기도 구리시 동구릉로 100001번길 11111",
        "shortAddress": "구리시 인창동"
      },
      {
        "noteId": 5,
        "purposeType": "RESIDENTIAL_PURPOSE",
        "propertyType": "OFFICE_TEL",
        "priceType": "SALE",
        "name": "내집",
        "imageUrl": [],
        "isScraped": false,
        "rate": null,
        "price": "100000",
        "monthlyRent": null,
        "pyong": 10,
        "floor": "5",
        "address": "경기도 구리시 동구릉로 100001번길 11111",
        "shortAddress": "구리시 인창동"
      }]
}

@PicturePark1101 PicturePark1101 added ✨ feature 기능 추가 진이 작업했습니다. 👊🏻 PULL REQUEST pr날릴때 labels Apr 4, 2025
@PicturePark1101 PicturePark1101 self-assigned this Apr 4, 2025
public LimjangQueryDslRepositoryImpl(EntityManager em) {
this.queryFactory = new JPAQueryFactory(JPQLTemplates.DEFAULT, em);
}
@Override
Copy link
Contributor

Choose a reason for hiding this comment

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

QueryDSL을 쓰셨군요!! 저는 사실 동적 쿼리를 잘 써보지는 않았는데 확실히 편해(?)보이네요!! 뭔가 좀 직관적인 것 같아요! 짜느라 고생하셨습니당

Copy link
Contributor

@essaysir essaysir left a comment

Choose a reason for hiding this comment

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

고생하셨습니다. 머지 해도 될 듯 합니다.

@PicturePark1101 PicturePark1101 merged commit fd83510 into dev Apr 9, 2025
1 check passed
PicturePark1101 added a commit that referenced this pull request Jun 1, 2025
[feat/#321] 마이노트 - 임장 목록 조회 API
@essaysir essaysir deleted the feat/#321 branch September 10, 2025 14:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨ feature 기능 추가 진이 작업했습니다. 👊🏻 PULL REQUEST pr날릴때

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants