All the code I have is divided into different layers:
Controller:
package com.ex.admin.controllers; import com.ex.admin.dto.EmployeeDTO; import com.ex.admin.services.impl.EmployeeServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.rest.webmvc.BasePathAwareController; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.List; @RestController @BasePathAwareController @RequestMapping("api/admin/employee") public class EmployeeController { @Autowired EmployeeServiceImpl employeeServiceImpl; @GetMapping(value = "/employees") public ResponseEntity<List<EmployeeDTO>> finAllEmployees() { return employeeServiceImpl.findAllEmployees(); } @DeleteMapping(value = "/delete") public ResponseEntity<EmployeeDTO> deleteManyEmployees(@RequestBody List<String> codeList) { return employeeServiceImpl.deleteManyEmployees(codeList); } @DeleteMapping(value = "/delete/{code}") public ResponseEntity<EmployeeDTO> deleteEmployee(@PathVariable("code") String employeeCode) { return employeeServiceImpl.deleteEmployee(employeeCode); } @PostMapping(value = "/create") public ResponseEntity<EmployeeDTO> createEmployee(@RequestBody EmployeeDTO employeeDTO) { return employeeServiceImpl.createNewEmployee(employeeDTO); } @PutMapping(value = "/edit") public ResponseEntity<EmployeeDTO> editEmployee(@RequestBody EmployeeDTO employeeDTO) { return employeeServiceImpl.editEmployee(employeeDTO); } } Mapper :
package com.ex.admin.dto.mappers; import com.ex.admin.dto.EmployeeDTO; import com.ex.admin.entity.Employee; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.Mappings; @Mapper(componentModel = "spring") public interface EmployeeMapper { @Mappings({ @Mapping(target="id", source="entity.id"), @Mapping(target="employeeName", source="entity.codeOfEmployee"), @Mapping(target="ruName", source="entity.nameRu"), @Mapping(target="kzName", source="entity.nameKk"), @Mapping(target="enName", source="entity.nameEn") }) EmployeeDTO employeeToEmployeeDTO(Employee entity); @Mappings({ @Mapping(target="id", source="dto.id"), @Mapping(target="codeOfEmployee", source="dto.employeeName"), @Mapping(target="nameRu", source="dto.ruName"), @Mapping(target="nameKk", source="dto.kzName"), @Mapping(target="nameEn", source="dto.enName") }) Employee employeeDTOtoEmployee(EmployeeDTO dto); } Dto :
package com.ex.admin.dto; import lombok.Data; @Data public class EmployeeDTO { private Long id; private String employeeName; private String ruName; private String kzName; private String enName; } Entity:
package com.ex.admin.entity; import lombok.Data; import javax.persistence.*; import java.util.Date; @Entity @Table(name = "employees") @Data public class Employee { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "code") private String codeOfEmployee; @Column(name = "name_ru") private String nameRu; @Column(name = "name_kk") private String nameKk; @Column(name = "name_en") private String nameEn; @Column(name = "is_removed") private boolean isRemoved; @Column(name = "create_time") private Date createTime; @Column(name = "edit_time") private Date editTime; } Repository :
package com.ex.admin.repository; import com.ex.admin.entity.Employee; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Optional; @Repository public interface EmployeeRepository extends CrudRepository<Employee,Long > { @Query(nativeQuery = true,value = "SELECT * FROM employees where is_removed=false") Iterable<Employee> findAllExistingEmployees(); @Transactional @Modifying @Query("UPDATE Employee em SET em.isRemoved=:bool WHERE em.codeOfEmployee IN (:listOfCode)") Integer delManyEmployeesInRepo(@Param("bool") boolean bool, @Param("listOfCode") List<String> listOfCode); @Override Employee save(Employee entity); @Override Optional<Employee> findById(Long aLong); Employee findByCodeOfEmployee(String codeOfEmployee); } Service:
package com.ex.admin.services.impl; import com.ex.admin.dto.EmployeeDTO; import com.ex.admin.dto.mappers.EmployeeMapper; import com.ex.admin.entity.Employee; import com.ex.admin.repository.EmployeeRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import java.util.*; @Service public class EmployeeServiceImpl { @Autowired private EmployeeMapper employeeMapper; @Autowired private EmployeeRepository employeeRepository; public ResponseEntity<List<EmployeeDTO>> findAllEmployees() { Iterator<Employee> employeeIterator = employeeRepository.findAllExistingEmployees().iterator(); List<EmployeeDTO> listEmployeeDTO = new ArrayList<>(); while (employeeIterator.hasNext()) { listEmployeeDTO.add(employeeMapper.employeeToEmployeeDTO(employeeIterator.next())); } return new ResponseEntity(listEmployeeDTO, HttpStatus.OK); } public ResponseEntity<EmployeeDTO> deleteManyEmployees(List<String> stringList) { //Реализация удаления всех сотрудников } public ResponseEntity<EmployeeDTO> deleteEmployee(String employeeCode) { Employee employee = employeeRepository.findByCodeOfEmployee(employeeCode); employee.setRemoved(true); return ResponseEntity.ok(employeeMapper.employeeToEmployeeDTO(employeeRepository.save(employee))); } public ResponseEntity<EmployeeDTO> createNewEmployee(EmployeeDTO employeeDTO) { //реализация Создания сотрудника } public ResponseEntity<EmployeeDTO> editEmployee(EmployeeDTO employeeDTO) { employeeMapper.employeeDTOtoEmployee(employeeDTO); Optional<Employee> employeeOptional = employeeRepository.findById(employeeMapper.employeeDTOtoEmployee(employeeDTO).getId()); Employee employee = employeeOptional.get(); employee.setNameEn(employeeDTO.getEnName()); employee.setCodeOfEmployee(employeeDTO.getEmployeeName()); employee.setNameRu(employeeDTO.getRuName()); employee.setNameKk(employeeDTO.getKzName()); employeeDTO = employeeMapper.employeeToEmployeeDTO(employeeRepository.save(employee)); return new ResponseEntity(employeeDTO, HttpStatus.OK); } } Do not ask about architecture, I don’t know why, we don’t have a lead or an architect, so how it’s done, it’s done so. My backend is connected to the front end (Vue.js).
In the Service there are methods for deleting an employee and employees. For an employee I managed to implement.
I still do not really understand how it happened.
public ResponseEntity<EmployeeDTO> deleteEmployee(String employeeCode) { Employee employee = employeeRepository.findByCodeOfEmployee(employeeCode); employee.setRemoved(true); return ResponseEntity.ok(employeeMapper.employeeToEmployeeDTO(employeeRepository.save(employee))); } When you click on a small basket designed to remove 1 item works. But if I select the 3 items by the checkbox, I can’t click on the big basket to delete several items:
Please tell me how you can write a method for deleting several employees, I don’t really understand (I marked the places where I can’t do it, specially erased the code because I got confused there and it didn’t work.
