diff --git a/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java b/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java index 5ae9603..42ff38a 100644 --- a/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java +++ b/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java @@ -1,12 +1,13 @@ package com.iconplus.smartproc.controller; +import com.iconplus.smartproc.exception.BusinessException; import com.iconplus.smartproc.helper.model.EmptyRequest; import com.iconplus.smartproc.helper.model.EmptyResponse; import com.iconplus.smartproc.model.request.ChangePasswordRequest; import com.iconplus.smartproc.model.request.ForgotPasswordRequest; import com.iconplus.smartproc.model.request.LoginRequest; import com.iconplus.smartproc.model.request.RefreshTokenRequest; -import com.iconplus.smartproc.model.response.LoginResponse; +import com.iconplus.smartproc.model.response.GlobalResponse; import com.iconplus.smartproc.model.response.RefreshTokenResponse; import com.iconplus.smartproc.service.authentication.*; import org.springframework.web.bind.annotation.*; @@ -35,8 +36,20 @@ public class AuthenticationController { } @PostMapping("/login") - public LoginResponse getLoginResponse(@RequestBody LoginRequest loginRequest) { - return loginService.execute(loginRequest); + public GlobalResponse getLoginResponse(@RequestBody LoginRequest loginRequest) { + try { + var loginResponse = loginService.execute(loginRequest); + return GlobalResponse.builder() + .isOk(true) + .message("Succes") + .data(loginResponse) + .build(); + } catch (BusinessException exception) { + return GlobalResponse.builder() + .isOk(false) + .message(exception.getErrorMessage()) + .build(); + } } @PostMapping("/refresh-token") diff --git a/src/main/java/com/iconplus/smartproc/controller/DrpController.java b/src/main/java/com/iconplus/smartproc/controller/DrpController.java index d42bcf2..e7da740 100644 --- a/src/main/java/com/iconplus/smartproc/controller/DrpController.java +++ b/src/main/java/com/iconplus/smartproc/controller/DrpController.java @@ -1,11 +1,59 @@ 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; +import com.iconplus.smartproc.model.request.DrpRequest; +import com.iconplus.smartproc.model.request.InstansiRequest; +import com.iconplus.smartproc.model.response.DrpResponse; +import com.iconplus.smartproc.model.response.GetListDrpResponse; +import com.iconplus.smartproc.model.response.InstansiResponse; +import com.iconplus.smartproc.service.drp.GetDrpService; +import com.iconplus.smartproc.service.drp.GetListDrpService; +import com.iconplus.smartproc.service.drp.PostCreateDrpService; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; -@CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true") +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") @RestController @RequestMapping("/api/drp") public class DrpController { + + private final GetDrpService getDrpService; + private final GetListDrpService getListDrpService; + private final PostCreateDrpService postCreateDrpService; + + public DrpController(GetDrpService getDrpService, + GetListDrpService getListDrpService, + PostCreateDrpService postCreateDrpService) { + this.getDrpService = getDrpService; + this.getListDrpService = getListDrpService; + this.postCreateDrpService = postCreateDrpService; + } + + @GetMapping + public GetListDrpResponse getListDrp(@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); + DrpRequest drpRequest = DrpRequest.builder() + .search(search) + .pageable(pageable) + .build(); + + return getListDrpService.execute(drpRequest); + } + + @GetMapping("/{id}") + public DrpResponse getDrp(@PathVariable Long id) { + return getDrpService.execute(DrpRequest.builder() + .id(id) + .build()); + } + + @PostMapping + public DrpResponse createDrp(@RequestBody DrpRequest drpRequest) { + return postCreateDrpService.execute(drpRequest); + } + } diff --git a/src/main/java/com/iconplus/smartproc/model/entity/DrpDokumen.java b/src/main/java/com/iconplus/smartproc/model/entity/DrpDokumen.java new file mode 100644 index 0000000..0939e3c --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/DrpDokumen.java @@ -0,0 +1,47 @@ +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 +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "drp_dokumen") +public class DrpDokumen extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "drp_id") + private Long drpId; + + @Column(name = "jenis_dokumen_id") + private Long jenisDokumenId; + + @Column(name = "filename") + private String filename; + + @Column(name = "keterangan") + private String keterangan; + + @Column(name = "file") + private byte[] file; + + @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/request/DrpDokumenRequest.java b/src/main/java/com/iconplus/smartproc/model/request/DrpDokumenRequest.java new file mode 100644 index 0000000..21917be --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/DrpDokumenRequest.java @@ -0,0 +1,20 @@ +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; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class DrpDokumenRequest extends BaseRequest { + + private Long jenisDokumenId; + private String filename; + private byte[] file; + private String keterangan; + private 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 index bce2e43..53bbdee 100644 --- a/src/main/java/com/iconplus/smartproc/model/request/DrpRequest.java +++ b/src/main/java/com/iconplus/smartproc/model/request/DrpRequest.java @@ -8,6 +8,7 @@ import lombok.NoArgsConstructor; import org.springframework.data.domain.Pageable; import java.sql.Timestamp; +import java.util.List; @Data @Builder @@ -19,5 +20,9 @@ public class DrpRequest extends BaseRequest { private Boolean isApprove; private Timestamp approveDate; private Boolean isActive; + + private List data; + + private String search; private transient Pageable pageable; } diff --git a/src/main/java/com/iconplus/smartproc/model/response/DrpDokumenResponse.java b/src/main/java/com/iconplus/smartproc/model/response/DrpDokumenResponse.java new file mode 100644 index 0000000..b04d0f8 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/DrpDokumenResponse.java @@ -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; + +import java.sql.Timestamp; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class DrpDokumenResponse extends BaseResponse { + + private Long id; + private Long drpId; + private Long jenisDokumenId; + private String filename; + private String keterangan; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/DrpResponse.java b/src/main/java/com/iconplus/smartproc/model/response/DrpResponse.java index 3064045..2fd73b8 100644 --- a/src/main/java/com/iconplus/smartproc/model/response/DrpResponse.java +++ b/src/main/java/com/iconplus/smartproc/model/response/DrpResponse.java @@ -7,6 +7,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import java.sql.Timestamp; +import java.util.List; @Data @Builder @@ -19,4 +20,6 @@ public class DrpResponse extends BaseResponse { private Timestamp approveDate; private Boolean isActive; private Boolean isDelete; + + private List data; } diff --git a/src/main/java/com/iconplus/smartproc/model/response/GlobalResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GlobalResponse.java new file mode 100644 index 0000000..dbc31bd --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GlobalResponse.java @@ -0,0 +1,19 @@ +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 +@NoArgsConstructor +@AllArgsConstructor +public class GlobalResponse extends BaseResponse { + + private Boolean isOk; + private String message; + private transient Object data; +} diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpDokumenRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpDokumenRepository.java new file mode 100644 index 0000000..6f13bb5 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/DrpDokumenRepository.java @@ -0,0 +1,13 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.DrpDokumen; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface DrpDokumenRepository extends JpaRepository { + + List findByDrpIdAndIsDeleteFalse(Long drpId); +} diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java index 0c0ec13..8efc757 100644 --- a/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java @@ -17,15 +17,17 @@ public interface DrpRepository extends JpaRepository { Optional findByIdAndIsDeleteFalse(Long id); + Optional findByTahunAndIsDeleteFalse(Integer tahun); + @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" + + "FROM Drp d " + "WHERE d.isDelete = false " + - "AND (:approveDate = '' or DATE(d.approveDate) = DATE(approveDate)) " + +// "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 index c6c76d3..fc540e0 100644 --- a/src/main/java/com/iconplus/smartproc/service/drp/GetDrpService.java +++ b/src/main/java/com/iconplus/smartproc/service/drp/GetDrpService.java @@ -2,19 +2,28 @@ package com.iconplus.smartproc.service.drp; import com.iconplus.smartproc.exception.BusinessException; import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.DrpDokumen; import com.iconplus.smartproc.model.request.DrpRequest; +import com.iconplus.smartproc.model.response.DrpDokumenResponse; import com.iconplus.smartproc.model.response.DrpResponse; +import com.iconplus.smartproc.repository.DrpDokumenRepository; import com.iconplus.smartproc.repository.DrpRepository; import com.iconplus.smartproc.util.Constants; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.List; + @Service public class GetDrpService implements BaseService { private final DrpRepository drpRepository; + private final DrpDokumenRepository drpDokumenRepository; - public GetDrpService(DrpRepository drpRepository) { + public GetDrpService(DrpRepository drpRepository, + DrpDokumenRepository drpDokumenRepository) { this.drpRepository = drpRepository; + this.drpDokumenRepository = drpDokumenRepository; } @Override @@ -24,6 +33,19 @@ public class GetDrpService implements BaseService { Constants.ERR_TTL_10001, String.format(Constants.ERR_MSG_10001, "DRP", input.getId()))); + var drpDokumenList = drpDokumenRepository.findByDrpIdAndIsDeleteFalse(input.getId()); + List drpDokumenResponseList = new ArrayList<>(); + + for (DrpDokumen drpDokumen : drpDokumenList) { + DrpDokumenResponse drpDokumenResponse = DrpDokumenResponse.builder() + .id(drpDokumen.getId()) + .drpId(drpDokumen.getDrpId()) + .jenisDokumenId(drpDokumen.getJenisDokumenId()) + .filename(drpDokumen.getFilename()) + .build(); + drpDokumenResponseList.add(drpDokumenResponse); + } + return DrpResponse.builder() .id(drp.getId()) .tahun(drp.getTahun()) @@ -31,6 +53,7 @@ public class GetDrpService implements BaseService { .approveDate(drp.getApproveDate()) .isActive(drp.getIsActive()) .isDelete(drp.getIsDelete()) + .data(drpDokumenResponseList) .build(); } } diff --git a/src/main/java/com/iconplus/smartproc/service/drp/PostCreateDrpService.java b/src/main/java/com/iconplus/smartproc/service/drp/PostCreateDrpService.java new file mode 100644 index 0000000..fc40f3b --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/drp/PostCreateDrpService.java @@ -0,0 +1,72 @@ +package com.iconplus.smartproc.service.drp; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.Drp; +import com.iconplus.smartproc.model.entity.DrpDokumen; +import com.iconplus.smartproc.model.request.DrpDokumenRequest; +import com.iconplus.smartproc.model.request.DrpRequest; +import com.iconplus.smartproc.model.response.DrpResponse; +import com.iconplus.smartproc.repository.DrpDokumenRepository; +import com.iconplus.smartproc.repository.DrpRepository; +import com.iconplus.smartproc.util.Constants; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +@Service +public class PostCreateDrpService implements BaseService { + + private final DrpRepository drpRepository; + private final DrpDokumenRepository drpDokumenRepository; + + public PostCreateDrpService (DrpRepository drpRepository, + DrpDokumenRepository drpDokumenRepository) { + this.drpRepository = drpRepository; + this.drpDokumenRepository = drpDokumenRepository; + } + + @Override + public DrpResponse execute(DrpRequest input) { + + Optional drpOptional = drpRepository.findByTahunAndIsDeleteFalse(input.getTahun()); + if (drpOptional.isPresent()) { + throw new BusinessException(Constants.ERR_CODE_10010, + Constants.ERR_TTL_10010, + Constants.ERR_MSG_10010); + } + + Drp drp = Drp.builder() + .tahun(input.getTahun()) + .isApprove(false) + .isActive(input.getIsActive()) + .isDelete(false) + .build(); + + var drpSaved = drpRepository.save(drp); + + List drpDokumenList = new ArrayList<>(); + if (ObjectUtils.isNotEmpty(input.getData())) { + for (DrpDokumenRequest drpDokumenRequest : input.getData()) { + DrpDokumen drpDokumen = DrpDokumen.builder() + .drpId(drpSaved.getId()) + .jenisDokumenId(drpDokumenRequest.getJenisDokumenId()) + .filename(drpDokumenRequest.getFilename()) + .file(drpDokumenRequest.getFile()) + .keterangan(drpDokumenRequest.getKeterangan()) + .isDelete(false) + .build(); + drpDokumenList.add(drpDokumen); + } + + } + drpDokumenRepository.saveAll(drpDokumenList); + + return DrpResponse.builder() + .id(drpSaved.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/util/Constants.java b/src/main/java/com/iconplus/smartproc/util/Constants.java index 8852b23..760161c 100644 --- a/src/main/java/com/iconplus/smartproc/util/Constants.java +++ b/src/main/java/com/iconplus/smartproc/util/Constants.java @@ -41,8 +41,12 @@ public class Constants { public static final String ERR_MSG_10009 = "Periksa kembali password sekrang anda"; public static final String ERR_CODE_10010 = "10010"; - public static final String ERR_TTL_10010 = "Proses Gagal"; - public static final String ERR_MSG_10010 = "Gagal decrypt password, masukkan password yg ter-encrypt"; + public static final String ERR_TTL_10010 = "Data tidak ditemukan"; + public static final String ERR_MSG_10010 = "Maaf, Tahun DRP yang anda pilih sudah ada sebelumnya. silahkan pilih Tahun DRP lain untuk menambah DRP baru."; + + public static final String ERR_CODE_10011 = "10011"; + public static final String ERR_TTL_10011 = "Proses Gagal"; + public static final String ERR_MSG_10011 = "Gagal decrypt password, masukkan password yg ter-encrypt"; public static final String ERR_CODE_40041 = "40041"; public static final String ERR_TTL_40041 = "Terjadi Gangguan";