add bidang api

This commit is contained in:
dirgantarasiahaan 2023-05-24 14:00:01 +07:00
parent 62ccecb214
commit a2a23fd71c
12 changed files with 374 additions and 0 deletions

View File

@ -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());
}
}

View File

@ -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;

View File

@ -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);
};

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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()+'%');
}
}
}

View File

@ -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();
}
}

View File

@ -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();
}
}