Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions src/main/java/goorm_3team/company/controllers/AdminController.java
Original file line number Diff line number Diff line change
@@ -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();
}
}
22 changes: 22 additions & 0 deletions src/main/java/goorm_3team/company/dto/CompanyRequestDto.java
Original file line number Diff line number Diff line change
@@ -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;
}
54 changes: 54 additions & 0 deletions src/main/java/goorm_3team/company/models/Company.java
Original file line number Diff line number Diff line change
@@ -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<JobDescription> 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;
}
}
Original file line number Diff line number Diff line change
@@ -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<Company, Long> {

// 회사 유형(companyType)에 따라 회사 목록을 조회함
// 예: "대기업", "스타트업" 등으로 필터링할 때 사용함
List<Company> findByCompanyType(String companyType);
}
41 changes: 41 additions & 0 deletions src/main/java/goorm_3team/company/services/AdminService.java
Original file line number Diff line number Diff line change
@@ -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);
}
}
Loading