add crud jabatan
This commit is contained in:
		| @@ -0,0 +1,73 @@ | ||||
| package com.iconplus.smartproc.controller; | ||||
|  | ||||
| import com.iconplus.smartproc.helper.model.EmptyResponse; | ||||
| import com.iconplus.smartproc.model.request.JabatanRequest; | ||||
| import com.iconplus.smartproc.model.response.GetListJabatanResponse; | ||||
| import com.iconplus.smartproc.model.response.JabatanResponse; | ||||
| import com.iconplus.smartproc.service.jabatan.*; | ||||
| import org.springframework.data.domain.PageRequest; | ||||
| import org.springframework.data.domain.Pageable; | ||||
| import org.springframework.web.bind.annotation.*; | ||||
|  | ||||
| @CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true") | ||||
| @RestController | ||||
| @RequestMapping("/api/jabatan") | ||||
| public class JabatanController { | ||||
|  | ||||
|     private DeleteJabatanService deleteJabatanService; | ||||
|     private GetJabatanService getJabatanService; | ||||
|     private GetListJabatanService getListJabatanService; | ||||
|     private PostCreateJabatanService postCreateJabatanService; | ||||
|     private PutUpdateJabatanService putUpdateJabatanService; | ||||
|  | ||||
|     public JabatanController(DeleteJabatanService deleteJabatanService, | ||||
|                              GetJabatanService getJabatanService, | ||||
|                              GetListJabatanService getListJabatanService, | ||||
|                              PostCreateJabatanService postCreateJabatanService, | ||||
|                              PutUpdateJabatanService putUpdateJabatanService) { | ||||
|         this.deleteJabatanService = deleteJabatanService; | ||||
|         this.getJabatanService = getJabatanService; | ||||
|         this.getListJabatanService = getListJabatanService; | ||||
|         this.postCreateJabatanService = postCreateJabatanService; | ||||
|         this.putUpdateJabatanService = putUpdateJabatanService; | ||||
|     } | ||||
|  | ||||
|     @GetMapping | ||||
|     public GetListJabatanResponse getListJabatan(@RequestParam(name = "search", required = false) String search, | ||||
|                                                   @RequestParam(name = "page", defaultValue = "1") Integer page, | ||||
|                                                   @RequestParam(name = "size", defaultValue = "5") Integer size){ | ||||
|  | ||||
|         Pageable pageable = PageRequest.of((page - 1), size); | ||||
|         JabatanRequest bidangRequest = JabatanRequest.builder() | ||||
|                 .search(search) | ||||
|                 .pageable(pageable) | ||||
|                 .build(); | ||||
|  | ||||
|         return getListJabatanService.execute(bidangRequest); | ||||
|     } | ||||
|  | ||||
|     @PostMapping | ||||
|     public JabatanResponse createJabatan(@RequestBody JabatanRequest request) { | ||||
|         return postCreateJabatanService.execute(request); | ||||
|     } | ||||
|  | ||||
|     @GetMapping("/{id}") | ||||
|     public JabatanResponse getJabatanById(@PathVariable Long id) { | ||||
|         return getJabatanService.execute(JabatanRequest.builder() | ||||
|                 .id(id) | ||||
|                 .build()); | ||||
|     } | ||||
|  | ||||
|     @PutMapping("/{id}") | ||||
|     public JabatanResponse updateBidang(@PathVariable Long id, @RequestBody JabatanRequest request){ | ||||
|         request.setId(id); | ||||
|         return putUpdateJabatanService.execute(request); | ||||
|     } | ||||
|  | ||||
|     @DeleteMapping("/{id}") | ||||
|     public EmptyResponse deleteJabatan(@PathVariable Long id){ | ||||
|         return deleteJabatanService.execute(JabatanRequest.builder() | ||||
|                 .id(id) | ||||
|                 .build()); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,44 @@ | ||||
| package com.iconplus.smartproc.model.entity; | ||||
|  | ||||
| import com.iconplus.smartproc.helper.base.BaseEntity; | ||||
| import lombok.AllArgsConstructor; | ||||
| import lombok.Builder; | ||||
| import lombok.Data; | ||||
| import lombok.NoArgsConstructor; | ||||
| import org.hibernate.annotations.Type; | ||||
|  | ||||
| import javax.persistence.*; | ||||
|  | ||||
| @Data | ||||
| @Builder | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| @Entity | ||||
| @Table(name = "jabatan") | ||||
| public class Jabatan extends BaseEntity { | ||||
|  | ||||
|     @Id | ||||
|     @GeneratedValue(strategy = GenerationType.IDENTITY) | ||||
|     @Column(name = "id") | ||||
|     private Long id; | ||||
|  | ||||
|     @Column(name = "jabatan") | ||||
|     private String jabatan; | ||||
|  | ||||
|     @Column(name = "instansi_id") | ||||
|     private Long instansiId; | ||||
|  | ||||
|     @Column(name = "bidang_id") | ||||
|     private Long bidangId; | ||||
|  | ||||
|     @Column(name = "keterangan") | ||||
|     private String keterangan; | ||||
|  | ||||
|     @Column(name = "is_active") | ||||
|     @Type(type = "org.hibernate.type.NumericBooleanType") | ||||
|     private Boolean isActive; | ||||
|  | ||||
|     @Column(name = "is_delete") | ||||
|     @Type(type = "org.hibernate.type.NumericBooleanType") | ||||
|     private Boolean isDelete; | ||||
| } | ||||
| @@ -0,0 +1,31 @@ | ||||
| package com.iconplus.smartproc.model.projection; | ||||
|  | ||||
| public interface JabatanView { | ||||
|  | ||||
|     Long getId(); | ||||
|     void setId(Long id); | ||||
|  | ||||
|     String getJabatan(); | ||||
|     void setJabatan(String jabatan); | ||||
|  | ||||
|     String getKeterangan(); | ||||
|     void setKeterangan(String keterangan); | ||||
|  | ||||
|     Long getInstansiId(); | ||||
|     void setInstansiId(Long instansiId); | ||||
|  | ||||
|     String getInstansi(); | ||||
|     void setInstansi(String instansi); | ||||
|  | ||||
|     Long getBidangId(); | ||||
|     void setBidangId(Long bidangId); | ||||
|  | ||||
|     String getBidang(); | ||||
|     void setBidang(String bidang); | ||||
|  | ||||
|     Boolean getIsActive(); | ||||
|     void setIsActive(Boolean isAvtive); | ||||
|  | ||||
|     Boolean getIsDelete(); | ||||
|     void setIsDelete(Boolean isDelete); | ||||
| } | ||||
| @@ -0,0 +1,24 @@ | ||||
| package com.iconplus.smartproc.model.request; | ||||
|  | ||||
| import com.iconplus.smartproc.helper.base.BaseRequest; | ||||
| import lombok.AllArgsConstructor; | ||||
| import lombok.Builder; | ||||
| import lombok.Data; | ||||
| import lombok.NoArgsConstructor; | ||||
| import org.springframework.data.domain.Pageable; | ||||
|  | ||||
| @Data | ||||
| @Builder | ||||
| @AllArgsConstructor | ||||
| @NoArgsConstructor | ||||
| public class JabatanRequest extends BaseRequest { | ||||
|  | ||||
|     private Long id; | ||||
|     private String jabatan; | ||||
|     private String keterangan; | ||||
|     private Long instansiId; | ||||
|     private Long bidangId; | ||||
|     private Boolean isActive; | ||||
|     private String search; | ||||
|     private transient Pageable pageable; | ||||
| } | ||||
| @@ -0,0 +1,20 @@ | ||||
| package com.iconplus.smartproc.model.response; | ||||
|  | ||||
| import com.iconplus.smartproc.helper.base.BaseResponse; | ||||
| import com.iconplus.smartproc.helper.model.Pagination; | ||||
| import lombok.AllArgsConstructor; | ||||
| import lombok.Builder; | ||||
| import lombok.Data; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| @Data | ||||
| @Builder | ||||
| @AllArgsConstructor | ||||
| @NoArgsConstructor | ||||
| public class GetListJabatanResponse extends BaseResponse { | ||||
|  | ||||
|     private List<JabatanResponse> data; | ||||
|     private Pagination pagination; | ||||
| } | ||||
| @@ -0,0 +1,24 @@ | ||||
| package com.iconplus.smartproc.model.response; | ||||
|  | ||||
| import com.iconplus.smartproc.helper.base.BaseResponse; | ||||
| import lombok.AllArgsConstructor; | ||||
| import lombok.Builder; | ||||
| import lombok.Data; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| @Data | ||||
| @Builder | ||||
| @AllArgsConstructor | ||||
| @NoArgsConstructor | ||||
| public class JabatanResponse extends BaseResponse { | ||||
|  | ||||
|     private Long id; | ||||
|     private String jabatan; | ||||
|     private String keterangan; | ||||
|     private Long instansiId; | ||||
|     private String instansi; | ||||
|     private Long bidangId; | ||||
|     private String bidang; | ||||
|     private Boolean isActive; | ||||
|     private Boolean isDelete; | ||||
| } | ||||
| @@ -0,0 +1,52 @@ | ||||
| package com.iconplus.smartproc.repository; | ||||
|  | ||||
| import com.iconplus.smartproc.model.entity.Jabatan; | ||||
| import com.iconplus.smartproc.model.projection.JabatanView; | ||||
| import org.springframework.data.domain.Page; | ||||
| import org.springframework.data.domain.Pageable; | ||||
| import org.springframework.data.jpa.repository.JpaRepository; | ||||
| import org.springframework.data.jpa.repository.Query; | ||||
| import org.springframework.stereotype.Repository; | ||||
|  | ||||
| import java.util.Optional; | ||||
|  | ||||
| @Repository | ||||
| public interface JabatanRepository extends JpaRepository<Jabatan, Long> { | ||||
|  | ||||
|     Optional<Jabatan> findByIdAndIsDeleteFalse(Long id); | ||||
|  | ||||
|     Optional<Jabatan> findByJabatanAndIsDeleteFalse(String jabatan); | ||||
|  | ||||
|     @Query(value = "SELECT j.id as id, " + | ||||
|             "j.jabatan as jabatan, " + | ||||
|             "j.instansiId as instansiId, " + | ||||
|             "j.keterangan as keterangan, " + | ||||
|             "i.instansi as instansi, " + | ||||
|             "j.bidangId as bidangId, " + | ||||
|             "b.bidang as bidang, " + | ||||
|             "j.isActive as isActive, " + | ||||
|             "j.isDelete as isDelete " + | ||||
|             "FROM Jabatan j " + | ||||
|             "JOIN Bidang b ON b.id = j.bidangId " + | ||||
|             "JOIN Instansi i ON i.id = j.instansiId " + | ||||
|             "WHERE j.isDelete = false " + | ||||
|             "AND j.id = :jabatanId") | ||||
|     Optional<JabatanView> getJabatanDetails(Long jabatanId); | ||||
|  | ||||
|     @Query(value = "SELECT j.id as id, " + | ||||
|             "j.jabatan as jabatan, " + | ||||
|             "j.keterangan as keterangan, " + | ||||
|             "j.instansiId as instansiId, " + | ||||
|             "i.instansi as instansi, " + | ||||
|             "j.bidangId as bidangId, " + | ||||
|             "b.bidang as bidang, " + | ||||
|             "j.isActive as isActive, " + | ||||
|             "j.isDelete as isDelete " + | ||||
|             "FROM Jabatan j " + | ||||
|             "JOIN Bidang b ON b.id = j.bidangId " + | ||||
|             "JOIN Instansi i ON i.id = j.instansiId " + | ||||
|             "WHERE j.isDelete = false " + | ||||
|             "AND (:search = '' or UPPER(j.jabatan) like :search) " + | ||||
|             "ORDER BY j.id") | ||||
|     Page<JabatanView> getListJabatan(String search, Pageable pageable); | ||||
| } | ||||
| @@ -0,0 +1,25 @@ | ||||
| package com.iconplus.smartproc.service.jabatan; | ||||
|  | ||||
| import com.iconplus.smartproc.exception.BusinessException; | ||||
| import com.iconplus.smartproc.helper.model.EmptyResponse; | ||||
| import com.iconplus.smartproc.helper.service.BaseService; | ||||
| import com.iconplus.smartproc.model.request.JabatanRequest; | ||||
| import com.iconplus.smartproc.repository.JabatanRepository; | ||||
| import org.springframework.stereotype.Service; | ||||
|  | ||||
| @Service | ||||
| public class DeleteJabatanService implements BaseService<JabatanRequest, EmptyResponse> { | ||||
|  | ||||
|     private JabatanRepository jabatanRepository; | ||||
|     public DeleteJabatanService(JabatanRepository jabatanRepository) { | ||||
|         this.jabatanRepository = jabatanRepository; | ||||
|     } | ||||
|     @Override | ||||
|     public EmptyResponse execute(JabatanRequest input) { | ||||
|         var jabatan = jabatanRepository.findByIdAndIsDeleteFalse(input.getId()) | ||||
|                 .orElseThrow(() -> new BusinessException("err", "err", "err")); | ||||
|         jabatan.setIsDelete(true); | ||||
|         jabatanRepository.save(jabatan); | ||||
|         return new EmptyResponse(); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,36 @@ | ||||
| package com.iconplus.smartproc.service.jabatan; | ||||
|  | ||||
| import com.iconplus.smartproc.exception.BusinessException; | ||||
| import com.iconplus.smartproc.helper.service.BaseService; | ||||
| import com.iconplus.smartproc.model.request.JabatanRequest; | ||||
| import com.iconplus.smartproc.model.response.JabatanResponse; | ||||
| import com.iconplus.smartproc.repository.JabatanRepository; | ||||
| import org.springframework.stereotype.Service; | ||||
|  | ||||
| @Service | ||||
| public class GetJabatanService implements BaseService<JabatanRequest, JabatanResponse> { | ||||
|  | ||||
|     private JabatanRepository jabatanRepository; | ||||
|     public GetJabatanService(JabatanRepository jabatanRepository) { | ||||
|         this.jabatanRepository = jabatanRepository; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public JabatanResponse execute(JabatanRequest input) { | ||||
|  | ||||
|         var jabatan = jabatanRepository.getJabatanDetails(input.getId()) | ||||
|                 .orElseThrow(() -> new BusinessException("err", "err", "err")); | ||||
|  | ||||
|         return JabatanResponse.builder() | ||||
|                 .id(jabatan.getId()) | ||||
|                 .jabatan(jabatan.getJabatan()) | ||||
|                 .keterangan(jabatan.getKeterangan()) | ||||
|                 .instansiId(jabatan.getInstansiId()) | ||||
|                 .instansi(jabatan.getInstansi()) | ||||
|                 .bidangId(jabatan.getBidangId()) | ||||
|                 .bidang(jabatan.getBidang()) | ||||
|                 .isActive(jabatan.getIsActive()) | ||||
|                 .isDelete(jabatan.getIsDelete()) | ||||
|                 .build(); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,65 @@ | ||||
| package com.iconplus.smartproc.service.jabatan; | ||||
|  | ||||
| import com.iconplus.smartproc.helper.model.Pagination; | ||||
| import com.iconplus.smartproc.helper.service.BaseService; | ||||
| import com.iconplus.smartproc.model.entity.Jabatan; | ||||
| import com.iconplus.smartproc.model.projection.JabatanView; | ||||
| import com.iconplus.smartproc.model.request.JabatanRequest; | ||||
| import com.iconplus.smartproc.model.request.JenisAnggaranRequest; | ||||
| import com.iconplus.smartproc.model.response.GetListJabatanResponse; | ||||
| import com.iconplus.smartproc.model.response.JabatanResponse; | ||||
| import com.iconplus.smartproc.repository.JabatanRepository; | ||||
| import org.apache.commons.lang3.StringUtils; | ||||
| import org.springframework.stereotype.Service; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
|  | ||||
| @Service | ||||
| public class GetListJabatanService implements BaseService<JabatanRequest, GetListJabatanResponse> { | ||||
|  | ||||
|     private JabatanRepository jabatanRepository; | ||||
|     public GetListJabatanService(JabatanRepository jabatanRepository) { | ||||
|         this.jabatanRepository = jabatanRepository; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public GetListJabatanResponse execute(JabatanRequest input) { | ||||
|         validateRequest(input); | ||||
|         List<JabatanResponse> jabatanResponseList = new ArrayList<>() ; | ||||
|         var jabatanViews = jabatanRepository.getListJabatan(input.getSearch(), input.getPageable()); | ||||
|  | ||||
|         for (JabatanView jabatanView : jabatanViews) { | ||||
|             JabatanResponse jabatanResponse = JabatanResponse.builder() | ||||
|                     .id(jabatanView.getId()) | ||||
|                     .jabatan(jabatanView.getJabatan()) | ||||
|                     .keterangan(jabatanView.getKeterangan()) | ||||
|                     .instansiId(jabatanView.getInstansiId()) | ||||
|                     .instansi(jabatanView.getInstansi()) | ||||
|                     .bidangId(jabatanView.getBidangId()) | ||||
|                     .bidang(jabatanView.getBidang()) | ||||
|                     .isActive(jabatanView.getIsActive()) | ||||
|                     .isDelete(jabatanView.getIsDelete()) | ||||
|                     .build(); | ||||
|             jabatanResponseList.add(jabatanResponse); | ||||
|         } | ||||
|         return GetListJabatanResponse.builder() | ||||
|                 .data(jabatanResponseList) | ||||
|                 .pagination(Pagination.builder() | ||||
|                         .pageSize(input.getPageable().getPageSize()) | ||||
|                         .currentPage(input.getPageable().getPageNumber()) | ||||
|                         .totalPages(jabatanViews.getTotalPages()) | ||||
|                         .totalRecords(jabatanViews.getTotalElements()) | ||||
|                         .isFirstPage(jabatanViews.isFirst()) | ||||
|                         .isLastPage(jabatanViews.isLast()) | ||||
|                         .build()) | ||||
|                 .build(); | ||||
|     } | ||||
|  | ||||
|     private void validateRequest(JabatanRequest input) { | ||||
|         if (StringUtils.isNotBlank(input.getSearch())) { | ||||
|             input.setSearch('%'+ input.getSearch().toUpperCase()+'%'); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,41 @@ | ||||
| package com.iconplus.smartproc.service.jabatan; | ||||
|  | ||||
| import com.iconplus.smartproc.exception.BusinessException; | ||||
| import com.iconplus.smartproc.helper.service.BaseService; | ||||
| import com.iconplus.smartproc.model.entity.Jabatan; | ||||
| import com.iconplus.smartproc.model.request.JabatanRequest; | ||||
| import com.iconplus.smartproc.model.response.JabatanResponse; | ||||
| import com.iconplus.smartproc.repository.JabatanRepository; | ||||
| import org.springframework.stereotype.Service; | ||||
|  | ||||
| @Service | ||||
| public class PostCreateJabatanService implements BaseService<JabatanRequest, JabatanResponse> { | ||||
|  | ||||
|     private JabatanRepository jabatanRepository; | ||||
|     public PostCreateJabatanService(JabatanRepository jabatanRepository) { | ||||
|         this.jabatanRepository = jabatanRepository; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public JabatanResponse execute(JabatanRequest input) { | ||||
|  | ||||
|         var jabatan = jabatanRepository.findByJabatanAndIsDeleteFalse(input.getJabatan()); | ||||
|         if (jabatan.isPresent()) { | ||||
|             throw new BusinessException("err", "err", "err"); | ||||
|         } | ||||
|  | ||||
|         Jabatan jabatanEntity = Jabatan.builder() | ||||
|                 .jabatan(input.getJabatan()) | ||||
|                 .keterangan(input.getKeterangan()) | ||||
|                 .instansiId(input.getInstansiId()) | ||||
|                 .bidangId(input.getBidangId()) | ||||
|                 .isActive(input.getIsActive()) | ||||
|                 .isDelete(false) | ||||
|                 .build(); | ||||
|         var result = jabatanRepository.save(jabatanEntity); | ||||
|  | ||||
|         return JabatanResponse.builder() | ||||
|                 .id(result.getId()) | ||||
|                 .build(); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,34 @@ | ||||
| package com.iconplus.smartproc.service.jabatan; | ||||
|  | ||||
| import com.iconplus.smartproc.exception.BusinessException; | ||||
| import com.iconplus.smartproc.helper.service.BaseService; | ||||
| import com.iconplus.smartproc.model.request.JabatanRequest; | ||||
| import com.iconplus.smartproc.model.response.JabatanResponse; | ||||
| import com.iconplus.smartproc.repository.JabatanRepository; | ||||
| import org.springframework.stereotype.Service; | ||||
|  | ||||
| @Service | ||||
| public class PutUpdateJabatanService implements BaseService<JabatanRequest, JabatanResponse> { | ||||
|  | ||||
|     private JabatanRepository jabatanRepository; | ||||
|     public PutUpdateJabatanService(JabatanRepository jabatanRepository) { | ||||
|         this.jabatanRepository = jabatanRepository; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public JabatanResponse execute(JabatanRequest input) { | ||||
|  | ||||
|         var jabatan = jabatanRepository.findByIdAndIsDeleteFalse(input.getId()) | ||||
|                 .orElseThrow(() -> new BusinessException("err", "err", "err")); | ||||
|  | ||||
|         jabatan.setJabatan(input.getJabatan()); | ||||
|         jabatan.setKeterangan(input.getKeterangan()); | ||||
|         jabatan.setInstansiId(input.getInstansiId()); | ||||
|         jabatan.setBidangId(input.getBidangId()); | ||||
|         jabatan.setIsActive(input.getIsActive()); | ||||
|         var result = jabatanRepository.save(jabatan); | ||||
|         return JabatanResponse.builder() | ||||
|                 .id(result.getId()) | ||||
|                 .build(); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user