Skip to content

Commit

Permalink
Merge branch 'multi-dev' into feature/project-authorization-refactor-…
Browse files Browse the repository at this point in the history
…#191
  • Loading branch information
Eseas authored Feb 7, 2025
2 parents 0f63fe0 + b69e639 commit 989ac52
Show file tree
Hide file tree
Showing 71 changed files with 832 additions and 467 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import com.seveneleven.response.ErrorCode;
import jakarta.persistence.EntityNotFoundException;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

Expand All @@ -34,4 +35,13 @@ public ResponseEntity<APIResponse<Exception>> handleEntityNotFoundException(
.status(ErrorCode.ENTITY_NOT_FOUND.getStatus())
.body(APIResponse.fail(ErrorCode.ENTITY_NOT_FOUND, e.getMessage()));
}

@ExceptionHandler(value = {MethodArgumentNotValidException.class})
public ResponseEntity<APIResponse<Exception>> handleValidException(
MethodArgumentNotValidException e
){
return ResponseEntity
.status(e.getStatusCode())
.body(APIResponse.fail(ErrorCode.BAD_REQUEST, ErrorCode.BAD_REQUEST.getMessage()));
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
package com.seveneleven.company.application;

import com.seveneleven.company.dto.*;
import com.seveneleven.company.service.AdminCompanyHistoryService;
import com.seveneleven.company.service.AdminCompanyService;
import com.seveneleven.entity.member.Company;
import com.seveneleven.entity.member.constant.YN;
import com.seveneleven.member.service.AdminMemberService;
import com.seveneleven.response.PaginatedResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
Expand All @@ -12,9 +16,13 @@
@RequiredArgsConstructor
public class AdminCompanyFacade {
private final AdminCompanyService adminCompanyService;
private final AdminCompanyHistoryService adminCompanyHistoryService;
private final AdminMemberService adminMemberService;

public PostCompany.Response registerCompany(PostCompany.Request request) {
return adminCompanyService.createCompany(request);
PostCompany.Response response = adminCompanyService.createCompany(request);
adminCompanyHistoryService.saveHistory(request.toEntity());
return response;
}

public GetCompanyDetail.Response getCompanyDetail(Long id) {
Expand All @@ -30,12 +38,17 @@ public PaginatedResponse<GetCompanies.Response> getCompanyBySearchTerm(String te
}

public PutCompany.Response updateCompany(Long id, PutCompany.Request request) {
return adminCompanyService.updateCompany(id, request);
PutCompany.Response response = adminCompanyService.updateCompany(id, request);
adminCompanyHistoryService.saveHistory(request.toEntity());
return response;
}

public void deleteCompany(Long id) {
// TODO - 프로젝트 삭제 로직 추가
adminCompanyService.deleteCompany(id);
public void changeCompanyIsActive(Long id) {
Company deletedCompany = adminCompanyService.changeCompanyIsActive(id);
if(deletedCompany.getIsActive().equals(YN.N)) {
adminMemberService.deleteCompanyMember(deletedCompany);
}
adminCompanyHistoryService.saveHistory(deletedCompany);
}

public List<GetAllCompanies> getAllCompanies() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.seveneleven.response.APIResponse;
import com.seveneleven.response.PaginatedResponse;
import com.seveneleven.response.SuccessCode;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
Expand All @@ -29,7 +30,7 @@ public class CompanyController implements CompanyDocs {
*/
@PostMapping("")
@Override
public ResponseEntity<APIResponse<PostCompany.Response>> createCompany(@RequestBody PostCompany.Request companyRequest) {
public ResponseEntity<APIResponse<PostCompany.Response>> createCompany(@RequestBody @Valid PostCompany.Request companyRequest) {
return ResponseEntity
.status(SuccessCode.CREATED.getStatus())
.body(APIResponse.success(SuccessCode.CREATED, adminCompanyFacade.registerCompany(companyRequest)));
Expand Down Expand Up @@ -100,7 +101,7 @@ public ResponseEntity<APIResponse<PaginatedResponse<GetCompanies.Response>>> sea
@Override
public ResponseEntity<APIResponse<PutCompany.Response>> updateCompany(
@PathVariable Long id,
@RequestBody PutCompany.Request request
@RequestBody @Valid PutCompany.Request request
) {
return ResponseEntity
.status(SuccessCode.UPDATED.getStatus())
Expand All @@ -111,15 +112,15 @@ public ResponseEntity<APIResponse<PutCompany.Response>> updateCompany(
함수명 : deleteCompany
목적 : 회사 상세 정보 삭제
*/
@DeleteMapping("/{id}")
@PatchMapping("/{id}")
@Override
public ResponseEntity<APIResponse<Object>> deleteCompany(
public ResponseEntity<APIResponse<Object>> changeCompanyIsActive(
@PathVariable Long id
) {
adminCompanyFacade.deleteCompany(id);
adminCompanyFacade.changeCompanyIsActive(id);
return ResponseEntity
.status(SuccessCode.DELETED.getStatus())
.body(APIResponse.success(SuccessCode.DELETED));
.status(SuccessCode.UPDATED.getStatus())
.body(APIResponse.success(SuccessCode.UPDATED));
}

/*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

Expand All @@ -34,7 +35,7 @@ public interface CompanyDocs {
)
}
)
ResponseEntity<APIResponse<PostCompany.Response>> createCompany(@RequestBody PostCompany.Request companyRequest);
ResponseEntity<APIResponse<PostCompany.Response>> createCompany(@RequestBody @Valid PostCompany.Request companyRequest);

@GetMapping("/{id}")
@Operation(
Expand Down Expand Up @@ -181,17 +182,17 @@ ResponseEntity<APIResponse<PaginatedResponse<GetCompanies.Response>>> searchComp
)
ResponseEntity<APIResponse<PutCompany.Response>> updateCompany(
@PathVariable Long id,
@RequestBody PutCompany.Request request
@RequestBody @Valid PutCompany.Request request
);

@DeleteMapping("/{id}")
@PatchMapping("/{id}")
@Operation(
summary = "회사 삭제",
description = "회사 삭제",
summary = "회사 상태 변경",
description = "회사 상태 변경",
responses = {
@ApiResponse(
responseCode = "200",
description = "성공적으로 회사를 삭제했습니다."
description = "수정 완료."
)
},
parameters = {
Expand All @@ -203,7 +204,7 @@ ResponseEntity<APIResponse<PutCompany.Response>> updateCompany(
)
}
)
ResponseEntity<APIResponse<Object>> deleteCompany(@PathVariable Long id);
ResponseEntity<APIResponse<Object>> changeCompanyIsActive(@PathVariable Long id);

@GetMapping("/all")
@Operation(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@
import com.seveneleven.response.APIResponse;
import com.seveneleven.response.SuccessCode;
import com.seveneleven.util.file.dto.FileMetadataDto;
import io.swagger.v3.oas.annotations.media.Schema;
import com.seveneleven.util.security.dto.CustomUserDetails;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

Expand All @@ -23,11 +24,10 @@ public class CompanyFileController {
*/
@PostMapping(value = "/{companyId}/logo-image", consumes = "multipart/form-data")
public ResponseEntity<APIResponse> uploadFile(@PathVariable("companyId") Long companyId,
@RequestParam("file")
@Schema(type = "string", format = "binary", description = "File to upload") MultipartFile file
) {
//TODO) 토큰에서 uploader 정보 가져오기
Long uploaderId = 1L;
@RequestParam("file") MultipartFile file,
@AuthenticationPrincipal CustomUserDetails userDetails
) {
Long uploaderId = userDetails.getId();

companyFileService.uploadLogoImage(file, companyId, uploaderId);

Expand Down Expand Up @@ -57,9 +57,10 @@ public ResponseEntity<APIResponse> getCompanyLogo(@PathVariable("companyId") Lon
* @return ResponseEntity<APIResponse<SuccessCode>>
*/
@DeleteMapping(value = "/{companyId}/logo-image")
public ResponseEntity<APIResponse<SuccessCode>> deleteLogo(@PathVariable("companyId") Long companyId) {
//TODO) 토큰에서 uploader 정보 가져오기
Long uploaderId = 1L;
public ResponseEntity<APIResponse<SuccessCode>> deleteLogo(@PathVariable("companyId") Long companyId,
@AuthenticationPrincipal CustomUserDetails userDetails
) {
Long uploaderId = userDetails.getId();

companyFileService.deleteLogoImage(companyId, uploaderId);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@

import com.seveneleven.entity.member.Company;
import com.seveneleven.entity.member.constant.BusinessType;
import jakarta.validation.constraints.NotBlank;
import lombok.Getter;

public class PostCompany {
@Getter
public static class Request {
@NotBlank
private String companyName;
private String representativeName;
private String representativeContact;
Expand Down
14 changes: 14 additions & 0 deletions Admin/src/main/java/com/seveneleven/company/dto/PutCompany.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.seveneleven.entity.member.Company;
import com.seveneleven.entity.member.constant.BusinessType;
import com.seveneleven.entity.member.constant.YN;
import jakarta.validation.constraints.NotBlank;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
Expand All @@ -11,6 +12,7 @@
public class PutCompany {
@Getter
public static class Request {
@NotBlank
private String companyName;
private String representativeName;
private String representativeContact;
Expand Down Expand Up @@ -48,6 +50,18 @@ public Company toEntity() {
businessRegistrationNumber
);
}

public Company updateCompany(Company company) {
return company.updateCompany(
companyName,
representativeName,
representativeContact,
representativeEmail,
address,
businessType,
businessRegistrationNumber
);
}
}

@Getter
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.seveneleven.company.repository;

import com.seveneleven.entity.member.CompanyHistory;
import org.springframework.data.jpa.repository.JpaRepository;

public interface AdminCompanyHistoryRepository extends JpaRepository<CompanyHistory, Long> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.seveneleven.company.repository;

import com.seveneleven.company.service.AdminCompanyHistoryStore;
import com.seveneleven.entity.member.Company;
import com.seveneleven.entity.member.CompanyHistory;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

@Component
@RequiredArgsConstructor
public class AdminCompanyHistoryStoreImpl implements AdminCompanyHistoryStore {
private final AdminCompanyHistoryRepository adminCompanyHistoryRepository;

@Override
public void store(Company company) {
adminCompanyHistoryRepository.save(CompanyHistory.of(company));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,18 +33,18 @@ public Company getActiveCompany(Long id) {

@Override
public Page<GetProject.Response> getCompanyProject(Pageable pageable, Long id) {
Company company = companyRepository.findByIdAndIsActive(id, YN.Y).orElseThrow(CompanyNotFoundException::new);
Company company = companyRepository.findById(id).orElseThrow(CompanyNotFoundException::new);
return adminProjectRepository.findByCustomerOrDeveloper(pageable, company, company).map(GetProject.Response::of);
}

@Override
public Page<GetCompanies.Response> getCompanies(Pageable pageable) {
return companyRepository.findByIsActive(pageable,YN.Y).map(GetCompanies.Response::getCompaniesResponse);
return companyRepository.findAll(pageable).map(GetCompanies.Response::getCompaniesResponse);
}

@Override
public Page<GetCompanies.Response> getCompaniesBySearchTerm(String searchTerm, Pageable pageable) {
return companyRepository.findByIsActiveAndCompanyNameContainingIgnoreCase(YN.Y, searchTerm, pageable)
return companyRepository.findByCompanyNameContainingIgnoreCase(searchTerm, pageable)
.map(GetCompanies.Response::getCompaniesResponse);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@ public interface CompanyRepository extends JpaRepository<Company, Long> {

Optional<Company> findByIdAndIsActive(Long id, YN isActive);

Page<Company> findByIsActive(Pageable pageable, YN isActive);

Page<Company> findByIsActiveAndCompanyNameContainingIgnoreCase(YN isActive, String searchTerm, Pageable pageable);
Page<Company> findByCompanyNameContainingIgnoreCase(String searchTerm, Pageable pageable);
List<Company> findAllByIsActiveOrderByCompanyNameAsc(YN isActive);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.seveneleven.company.service;

import com.seveneleven.entity.member.Company;

public interface AdminCompanyHistoryService {
void saveHistory(Company company);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.seveneleven.company.service;

import com.seveneleven.entity.member.Company;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

@Component
@RequiredArgsConstructor
public class AdminCompanyHistoryServiceImpl implements AdminCompanyHistoryService{
private final AdminCompanyHistoryStore adminCompanyHistoryStore;
@Override
public void saveHistory(Company company) {
adminCompanyHistoryStore.store(company);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.seveneleven.company.service;

import com.seveneleven.entity.member.Company;

public interface AdminCompanyHistoryStore {
void store(Company company);
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.seveneleven.company.service;

import com.seveneleven.company.dto.*;
import com.seveneleven.entity.member.Company;
import com.seveneleven.response.PaginatedResponse;

import java.util.List;
Expand All @@ -11,6 +12,6 @@ public interface AdminCompanyService {
PaginatedResponse<GetCompanies.Response> getListOfCompanies(Integer page);
PaginatedResponse<GetCompanies.Response> searchCompaniesByName(String name, Integer page);
PutCompany.Response updateCompany(Long id, PutCompany.Request request);
void deleteCompany(Long id);
Company changeCompanyIsActive(Long id);
List<GetAllCompanies> getAllCompanies();
}
Loading

0 comments on commit 989ac52

Please sign in to comment.