Web Project/ems

select employees

hmmmmmmmmmmmm 2024. 8. 12. 19:41

 

 

EmployeeController.java

package net.javaguides.ems.controller;

import lombok.AllArgsConstructor;
import net.javaguides.ems.dto.EmployeeDto;
import net.javaguides.ems.service.EmployeeService;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@CrossOrigin("*")
@AllArgsConstructor
@RestController
@RequestMapping("/api/employees")
public class EmployeeController {

    private final EmployeeService employeeService;

    // 특정 ID의 직원 정보를 조회하는 엔드포인트
    @GetMapping("/{id}")
    public ResponseEntity<EmployeeDto> getEmployeeById(@PathVariable("id") Long employeeId) {
        // 서비스 레이어에서 직원 정보를 조회하고, 그 결과를 클라이언트에 반환
        EmployeeDto employeeDto = employeeService.getEmployeeById(employeeId);
        return ResponseEntity.ok(employeeDto);
    }

    // 모든 직원 정보를 조회하는 엔드포인트
    @GetMapping
    public ResponseEntity<List<EmployeeDto>> getAllEmployees() {
        // 서비스 레이어에서 모든 직원 정보를 조회하고, 그 결과를 클라이언트에 반환
        List<EmployeeDto> employees = employeeService.getAllEmployees();
        return ResponseEntity.ok(employees);
    }
}

 

 

EmployeeService.java

package net.javaguides.ems.service;

import net.javaguides.ems.dto.EmployeeDto;

import java.util.List;

// 직원 관련 비즈니스 로직을 처리하는 서비스 인터페이스
public interface EmployeeService {

    // 특정 ID의 직원 정보를 조회
    EmployeeDto getEmployeeById(Long employeeId);

    // 모든 직원 정보를 조회
    List<EmployeeDto> getAllEmployees();
}

 

 

EmployeeServiceImpl.java

package net.javaguides.ems.service.impl;

import lombok.AllArgsConstructor;
import net.javaguides.ems.dto.EmployeeDto;
import net.javaguides.ems.entity.Employee;
import net.javaguides.ems.exception.ResourceNotFoundException;
import net.javaguides.ems.mapper.EmployeeMapper;
import net.javaguides.ems.repository.EmployeeRepository;
import net.javaguides.ems.service.EmployeeService;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

@Service
@AllArgsConstructor
public class EmployeeServiceImpl implements EmployeeService {

    private final EmployeeRepository employeeRepository;

    // 특정 ID의 직원 정보를 데이터베이스에서 조회하고 DTO로 변환하여 반환
    @Override
    public EmployeeDto getEmployeeById(Long employeeId) {
        // 데이터베이스에서 직원 정보를 조회, 조회된 직원이 없을 경우 예외를 발생시킴
        Employee employee = employeeRepository.findById(employeeId)
                .orElseThrow(() -> new ResourceNotFoundException("해당 직원이 없습니다"));

        // 조회된 직원 엔티티를 DTO로 변환하여 반환
        return EmployeeMapper.mapToEmployeeDto(employee);
    }

    // 모든 직원 정보를 데이터베이스에서 조회하고 DTO 리스트로 변환하여 반환
    @Override
    public List<EmployeeDto> getAllEmployees() {
        // 모든 직원 정보를 ID 역순으로 정렬하여 조회
        List<Employee> employees = employeeRepository.findAll(Sort.by(Sort.Order.desc("id")));

        // 조회된 직원 엔티티 리스트를 DTO 리스트로 변환하여 반환
        return employees.stream()
                .map(EmployeeMapper::mapToEmployeeDto)
                .collect(Collectors.toList());
    }
}

 

 

EmployeeDto.java

package net.javaguides.ems.dto;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

// 직원 정보를 전송하기 위한 데이터 전송 객체 (DTO)
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class EmployeeDto {

    // 직원의 고유 ID
    private Long id;

    // 직원의 이메일 주소
    private String email;

    // 직원의 전체 이름
    private String fullName;

    // 직원이 속한 부서
    private String department;
}

 

 

 

EmployeeMapper.java

package net.javaguides.ems.mapper;

import net.javaguides.ems.dto.EmployeeDto;
import net.javaguides.ems.entity.Employee;

// Employee 엔티티와 EmployeeDto 간의 변환을 수행하는 매퍼 클래스
public class EmployeeMapper {

    // EmployeeDto -> Employee 엔티티
    public static Employee mapToEmployee(EmployeeDto employeeDto) {
        Employee employee = new Employee();
        employee.setFullName(employeeDto.getFullName());
        employee.setEmail(employeeDto.getEmail());
        employee.setDepartment(employeeDto.getDepartment());
        return employee;
    }

    // Employee 엔티티 -> EmployeeDto
    public static EmployeeDto mapToEmployeeDto(Employee employee) {
        return new EmployeeDto(
            employee.getId(),
            employee.getEmail(),
            employee.getFullName(),
            employee.getDepartment()
        );
    }
}

 

 

 

EmployeeRepository.java

package net.javaguides.ems.repository;

import net.javaguides.ems.entity.Employee;
import org.springframework.data.jpa.repository.JpaRepository;

// Employee 엔티티와 데이터베이스 간의 상호작용을 담당하는 리포지토리 인터페이스
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
}

 

 

 

Employee.java

package net.javaguides.ems.entity;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import javax.persistence.*;

// 직원 정보를 데이터베이스에 저장하기 위한 엔티티 클래스
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "employees", schema = "ems")
public class Employee {

    // 직원 ID (기본키, 자동 생성)
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "custom-id-generator")
    @SequenceGenerator(name = "custom-id-generator", sequenceName = "custom_sequence", initialValue = 1000)
    private Long id;

    // 직원 이메일 (유일한 값, null 허용되지 않음)
    @Column(name = "email_id", nullable = false, unique = true)
    private String email;

    // 직원 전체 이름
    @Column(name = "full_name")
    private String fullName;

    // 직원이 속한 부서
    @Column(name = "department")
    private String department;
}