Skip to content

Commit

Permalink
(24/05/10 - 1) 클로즈 베타 테스트 버전 배포합니다.
Browse files Browse the repository at this point in the history
(24/05/10 - 1) 클로즈 베타 테스트 버전 배포합니다.
  • Loading branch information
fakerdeft authored May 10, 2024
2 parents 46d2643 + b03ad5a commit 3d65bb1
Show file tree
Hide file tree
Showing 33 changed files with 156 additions and 168 deletions.
2 changes: 0 additions & 2 deletions src/main/generated/com/coverflow/company/domain/QCompany.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,6 @@ public class QCompany extends EntityPathBase<Company> {

public final StringPath name = createString("name");

public final NumberPath<Integer> questionCount = createNumber("questionCount", Integer.class);

public final ListPath<com.coverflow.question.domain.Question, com.coverflow.question.domain.QQuestion> questions = this.<com.coverflow.question.domain.Question, com.coverflow.question.domain.QQuestion>createList("questions", com.coverflow.question.domain.Question.class, com.coverflow.question.domain.QQuestion.class, PathInits.DIRECT2);

public final StringPath type = createString("type");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,6 @@ public class QQuestion extends EntityPathBase<Question> {

public final com.coverflow.global.entity.QBaseTimeEntity _super = new com.coverflow.global.entity.QBaseTimeEntity(this);

public final NumberPath<Integer> answerCount = createNumber("answerCount", Integer.class);

public final ListPath<Answer, QAnswer> answers = this.<Answer, QAnswer>createList("answers", Answer.class, QAnswer.class, PathInits.DIRECT2);

public final com.coverflow.company.domain.QCompany company;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,7 @@
import com.coverflow.company.dto.request.FindCompanyQuestionRequest;
import com.coverflow.company.dto.request.SaveCompanyRequest;
import com.coverflow.company.dto.request.UpdateCompanyRequest;
import com.coverflow.company.dto.response.FindAllCompaniesResponse;
import com.coverflow.company.dto.response.FindCompanyResponse;
import com.coverflow.company.dto.response.SearchCompanyCountResponse;
import com.coverflow.company.dto.response.SearchCompanyResponse;
import com.coverflow.company.dto.response.*;

public interface CompanyService {

Expand Down Expand Up @@ -37,12 +34,17 @@ FindCompanyResponse findByCompanyId(
* [관리자 전용: 기업 조회 메서드]
* 기업을 필터링해서 조회하는 메서드
*/
FindAllCompaniesResponse find(
FindCompanyAdminResponse find(
final int pageNo,
final String criterion,
final FindCompanyAdminRequest request
);

/**
* [관리자 전용: 기업 검색 시 데이터 수]
*/
FindCompanyAdminCountResponse find(final FindCompanyAdminRequest request);

/**
* [기업 등록 메서드]
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,11 @@
import com.coverflow.company.dto.request.FindCompanyQuestionRequest;
import com.coverflow.company.dto.request.SaveCompanyRequest;
import com.coverflow.company.dto.request.UpdateCompanyRequest;
import com.coverflow.company.dto.response.FindAllCompaniesResponse;
import com.coverflow.company.dto.response.FindCompanyResponse;
import com.coverflow.company.dto.response.SearchCompanyCountResponse;
import com.coverflow.company.dto.response.SearchCompanyResponse;
import com.coverflow.company.dto.response.*;
import com.coverflow.company.infrastructure.CompanyRepository;
import com.coverflow.question.application.QuestionServiceImpl;
import com.coverflow.question.dto.CompanyAndQuestionDTO;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Slice;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
Expand Down Expand Up @@ -81,24 +77,31 @@ public FindCompanyResponse findByCompanyId(

@Override
@Transactional(readOnly = true)
public FindAllCompaniesResponse find(
public FindCompanyAdminResponse find(
final int pageNo,
final String criterion,
final FindCompanyAdminRequest request
) {
Page<Company> companies = companyRepository.findWithFilters(generatePageDesc(pageNo, LARGE_PAGE_SIZE, criterion), request)
Slice<Company> companies = companyRepository.findWithFilters(generatePageDesc(pageNo, LARGE_PAGE_SIZE, criterion), request)
.orElseThrow(() -> new CompanyNotFoundException(request));

return FindAllCompaniesResponse.of(
companies.getTotalPages(),
companies.getTotalElements(),
return FindCompanyAdminResponse.from(
companies.getContent()
.stream()
.map(CompaniesDTO::from)
.toList()
);
}

@Override
@Transactional(readOnly = true)
public FindCompanyAdminCountResponse find(final FindCompanyAdminRequest request) {
long totalElements = companyRepository.countByFilters(request);
int totalPages = (int) Math.ceil((double) totalElements / LARGE_PAGE_SIZE);

return FindCompanyAdminCountResponse.of(totalPages, totalElements);
}

@Override
@Transactional
public void save(final SaveCompanyRequest request) {
Expand Down
7 changes: 0 additions & 7 deletions src/main/java/com/coverflow/company/domain/Company.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,6 @@ public class Company extends BaseTimeEntity {
private String city; // 도시
@Column
private String district; // 구
@Column
private int questionCount; // 질문 수

@Enumerated(EnumType.STRING)
private CompanyStatus companyStatus; // 기업 상태 (검토/등록/삭제)
Expand All @@ -46,7 +44,6 @@ public Company(final SaveCompanyRequest request, final String modifiedName) {
this.type = request.type();
this.city = request.city();
this.district = request.district();
this.questionCount = 0;
this.companyStatus = CompanyStatus.EXAMINATION;
}

Expand All @@ -57,8 +54,4 @@ public void updateCompany(final UpdateCompanyRequest request) {
this.district = request.district();
this.companyStatus = CompanyStatus.valueOf(request.companyStatus());
}

public void updateQuestionCount(final int questionCount) {
this.questionCount = questionCount;
}
}
2 changes: 1 addition & 1 deletion src/main/java/com/coverflow/company/dto/CompaniesDTO.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public static CompaniesDTO from(final Company company) {
company.getType(),
company.getCity(),
company.getDistrict(),
company.getQuestionCount(),
company.getQuestions().size(),
company.getCompanyStatus()
);
}
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/coverflow/company/dto/CompanyDTO.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public static CompanyDTO from(final Company company) {
company.getName(),
company.getType(),
company.getCity() + " " + company.getDistrict(),
company.getQuestionCount(),
company.getQuestions().size(),
company.getCompanyStatus()
);
}
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.coverflow.company.dto.response;

public record FindCompanyAdminCountResponse(
int totalPages,
long totalElements
) {
public static FindCompanyAdminCountResponse of(
final int totalPages,
final long totalElements
) {
return new FindCompanyAdminCountResponse(totalPages, totalElements);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.coverflow.company.dto.response;

import com.coverflow.company.dto.CompaniesDTO;

import java.util.List;

public record FindCompanyAdminResponse(
List<CompaniesDTO> companies
) {

public static FindCompanyAdminResponse from(final List<CompaniesDTO> companies) {
return new FindCompanyAdminResponse(companies);
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public static FindCompanyResponse of(
company.getName(),
company.getType(),
company.getCity() + " " + company.getDistrict(),
company.getQuestionCount(),
company.getQuestions().size(),
totalPages,
totalElements,
questions
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public static FindPendingResponse from(final Company company) {
company.getName(),
company.getType(),
company.getCity() + " " + company.getDistrict(),
company.getQuestionCount(),
company.getQuestions().size(),
company.getCompanyStatus()
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import com.coverflow.company.domain.Company;
import com.coverflow.company.dto.request.FindCompanyAdminRequest;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Slice;

Expand All @@ -14,5 +13,7 @@ public interface CompanyCustomRepository {

Long countByName(final String name);

Optional<Page<Company>> findWithFilters(final Pageable pageable, final FindCompanyAdminRequest request);
Optional<Slice<Company>> findWithFilters(final Pageable pageable, final FindCompanyAdminRequest request);

Long countByFilters(final FindCompanyAdminRequest request);
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@
import com.querydsl.core.types.dsl.BooleanExpression;
import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.*;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Slice;
import org.springframework.data.domain.SliceImpl;
import org.springframework.stereotype.Repository;
import org.springframework.util.StringUtils;

import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.stream.Collectors;

import static com.coverflow.company.domain.QCompany.company;
Expand Down Expand Up @@ -65,48 +65,35 @@ public Long countByName(final String name) {
}

@Override
public Optional<Page<Company>> findWithFilters(final Pageable pageable, final FindCompanyAdminRequest request) {
List<Company> companies;
long total;

CompletableFuture<List<Company>> companiesFuture = CompletableFuture.supplyAsync(() ->
jpaQueryFactory
.selectFrom(company)
.where(
toContainsType(request.type()),
toContainsCity(request.city()),
toContainsDistrict(request.district()),
eqCompanyStatus(request.companyStatus())
)
.orderBy(makeOrderSpecifiers(company, pageable))
.offset(pageable.getOffset())
.limit(pageable.getPageSize())
.fetch()
);

CompletableFuture<Long> countFuture = CompletableFuture.supplyAsync(() ->
jpaQueryFactory
.select(company.count())
.from(company)
.where(
toContainsType(request.type()),
toContainsCity(request.city()),
toContainsDistrict(request.district()),
eqCompanyStatus(request.companyStatus())
)
.fetchOne()
);

CompletableFuture.allOf(companiesFuture, countFuture).join();

try {
companies = companiesFuture.get();
total = countFuture.get();
} catch (InterruptedException | ExecutionException e) {
throw new RuntimeException(e);
}
public Optional<Slice<Company>> findWithFilters(final Pageable pageable, final FindCompanyAdminRequest request) {
List<Company> companies = jpaQueryFactory
.selectFrom(company)
.where(
toContainsType(request.type()),
toContainsCity(request.city()),
toContainsDistrict(request.district()),
eqCompanyStatus(request.companyStatus())
)
.orderBy(makeOrderSpecifiers(company, pageable))
.offset(pageable.getOffset())
.limit(pageable.getPageSize())
.fetch();

return Optional.of(new PageImpl<>(companies, pageable, total));
return Optional.of(new SliceImpl<>(companies));
}

@Override
public Long countByFilters(final FindCompanyAdminRequest request) {
return jpaQueryFactory
.select(company.count())
.from(company)
.where(
toContainsType(request.type()),
toContainsCity(request.city()),
toContainsDistrict(request.district()),
eqCompanyStatus(request.companyStatus())
)
.fetchOne();
}

private BooleanExpression toContainsType(final String type) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ public interface CompanyRepository extends JpaRepository<Company, Long>, Company
@Query("""
SELECT c
FROM Company c
LEFT JOIN FETCH c.questions
WHERE c.id = :companyId
AND c.companyStatus = 'REGISTRATION'
""")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,7 @@
import com.coverflow.company.dto.request.FindCompanyQuestionRequest;
import com.coverflow.company.dto.request.SaveCompanyRequest;
import com.coverflow.company.dto.request.UpdateCompanyRequest;
import com.coverflow.company.dto.response.FindAllCompaniesResponse;
import com.coverflow.company.dto.response.FindCompanyResponse;
import com.coverflow.company.dto.response.SearchCompanyCountResponse;
import com.coverflow.company.dto.response.SearchCompanyResponse;
import com.coverflow.company.dto.response.*;
import com.coverflow.global.annotation.AdminAuthorize;
import com.coverflow.global.handler.ResponseHandler;
import com.coverflow.global.util.BadWordUtil;
Expand Down Expand Up @@ -67,19 +64,32 @@ public ResponseEntity<ResponseHandler<FindCompanyResponse>> findByCompanyId(

@GetMapping("/admin")
@AdminAuthorize
public ResponseEntity<ResponseHandler<FindAllCompaniesResponse>> find(
public ResponseEntity<ResponseHandler<FindCompanyAdminResponse>> find(
@RequestParam @PositiveOrZero final int pageNo,
@RequestParam(defaultValue = "createdAt") final String criterion,
@ModelAttribute final FindCompanyAdminRequest request
) {
return ResponseEntity.ok()
.body(ResponseHandler.<FindAllCompaniesResponse>builder()
.body(ResponseHandler.<FindCompanyAdminResponse>builder()
.statusCode(HttpStatus.OK)
.data(companyService.find(pageNo, criterion, request))
.build()
);
}

@GetMapping("/admin/count")
@AdminAuthorize
public ResponseEntity<ResponseHandler<FindCompanyAdminCountResponse>> find(
@ModelAttribute final FindCompanyAdminRequest request
) {
return ResponseEntity.ok()
.body(ResponseHandler.<FindCompanyAdminCountResponse>builder()
.statusCode(HttpStatus.OK)
.data(companyService.find(request))
.build()
);
}

@PostMapping
public ResponseEntity<ResponseHandler<Void>> save(
@RequestBody @Valid final SaveCompanyRequest request
Expand Down
Loading

0 comments on commit 3d65bb1

Please sign in to comment.