add crud jabatan
This commit is contained in:
parent
fe72608465
commit
00dd061bac
@ -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();
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user