add bidang api
This commit is contained in:
		| @@ -0,0 +1,74 @@ | ||||
| package com.iconplus.smartproc.controller; | ||||
|  | ||||
| import com.iconplus.smartproc.helper.model.EmptyResponse; | ||||
| import com.iconplus.smartproc.model.request.BidangRequest; | ||||
| import com.iconplus.smartproc.model.response.BidangResponse; | ||||
| import com.iconplus.smartproc.model.response.GetListBidangResponse; | ||||
| import com.iconplus.smartproc.service.bidang.*; | ||||
| 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/bidang") | ||||
| public class BidangController { | ||||
|  | ||||
|     private GetBidangService getBidangService; | ||||
|     private DeleteBidangService deleteBidangService; | ||||
|     private GetListBidangService getListBidangService; | ||||
|     private PostCreateBidangService postCreateBidangService; | ||||
|     private PutUpdateBidangService putUpdateBidangService; | ||||
|  | ||||
|     public BidangController(GetBidangService getBidangService, | ||||
|                             DeleteBidangService deleteBidangService, | ||||
|                             GetListBidangService getListBidangService, | ||||
|                             PostCreateBidangService postCreateBidangService, | ||||
|                             PutUpdateBidangService putUpdateBidangService) { | ||||
|         this.getBidangService = getBidangService; | ||||
|         this.deleteBidangService = deleteBidangService; | ||||
|         this.getListBidangService = getListBidangService; | ||||
|         this.postCreateBidangService = postCreateBidangService; | ||||
|         this.putUpdateBidangService = putUpdateBidangService; | ||||
|     } | ||||
|  | ||||
|     @GetMapping | ||||
|     public GetListBidangResponse getListInstansi(@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); | ||||
|         BidangRequest bidangRequest = BidangRequest.builder() | ||||
|                 .search(search) | ||||
|                 .pageable(pageable) | ||||
|                 .build(); | ||||
|  | ||||
|         return getListBidangService.execute(bidangRequest); | ||||
|     } | ||||
|  | ||||
|     @PostMapping | ||||
|     public BidangResponse createBidang(@RequestBody BidangRequest request) { | ||||
|         return postCreateBidangService.execute(request); | ||||
|     } | ||||
|  | ||||
|     @GetMapping("/{id}") | ||||
|     public BidangResponse getBidangById(@PathVariable Long id) { | ||||
|         return getBidangService.execute(BidangRequest.builder() | ||||
|                 .id(id) | ||||
|                 .build()); | ||||
|     } | ||||
|  | ||||
|     @PutMapping("/{id}") | ||||
|     public BidangResponse updateBidang(@PathVariable Long id, @RequestBody BidangRequest request){ | ||||
|         request.setId(id); | ||||
|         return putUpdateBidangService.execute(request); | ||||
|     } | ||||
|  | ||||
|     @DeleteMapping("/{id}") | ||||
|     public EmptyResponse deleteBidang(@PathVariable Long id){ | ||||
|         return deleteBidangService.execute(BidangRequest.builder() | ||||
|                 .id(id) | ||||
|                 .build()); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -22,6 +22,9 @@ public class Bidang extends BaseEntity { | ||||
|     @Column(name = "id") | ||||
|     private Long id; | ||||
|  | ||||
|     @Column(name = "instansi_id") | ||||
|     private Long instansiId; | ||||
|  | ||||
|     @Column(name = "bidang") | ||||
|     private String bidang; | ||||
|  | ||||
|   | ||||
| @@ -0,0 +1,22 @@ | ||||
| package com.iconplus.smartproc.model.projection; | ||||
|  | ||||
| public interface BidangView { | ||||
|  | ||||
|     Long getId(); | ||||
|     void setId(Long id); | ||||
|  | ||||
|     Long getInstansiId(); | ||||
|     void setInstansiId(Long instansiId); | ||||
|  | ||||
|     String getInstansi(); | ||||
|     void setInstansi(String instansi); | ||||
|  | ||||
|     String getBidang(); | ||||
|     void setBidang(String bidang); | ||||
|  | ||||
|     String getKeterangan(); | ||||
|     void setketerangan(String keterangan); | ||||
|  | ||||
|     Boolean getIsActive(); | ||||
|     void setIsActive(Boolean isActive); | ||||
| }; | ||||
| @@ -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 BidangRequest extends BaseRequest { | ||||
|  | ||||
|     private Long id; | ||||
|     private Long instansiId; | ||||
|     private String bidang; | ||||
|     private String keterangan; | ||||
|     private Boolean isActive; | ||||
|     private String search; | ||||
|     private transient Pageable pageable; | ||||
| } | ||||
| @@ -0,0 +1,23 @@ | ||||
| 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 BidangResponse extends BaseResponse { | ||||
|  | ||||
|     private Long id; | ||||
|     private Long instansiId; | ||||
|     private String instansi; | ||||
|     private String bidang; | ||||
|     private String keterangan; | ||||
|     private Boolean isActive; | ||||
|     private Boolean isDelete; | ||||
|  | ||||
| } | ||||
| @@ -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 GetListBidangResponse extends BaseResponse { | ||||
|  | ||||
|     private List<BidangResponse> data; | ||||
|     private Pagination pagination; | ||||
| } | ||||
| @@ -1,13 +1,31 @@ | ||||
| package com.iconplus.smartproc.repository; | ||||
|  | ||||
| import com.iconplus.smartproc.model.entity.Bidang; | ||||
| import com.iconplus.smartproc.model.projection.BidangView; | ||||
| 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.List; | ||||
| import java.util.Optional; | ||||
|  | ||||
| @Repository | ||||
| public interface BidangRepository extends JpaRepository<Bidang, LokasiRepository> { | ||||
|  | ||||
|     @Query(value = "SELECT b.id as id, " + | ||||
|             "b.instansiId as instansiId, " + | ||||
|             "i.instansi as instansi, " + | ||||
|             "b.bidang as bidang, " + | ||||
|             "b.keterangan as keterangan, " + | ||||
|             "b.isActive as isActive " + | ||||
|             "FROM Bidang b " + | ||||
|             "JOIN Instansi i on i.id = b.instansiId " + | ||||
|             "WHERE b.isDelete = false " + | ||||
|             "AND (:search='' or UPPER(b.bidang) like :search) " + | ||||
|             "ORDER BY b.id") | ||||
|     Page<BidangView> getListBidang(String search, Pageable pageable); | ||||
|  | ||||
|     Optional<Bidang> findByIdAndIsDeleteFalse(Long id); | ||||
| } | ||||
|   | ||||
| @@ -0,0 +1,29 @@ | ||||
| package com.iconplus.smartproc.service.bidang; | ||||
|  | ||||
| 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.BidangRequest; | ||||
| import com.iconplus.smartproc.repository.BidangRepository; | ||||
| import org.springframework.stereotype.Service; | ||||
|  | ||||
| @Service | ||||
| public class DeleteBidangService implements BaseService<BidangRequest, EmptyResponse> { | ||||
|  | ||||
|     private BidangRepository bidangRepository; | ||||
|  | ||||
|     public DeleteBidangService (BidangRepository bidangRepository) { | ||||
|         this.bidangRepository = bidangRepository; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public EmptyResponse execute(BidangRequest input) { | ||||
|  | ||||
|         var bidang = bidangRepository.findByIdAndIsDeleteFalse(input.getId()).orElseThrow(() -> new BusinessException("err", "err", "err")); | ||||
|  | ||||
|         bidang.setIsDelete(true); | ||||
|         bidangRepository.save(bidang); | ||||
|  | ||||
|         return new EmptyResponse(); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,31 @@ | ||||
| package com.iconplus.smartproc.service.bidang; | ||||
|  | ||||
| import com.iconplus.smartproc.exception.BusinessException; | ||||
| import com.iconplus.smartproc.helper.service.BaseService; | ||||
| import com.iconplus.smartproc.model.request.BidangRequest; | ||||
| import com.iconplus.smartproc.model.response.BidangResponse; | ||||
| import com.iconplus.smartproc.repository.BidangRepository; | ||||
| import org.springframework.stereotype.Service; | ||||
|  | ||||
| @Service | ||||
| public class GetBidangService implements BaseService<BidangRequest, BidangResponse> { | ||||
|  | ||||
|     private BidangRepository bidangRepository; | ||||
|  | ||||
|     public GetBidangService(BidangRepository bidangRepository) { | ||||
|         this.bidangRepository = bidangRepository; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public BidangResponse execute(BidangRequest input) { | ||||
|  | ||||
|         var bidang = bidangRepository.findByIdAndIsDeleteFalse(input.getId()).orElseThrow(() -> new BusinessException("err", "err", "err")); | ||||
|         return BidangResponse.builder() | ||||
|                 .id(bidang.getId()) | ||||
|                 .instansiId(bidang.getInstansiId()) | ||||
|                 .bidang(bidang.getBidang()) | ||||
|                 .keterangan(bidang.getKeterangan()) | ||||
|                 .isActive(bidang.getIsActive()) | ||||
|                 .build(); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,62 @@ | ||||
| package com.iconplus.smartproc.service.bidang; | ||||
|  | ||||
| import com.iconplus.smartproc.helper.model.Pagination; | ||||
| import com.iconplus.smartproc.helper.service.BaseService; | ||||
| import com.iconplus.smartproc.model.projection.BidangView; | ||||
| import com.iconplus.smartproc.model.request.BidangRequest; | ||||
| import com.iconplus.smartproc.model.request.InstansiRequest; | ||||
| import com.iconplus.smartproc.model.response.BidangResponse; | ||||
| import com.iconplus.smartproc.model.response.GetListBidangResponse; | ||||
| import com.iconplus.smartproc.repository.BidangRepository; | ||||
| import org.apache.commons.lang3.StringUtils; | ||||
| import org.springframework.stereotype.Service; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
|  | ||||
| @Service | ||||
| public class GetListBidangService implements BaseService<BidangRequest, GetListBidangResponse> { | ||||
|  | ||||
|     private BidangRepository bidangRepository; | ||||
|  | ||||
|     public GetListBidangService(BidangRepository bidangRepository) { | ||||
|         this.bidangRepository = bidangRepository; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public GetListBidangResponse execute(BidangRequest input) { | ||||
|         validateRequest(input); | ||||
|         List<BidangResponse> bidangResponseList = new ArrayList<>(); | ||||
|         var bidangViews= bidangRepository.getListBidang(input.getSearch(), input.getPageable()); | ||||
|  | ||||
|         for (BidangView bidangView : bidangViews) { | ||||
|             BidangResponse bidangResponse = BidangResponse.builder() | ||||
|                     .id(bidangView.getId()) | ||||
|                     .instansiId(bidangView.getInstansiId()) | ||||
|                     .instansi(bidangView.getInstansi()) | ||||
|                     .bidang(bidangView.getBidang()) | ||||
|                     .keterangan(bidangView.getKeterangan()) | ||||
|                     .isActive(bidangView.getIsActive()) | ||||
|                     .build(); | ||||
|             bidangResponseList.add(bidangResponse); | ||||
|         } | ||||
|  | ||||
|         return GetListBidangResponse.builder() | ||||
|                 .data(bidangResponseList) | ||||
|                 .pagination(Pagination.builder() | ||||
|                         .pageSize(input.getPageable().getPageSize()) | ||||
|                         .currentPage(input.getPageable().getPageNumber()) | ||||
|                         .totalPages(bidangViews.getTotalPages()) | ||||
|                         .totalRecords(bidangViews.getTotalElements()) | ||||
|                         .isFirstPage(bidangViews.isFirst()) | ||||
|                         .isLastPage(bidangViews.isLast()) | ||||
|                         .build()) | ||||
|                 .build(); | ||||
|     } | ||||
|  | ||||
|     private void validateRequest(BidangRequest input) { | ||||
|         if (StringUtils.isNotBlank(input.getSearch())) { | ||||
|             input.setSearch('%'+ input.getSearch().toUpperCase()+'%'); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,36 @@ | ||||
| package com.iconplus.smartproc.service.bidang; | ||||
|  | ||||
| import com.iconplus.smartproc.helper.service.BaseService; | ||||
| import com.iconplus.smartproc.model.entity.Bidang; | ||||
| import com.iconplus.smartproc.model.request.BidangRequest; | ||||
| import com.iconplus.smartproc.model.response.BidangResponse; | ||||
| import com.iconplus.smartproc.repository.BidangRepository; | ||||
| import org.springframework.stereotype.Service; | ||||
|  | ||||
| @Service | ||||
| public class PostCreateBidangService implements BaseService<BidangRequest, BidangResponse> { | ||||
|  | ||||
|     private BidangRepository bidangRepository; | ||||
|  | ||||
|     public PostCreateBidangService(BidangRepository bidangRepository) { | ||||
|         this.bidangRepository = bidangRepository; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public BidangResponse execute(BidangRequest input) { | ||||
|         Bidang bidang = Bidang.builder() | ||||
|                 .id(input.getId()) | ||||
|                 .instansiId(input.getInstansiId()) | ||||
|                 .bidang(input.getBidang()) | ||||
|                 .keterangan(input.getKeterangan()) | ||||
|                 .isActive(input.getIsActive()) | ||||
|                 .isDelete(false) | ||||
|                 .build(); | ||||
|  | ||||
|         var result = bidangRepository.save(bidang); | ||||
|         return BidangResponse.builder() | ||||
|                 .id(result.getId()) | ||||
|                 .build(); | ||||
|  | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,32 @@ | ||||
| package com.iconplus.smartproc.service.bidang; | ||||
|  | ||||
| import com.iconplus.smartproc.exception.BusinessException; | ||||
| import com.iconplus.smartproc.helper.service.BaseService; | ||||
| import com.iconplus.smartproc.model.request.BidangRequest; | ||||
| import com.iconplus.smartproc.model.response.BidangResponse; | ||||
| import com.iconplus.smartproc.repository.BidangRepository; | ||||
| import org.springframework.stereotype.Service; | ||||
|  | ||||
| @Service | ||||
| public class PutUpdateBidangService implements BaseService<BidangRequest, BidangResponse> { | ||||
|  | ||||
|     private BidangRepository bidangRepository; | ||||
|  | ||||
|     public PutUpdateBidangService(BidangRepository bidangRepository) { | ||||
|         this.bidangRepository = bidangRepository; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public BidangResponse execute(BidangRequest input) { | ||||
|  | ||||
|         var bidang = bidangRepository.findByIdAndIsDeleteFalse(input.getId()).orElseThrow(() -> new BusinessException("err", "err", "err")); | ||||
|         bidang.setInstansiId(input.getInstansiId()); | ||||
|         bidang.setBidang(input.getBidang()); | ||||
|         bidang.setKeterangan(input.getKeterangan()); | ||||
|         bidang.setIsActive(input.getIsActive()); | ||||
|         var result = bidangRepository.save(bidang); | ||||
|         return BidangResponse.builder() | ||||
|                 .id(result.getId()) | ||||
|                 .build(); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user