enhance api sumber dana
This commit is contained in:
@ -1,78 +1,73 @@
|
|||||||
package com.iconplus.smartproc.controller;
|
package com.iconplus.smartproc.controller;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import com.iconplus.smartproc.helper.model.EmptyResponse;
|
||||||
import java.util.List;
|
import com.iconplus.smartproc.model.request.SumberDanaRequest;
|
||||||
import java.util.Map;
|
import com.iconplus.smartproc.model.response.GetListSumberDanaResponse;
|
||||||
|
import com.iconplus.smartproc.model.response.SumberDanaResponse;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import com.iconplus.smartproc.service.sumberdana.*;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.data.domain.PageRequest;
|
||||||
import org.springframework.web.bind.annotation.CrossOrigin;
|
import org.springframework.data.domain.Pageable;
|
||||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
|
||||||
import org.springframework.web.bind.annotation.PathVariable;
|
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
|
||||||
import org.springframework.web.bind.annotation.PutMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
|
|
||||||
import com.iconplus.smartproc.exception.ResourceNotFoundException;
|
|
||||||
import com.iconplus.smartproc.model.entity.SumberDana;
|
|
||||||
import com.iconplus.smartproc.repository.SumberDanaRepository;
|
|
||||||
|
|
||||||
@CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true")
|
@CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true")
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/api/sumberdana")
|
@RequestMapping("/api/sumberdana")
|
||||||
public class SumberDanaController {
|
public class SumberDanaController {
|
||||||
@Autowired
|
|
||||||
private SumberDanaRepository sumberdanaRepository;
|
|
||||||
|
|
||||||
//get all data
|
private GetListSumberDanaService getListSumberDanaService;
|
||||||
@GetMapping
|
private PostCreateSumberDanaService postCreateSumberDanaService;
|
||||||
public List<SumberDana> getAllSumberdanas(){
|
private DeleteSumberDanaService deleteSumberDanaService;
|
||||||
return sumberdanaRepository.findAll();
|
private GetSumberDanaService getSumberDanaService;
|
||||||
}
|
private PutSumberDanaService putSumberDanaService;
|
||||||
|
|
||||||
// create
|
public SumberDanaController(GetListSumberDanaService getListSumberDanaService,
|
||||||
@PostMapping
|
PostCreateSumberDanaService postCreateSumberDanaService,
|
||||||
public SumberDana createSumberdana(@RequestBody SumberDana sumberdana) {
|
DeleteSumberDanaService deleteSumberDanaService,
|
||||||
return sumberdanaRepository.save(sumberdana);
|
GetSumberDanaService getSumberDanaService,
|
||||||
}
|
PutSumberDanaService putSumberDanaService) {
|
||||||
|
this.getListSumberDanaService = getListSumberDanaService;
|
||||||
|
this.postCreateSumberDanaService = postCreateSumberDanaService;
|
||||||
|
this.deleteSumberDanaService = deleteSumberDanaService;
|
||||||
|
this.getSumberDanaService = getSumberDanaService;
|
||||||
|
this.putSumberDanaService = putSumberDanaService;
|
||||||
|
}
|
||||||
|
|
||||||
// get sumberdana by id rest api
|
@GetMapping
|
||||||
@GetMapping("/{id}")
|
public GetListSumberDanaResponse getListSumberDana(@RequestParam(name = "search", required = false) String search,
|
||||||
public ResponseEntity<SumberDana> getSumberdanaById(@PathVariable Long id) {
|
@RequestParam(name = "page", defaultValue = "1") Integer page,
|
||||||
SumberDana sumberdana = sumberdanaRepository.findById(id)
|
@RequestParam(name = "size", defaultValue = "5") Integer size){
|
||||||
.orElseThrow(() -> new ResourceNotFoundException("Sumberdana not exist with id :" + id));
|
|
||||||
return ResponseEntity.ok(sumberdana);
|
|
||||||
}
|
|
||||||
|
|
||||||
// update sumberdana rest api
|
Pageable pageable = PageRequest.of((page - 1), size);
|
||||||
@PutMapping("/{id}")
|
SumberDanaRequest sumberDanaRequest = SumberDanaRequest.builder()
|
||||||
public ResponseEntity<SumberDana> updateSumberdana(@PathVariable Long id, @RequestBody SumberDana sumberDanaDetails){
|
.search(search)
|
||||||
SumberDana sumberdana = sumberdanaRepository.findById(id)
|
.pageable(pageable)
|
||||||
.orElseThrow(() -> new ResourceNotFoundException("Sumberdana not exist with id :" + id));
|
.build();
|
||||||
|
|
||||||
sumberdana.setSumberDana(sumberDanaDetails.getSumberDana());
|
return getListSumberDanaService.execute(sumberDanaRequest);
|
||||||
sumberdana.setKeterangan(sumberDanaDetails.getKeterangan());
|
}
|
||||||
|
|
||||||
SumberDana updatedSumberDana = sumberdanaRepository.save(sumberdana);
|
|
||||||
return ResponseEntity.ok(updatedSumberDana);
|
|
||||||
}
|
|
||||||
|
|
||||||
// delete sumberdana rest api
|
|
||||||
@DeleteMapping("/{id}")
|
|
||||||
public ResponseEntity<Map<String, Boolean>> deleteSumberdana(@PathVariable Long id){
|
|
||||||
SumberDana sumberdana = sumberdanaRepository.findById(id)
|
|
||||||
.orElseThrow(() -> new ResourceNotFoundException("Sumberdana not exist with id :" + id));
|
|
||||||
|
|
||||||
sumberdanaRepository.delete(sumberdana);
|
|
||||||
Map<String, Boolean> response = new HashMap<>();
|
|
||||||
response.put("deleted", Boolean.TRUE);
|
|
||||||
return ResponseEntity.ok(response);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
@PostMapping
|
||||||
|
public SumberDanaResponse createSumberDana(@RequestBody SumberDanaRequest request) {
|
||||||
|
return postCreateSumberDanaService.execute(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/{id}")
|
||||||
|
public SumberDanaResponse getSumberDanaById(@PathVariable Long id) {
|
||||||
|
return getSumberDanaService.execute(SumberDanaRequest.builder()
|
||||||
|
.id(id)
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/{id}")
|
||||||
|
public SumberDanaResponse updateBidang(@PathVariable Long id, @RequestBody SumberDanaRequest request){
|
||||||
|
request.setId(id);
|
||||||
|
return putSumberDanaService.execute(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/{id}")
|
||||||
|
public EmptyResponse deleteBidang(@PathVariable Long id){
|
||||||
|
return deleteSumberDanaService.execute(SumberDanaRequest.builder()
|
||||||
|
.id(id)
|
||||||
|
.build());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,17 @@
|
|||||||
|
package com.iconplus.smartproc.model.projection;
|
||||||
|
|
||||||
|
public interface SumberDanaView {
|
||||||
|
|
||||||
|
Long getId();
|
||||||
|
void setId();
|
||||||
|
|
||||||
|
String getKeterangan();
|
||||||
|
void setKeterangan(String keterangan);
|
||||||
|
|
||||||
|
String getSumberDana();
|
||||||
|
void setSumberDana(String sumberDana);
|
||||||
|
|
||||||
|
Boolean getIsActive();
|
||||||
|
void setIsActive(Boolean isActive);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
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 SumberDanaRequest extends BaseRequest {
|
||||||
|
|
||||||
|
private Long id;
|
||||||
|
private String sumberDana;
|
||||||
|
private String keterangan;
|
||||||
|
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
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class GetListSumberDanaResponse extends BaseResponse {
|
||||||
|
|
||||||
|
private List<SumberDanaResponse> data;
|
||||||
|
private Pagination pagination;
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
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 SumberDanaResponse extends BaseResponse {
|
||||||
|
|
||||||
|
private Long id;
|
||||||
|
private String sumberDana;
|
||||||
|
private String keterangan;
|
||||||
|
private Boolean isActive;
|
||||||
|
private Boolean isDelete;
|
||||||
|
}
|
@ -1,10 +1,30 @@
|
|||||||
package com.iconplus.smartproc.repository;
|
package com.iconplus.smartproc.repository;
|
||||||
|
|
||||||
import com.iconplus.smartproc.model.entity.SumberDana;
|
import com.iconplus.smartproc.model.entity.SumberDana;
|
||||||
|
import com.iconplus.smartproc.model.projection.SumberDanaView;
|
||||||
|
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.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.Query;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
public interface SumberDanaRepository extends JpaRepository<SumberDana, Long> {
|
public interface SumberDanaRepository extends JpaRepository<SumberDana, Long> {
|
||||||
|
|
||||||
|
Optional<SumberDana> findByIdAndIsDeleteFalse(Long id);
|
||||||
|
Optional<SumberDana> findBySumberDanaAndIsDeleteFalse(String sumberDana);
|
||||||
|
|
||||||
|
@Query(value = "SELECT sd.id as id, " +
|
||||||
|
"sd.sumberDana as sumberDana, " +
|
||||||
|
"sd.keterangan as keterangan, " +
|
||||||
|
"sd.isActive as isActive " +
|
||||||
|
"FROM SumberDana sd " +
|
||||||
|
"WHERE sd.isDelete = false " +
|
||||||
|
"AND (:search = '' or UPPER(sd.sumberDana) like :search) " +
|
||||||
|
"ORDER BY sd.id")
|
||||||
|
Page<SumberDanaView> getListSumberDana(String search, Pageable pageable);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,26 @@
|
|||||||
|
package com.iconplus.smartproc.service.sumberdana;
|
||||||
|
|
||||||
|
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.SumberDanaRequest;
|
||||||
|
import com.iconplus.smartproc.repository.SumberDanaRepository;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class DeleteSumberDanaService implements BaseService<SumberDanaRequest, EmptyResponse> {
|
||||||
|
|
||||||
|
private SumberDanaRepository sumberDanaRepository;
|
||||||
|
|
||||||
|
public DeleteSumberDanaService(SumberDanaRepository sumberDanaRepository) {
|
||||||
|
this.sumberDanaRepository = sumberDanaRepository;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public EmptyResponse execute(SumberDanaRequest input) {
|
||||||
|
var sumberDana = sumberDanaRepository.findByIdAndIsDeleteFalse(input.getId()).orElseThrow(() -> new BusinessException("err", "err", "err"));
|
||||||
|
sumberDana.setIsDelete(true);
|
||||||
|
sumberDanaRepository.save(sumberDana);
|
||||||
|
return new EmptyResponse();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,49 @@
|
|||||||
|
package com.iconplus.smartproc.service.sumberdana;
|
||||||
|
|
||||||
|
import com.iconplus.smartproc.helper.model.Pagination;
|
||||||
|
import com.iconplus.smartproc.helper.service.BaseService;
|
||||||
|
import com.iconplus.smartproc.model.projection.SumberDanaView;
|
||||||
|
import com.iconplus.smartproc.model.request.SumberDanaRequest;
|
||||||
|
import com.iconplus.smartproc.model.response.GetListSumberDanaResponse;
|
||||||
|
import com.iconplus.smartproc.model.response.SumberDanaResponse;
|
||||||
|
import com.iconplus.smartproc.repository.SumberDanaRepository;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class GetListSumberDanaService implements BaseService<SumberDanaRequest, GetListSumberDanaResponse> {
|
||||||
|
|
||||||
|
private SumberDanaRepository sumberDanaRepository;
|
||||||
|
|
||||||
|
public GetListSumberDanaService(SumberDanaRepository sumberDanaRepository) {
|
||||||
|
this.sumberDanaRepository = sumberDanaRepository;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GetListSumberDanaResponse execute(SumberDanaRequest input) {
|
||||||
|
List<SumberDanaResponse> sumberDanaResponseList = new ArrayList<>();
|
||||||
|
var sumberDanaViews= sumberDanaRepository.getListSumberDana(input.getSearch(), input.getPageable());
|
||||||
|
for (SumberDanaView sumberDanaView : sumberDanaViews) {
|
||||||
|
SumberDanaResponse sumberDanaResponse = SumberDanaResponse.builder()
|
||||||
|
.id(sumberDanaView.getId())
|
||||||
|
.sumberDana(sumberDanaView.getSumberDana())
|
||||||
|
.keterangan(sumberDanaView.getKeterangan())
|
||||||
|
.isActive(sumberDanaView.getIsActive())
|
||||||
|
.build();
|
||||||
|
sumberDanaResponseList.add(sumberDanaResponse);
|
||||||
|
}
|
||||||
|
return GetListSumberDanaResponse.builder()
|
||||||
|
.data(sumberDanaResponseList)
|
||||||
|
.pagination(Pagination.builder()
|
||||||
|
.pageSize(input.getPageable().getPageSize())
|
||||||
|
.currentPage(input.getPageable().getPageNumber())
|
||||||
|
.totalPages(sumberDanaViews.getTotalPages())
|
||||||
|
.totalRecords(sumberDanaViews.getTotalElements())
|
||||||
|
.isFirstPage(sumberDanaViews.isFirst())
|
||||||
|
.isLastPage(sumberDanaViews.isLast())
|
||||||
|
.build())
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,31 @@
|
|||||||
|
package com.iconplus.smartproc.service.sumberdana;
|
||||||
|
|
||||||
|
import com.iconplus.smartproc.exception.BusinessException;
|
||||||
|
import com.iconplus.smartproc.helper.service.BaseService;
|
||||||
|
import com.iconplus.smartproc.model.request.SumberDanaRequest;
|
||||||
|
import com.iconplus.smartproc.model.response.SumberDanaResponse;
|
||||||
|
import com.iconplus.smartproc.repository.SumberDanaRepository;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class GetSumberDanaService implements BaseService<SumberDanaRequest, SumberDanaResponse> {
|
||||||
|
|
||||||
|
private SumberDanaRepository sumberDanaRepository;
|
||||||
|
|
||||||
|
public GetSumberDanaService(SumberDanaRepository sumberDanaRepository) {
|
||||||
|
this.sumberDanaRepository = sumberDanaRepository;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SumberDanaResponse execute(SumberDanaRequest input) {
|
||||||
|
|
||||||
|
var sumberDana = sumberDanaRepository.findByIdAndIsDeleteFalse(input.getId()).orElseThrow(() -> new BusinessException("err", "err", "err"));
|
||||||
|
return SumberDanaResponse.builder()
|
||||||
|
.id(sumberDana.getId())
|
||||||
|
.sumberDana(sumberDana.getSumberDana())
|
||||||
|
.keterangan(sumberDana.getKeterangan())
|
||||||
|
.isActive(sumberDana.getIsActive())
|
||||||
|
.isDelete(sumberDana.getIsDelete())
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
package com.iconplus.smartproc.service.sumberdana;
|
||||||
|
|
||||||
|
import com.iconplus.smartproc.exception.BusinessException;
|
||||||
|
import com.iconplus.smartproc.helper.service.BaseService;
|
||||||
|
import com.iconplus.smartproc.model.entity.SumberDana;
|
||||||
|
import com.iconplus.smartproc.model.request.SumberDanaRequest;
|
||||||
|
import com.iconplus.smartproc.model.response.SumberDanaResponse;
|
||||||
|
import com.iconplus.smartproc.repository.SumberDanaRepository;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class PostCreateSumberDanaService implements BaseService<SumberDanaRequest, SumberDanaResponse> {
|
||||||
|
|
||||||
|
private SumberDanaRepository sumberDanaRepository;
|
||||||
|
|
||||||
|
public PostCreateSumberDanaService(SumberDanaRepository sumberDanaRepository) {
|
||||||
|
this.sumberDanaRepository = sumberDanaRepository;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SumberDanaResponse execute(SumberDanaRequest input) {
|
||||||
|
|
||||||
|
var sumberDana = sumberDanaRepository.findBySumberDanaAndIsDeleteFalse(input.getSumberDana());
|
||||||
|
if (sumberDana.isPresent()) {
|
||||||
|
throw new BusinessException("err", "err", "err");
|
||||||
|
}
|
||||||
|
SumberDana sumberDanaEntity = SumberDana.builder()
|
||||||
|
.sumberDana(input.getSumberDana())
|
||||||
|
.keterangan(input.getKeterangan())
|
||||||
|
.isActive(input.getIsActive())
|
||||||
|
.isDelete(false)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
var result = sumberDanaRepository.save(sumberDanaEntity);
|
||||||
|
|
||||||
|
return SumberDanaResponse.builder()
|
||||||
|
.id(result.getId())
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,32 @@
|
|||||||
|
package com.iconplus.smartproc.service.sumberdana;
|
||||||
|
|
||||||
|
import com.iconplus.smartproc.exception.BusinessException;
|
||||||
|
import com.iconplus.smartproc.helper.service.BaseService;
|
||||||
|
import com.iconplus.smartproc.model.request.SumberDanaRequest;
|
||||||
|
import com.iconplus.smartproc.model.response.SumberDanaResponse;
|
||||||
|
import com.iconplus.smartproc.repository.SumberDanaRepository;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class PutSumberDanaService implements BaseService<SumberDanaRequest, SumberDanaResponse> {
|
||||||
|
|
||||||
|
private SumberDanaRepository sumberDanaRepository;
|
||||||
|
|
||||||
|
public PutSumberDanaService(SumberDanaRepository sumberDanaRepository) {
|
||||||
|
this.sumberDanaRepository = sumberDanaRepository;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SumberDanaResponse execute(SumberDanaRequest input) {
|
||||||
|
|
||||||
|
var sumberDana = sumberDanaRepository.findByIdAndIsDeleteFalse(input.getId()).orElseThrow(() -> new BusinessException("err", "err", "err"));
|
||||||
|
sumberDana.setSumberDana(input.getSumberDana());
|
||||||
|
sumberDana.setKeterangan(input.getKeterangan());
|
||||||
|
sumberDana.setIsActive(input.getIsActive());
|
||||||
|
var result = sumberDanaRepository.save(sumberDana);
|
||||||
|
return SumberDanaResponse.builder()
|
||||||
|
.id(result.getId())
|
||||||
|
.build();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user