Skip to content

Commit

Permalink
[Feature] - [Company] 기업 쿼리 개선 중입니다.
Browse files Browse the repository at this point in the history
[Feature] - [Company] 기업 쿼리 개선 중입니다.
  • Loading branch information
fakerdeft authored Apr 18, 2024
2 parents 8d11c08 + 8b62ae7 commit f723c4b
Show file tree
Hide file tree
Showing 6 changed files with 38 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public SearchCompanyResponse search(
final int pageNo,
final String name
) {
Page<Company> companies = companyRepository.findAllByNameStartingWithAndCompanyStatus(generatePageAsc(pageNo, NORMAL_PAGE_SIZE, "name"), name)
Page<Company> companies = companyRepository.findByNameStartingWithAndCompanyStatus(generatePageAsc(pageNo, NORMAL_PAGE_SIZE, "name"), name)
.orElseThrow(() -> new CompanyNotFoundException(name));

return SearchCompanyResponse.of(
Expand Down
6 changes: 1 addition & 5 deletions src/main/java/com/coverflow/company/domain/Company.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,7 @@
@AllArgsConstructor
@Builder
@Entity
@Table(name = "tbl_company",
indexes = {
@Index(name = "company_name_idx", columnList = "name"),
@Index(name = "company_status_idx", columnList = "companyStatus")
})
@Table(name = "tbl_company", indexes = {@Index(name = "idx_company_name", columnList = "name")})
public class Company extends BaseTimeEntity {

@Id
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public interface CompanyRepository extends JpaRepository<Company, Long>, Company
WHERE c.name LIKE :name%
AND c.companyStatus = 'REGISTRATION'
""")
Optional<Page<Company>> findAllByNameStartingWithAndCompanyStatus(
Optional<Page<Company>> findByNameStartingWithAndCompanyStatus(
final Pageable pageable,
@Param("name") final String name
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,12 @@
import com.coverflow.company.domain.Company;
import com.coverflow.company.domain.CompanyStatus;
import com.coverflow.company.dto.request.FindCompanyAdminRequest;
import com.querydsl.core.types.Order;
import com.querydsl.core.types.OrderSpecifier;
import com.querydsl.core.types.dsl.BooleanExpression;
import com.querydsl.core.types.dsl.EntityPathBase;
import com.querydsl.core.types.dsl.PathBuilder;
import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.util.StringUtils;

import java.util.List;
Expand All @@ -22,32 +17,13 @@
import java.util.concurrent.ExecutionException;

import static com.coverflow.company.domain.QCompany.company;
import static com.coverflow.global.util.RepositoryUtil.makeOrderSpecifiers;

@RequiredArgsConstructor
public class CompanyRepositoryCustomImpl implements CompanyRepositoryCustom {

private final JPAQueryFactory jpaQueryFactory;

public static <T> OrderSpecifier[] makeOrderSpecifiers(final EntityPathBase<T> qClass, final Pageable pageable) {
return pageable.getSort()
.stream()
.map(sort -> toOrderSpecifier(qClass, sort))
.toList().toArray(OrderSpecifier[]::new);
}

private static <T> OrderSpecifier toOrderSpecifier(final EntityPathBase<T> qClass, final Sort.Order sortOrder) {
final Order orderMethod = toOrder(sortOrder);
final PathBuilder<T> pathBuilder = new PathBuilder<>(qClass.getType(), qClass.getMetadata());
return new OrderSpecifier(orderMethod, pathBuilder.get(sortOrder.getProperty()));
}

private static Order toOrder(final Sort.Order sortOrder) {
if (sortOrder.isAscending()) {
return Order.ASC;
}
return Order.DESC;
}

@Override
public Optional<Page<Company>> findWithFilters(
final Pageable pageable,
Expand Down
3 changes: 0 additions & 3 deletions src/main/java/com/coverflow/global/util/PasswordUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,6 @@
import java.util.Random;


/**
* 폼 로그인 구현 시 사용 예정
*/
public class PasswordUtil {

public static String generateRandomPassword() {
Expand Down
34 changes: 34 additions & 0 deletions src/main/java/com/coverflow/global/util/RepositoryUtil.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.coverflow.global.util;

import com.querydsl.core.types.Order;
import com.querydsl.core.types.OrderSpecifier;
import com.querydsl.core.types.dsl.EntityPathBase;
import com.querydsl.core.types.dsl.PathBuilder;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;

public class RepositoryUtil {

private RepositoryUtil() {
}

public static <T> OrderSpecifier[] makeOrderSpecifiers(final EntityPathBase<T> qClass, final Pageable pageable) {
return pageable.getSort()
.stream()
.map(sort -> toOrderSpecifier(qClass, sort))
.toList().toArray(OrderSpecifier[]::new);
}

private static <T> OrderSpecifier toOrderSpecifier(final EntityPathBase<T> qClass, final Sort.Order sortOrder) {
final Order orderMethod = toOrder(sortOrder);
final PathBuilder<T> pathBuilder = new PathBuilder<>(qClass.getType(), qClass.getMetadata());
return new OrderSpecifier(orderMethod, pathBuilder.get(sortOrder.getProperty()));
}

private static Order toOrder(final Sort.Order sortOrder) {
if (sortOrder.isAscending()) {
return Order.ASC;
}
return Order.DESC;
}
}

0 comments on commit f723c4b

Please sign in to comment.