feat: create employee service, office service
This commit is contained in:
parent
be035d4a82
commit
66d9676911
@ -3,5 +3,8 @@ package com.example.nto.repository;
|
||||
import com.example.nto.domain.entity.Office;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
public interface OfficeRepository extends JpaRepository<Office, Long> {
|
||||
Optional<Office> findByName(String name);
|
||||
}
|
||||
|
@ -3,5 +3,8 @@ package com.example.nto.repository;
|
||||
import com.example.nto.domain.entity.Position;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
public interface PositionRepository extends JpaRepository<Position, Long> {
|
||||
Optional<Position> findByName(String name);
|
||||
}
|
||||
|
24
src/main/java/com/example/nto/service/EmployeeService.java
Normal file
24
src/main/java/com/example/nto/service/EmployeeService.java
Normal file
@ -0,0 +1,24 @@
|
||||
package com.example.nto.service;
|
||||
|
||||
import com.example.nto.dto.entity.employee.EmployeeCreateDTO;
|
||||
import com.example.nto.dto.entity.employee.EmployeeDTO;
|
||||
import com.example.nto.dto.entity.employee.EmployeeItemDTO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface EmployeeService {
|
||||
List<EmployeeItemDTO> getAll();
|
||||
List<EmployeeItemDTO> getWorkingEmployee(boolean isWorking);
|
||||
|
||||
EmployeeDTO getById(long employeeId);
|
||||
EmployeeDTO getByEmail(String email);
|
||||
EmployeeDTO getByTelephone(String telephone);
|
||||
|
||||
|
||||
EmployeeDTO create(EmployeeCreateDTO employeeCreateDTO);
|
||||
EmployeeDTO update(long employeeId, EmployeeDTO employeeDTO);
|
||||
void delete(long employeeId);
|
||||
|
||||
void patchProfileImage(long employeeId, String imageUrl);
|
||||
void patchBlockEmployee(long employeeId, boolean blockStatus);
|
||||
}
|
@ -0,0 +1,156 @@
|
||||
package com.example.nto.service.impl;
|
||||
|
||||
import com.example.nto.aspect.annotation.LogExample;
|
||||
import com.example.nto.domain.entity.*;
|
||||
import com.example.nto.domain.exception.ConflictResourceException;
|
||||
import com.example.nto.domain.exception.ResourceNotFoundException;
|
||||
import com.example.nto.dto.entity.employee.EmployeeCreateDTO;
|
||||
import com.example.nto.dto.entity.employee.EmployeeDTO;
|
||||
import com.example.nto.dto.entity.employee.EmployeeItemDTO;
|
||||
import com.example.nto.dto.mappers.employee.EmployeeCreateMapper;
|
||||
import com.example.nto.dto.mappers.employee.EmployeeItemMapper;
|
||||
import com.example.nto.dto.mappers.employee.EmployeeMapper;
|
||||
import com.example.nto.repository.EmployeeRepository;
|
||||
import com.example.nto.repository.OfficeRepository;
|
||||
import com.example.nto.repository.PositionRepository;
|
||||
import com.example.nto.repository.RoleRepository;
|
||||
import com.example.nto.service.EmployeeService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class EmployeeServiceImpl implements EmployeeService {
|
||||
private final EmployeeRepository employeeRepository;
|
||||
private final OfficeRepository officeRepository;
|
||||
private final RoleRepository roleRepository;
|
||||
private final PositionRepository positionRepository;
|
||||
private final PasswordEncoder passwordEncoder;
|
||||
|
||||
@Override
|
||||
@LogExample
|
||||
public List<EmployeeItemDTO> getAll() {
|
||||
return employeeRepository.findAll().stream().map(EmployeeItemMapper::convertToDTO).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
@LogExample
|
||||
public List<EmployeeItemDTO> getWorkingEmployee(boolean isWorking) {
|
||||
return employeeRepository.findAll().stream().filter(employee -> checkWorking(employee, isWorking))
|
||||
.map(EmployeeItemMapper::convertToDTO).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
@LogExample
|
||||
public EmployeeDTO getById(long employeeId) {
|
||||
return employeeRepository.findById(employeeId).map(EmployeeMapper::convertToDTO)
|
||||
.orElseThrow(() -> new ResourceNotFoundException("Работник с id (" + employeeId + ") не найден!"));
|
||||
}
|
||||
|
||||
@Override
|
||||
@LogExample
|
||||
public EmployeeDTO getByEmail(String email) {
|
||||
return employeeRepository.findByEmail(email).map(EmployeeMapper::convertToDTO)
|
||||
.orElseThrow(() -> new ResourceNotFoundException("Работник с email (" + email + ") не найден!"));
|
||||
}
|
||||
|
||||
@Override
|
||||
@LogExample
|
||||
public EmployeeDTO getByTelephone(String telephone) {
|
||||
return employeeRepository.findByTelephone(telephone).map(EmployeeMapper::convertToDTO)
|
||||
.orElseThrow(() -> new ResourceNotFoundException("Работник с telephone (" + telephone + ") не найден!"));
|
||||
}
|
||||
|
||||
@Override
|
||||
@LogExample
|
||||
public EmployeeDTO create(EmployeeCreateDTO employeeCreateDTO) {
|
||||
Optional<Employee> employeeEmail = employeeRepository.findByEmail(employeeCreateDTO.getEmail());
|
||||
Optional<Employee> employeeTelephone = employeeRepository.findByTelephone(employeeCreateDTO.getTelephone());
|
||||
|
||||
if (employeeEmail.isPresent() || employeeTelephone.isPresent()) {
|
||||
throw new ConflictResourceException("Пользователь с таким email или телефоном уже существует!");
|
||||
}
|
||||
|
||||
Office office = officeRepository.findByName(employeeCreateDTO.getOfficeName())
|
||||
.orElseThrow(() -> new ResourceNotFoundException("Офис с именем (" + employeeCreateDTO.getOfficeName() + ") не найден!"));
|
||||
Position position = positionRepository.findByName(employeeCreateDTO.getPositionName())
|
||||
.orElseThrow(() -> new ResourceNotFoundException("Позиция с именем (" + employeeCreateDTO.getPositionName() + ") не найден!"));
|
||||
Role role = roleRepository.findByRoleName(employeeCreateDTO.getRole())
|
||||
.orElseThrow(() -> new ResourceNotFoundException("Роль с названием (" + employeeCreateDTO.getRole() + ") не найден!"));
|
||||
|
||||
return EmployeeMapper.convertToDTO(employeeRepository.save(
|
||||
EmployeeCreateMapper.convertFromDTO(employeeCreateDTO, passwordEncoder.encode(employeeCreateDTO.getPassword()), office, position, role)));
|
||||
}
|
||||
|
||||
@Override
|
||||
@LogExample
|
||||
public EmployeeDTO update(long employeeId, EmployeeDTO employeeDTO) {
|
||||
Employee employee = employeeRepository.findById(employeeId)
|
||||
.orElseThrow(() -> new ResourceNotFoundException("Работник с id (" + employeeId + ") не найден!"));
|
||||
|
||||
Optional<Employee> employeeEmail = employeeRepository.findByEmail(employeeDTO.getEmail());
|
||||
Optional<Employee> employeeTelephone = employeeRepository.findByTelephone(employeeDTO.getTelephone());
|
||||
|
||||
if (employeeEmail.isPresent() || employeeTelephone.isPresent()) {
|
||||
throw new ConflictResourceException("Пользователь с таким email или телефоном уже существует!");
|
||||
}
|
||||
|
||||
Office office = officeRepository.findByName(employeeDTO.getOfficeName())
|
||||
.orElseThrow(() -> new ResourceNotFoundException("Офис с именем (" + employeeDTO.getOfficeName() + ") не найден!"));
|
||||
Position position = positionRepository.findByName(employeeDTO.getPositionName())
|
||||
.orElseThrow(() -> new ResourceNotFoundException("Позиция с именем (" + employeeDTO.getPositionName() + ") не найден!"));
|
||||
|
||||
employee.setName(employeeDTO.getName());
|
||||
employee.setSurname(employeeDTO.getSurname());
|
||||
employee.setPatronymic(employeeDTO.getPatronymic());
|
||||
employee.setAboutMe(employeeDTO.getAboutMe());
|
||||
employee.setTelephone(employee.getTelephone());
|
||||
employee.setEmail(employee.getEmail());
|
||||
employee.setOffice(office);
|
||||
employee.setPosition(position);
|
||||
|
||||
// profileImageUrl меняется в отдельном эндпоинте
|
||||
|
||||
employee.setBlocked(employeeDTO.isBlocked());
|
||||
|
||||
return EmployeeMapper.convertToDTO(employeeRepository.save(employee));
|
||||
}
|
||||
|
||||
@Override
|
||||
@LogExample
|
||||
public void delete(long employeeId) {
|
||||
employeeRepository.findById(employeeId).orElseThrow(() -> new ResourceNotFoundException("Работник с id (" + employeeId + ") не найден!"));
|
||||
employeeRepository.deleteById(employeeId);
|
||||
}
|
||||
|
||||
@Override
|
||||
@LogExample
|
||||
public void patchProfileImage(long employeeId, String imageUrl) {
|
||||
Employee employee = employeeRepository.findById(employeeId)
|
||||
.orElseThrow(() -> new ResourceNotFoundException("Работник с id (" + employeeId + ") не найден!"));
|
||||
employee.setProfileImageUrl(imageUrl);
|
||||
employeeRepository.save(employee);
|
||||
}
|
||||
|
||||
@Override
|
||||
@LogExample
|
||||
public void patchBlockEmployee(long employeeId, boolean blockStatus) {
|
||||
Employee employee = employeeRepository.findById(employeeId)
|
||||
.orElseThrow(() -> new ResourceNotFoundException("Работник с id (" + employeeId + ") не найден!"));
|
||||
employee.setBlocked(blockStatus);
|
||||
employeeRepository.save(employee);
|
||||
}
|
||||
|
||||
private static boolean checkWorking(Employee employee, boolean isWorking) {
|
||||
List<Visit> visits = employee.getVisits().stream().filter(visit -> !visit.isFinished()).collect(Collectors.toList());
|
||||
|
||||
if (visits.isEmpty()) return !isWorking;
|
||||
else if (visits.size() == 1) return isWorking;
|
||||
else throw new IllegalStateException("Пользователь не может находится в суперпозиция");
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user