diff --git a/src/main/java/com/iconplus/smartproc/controller/DrpController.java b/src/main/java/com/iconplus/smartproc/controller/DrpController.java new file mode 100644 index 0000000..d42bcf2 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/controller/DrpController.java @@ -0,0 +1,11 @@ +package com.iconplus.smartproc.controller; + +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true") +@RestController +@RequestMapping("/api/drp") +public class DrpController { +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/Drp.java b/src/main/java/com/iconplus/smartproc/model/entity/Drp.java new file mode 100644 index 0000000..6747558 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/Drp.java @@ -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.*; +import java.sql.Timestamp; +import java.util.Date; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "drp") +public class Drp extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "tahun") + private Integer tahun; + + @Column(name = "is_approve") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isApprove; + + @Column(name = "approve_date") + private Timestamp approveDate; + + @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; +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/DrpView.java b/src/main/java/com/iconplus/smartproc/model/projection/DrpView.java new file mode 100644 index 0000000..16bbaa5 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/DrpView.java @@ -0,0 +1,24 @@ +package com.iconplus.smartproc.model.projection; + +import java.sql.Timestamp; + +public interface DrpView { + + Long getId(); + void setId(Long id); + + Integer getTahun(); + void setTahun(Integer tahun); + + Boolean getIsApprove(); + void setIsApprove(Boolean isApprove); + + Timestamp getApproveDate(); + void setApproveDate(Timestamp approveDate); + + Boolean getIsActive(); + void setIsActive(Boolean isActive); + + Boolean getIsDelete(); + void setIsDelete(Boolean isDelete); +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/DrpRequest.java b/src/main/java/com/iconplus/smartproc/model/request/DrpRequest.java new file mode 100644 index 0000000..bce2e43 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/DrpRequest.java @@ -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; + +import java.sql.Timestamp; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class DrpRequest extends BaseRequest { + private Long id; + private Integer tahun; + private Boolean isApprove; + private Timestamp approveDate; + private Boolean isActive; + private transient Pageable pageable; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/DrpResponse.java b/src/main/java/com/iconplus/smartproc/model/response/DrpResponse.java new file mode 100644 index 0000000..3064045 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/DrpResponse.java @@ -0,0 +1,22 @@ +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; + +import java.sql.Timestamp; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class DrpResponse extends BaseResponse { + private Long id; + private Integer tahun; + private Boolean isApprove; + private Timestamp approveDate; + private Boolean isActive; + private Boolean isDelete; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListDrpResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListDrpResponse.java new file mode 100644 index 0000000..5b178d7 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListDrpResponse.java @@ -0,0 +1,19 @@ +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 GetListDrpResponse extends BaseResponse { + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java new file mode 100644 index 0000000..0c0ec13 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java @@ -0,0 +1,32 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.Drp; +import com.iconplus.smartproc.model.projection.DrpView; +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.sql.Timestamp; +import java.util.List; +import java.util.Optional; + +@Repository +public interface DrpRepository extends JpaRepository { + + Optional findByIdAndIsDeleteFalse(Long id); + + @Query(value = "SELECT d.id as id, " + + "d.tahun as tahun, " + + "d.isApprove as isApprove, " + + "d.approveDate as approveDate, " + + "d.isActive as isActive, " + + "d.isDelete as isDelete " + + "FROM Drp d" + + "WHERE d.isDelete = false " + + "AND (:approveDate = '' or DATE(d.approveDate) = DATE(approveDate)) " + + "ORDER BY d.id") + Page findByIsDeleteFalse(Timestamp approveDate, + Pageable pageable); +} diff --git a/src/main/java/com/iconplus/smartproc/service/drp/GetDrpService.java b/src/main/java/com/iconplus/smartproc/service/drp/GetDrpService.java new file mode 100644 index 0000000..c6c76d3 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/drp/GetDrpService.java @@ -0,0 +1,36 @@ +package com.iconplus.smartproc.service.drp; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.DrpRequest; +import com.iconplus.smartproc.model.response.DrpResponse; +import com.iconplus.smartproc.repository.DrpRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + +@Service +public class GetDrpService implements BaseService { + + private final DrpRepository drpRepository; + + public GetDrpService(DrpRepository drpRepository) { + this.drpRepository = drpRepository; + } + + @Override + public DrpResponse execute(DrpRequest input) { + var drp = drpRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "DRP", input.getId()))); + + return DrpResponse.builder() + .id(drp.getId()) + .tahun(drp.getTahun()) + .isApprove(drp.getIsApprove()) + .approveDate(drp.getApproveDate()) + .isActive(drp.getIsActive()) + .isDelete(drp.getIsDelete()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/drp/GetListDrpService.java b/src/main/java/com/iconplus/smartproc/service/drp/GetListDrpService.java new file mode 100644 index 0000000..3581ffd --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/drp/GetListDrpService.java @@ -0,0 +1,54 @@ +package com.iconplus.smartproc.service.drp; + +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.DrpView; +import com.iconplus.smartproc.model.request.DrpRequest; +import com.iconplus.smartproc.model.response.DrpResponse; +import com.iconplus.smartproc.model.response.GetListDrpResponse; +import com.iconplus.smartproc.repository.DrpRepository; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListDrpService implements BaseService { + + private final DrpRepository drpRepository; + + public GetListDrpService(DrpRepository drpRepository) { + this.drpRepository = drpRepository; + } + + @Override + public GetListDrpResponse execute(DrpRequest input) { + + List drpResponseList = new ArrayList<>(); + + var drpViews = drpRepository.findByIsDeleteFalse(input.getApproveDate(), input.getPageable()); + for (DrpView drpView : drpViews) { + DrpResponse drpResponse = DrpResponse.builder() + .id(drpView.getId()) + .tahun(drpView.getTahun()) + .isApprove(drpView.getIsApprove()) + .approveDate(drpView.getApproveDate()) + .isActive(drpView.getIsActive()) + .isDelete(drpView.getIsDelete()) + .build(); + drpResponseList.add(drpResponse); + } + + return GetListDrpResponse.builder() + .data(drpResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(drpViews.getTotalPages()) + .totalRecords(drpViews.getTotalElements()) + .isFirstPage(drpViews.isFirst()) + .isLastPage(drpViews.isLast()) + .build()) + .build(); + } +}