From 7485caa06fe939a439cbef73ff70355df550b10b Mon Sep 17 00:00:00 2001 From: chanmin9929 Date: Sun, 11 May 2025 23:56:48 +0900 Subject: [PATCH] =?UTF-8?q?[FEAT]#2=20=ED=9A=8C=EC=82=AC=20=EB=93=B1?= =?UTF-8?q?=EB=A1=9D=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../company/controllers/AdminController.java | 39 ++++++++++++++ .../company/dto/CompanyRequestDto.java | 22 ++++++++ .../goorm_3team/company/models/Company.java | 54 +++++++++++++++++++ .../repositories/CompanyRepository.java | 15 ++++++ .../company/services/AdminService.java | 41 ++++++++++++++ 5 files changed, 171 insertions(+) create mode 100644 src/main/java/goorm_3team/company/controllers/AdminController.java create mode 100644 src/main/java/goorm_3team/company/dto/CompanyRequestDto.java create mode 100644 src/main/java/goorm_3team/company/models/Company.java create mode 100644 src/main/java/goorm_3team/company/repositories/CompanyRepository.java create mode 100644 src/main/java/goorm_3team/company/services/AdminService.java diff --git a/src/main/java/goorm_3team/company/controllers/AdminController.java b/src/main/java/goorm_3team/company/controllers/AdminController.java new file mode 100644 index 0000000..59e9bd3 --- /dev/null +++ b/src/main/java/goorm_3team/company/controllers/AdminController.java @@ -0,0 +1,39 @@ +package goorm_3team.company.controllers; + +import goorm_3team.company.dto.CompanyRequestDto; +import goorm_3team.company.dto.JobDescriptionRequestDto; +import goorm_3team.company.services.AdminService; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +// 관리자용 API 컨트롤러 +@RestController +@RequestMapping("/api/admin") +@RequiredArgsConstructor +public class AdminController { + + // AdminService 주입됨 (생성자 통해 자동 주입됨) + private final AdminService adminService; + + // 회사 등록 요청 처리 + @PostMapping("/register/company") + public ResponseEntity registerCompany(@RequestBody CompanyRequestDto req) { + // 서비스 레이어에 등록 요청 전달 + adminService.registerCompany(req); + // 응답은 상태 코드 200 OK만 반환함 + return ResponseEntity.ok().build(); + } + + // 채용 공고 등록 요청 처리 + @PostMapping("/register/job-description") + public ResponseEntity registerJobDescription(@RequestBody JobDescriptionRequestDto req) { + // 서비스에 JD 등록 요청 전달 + adminService.registerJobDescription(req); + // 성공 시 OK 반환 + return ResponseEntity.ok().build(); + } +} diff --git a/src/main/java/goorm_3team/company/dto/CompanyRequestDto.java b/src/main/java/goorm_3team/company/dto/CompanyRequestDto.java new file mode 100644 index 0000000..e6cbb4c --- /dev/null +++ b/src/main/java/goorm_3team/company/dto/CompanyRequestDto.java @@ -0,0 +1,22 @@ +package goorm_3team.company.dto; + +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +// 회사 등록 요청 시 사용하는 데이터 전달 객체 (DTO) +// 클라이언트 → 서버로 전달되는 데이터를 담는 용도임 +@Data // Lombok 어노테이션: 모든 필드에 대해 Getter, Setter, toString 등을 자동 생성함 +@Getter // 명시적으로도 추가돼 있음 (Data 어노테이션에 포함되어 있으므로 중복임) +@Setter +public class CompanyRequestDto { + + // 회사 이름 (예: 카카오, 네이버 등) + private String name; + + // 회사 주소 (예: 서울특별시 강남구 ...) + private String address; + + // 회사 유형 (예: 대기업, 스타트업, 중견기업 등) + private String companyType; +} diff --git a/src/main/java/goorm_3team/company/models/Company.java b/src/main/java/goorm_3team/company/models/Company.java new file mode 100644 index 0000000..db661fe --- /dev/null +++ b/src/main/java/goorm_3team/company/models/Company.java @@ -0,0 +1,54 @@ +package goorm_3team.company.models; + +import goorm_3team.company.dto.CompanyRequestDto; +import goorm_3team.company.dto.JobDescriptionRequestDto; +import java.util.List; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.FetchType; +import jakarta.persistence.OneToMany; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +// 회사 정보를 나타내는 JPA 엔티티 클래스 +// DB의 company 테이블과 매핑됨 +@Entity +@Setter +@Getter +@NoArgsConstructor // 기본 생성자 필요 (JPA에서 필수로 사용함) +public class Company { + + @Id // 기본 키 지정 + @GeneratedValue(strategy = GenerationType.IDENTITY) // 자동 증가 값 사용 (MySQL 기준) + private Long id; + + // 회사명 (예: 삼성전자) + private String name; + + // 주소 (예: 서울 강남구 ...) + private String address; + + // 회사 유형 (예: 대기업, 스타트업 등) + private String companyType; + + @OneToMany(mappedBy = "company", targetEntity = JobDescription.class, cascade = CascadeType.ALL, fetch = FetchType.LAZY) + private List jobDescriptions; + + // DTO를 받아서 Company 객체로 변환하는 생성자 + public Company(CompanyRequestDto req) { + setName(req.getName()); + setAddress(req.getAddress()); + setCompanyType(req.getCompanyType()); + } + + public Company(String name, String address, String companyType) { + this.name = name; + this.address = address; + this.companyType = companyType; + } +} diff --git a/src/main/java/goorm_3team/company/repositories/CompanyRepository.java b/src/main/java/goorm_3team/company/repositories/CompanyRepository.java new file mode 100644 index 0000000..812b7de --- /dev/null +++ b/src/main/java/goorm_3team/company/repositories/CompanyRepository.java @@ -0,0 +1,15 @@ +package goorm_3team.company.repositories; + +import goorm_3team.company.models.Company; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +// 회사 엔티티(Company)에 대한 DB 접근 인터페이스 +// JpaRepository를 상속받으면 기본적인 CRUD 메서드가 자동으로 생성됨 +public interface CompanyRepository extends JpaRepository { + + // 회사 유형(companyType)에 따라 회사 목록을 조회함 + // 예: "대기업", "스타트업" 등으로 필터링할 때 사용함 + List findByCompanyType(String companyType); +} diff --git a/src/main/java/goorm_3team/company/services/AdminService.java b/src/main/java/goorm_3team/company/services/AdminService.java new file mode 100644 index 0000000..eed055f --- /dev/null +++ b/src/main/java/goorm_3team/company/services/AdminService.java @@ -0,0 +1,41 @@ +package goorm_3team.company.services; + +import goorm_3team.company.dto.CompanyRequestDto; +import goorm_3team.company.dto.JobDescriptionRequestDto; +import goorm_3team.company.models.Company; +import goorm_3team.company.models.JobDescription; +import goorm_3team.company.repositories.CompanyRepository; +import goorm_3team.company.repositories.JobDescriptionRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +// 관리자 기능을 담당하는 서비스 클래스 +// 회사 등록, 채용공고 등록 기능을 포함함 +@Service +@RequiredArgsConstructor // 생성자 주입 자동 생성 +public class AdminService { + + private final CompanyRepository companyRepository; + private final JobDescriptionRepository jobDescriptionRepository; + + // 회사 등록 처리 + public void registerCompany(CompanyRequestDto req) { + // 요청 DTO를 Company 엔티티로 변환 + Company company = new Company(req); + // DB에 저장 + companyRepository.save(company); + } + + // 채용공고 등록 처리 + public void registerJobDescription(JobDescriptionRequestDto req) { + // DTO에 포함된 companyId로 실제 회사 조회 + Company company = companyRepository.findById(req.getCompanyId()) + .orElseThrow(() -> new RuntimeException("Can't find company with ID : " + req.getCompanyId())); + + // 요청 DTO와 회사 정보를 바탕으로 JD 생성 + JobDescription jobDescription = new JobDescription(req, company); + + // DB에 저장 + jobDescriptionRepository.save(jobDescription); + } +}