From beff4babe0166c73326eab6caea0e86a419db16d Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Tue, 23 May 2023 11:26:15 +0700 Subject: [PATCH 01/63] refactor base smartproc --- .gitignore | 90 +++++++------- pom.xml | 23 +++- .../controller/JenisAnggaranController.java | 82 +++++++++++++ ...oller.java => JenisKontrakController.java} | 30 ++--- ...ler.java => JenisPengadaanController.java} | 30 ++--- .../controller/JenisanggaranController.java | 65 ---------- .../controller/LokasiController.java | 2 +- ...er.java => MetodePengadaanController.java} | 30 ++--- ....java => MetodePenyampaianController.java} | 30 ++--- .../smartproc/controller/RolesController.java | 4 +- ....java => StrategiPengadaanController.java} | 30 ++--- ...troller.java => SumberDanaController.java} | 30 ++--- ...=> SupplyPositioningMatrixController.java} | 30 ++--- ...ller.java => UnitInisiatorController.java} | 30 ++--- .../smartproc/controller/UsersController.java | 10 +- .../smartproc/entity/Jenisanggaran.java | 40 ------ .../smartproc/entity/Jeniskontrak.java | 42 ------- .../smartproc/entity/Jenispengadaan.java | 40 ------ .../com/iconplus/smartproc/entity/Lokasi.java | 40 ------ .../smartproc/entity/Metodepengadaan.java | 41 ------- .../smartproc/entity/Metodepenyampaian.java | 41 ------- .../com/iconplus/smartproc/entity/Roles.java | 48 -------- .../smartproc/entity/Strategipengadaan.java | 40 ------ .../iconplus/smartproc/entity/Sumberdana.java | 40 ------ .../entity/Supplypositioningmatrix.java | 42 ------- .../smartproc/entity/Unitinisiator.java | 41 ------- .../com/iconplus/smartproc/entity/Users.java | 96 --------------- .../smartproc/exception/BaseException.java | 49 ++++++++ .../exception/BusinessException.java | 47 +++++++ .../smartproc/exception/ErrorHelper.java | 115 ++++++++++++++++++ .../smartproc/exception/ErrorResponse.java | 16 +++ .../exception/GlobalExceptionHandler.java | 102 ++++++++++++++++ .../exception/ResponseExceptionResolver.java | 69 +++++++++++ .../exception/TechnicalException.java | 40 ++++++ .../smartproc/helper/base/BaseEntity.java | 30 +++++ .../helper/base/BaseInterfaceRequest.java | 10 ++ .../helper/base/BaseInterfaceResponse.java | 12 ++ .../helper/base/BasePaginationRequest.java | 18 +++ .../helper/base/BasePaginationResponse.java | 14 +++ .../smartproc/helper/base/BaseRequest.java | 10 ++ .../smartproc/helper/base/BaseResponse.java | 12 ++ .../smartproc/helper/model/EmptyRequest.java | 7 ++ .../smartproc/helper/model/EmptyResponse.java | 9 ++ .../smartproc/helper/model/Pagination.java | 22 ++++ .../helper/service/BaseInterfaceService.java | 8 ++ .../helper/service/BasePaginationService.java | 30 +++++ .../smartproc/helper/service/BaseService.java | 9 ++ .../smartproc/model/entity/JenisAnggaran.java | 38 ++++++ .../smartproc/model/entity/JenisKontrak.java | 25 ++++ .../model/entity/JenisPengadaan.java | 25 ++++ .../smartproc/model/entity/Lokasi.java | 25 ++++ .../model/entity/MetodePengadaan.java | 25 ++++ .../model/entity/MetodePenyampaian.java | 26 ++++ .../smartproc/model/entity/Roles.java | 28 +++++ .../model/entity/StrategiPengadaan.java | 20 +++ .../smartproc/model/entity/SumberDana.java | 25 ++++ .../model/entity/SupplyPositioningMatrix.java | 25 ++++ .../smartproc/model/entity/UnitInisiator.java | 25 ++++ .../smartproc/model/entity/Users.java | 51 ++++++++ .../model/projection/JenisAnggaranView.java | 16 +++ .../model/request/JenisAnggaranRequest.java | 19 +++ .../GetListJenisAnggaranResponse.java | 20 +++ .../model/response/JenisAnggaranResponse.java | 21 ++++ .../repository/JenisAnggaranRepository.java | 32 +++++ ...itory.java => JenisKontrakRepository.java} | 4 +- ...ory.java => JenisPengadaanRepository.java} | 4 +- .../repository/LokasiRepository.java | 2 +- ...ry.java => MetodePengadaanRepository.java} | 4 +- ....java => MetodePenyampaianRepository.java} | 4 +- .../smartproc/repository/RolesRepository.java | 2 +- .../StrategiPengadaanRepository.java | 10 ++ .../StrategipengadaanRepository.java | 10 -- ...ository.java => SumberDanaRepository.java} | 4 +- .../SupplyPositioningMatrixRepository.java | 10 ++ .../SupplypositioningmatrixRepository.java | 10 -- ...tory.java => UnitInisiatorRepository.java} | 4 +- .../repository/UnitinisiatorRepository.java | 10 -- .../smartproc/repository/UsersRepository.java | 2 +- .../DeleteJenisAnggaranService.java | 39 ++++++ .../GetJenisAnggaranByIdService.java | 45 +++++++ .../GetListJenisAnggaranService.java | 60 +++++++++ .../PostCreateJenisAnggaranService.java | 53 ++++++++ .../PutUpdateJenisAnggaranService.java | 45 +++++++ .../iconplus/smartproc/util/Constants.java | 15 +++ src/main/resources/application.properties | 2 +- 85 files changed, 1642 insertions(+), 839 deletions(-) create mode 100644 src/main/java/com/iconplus/smartproc/controller/JenisAnggaranController.java rename src/main/java/com/iconplus/smartproc/controller/{JeniskontrakController.java => JenisKontrakController.java} (60%) rename src/main/java/com/iconplus/smartproc/controller/{JenispengadaanController.java => JenisPengadaanController.java} (63%) delete mode 100644 src/main/java/com/iconplus/smartproc/controller/JenisanggaranController.java rename src/main/java/com/iconplus/smartproc/controller/{MetodepengadaanController.java => MetodePengadaanController.java} (60%) rename src/main/java/com/iconplus/smartproc/controller/{MetodepenyampaianController.java => MetodePenyampaianController.java} (61%) rename src/main/java/com/iconplus/smartproc/controller/{StrategipengadaanController.java => StrategiPengadaanController.java} (64%) rename src/main/java/com/iconplus/smartproc/controller/{SumberdanaController.java => SumberDanaController.java} (69%) rename src/main/java/com/iconplus/smartproc/controller/{SupplypositioningmatrixController.java => SupplyPositioningMatrixController.java} (69%) rename src/main/java/com/iconplus/smartproc/controller/{UnitinisiatorController.java => UnitInisiatorController.java} (68%) delete mode 100644 src/main/java/com/iconplus/smartproc/entity/Jenisanggaran.java delete mode 100644 src/main/java/com/iconplus/smartproc/entity/Jeniskontrak.java delete mode 100644 src/main/java/com/iconplus/smartproc/entity/Jenispengadaan.java delete mode 100644 src/main/java/com/iconplus/smartproc/entity/Lokasi.java delete mode 100644 src/main/java/com/iconplus/smartproc/entity/Metodepengadaan.java delete mode 100644 src/main/java/com/iconplus/smartproc/entity/Metodepenyampaian.java delete mode 100644 src/main/java/com/iconplus/smartproc/entity/Roles.java delete mode 100644 src/main/java/com/iconplus/smartproc/entity/Strategipengadaan.java delete mode 100644 src/main/java/com/iconplus/smartproc/entity/Sumberdana.java delete mode 100644 src/main/java/com/iconplus/smartproc/entity/Supplypositioningmatrix.java delete mode 100644 src/main/java/com/iconplus/smartproc/entity/Unitinisiator.java delete mode 100644 src/main/java/com/iconplus/smartproc/entity/Users.java create mode 100644 src/main/java/com/iconplus/smartproc/exception/BaseException.java create mode 100644 src/main/java/com/iconplus/smartproc/exception/BusinessException.java create mode 100644 src/main/java/com/iconplus/smartproc/exception/ErrorHelper.java create mode 100644 src/main/java/com/iconplus/smartproc/exception/ErrorResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/exception/GlobalExceptionHandler.java create mode 100644 src/main/java/com/iconplus/smartproc/exception/ResponseExceptionResolver.java create mode 100644 src/main/java/com/iconplus/smartproc/exception/TechnicalException.java create mode 100644 src/main/java/com/iconplus/smartproc/helper/base/BaseEntity.java create mode 100644 src/main/java/com/iconplus/smartproc/helper/base/BaseInterfaceRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/helper/base/BaseInterfaceResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/helper/base/BasePaginationRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/helper/base/BasePaginationResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/helper/base/BaseRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/helper/base/BaseResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/helper/model/EmptyRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/helper/model/EmptyResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/helper/model/Pagination.java create mode 100644 src/main/java/com/iconplus/smartproc/helper/service/BaseInterfaceService.java create mode 100644 src/main/java/com/iconplus/smartproc/helper/service/BasePaginationService.java create mode 100644 src/main/java/com/iconplus/smartproc/helper/service/BaseService.java create mode 100644 src/main/java/com/iconplus/smartproc/model/entity/JenisAnggaran.java create mode 100644 src/main/java/com/iconplus/smartproc/model/entity/JenisKontrak.java create mode 100644 src/main/java/com/iconplus/smartproc/model/entity/JenisPengadaan.java create mode 100644 src/main/java/com/iconplus/smartproc/model/entity/Lokasi.java create mode 100644 src/main/java/com/iconplus/smartproc/model/entity/MetodePengadaan.java create mode 100644 src/main/java/com/iconplus/smartproc/model/entity/MetodePenyampaian.java create mode 100644 src/main/java/com/iconplus/smartproc/model/entity/Roles.java create mode 100644 src/main/java/com/iconplus/smartproc/model/entity/StrategiPengadaan.java create mode 100644 src/main/java/com/iconplus/smartproc/model/entity/SumberDana.java create mode 100644 src/main/java/com/iconplus/smartproc/model/entity/SupplyPositioningMatrix.java create mode 100644 src/main/java/com/iconplus/smartproc/model/entity/UnitInisiator.java create mode 100644 src/main/java/com/iconplus/smartproc/model/entity/Users.java create mode 100644 src/main/java/com/iconplus/smartproc/model/projection/JenisAnggaranView.java create mode 100644 src/main/java/com/iconplus/smartproc/model/request/JenisAnggaranRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/GetListJenisAnggaranResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/JenisAnggaranResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/repository/JenisAnggaranRepository.java rename src/main/java/com/iconplus/smartproc/repository/{JenisanggaranRepository.java => JenisKontrakRepository.java} (55%) rename src/main/java/com/iconplus/smartproc/repository/{JenispengadaanRepository.java => JenisPengadaanRepository.java} (54%) rename src/main/java/com/iconplus/smartproc/repository/{MetodepenyampaianRepository.java => MetodePengadaanRepository.java} (53%) rename src/main/java/com/iconplus/smartproc/repository/{MetodepengadaanRepository.java => MetodePenyampaianRepository.java} (53%) create mode 100644 src/main/java/com/iconplus/smartproc/repository/StrategiPengadaanRepository.java delete mode 100644 src/main/java/com/iconplus/smartproc/repository/StrategipengadaanRepository.java rename src/main/java/com/iconplus/smartproc/repository/{JeniskontrakRepository.java => SumberDanaRepository.java} (56%) create mode 100644 src/main/java/com/iconplus/smartproc/repository/SupplyPositioningMatrixRepository.java delete mode 100644 src/main/java/com/iconplus/smartproc/repository/SupplypositioningmatrixRepository.java rename src/main/java/com/iconplus/smartproc/repository/{SumberdanaRepository.java => UnitInisiatorRepository.java} (55%) delete mode 100644 src/main/java/com/iconplus/smartproc/repository/UnitinisiatorRepository.java create mode 100644 src/main/java/com/iconplus/smartproc/service/jenisanggaran/DeleteJenisAnggaranService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/jenisanggaran/GetJenisAnggaranByIdService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/jenisanggaran/GetListJenisAnggaranService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/jenisanggaran/PostCreateJenisAnggaranService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/jenisanggaran/PutUpdateJenisAnggaranService.java create mode 100644 src/main/java/com/iconplus/smartproc/util/Constants.java diff --git a/.gitignore b/.gitignore index b24d71e..24725d6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,50 +1,46 @@ -# These are some examples of commonly ignored file patterns. -# You should customize this list as applicable to your project. -# Learn more about .gitignore: -# https://www.atlassian.com/git/tutorials/saving-changes/gitignore - -# Node artifact files -node_modules/ -dist/ - -# Compiled Java class files -*.class - -# Compiled Python bytecode -*.py[cod] - -# Log files -*.log - -# Package files +*# +*.iml +*.ipr +*.iws *.jar - -# Maven -target/ -dist/ - -# JetBrains IDE -.idea/ - -# Unit test reports -TEST*.xml - -# Generated by MacOS +*.sw? +*~ +.#* +.*.md.html .DS_Store +.attach_pid* +.classpath +.factorypath +.gradle +.idea +.metadata +.project +.recommenders +.settings +.springBeans +.vscode +/code +MANIFEST.MF +_site/ +activemq-data +bin +build +!/**/src/**/bin +!/**/src/**/build +build.log +dependency-reduced-pom.xml +dump.rdb +interpolated*.xml +lib/ +manifest.yml +out +overridedb.* +target +transaction-logs +.flattened-pom.xml +secrets.yml +.gradletasknamecache +.sts4-cache -# Generated by Windows -Thumbs.db - -# Applications -*.app -*.exe -*.war - -# Large media files -*.mp4 -*.tiff -*.avi -*.flv -*.mov -*.wmv - +mvnw +mvnw.cmd diff --git a/pom.xml b/pom.xml index e9c589a..33b56a1 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 3.0.6 + 2.7.5 com.iconplus @@ -14,7 +14,7 @@ smartproc Initialisasi Smartproc Framework - 17 + 11 @@ -29,6 +29,24 @@ org.springframework.boot spring-boot-starter-web + + io.zipkin.brave + brave + 5.16.0 + + + + org.apache.commons + commons-lang3 + 3.12.0 + + + + org.apache.velocity + velocity + 1.7 + + org.springframework.boot @@ -36,6 +54,7 @@ runtime true + org.postgresql postgresql diff --git a/src/main/java/com/iconplus/smartproc/controller/JenisAnggaranController.java b/src/main/java/com/iconplus/smartproc/controller/JenisAnggaranController.java new file mode 100644 index 0000000..c2e0d14 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/controller/JenisAnggaranController.java @@ -0,0 +1,82 @@ +package com.iconplus.smartproc.controller; + + +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.JenisAnggaranRequest; +import com.iconplus.smartproc.model.response.GetListJenisAnggaranResponse; +import com.iconplus.smartproc.model.response.JenisAnggaranResponse; +import com.iconplus.smartproc.repository.JenisAnggaranRepository; +import com.iconplus.smartproc.service.jenisanggaran.*; +import org.springframework.beans.factory.annotation.Autowired; +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/jenisanggaran") +public class JenisAnggaranController { + + @Autowired + private JenisAnggaranRepository jenisanggaranRepository; + + private final GetListJenisAnggaranService getListJenisAnggaranService; + private final GetJenisAnggaranByIdService getJenisAnggaranByIdService; + private final PostCreateJenisAnggaranService postCreateJenisAnggaranService; + private final PutUpdateJenisAnggaranService putUpdateJenisAnggaranService; + private final DeleteJenisAnggaranService deleteJenisAnggaranService; + + public JenisAnggaranController(GetListJenisAnggaranService getListJenisAnggaranService, + GetJenisAnggaranByIdService getJenisAnggaranByIdService, + PostCreateJenisAnggaranService postCreateJenisAnggaranService, + PutUpdateJenisAnggaranService putUpdateJenisAnggaranService, + DeleteJenisAnggaranService deleteJenisAnggaranService) { + this.getListJenisAnggaranService = getListJenisAnggaranService; + this.getJenisAnggaranByIdService = getJenisAnggaranByIdService; + this.postCreateJenisAnggaranService = postCreateJenisAnggaranService; + this.putUpdateJenisAnggaranService = putUpdateJenisAnggaranService; + this.deleteJenisAnggaranService = deleteJenisAnggaranService; + } + + + @GetMapping + public GetListJenisAnggaranResponse getListJenisAnggaran(@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); + JenisAnggaranRequest jenisAnggaranRequest = JenisAnggaranRequest.builder() + .search(search) + .pageable(pageable) + .build(); + + return getListJenisAnggaranService.execute(jenisAnggaranRequest); + } + + @PostMapping + public JenisAnggaranResponse createJenisAnggaran(@RequestBody JenisAnggaranRequest jenisAnggaranRequest) { + return postCreateJenisAnggaranService.execute(jenisAnggaranRequest); + } + + @GetMapping("/{id}") + public JenisAnggaranResponse getJenisAnggaranById(@PathVariable Long id) { + return getJenisAnggaranByIdService.execute(JenisAnggaranRequest.builder() + .id(id) + .build()); + } + + + @PutMapping("/{id}") + public JenisAnggaranResponse updateJenisanggaran(@PathVariable Long id, + @RequestBody JenisAnggaranRequest jenisAnggaranRequest){ + jenisAnggaranRequest.setId(id); + return putUpdateJenisAnggaranService.execute(jenisAnggaranRequest); + } + + @DeleteMapping("/{id}") + public EmptyResponse deleteJenisAnggaran(@PathVariable Long id) { + return deleteJenisAnggaranService.execute(JenisAnggaranRequest.builder() + .id(id) + .build()); + } +} diff --git a/src/main/java/com/iconplus/smartproc/controller/JeniskontrakController.java b/src/main/java/com/iconplus/smartproc/controller/JenisKontrakController.java similarity index 60% rename from src/main/java/com/iconplus/smartproc/controller/JeniskontrakController.java rename to src/main/java/com/iconplus/smartproc/controller/JenisKontrakController.java index 26be349..140820d 100644 --- a/src/main/java/com/iconplus/smartproc/controller/JeniskontrakController.java +++ b/src/main/java/com/iconplus/smartproc/controller/JenisKontrakController.java @@ -1,8 +1,8 @@ package com.iconplus.smartproc.controller; -import com.iconplus.smartproc.entity.Jeniskontrak; +import com.iconplus.smartproc.model.entity.JenisKontrak; import com.iconplus.smartproc.exception.ResourceNotFoundException; -import com.iconplus.smartproc.repository.JeniskontrakRepository; +import com.iconplus.smartproc.repository.JenisKontrakRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -14,47 +14,47 @@ import java.util.Map; @CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true") @RestController @RequestMapping("/api/jeniskontrak") -public class JeniskontrakController { +public class JenisKontrakController { @Autowired - private JeniskontrakRepository jeniskontrakRepository; + private JenisKontrakRepository jeniskontrakRepository; //get all data @GetMapping - public List getAllJeniskontraks(){ + public List getAllJeniskontraks(){ return jeniskontrakRepository.findAll(); } // create @PostMapping - public Jeniskontrak createJeniskontrak(@RequestBody Jeniskontrak jeniskontrak) { + public JenisKontrak createJeniskontrak(@RequestBody JenisKontrak jeniskontrak) { return jeniskontrakRepository.save(jeniskontrak); } // get jeniskontrak by id rest api @GetMapping("/{id}") - public ResponseEntity getJeniskontrakById(@PathVariable Long id) { - Jeniskontrak jeniskontrak = jeniskontrakRepository.findById(id) + public ResponseEntity getJeniskontrakById(@PathVariable Long id) { + JenisKontrak jeniskontrak = jeniskontrakRepository.findById(id) .orElseThrow(() -> new ResourceNotFoundException("Jeniskontrak not exist with id :" + id)); return ResponseEntity.ok(jeniskontrak); } // update jeniskontrak rest api @PutMapping("/{id}") - public ResponseEntity updateJeniskontrak(@PathVariable Long id, @RequestBody Jeniskontrak jeniskontrakDetails){ - Jeniskontrak jeniskontrak = jeniskontrakRepository.findById(id) + public ResponseEntity updateJeniskontrak(@PathVariable Long id, @RequestBody JenisKontrak jenisKontrakDetails){ + JenisKontrak jeniskontrak = jeniskontrakRepository.findById(id) .orElseThrow(() -> new ResourceNotFoundException("Jeniskontrak not exist with id :" + id)); - jeniskontrak.setJeniskontrak(jeniskontrakDetails.getJeniskontrak()); - jeniskontrak.setKeterangan(jeniskontrakDetails.getKeterangan()); + jeniskontrak.setJenisKontrak(jenisKontrakDetails.getJenisKontrak()); + jeniskontrak.setKeterangan(jenisKontrakDetails.getKeterangan()); - Jeniskontrak updatedJeniskontrak = jeniskontrakRepository.save(jeniskontrak); - return ResponseEntity.ok(updatedJeniskontrak); + JenisKontrak updatedJenisKontrak = jeniskontrakRepository.save(jeniskontrak); + return ResponseEntity.ok(updatedJenisKontrak); } // delete jeniskontrak rest api @DeleteMapping("/{id}") public ResponseEntity> deleteJeniskontrak(@PathVariable Long id){ - Jeniskontrak jeniskontrak = jeniskontrakRepository.findById(id) + JenisKontrak jeniskontrak = jeniskontrakRepository.findById(id) .orElseThrow(() -> new ResourceNotFoundException("Jeniskontrak not exist with id :" + id)); jeniskontrakRepository.delete(jeniskontrak); diff --git a/src/main/java/com/iconplus/smartproc/controller/JenispengadaanController.java b/src/main/java/com/iconplus/smartproc/controller/JenisPengadaanController.java similarity index 63% rename from src/main/java/com/iconplus/smartproc/controller/JenispengadaanController.java rename to src/main/java/com/iconplus/smartproc/controller/JenisPengadaanController.java index 96eeef3..50290a8 100644 --- a/src/main/java/com/iconplus/smartproc/controller/JenispengadaanController.java +++ b/src/main/java/com/iconplus/smartproc/controller/JenisPengadaanController.java @@ -1,8 +1,8 @@ package com.iconplus.smartproc.controller; -import com.iconplus.smartproc.entity.Jenispengadaan; +import com.iconplus.smartproc.model.entity.JenisPengadaan; import com.iconplus.smartproc.exception.ResourceNotFoundException; -import com.iconplus.smartproc.repository.JenispengadaanRepository; +import com.iconplus.smartproc.repository.JenisPengadaanRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -14,47 +14,47 @@ import java.util.Map; @CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true") @RestController @RequestMapping("/api/jenispengadaan") -public class JenispengadaanController { +public class JenisPengadaanController { @Autowired - private JenispengadaanRepository jenispengadaanRepository; + private JenisPengadaanRepository jenispengadaanRepository; //get all data @GetMapping - public List getAllJenispengadaans(){ + public List getAllJenispengadaans(){ return jenispengadaanRepository.findAll(); } // create @PostMapping - public Jenispengadaan createJenispengadaan(@RequestBody Jenispengadaan jenispengadaan) { + public JenisPengadaan createJenispengadaan(@RequestBody JenisPengadaan jenispengadaan) { return jenispengadaanRepository.save(jenispengadaan); } // get jenispengadaan by id rest api @GetMapping("/{id}") - public ResponseEntity getJenispengadaanById(@PathVariable Long id) { - Jenispengadaan jenispengadaan = jenispengadaanRepository.findById(id) + public ResponseEntity getJenispengadaanById(@PathVariable Long id) { + JenisPengadaan jenispengadaan = jenispengadaanRepository.findById(id) .orElseThrow(() -> new ResourceNotFoundException("Jenispengadaan not exist with id :" + id)); return ResponseEntity.ok(jenispengadaan); } // update jenispengadaan rest api @PutMapping("/{id}") - public ResponseEntity updateJenispengadaan(@PathVariable Long id, @RequestBody Jenispengadaan jenispengadaanDetails){ - Jenispengadaan jenispengadaan = jenispengadaanRepository.findById(id) + public ResponseEntity updateJenispengadaan(@PathVariable Long id, @RequestBody JenisPengadaan jenisPengadaanDetails){ + JenisPengadaan jenispengadaan = jenispengadaanRepository.findById(id) .orElseThrow(() -> new ResourceNotFoundException("Jenispengadaan not exist with id :" + id)); - jenispengadaan.setJenispengadaan(jenispengadaanDetails.getJenispengadaan()); - jenispengadaan.setKeterangan(jenispengadaanDetails.getKeterangan()); + jenispengadaan.setJenisPengadaan(jenisPengadaanDetails.getJenisPengadaan()); + jenispengadaan.setKeterangan(jenisPengadaanDetails.getKeterangan()); - Jenispengadaan updatedJenispengadaan = jenispengadaanRepository.save(jenispengadaan); - return ResponseEntity.ok(updatedJenispengadaan); + JenisPengadaan updatedJenisPengadaan = jenispengadaanRepository.save(jenispengadaan); + return ResponseEntity.ok(updatedJenisPengadaan); } // delete jenispengadaan rest api @DeleteMapping("/{id}") public ResponseEntity> deleteJenispengadaan(@PathVariable Long id){ - Jenispengadaan jenispengadaan = jenispengadaanRepository.findById(id) + JenisPengadaan jenispengadaan = jenispengadaanRepository.findById(id) .orElseThrow(() -> new ResourceNotFoundException("Supposmatrix not exist with id :" + id)); jenispengadaanRepository.delete(jenispengadaan); diff --git a/src/main/java/com/iconplus/smartproc/controller/JenisanggaranController.java b/src/main/java/com/iconplus/smartproc/controller/JenisanggaranController.java deleted file mode 100644 index 7f539a1..0000000 --- a/src/main/java/com/iconplus/smartproc/controller/JenisanggaranController.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.iconplus.smartproc.controller; - -import com.iconplus.smartproc.entity.Jenisanggaran; -import com.iconplus.smartproc.exception.ResourceNotFoundException; -import com.iconplus.smartproc.repository.JenisanggaranRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true") -@RestController -@RequestMapping("/api/jenisanggaran") -public class JenisanggaranController { - @Autowired - private JenisanggaranRepository jenisanggaranRepository; - - //get all data - @GetMapping - public List getAllJenisanggarans(){ - return jenisanggaranRepository.findAll(); - } - - // create - @PostMapping - public Jenisanggaran createJenisanggaran(@RequestBody Jenisanggaran jenisanggaran) { - return jenisanggaranRepository.save(jenisanggaran); - } - - // get jenisanggaran by id rest api - @GetMapping("/{id}") - public ResponseEntity getJenisanggaranById(@PathVariable Long id) { - Jenisanggaran jenisanggaran = jenisanggaranRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Jenisanggaran not exist with id :" + id)); - return ResponseEntity.ok(jenisanggaran); - } - - // update jenisanggaran rest api - @PutMapping("/{id}") - public ResponseEntity updateJenisanggaran(@PathVariable Long id, @RequestBody Jenisanggaran jenisanggaranDetails){ - Jenisanggaran jenisanggaran = jenisanggaranRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Jenisanggaran not exist with id :" + id)); - - jenisanggaran.setJenisanggaran(jenisanggaranDetails.getJenisanggaran()); - jenisanggaran.setKeterangan(jenisanggaranDetails.getKeterangan()); - - Jenisanggaran updatedJenisanggaran = jenisanggaranRepository.save(jenisanggaran); - return ResponseEntity.ok(updatedJenisanggaran); - } - - // delete jenisanggaran rest api - @DeleteMapping("/{id}") - public ResponseEntity> deleteJenisanggaran(@PathVariable Long id){ - Jenisanggaran jenisanggaran = jenisanggaranRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Supposmatrix not exist with id :" + id)); - - jenisanggaranRepository.delete(jenisanggaran); - Map response = new HashMap<>(); - response.put("deleted", Boolean.TRUE); - return ResponseEntity.ok(response); - } -} diff --git a/src/main/java/com/iconplus/smartproc/controller/LokasiController.java b/src/main/java/com/iconplus/smartproc/controller/LokasiController.java index 4af3fb4..eaccfd8 100644 --- a/src/main/java/com/iconplus/smartproc/controller/LokasiController.java +++ b/src/main/java/com/iconplus/smartproc/controller/LokasiController.java @@ -1,6 +1,6 @@ package com.iconplus.smartproc.controller; -import com.iconplus.smartproc.entity.Lokasi; +import com.iconplus.smartproc.model.entity.Lokasi; import com.iconplus.smartproc.exception.ResourceNotFoundException; import com.iconplus.smartproc.repository.LokasiRepository; import org.springframework.beans.factory.annotation.Autowired; diff --git a/src/main/java/com/iconplus/smartproc/controller/MetodepengadaanController.java b/src/main/java/com/iconplus/smartproc/controller/MetodePengadaanController.java similarity index 60% rename from src/main/java/com/iconplus/smartproc/controller/MetodepengadaanController.java rename to src/main/java/com/iconplus/smartproc/controller/MetodePengadaanController.java index d519be5..4a3f594 100644 --- a/src/main/java/com/iconplus/smartproc/controller/MetodepengadaanController.java +++ b/src/main/java/com/iconplus/smartproc/controller/MetodePengadaanController.java @@ -1,8 +1,8 @@ package com.iconplus.smartproc.controller; -import com.iconplus.smartproc.entity.Metodepengadaan; +import com.iconplus.smartproc.model.entity.MetodePengadaan; import com.iconplus.smartproc.exception.ResourceNotFoundException; -import com.iconplus.smartproc.repository.MetodepengadaanRepository; +import com.iconplus.smartproc.repository.MetodePengadaanRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -14,47 +14,47 @@ import java.util.Map; @CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true") @RestController @RequestMapping("/api/metodepengadaan") -public class MetodepengadaanController { +public class MetodePengadaanController { @Autowired - private MetodepengadaanRepository metodepengadaanRepository; + private MetodePengadaanRepository metodepengadaanRepository; //get all data @GetMapping - public List getAllMetodepengadaans(){ + public List getAllMetodepengadaans(){ return metodepengadaanRepository.findAll(); } // create @PostMapping - public Metodepengadaan createMetodepengadaan(@RequestBody Metodepengadaan metodepengadaan) { + public MetodePengadaan createMetodepengadaan(@RequestBody MetodePengadaan metodepengadaan) { return metodepengadaanRepository.save(metodepengadaan); } // get metodepengadaan by id rest api @GetMapping("/{id}") - public ResponseEntity getMetodepengadaanById(@PathVariable Long id) { - Metodepengadaan metodepengadaan = metodepengadaanRepository.findById(id) + public ResponseEntity getMetodepengadaanById(@PathVariable Long id) { + MetodePengadaan metodepengadaan = metodepengadaanRepository.findById(id) .orElseThrow(() -> new ResourceNotFoundException("Metodepengadaan not exist with id :" + id)); return ResponseEntity.ok(metodepengadaan); } // update metodepengadaan rest api @PutMapping("/{id}") - public ResponseEntity updateMetodepengadaan(@PathVariable Long id, @RequestBody Metodepengadaan metodepengadaanDetails){ - Metodepengadaan metodepengadaan = metodepengadaanRepository.findById(id) + public ResponseEntity updateMetodepengadaan(@PathVariable Long id, @RequestBody MetodePengadaan metodePengadaanDetails){ + MetodePengadaan metodepengadaan = metodepengadaanRepository.findById(id) .orElseThrow(() -> new ResourceNotFoundException("Metodepengadaan not exist with id :" + id)); - metodepengadaan.setMetodepengadaan(metodepengadaanDetails.getMetodepengadaan()); - metodepengadaan.setKeterangan(metodepengadaanDetails.getKeterangan()); + metodepengadaan.setMetodePengadaan(metodePengadaanDetails.getMetodePengadaan()); + metodepengadaan.setKeterangan(metodePengadaanDetails.getKeterangan()); - Metodepengadaan updatedMetodepengadaan = metodepengadaanRepository.save(metodepengadaan); - return ResponseEntity.ok(updatedMetodepengadaan); + MetodePengadaan updatedMetodePengadaan = metodepengadaanRepository.save(metodepengadaan); + return ResponseEntity.ok(updatedMetodePengadaan); } // delete metodepengadaan rest api @DeleteMapping("/{id}") public ResponseEntity> deleteMetodepengadaan(@PathVariable Long id){ - Metodepengadaan metodepengadaan = metodepengadaanRepository.findById(id) + MetodePengadaan metodepengadaan = metodepengadaanRepository.findById(id) .orElseThrow(() -> new ResourceNotFoundException("Metodepengadaan not exist with id :" + id)); metodepengadaanRepository.delete(metodepengadaan); diff --git a/src/main/java/com/iconplus/smartproc/controller/MetodepenyampaianController.java b/src/main/java/com/iconplus/smartproc/controller/MetodePenyampaianController.java similarity index 61% rename from src/main/java/com/iconplus/smartproc/controller/MetodepenyampaianController.java rename to src/main/java/com/iconplus/smartproc/controller/MetodePenyampaianController.java index 8d7868f..e26a782 100644 --- a/src/main/java/com/iconplus/smartproc/controller/MetodepenyampaianController.java +++ b/src/main/java/com/iconplus/smartproc/controller/MetodePenyampaianController.java @@ -1,8 +1,8 @@ package com.iconplus.smartproc.controller; -import com.iconplus.smartproc.entity.Metodepenyampaian; +import com.iconplus.smartproc.model.entity.MetodePenyampaian; import com.iconplus.smartproc.exception.ResourceNotFoundException; -import com.iconplus.smartproc.repository.MetodepenyampaianRepository; +import com.iconplus.smartproc.repository.MetodePenyampaianRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -14,47 +14,47 @@ import java.util.Map; @CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true") @RestController @RequestMapping("/api/metodepenyampaian") -public class MetodepenyampaianController { +public class MetodePenyampaianController { @Autowired - private MetodepenyampaianRepository metodepenyampaianRepository; + private MetodePenyampaianRepository metodepenyampaianRepository; //get all data @GetMapping - public List getAllMetodepenyampaians(){ + public List getAllMetodepenyampaians(){ return metodepenyampaianRepository.findAll(); } // create @PostMapping - public Metodepenyampaian createMetodepenyampaian(@RequestBody Metodepenyampaian metodepenyampaian) { + public MetodePenyampaian createMetodepenyampaian(@RequestBody MetodePenyampaian metodepenyampaian) { return metodepenyampaianRepository.save(metodepenyampaian); } // get metodepenyampaian by id rest api @GetMapping("/{id}") - public ResponseEntity getMetodepenyampaianById(@PathVariable Long id) { - Metodepenyampaian metodepenyampaian = metodepenyampaianRepository.findById(id) + public ResponseEntity getMetodepenyampaianById(@PathVariable Long id) { + MetodePenyampaian metodepenyampaian = metodepenyampaianRepository.findById(id) .orElseThrow(() -> new ResourceNotFoundException("Metodepenyampaian not exist with id :" + id)); return ResponseEntity.ok(metodepenyampaian); } // update metodepenyampaian rest api @PutMapping("/{id}") - public ResponseEntity updateMetodepenyampaian(@PathVariable Long id, @RequestBody Metodepenyampaian metodepenyampaianDetails){ - Metodepenyampaian metodepenyampaian = metodepenyampaianRepository.findById(id) + public ResponseEntity updateMetodepenyampaian(@PathVariable Long id, @RequestBody MetodePenyampaian metodePenyampaianDetails){ + MetodePenyampaian metodepenyampaian = metodepenyampaianRepository.findById(id) .orElseThrow(() -> new ResourceNotFoundException("Metodepenyampaian not exist with id :" + id)); - metodepenyampaian.setMetodepenyampaian(metodepenyampaianDetails.getMetodepenyampaian()); - metodepenyampaian.setKeterangan(metodepenyampaianDetails.getKeterangan()); + metodepenyampaian.setMetodePenyampaian(metodePenyampaianDetails.getMetodePenyampaian()); + metodepenyampaian.setKeterangan(metodePenyampaianDetails.getKeterangan()); - Metodepenyampaian updatedMetodepenyampaian = metodepenyampaianRepository.save(metodepenyampaian); - return ResponseEntity.ok(updatedMetodepenyampaian); + MetodePenyampaian updatedMetodePenyampaian = metodepenyampaianRepository.save(metodepenyampaian); + return ResponseEntity.ok(updatedMetodePenyampaian); } // delete metodepenyampaian rest api @DeleteMapping("/{id}") public ResponseEntity> deleteMetodepenyampaian(@PathVariable Long id){ - Metodepenyampaian metodepenyampaian = metodepenyampaianRepository.findById(id) + MetodePenyampaian metodepenyampaian = metodepenyampaianRepository.findById(id) .orElseThrow(() -> new ResourceNotFoundException("Metodepenyampaian not exist with id :" + id)); metodepenyampaianRepository.delete(metodepenyampaian); diff --git a/src/main/java/com/iconplus/smartproc/controller/RolesController.java b/src/main/java/com/iconplus/smartproc/controller/RolesController.java index d2b1ea6..364f5e7 100644 --- a/src/main/java/com/iconplus/smartproc/controller/RolesController.java +++ b/src/main/java/com/iconplus/smartproc/controller/RolesController.java @@ -1,6 +1,6 @@ package com.iconplus.smartproc.controller; -import com.iconplus.smartproc.entity.Roles; +import com.iconplus.smartproc.model.entity.Roles; import com.iconplus.smartproc.exception.ResourceNotFoundException; import com.iconplus.smartproc.repository.RolesRepository; import org.springframework.beans.factory.annotation.Autowired; @@ -44,7 +44,7 @@ public class RolesController { Roles roles = rolesRepository.findById(id) .orElseThrow(() -> new ResourceNotFoundException("Roles not exist with id :" + id)); - roles.setRoles(rolesDetails.getRoles()); + roles.setRole(rolesDetails.getRole()); roles.setKeterangan(rolesDetails.getKeterangan()); roles.setIsactive(rolesDetails.getIsactive()); diff --git a/src/main/java/com/iconplus/smartproc/controller/StrategipengadaanController.java b/src/main/java/com/iconplus/smartproc/controller/StrategiPengadaanController.java similarity index 64% rename from src/main/java/com/iconplus/smartproc/controller/StrategipengadaanController.java rename to src/main/java/com/iconplus/smartproc/controller/StrategiPengadaanController.java index 67504bc..d76fbf9 100644 --- a/src/main/java/com/iconplus/smartproc/controller/StrategipengadaanController.java +++ b/src/main/java/com/iconplus/smartproc/controller/StrategiPengadaanController.java @@ -1,8 +1,8 @@ package com.iconplus.smartproc.controller; -import com.iconplus.smartproc.entity.Strategipengadaan; +import com.iconplus.smartproc.model.entity.StrategiPengadaan; import com.iconplus.smartproc.exception.ResourceNotFoundException; -import com.iconplus.smartproc.repository.StrategipengadaanRepository; +import com.iconplus.smartproc.repository.StrategiPengadaanRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -14,47 +14,47 @@ import java.util.Map; @CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true") @RestController @RequestMapping("/api/strategipengadaan") -public class StrategipengadaanController { +public class StrategiPengadaanController { @Autowired - private StrategipengadaanRepository strategipengadaanRepository; + private StrategiPengadaanRepository strategipengadaanRepository; //get all data @GetMapping - public List getAllstrategipengadaans(){ + public List getAllstrategipengadaans(){ return strategipengadaanRepository.findAll(); } // create @PostMapping - public Strategipengadaan createStrategipengadaan(@RequestBody Strategipengadaan strategipengadaan) { + public StrategiPengadaan createStrategipengadaan(@RequestBody StrategiPengadaan strategipengadaan) { return strategipengadaanRepository.save(strategipengadaan); } // get strategipengadaan by id rest api @GetMapping("/{id}") - public ResponseEntity getStrategipengadaanById(@PathVariable Long id) { - Strategipengadaan strategipengadaan = strategipengadaanRepository.findById(id) + public ResponseEntity getStrategipengadaanById(@PathVariable Long id) { + StrategiPengadaan strategipengadaan = strategipengadaanRepository.findById(id) .orElseThrow(() -> new ResourceNotFoundException("Strategipengadaan not exist with id :" + id)); return ResponseEntity.ok(strategipengadaan); } // update strategipengadaan rest api @PutMapping("/{id}") - public ResponseEntity updateStrategipengadaan(@PathVariable Long id, @RequestBody Strategipengadaan strategipengadaanDetails){ - Strategipengadaan strategipengadaan = strategipengadaanRepository.findById(id) + public ResponseEntity updateStrategipengadaan(@PathVariable Long id, @RequestBody StrategiPengadaan strategiPengadaanDetails){ + StrategiPengadaan strategipengadaan = strategipengadaanRepository.findById(id) .orElseThrow(() -> new ResourceNotFoundException("Strategipengadaan not exist with id :" + id)); - strategipengadaan.setStrategipengadaan(strategipengadaanDetails.getStrategipengadaan()); - strategipengadaan.setKeterangan(strategipengadaanDetails.getKeterangan()); + strategipengadaan.setStrategipengadaan(strategiPengadaanDetails.getStrategipengadaan()); + strategipengadaan.setKeterangan(strategiPengadaanDetails.getKeterangan()); - Strategipengadaan updatedStrategipengadaan = strategipengadaanRepository.save(strategipengadaan); - return ResponseEntity.ok(updatedStrategipengadaan); + StrategiPengadaan updatedStrategiPengadaan = strategipengadaanRepository.save(strategipengadaan); + return ResponseEntity.ok(updatedStrategiPengadaan); } // delete strategipengadaan rest api @DeleteMapping("/{id}") public ResponseEntity> deleteStrategipengadaan(@PathVariable Long id){ - Strategipengadaan strategipengadaan = strategipengadaanRepository.findById(id) + StrategiPengadaan strategipengadaan = strategipengadaanRepository.findById(id) .orElseThrow(() -> new ResourceNotFoundException("Strategipengadaan not exist with id :" + id)); strategipengadaanRepository.delete(strategipengadaan); diff --git a/src/main/java/com/iconplus/smartproc/controller/SumberdanaController.java b/src/main/java/com/iconplus/smartproc/controller/SumberDanaController.java similarity index 69% rename from src/main/java/com/iconplus/smartproc/controller/SumberdanaController.java rename to src/main/java/com/iconplus/smartproc/controller/SumberDanaController.java index ee43caf..95873cf 100644 --- a/src/main/java/com/iconplus/smartproc/controller/SumberdanaController.java +++ b/src/main/java/com/iconplus/smartproc/controller/SumberDanaController.java @@ -17,53 +17,53 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.iconplus.smartproc.exception.ResourceNotFoundException; -import com.iconplus.smartproc.entity.Sumberdana; -import com.iconplus.smartproc.repository.SumberdanaRepository; +import com.iconplus.smartproc.model.entity.SumberDana; +import com.iconplus.smartproc.repository.SumberDanaRepository; @CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true") @RestController @RequestMapping("/api/sumberdana") -public class SumberdanaController { +public class SumberDanaController { @Autowired - private SumberdanaRepository sumberdanaRepository; + private SumberDanaRepository sumberdanaRepository; //get all data @GetMapping - public List getAllSumberdanas(){ + public List getAllSumberdanas(){ return sumberdanaRepository.findAll(); } // create @PostMapping - public Sumberdana createSumberdana(@RequestBody Sumberdana sumberdana) { + public SumberDana createSumberdana(@RequestBody SumberDana sumberdana) { return sumberdanaRepository.save(sumberdana); } // get sumberdana by id rest api @GetMapping("/{id}") - public ResponseEntity getSumberdanaById(@PathVariable Long id) { - Sumberdana sumberdana = sumberdanaRepository.findById(id) + public ResponseEntity getSumberdanaById(@PathVariable Long id) { + SumberDana sumberdana = sumberdanaRepository.findById(id) .orElseThrow(() -> new ResourceNotFoundException("Sumberdana not exist with id :" + id)); return ResponseEntity.ok(sumberdana); } // update sumberdana rest api @PutMapping("/{id}") - public ResponseEntity updateSumberdana(@PathVariable Long id, @RequestBody Sumberdana sumberdanaDetails){ - Sumberdana sumberdana = sumberdanaRepository.findById(id) + public ResponseEntity updateSumberdana(@PathVariable Long id, @RequestBody SumberDana sumberDanaDetails){ + SumberDana sumberdana = sumberdanaRepository.findById(id) .orElseThrow(() -> new ResourceNotFoundException("Sumberdana not exist with id :" + id)); - sumberdana.setSumberdana(sumberdanaDetails.getSumberdana()); - sumberdana.setKeterangan(sumberdanaDetails.getKeterangan()); + sumberdana.setSumberDana(sumberDanaDetails.getSumberDana()); + sumberdana.setKeterangan(sumberDanaDetails.getKeterangan()); - Sumberdana updatedSumberdana = sumberdanaRepository.save(sumberdana); - return ResponseEntity.ok(updatedSumberdana); + SumberDana updatedSumberDana = sumberdanaRepository.save(sumberdana); + return ResponseEntity.ok(updatedSumberDana); } // delete sumberdana rest api @DeleteMapping("/{id}") public ResponseEntity> deleteSumberdana(@PathVariable Long id){ - Sumberdana sumberdana = sumberdanaRepository.findById(id) + SumberDana sumberdana = sumberdanaRepository.findById(id) .orElseThrow(() -> new ResourceNotFoundException("Sumberdana not exist with id :" + id)); sumberdanaRepository.delete(sumberdana); diff --git a/src/main/java/com/iconplus/smartproc/controller/SupplypositioningmatrixController.java b/src/main/java/com/iconplus/smartproc/controller/SupplyPositioningMatrixController.java similarity index 69% rename from src/main/java/com/iconplus/smartproc/controller/SupplypositioningmatrixController.java rename to src/main/java/com/iconplus/smartproc/controller/SupplyPositioningMatrixController.java index abe631a..29f66e6 100644 --- a/src/main/java/com/iconplus/smartproc/controller/SupplypositioningmatrixController.java +++ b/src/main/java/com/iconplus/smartproc/controller/SupplyPositioningMatrixController.java @@ -17,53 +17,53 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.iconplus.smartproc.exception.ResourceNotFoundException; -import com.iconplus.smartproc.entity.Supplypositioningmatrix; -import com.iconplus.smartproc.repository.SupplypositioningmatrixRepository; +import com.iconplus.smartproc.model.entity.SupplyPositioningMatrix; +import com.iconplus.smartproc.repository.SupplyPositioningMatrixRepository; @CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true") @RestController @RequestMapping("/api/supplypositioningmatrix") -public class SupplypositioningmatrixController { +public class SupplyPositioningMatrixController { @Autowired - private SupplypositioningmatrixRepository supplypositioningmatrixRepository; + private SupplyPositioningMatrixRepository supplypositioningmatrixRepository; //get all data @GetMapping - public List getAllSupplypositioningmatrix(){ + public List getAllSupplypositioningmatrix(){ return supplypositioningmatrixRepository.findAll(); } // create @PostMapping - public Supplypositioningmatrix createSupplypositioningmatrix(@RequestBody Supplypositioningmatrix supplypositioningmatrix) { + public SupplyPositioningMatrix createSupplypositioningmatrix(@RequestBody SupplyPositioningMatrix supplypositioningmatrix) { return supplypositioningmatrixRepository.save(supplypositioningmatrix); } // get supplypositioningmatrix by id rest api @GetMapping("/{id}") - public ResponseEntity getSupplypositioningmatrixById(@PathVariable Long id) { - Supplypositioningmatrix supplypositioningmatrix = supplypositioningmatrixRepository.findById(id) + public ResponseEntity getSupplypositioningmatrixById(@PathVariable Long id) { + SupplyPositioningMatrix supplypositioningmatrix = supplypositioningmatrixRepository.findById(id) .orElseThrow(() -> new ResourceNotFoundException("Supplypositioningmatrix not exist with id :" + id)); return ResponseEntity.ok(supplypositioningmatrix); } // update jenispengadaan rest api @PutMapping("/{id}") - public ResponseEntity updateSupplypositioningmatrix(@PathVariable Long id, @RequestBody Supplypositioningmatrix supplypositioningmatrixDetails){ - Supplypositioningmatrix supplypositioningmatrix = supplypositioningmatrixRepository.findById(id) + public ResponseEntity updateSupplypositioningmatrix(@PathVariable Long id, @RequestBody SupplyPositioningMatrix supplyPositioningMatrixDetails){ + SupplyPositioningMatrix supplypositioningmatrix = supplypositioningmatrixRepository.findById(id) .orElseThrow(() -> new ResourceNotFoundException("Supplypositioningmatrix not exist with id :" + id)); - supplypositioningmatrix.setSupplypositioningmatrix(supplypositioningmatrixDetails.getSupplypositioningmatrix()); - supplypositioningmatrix.setKeterangan(supplypositioningmatrixDetails.getKeterangan()); + supplypositioningmatrix.setSupplypositioningmatrix(supplyPositioningMatrixDetails.getSupplypositioningmatrix()); + supplypositioningmatrix.setKeterangan(supplyPositioningMatrixDetails.getKeterangan()); - Supplypositioningmatrix updatedSupplypositioningmatrix = supplypositioningmatrixRepository.save(supplypositioningmatrix); - return ResponseEntity.ok(updatedSupplypositioningmatrix); + SupplyPositioningMatrix updatedSupplyPositioningMatrix = supplypositioningmatrixRepository.save(supplypositioningmatrix); + return ResponseEntity.ok(updatedSupplyPositioningMatrix); } // delete jenispengadaan rest api @DeleteMapping("/{id}") public ResponseEntity> deleteSupplypositioningmatrix(@PathVariable Long id){ - Supplypositioningmatrix supplypositioningmatrix = supplypositioningmatrixRepository.findById(id) + SupplyPositioningMatrix supplypositioningmatrix = supplypositioningmatrixRepository.findById(id) .orElseThrow(() -> new ResourceNotFoundException("Unit inisiator not exist with id :" + id)); supplypositioningmatrixRepository.delete(supplypositioningmatrix); diff --git a/src/main/java/com/iconplus/smartproc/controller/UnitinisiatorController.java b/src/main/java/com/iconplus/smartproc/controller/UnitInisiatorController.java similarity index 68% rename from src/main/java/com/iconplus/smartproc/controller/UnitinisiatorController.java rename to src/main/java/com/iconplus/smartproc/controller/UnitInisiatorController.java index 0c6edd3..07edb83 100644 --- a/src/main/java/com/iconplus/smartproc/controller/UnitinisiatorController.java +++ b/src/main/java/com/iconplus/smartproc/controller/UnitInisiatorController.java @@ -17,53 +17,53 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.iconplus.smartproc.exception.ResourceNotFoundException; -import com.iconplus.smartproc.entity.Unitinisiator; -import com.iconplus.smartproc.repository.UnitinisiatorRepository; +import com.iconplus.smartproc.model.entity.UnitInisiator; +import com.iconplus.smartproc.repository.UnitInisiatorRepository; @CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true") @RestController @RequestMapping("/api/unitinisiator") -public class UnitinisiatorController { +public class UnitInisiatorController { @Autowired - private UnitinisiatorRepository unitinisiatorRepository; + private UnitInisiatorRepository unitinisiatorRepository; //get all data @GetMapping - public List getAllUnitinisiator(){ + public List getAllUnitinisiator(){ return unitinisiatorRepository.findAll(); } // create @PostMapping - public Unitinisiator createUnitinisiator(@RequestBody Unitinisiator unitinisiator) { + public UnitInisiator createUnitinisiator(@RequestBody UnitInisiator unitinisiator) { return unitinisiatorRepository.save(unitinisiator); } // get unitinisiator by id rest api @GetMapping("/{id}") - public ResponseEntity getUnitinisiatorById(@PathVariable Long id) { - Unitinisiator unitinisiator = unitinisiatorRepository.findById(id) + public ResponseEntity getUnitinisiatorById(@PathVariable Long id) { + UnitInisiator unitinisiator = unitinisiatorRepository.findById(id) .orElseThrow(() -> new ResourceNotFoundException("Unitinisiator not exist with id :" + id)); return ResponseEntity.ok(unitinisiator); } // update jenispengadaan rest api @PutMapping("/{id}") - public ResponseEntity updateUnitinisiator(@PathVariable Long id, @RequestBody Unitinisiator unitinisiatorDetails){ - Unitinisiator unitinisiator = unitinisiatorRepository.findById(id) + public ResponseEntity updateUnitinisiator(@PathVariable Long id, @RequestBody UnitInisiator unitInisiatorDetails){ + UnitInisiator unitinisiator = unitinisiatorRepository.findById(id) .orElseThrow(() -> new ResourceNotFoundException("Unitinisiator not exist with id :" + id)); - unitinisiator.setUnitinisiator(unitinisiatorDetails.getUnitinisiator()); - unitinisiator.setKeterangan(unitinisiatorDetails.getKeterangan()); + unitinisiator.setUnitInisiator(unitInisiatorDetails.getUnitInisiator()); + unitinisiator.setKeterangan(unitInisiatorDetails.getKeterangan()); - Unitinisiator updatedUnitinisiator = unitinisiatorRepository.save(unitinisiator); - return ResponseEntity.ok(updatedUnitinisiator); + UnitInisiator updatedUnitInisiator = unitinisiatorRepository.save(unitinisiator); + return ResponseEntity.ok(updatedUnitInisiator); } // delete jenispengadaan rest api @DeleteMapping("/{id}") public ResponseEntity> deleteUnitinisiator(@PathVariable Long id){ - Unitinisiator unitinisiator = unitinisiatorRepository.findById(id) + UnitInisiator unitinisiator = unitinisiatorRepository.findById(id) .orElseThrow(() -> new ResourceNotFoundException("Unit inisiator not exist with id :" + id)); unitinisiatorRepository.delete(unitinisiator); diff --git a/src/main/java/com/iconplus/smartproc/controller/UsersController.java b/src/main/java/com/iconplus/smartproc/controller/UsersController.java index 0b35ee6..9a87b64 100644 --- a/src/main/java/com/iconplus/smartproc/controller/UsersController.java +++ b/src/main/java/com/iconplus/smartproc/controller/UsersController.java @@ -1,6 +1,6 @@ package com.iconplus.smartproc.controller; -import com.iconplus.smartproc.entity.Users; +import com.iconplus.smartproc.model.entity.Users; import com.iconplus.smartproc.exception.ResourceNotFoundException; import com.iconplus.smartproc.repository.UsersRepository; import org.springframework.beans.factory.annotation.Autowired; @@ -48,10 +48,10 @@ public class UsersController { users.setNama(usersDetails.getNama()); users.setEmail(usersDetails.getEmail()); users.setPassword(usersDetails.getPassword()); - users.setInstansi(usersDetails.getInstansi()); - users.setBidang(usersDetails.getBidang()); - users.setJabatan(usersDetails.getJabatan()); - users.setRole(usersDetails.getRole()); +// users.setInstansi(usersDetails.getInstansi()); +// users.setBidang(usersDetails.getBidang()); +// users.setJabatan(usersDetails.getJabatan()); +// users.setRole(usersDetails.getRole()); Users updatedUsers = usersRepository.save(users); return ResponseEntity.ok(updatedUsers); diff --git a/src/main/java/com/iconplus/smartproc/entity/Jenisanggaran.java b/src/main/java/com/iconplus/smartproc/entity/Jenisanggaran.java deleted file mode 100644 index e3f2bec..0000000 --- a/src/main/java/com/iconplus/smartproc/entity/Jenisanggaran.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.iconplus.smartproc.entity; - -import jakarta.persistence.*; - -@Entity -@Table(name = "jenisanggaran") -public class Jenisanggaran { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private long id; - private String jenisanggaran; - private String keterangan; - - public Jenisanggaran() { - } - - public Jenisanggaran(String jenisanggaran, String keterangan) { - super(); - this.jenisanggaran = jenisanggaran; - this.keterangan = keterangan; - } - public long getId() { - return id; - } - public void setId(long id) { - this.id = id; - } - public String getJenisanggaran() { - return jenisanggaran; - } - public void setJenisanggaran(String jenisanggaran) { - this.jenisanggaran = jenisanggaran; - } - public String getKeterangan() { - return keterangan; - } - public void setKeterangan(String keterangan) { - this.keterangan = keterangan; - } -} diff --git a/src/main/java/com/iconplus/smartproc/entity/Jeniskontrak.java b/src/main/java/com/iconplus/smartproc/entity/Jeniskontrak.java deleted file mode 100644 index 38e7d59..0000000 --- a/src/main/java/com/iconplus/smartproc/entity/Jeniskontrak.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.iconplus.smartproc.entity; - -import jakarta.persistence.*; - -@Entity -@Table(name = "jeniskontrak") -public class Jeniskontrak { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private long id; - - private String jeniskontrak; - private String keterangan; - - public Jeniskontrak() { - - } - - public Jeniskontrak(String jeniskontrak, String keterangan) { - super(); - this.jeniskontrak = jeniskontrak; - this.keterangan = keterangan; - } - public long getId() { - return id; - } - public void setId(long id) { - this.id = id; - } - public String getJeniskontrak() { - return jeniskontrak; - } - public void setJeniskontrak(String jeniskontrak) { - this.jeniskontrak = jeniskontrak; - } - public String getKeterangan() { - return keterangan; - } - public void setKeterangan(String keterangan) { - this.keterangan = keterangan; - } -} diff --git a/src/main/java/com/iconplus/smartproc/entity/Jenispengadaan.java b/src/main/java/com/iconplus/smartproc/entity/Jenispengadaan.java deleted file mode 100644 index 149c4fc..0000000 --- a/src/main/java/com/iconplus/smartproc/entity/Jenispengadaan.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.iconplus.smartproc.entity; - -import jakarta.persistence.*; - -@Entity -@Table(name = "jenispengadaan") -public class Jenispengadaan { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private long id; - private String jenispengadaan; - private String keterangan; - - public Jenispengadaan() { - } - - public Jenispengadaan(String jenispengadaan, String keterangan) { - super(); - this.jenispengadaan = jenispengadaan; - this.keterangan = keterangan; - } - public long getId() { - return id; - } - public void setId(long id) { - this.id = id; - } - public String getJenispengadaan() { - return jenispengadaan; - } - public void setJenispengadaan(String jenispengadaan) { - this.jenispengadaan = jenispengadaan; - } - public String getKeterangan() { - return keterangan; - } - public void setKeterangan(String keterangan) { - this.keterangan = keterangan; - } -} diff --git a/src/main/java/com/iconplus/smartproc/entity/Lokasi.java b/src/main/java/com/iconplus/smartproc/entity/Lokasi.java deleted file mode 100644 index c17f012..0000000 --- a/src/main/java/com/iconplus/smartproc/entity/Lokasi.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.iconplus.smartproc.entity; - -import jakarta.persistence.*; - -@Entity -@Table(name = "lokasi") -public class Lokasi { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private long id; - private String lokasi; - private String keterangan; - - public Lokasi() { - } - - public Lokasi(String lokasi, String keterangan) { - super(); - this.lokasi = lokasi; - this.keterangan = keterangan; - } - public long getId() { - return id; - } - public void setId(long id) { - this.id = id; - } - public String getLokasi() { - return lokasi; - } - public void setLokasi(String lokasi) { - this.lokasi = lokasi; - } - public String getKeterangan() { - return keterangan; - } - public void setKeterangan(String keterangan) { - this.keterangan = keterangan; - } -} diff --git a/src/main/java/com/iconplus/smartproc/entity/Metodepengadaan.java b/src/main/java/com/iconplus/smartproc/entity/Metodepengadaan.java deleted file mode 100644 index c3a7f21..0000000 --- a/src/main/java/com/iconplus/smartproc/entity/Metodepengadaan.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.iconplus.smartproc.entity; - -import jakarta.persistence.*; - -@Entity -@Table(name = "metodepengadaan") -public class Metodepengadaan { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private long id; - - private String metodepengadaan; - private String keterangan; - - public Metodepengadaan() { - } - - public Metodepengadaan(String metodepengadaan, String keterangan) { - super(); - this.metodepengadaan = metodepengadaan; - this.keterangan = keterangan; - } - public long getId() { - return id; - } - public void setId(long id) { - this.id = id; - } - public String getMetodepengadaan() { - return metodepengadaan; - } - public void setMetodepengadaan(String metodepengadaan) { - this.metodepengadaan = metodepengadaan; - } - public String getKeterangan() { - return keterangan; - } - public void setKeterangan(String keterangan) { - this.keterangan = keterangan; - } -} diff --git a/src/main/java/com/iconplus/smartproc/entity/Metodepenyampaian.java b/src/main/java/com/iconplus/smartproc/entity/Metodepenyampaian.java deleted file mode 100644 index f5b46d7..0000000 --- a/src/main/java/com/iconplus/smartproc/entity/Metodepenyampaian.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.iconplus.smartproc.entity; - -import jakarta.persistence.*; - -@Entity -@Table(name = "metodepenyampaian") -public class Metodepenyampaian { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private long id; - - private String metodepenyampaian; - private String keterangan; - - public Metodepenyampaian() { - } - - public Metodepenyampaian(String metodepenyampaian, String keterangan) { - super(); - this.metodepenyampaian = metodepenyampaian; - this.keterangan = keterangan; - } - public long getId() { - return id; - } - public void setId(long id) { - this.id = id; - } - public String getMetodepenyampaian() { - return metodepenyampaian; - } - public void setMetodepenyampaian(String metodepenyampaian) { - this.metodepenyampaian = metodepenyampaian; - } - public String getKeterangan() { - return keterangan; - } - public void setKeterangan(String keterangan) { - this.keterangan = keterangan; - } -} diff --git a/src/main/java/com/iconplus/smartproc/entity/Roles.java b/src/main/java/com/iconplus/smartproc/entity/Roles.java deleted file mode 100644 index dbcdb9a..0000000 --- a/src/main/java/com/iconplus/smartproc/entity/Roles.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.iconplus.smartproc.entity; - -import jakarta.persistence.*; - -@Entity -@Table(name = "roles") -public class Roles { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private long id; - private String roles; - private String keterangan; - private Boolean is_active; - - public Roles() { - } - - public Roles(String roles, String keterangan, Boolean is_active) { - super(); - this.roles = roles; - this.keterangan = keterangan; - this.is_active = is_active; - } - public long getId() { - return id; - } - public void setId(long id) { - this.id = id; - } - public String getRoles() { - return roles; - } - public void setRoles(String roles) { - this.roles = roles; - } - public String getKeterangan() { - return keterangan; - } - public void setKeterangan(String keterangan) { - this.keterangan = keterangan; - } - public Boolean getIsactive() { - return is_active; - } - public void setIsactive(Boolean is_active) { - this.is_active = is_active; - } -} diff --git a/src/main/java/com/iconplus/smartproc/entity/Strategipengadaan.java b/src/main/java/com/iconplus/smartproc/entity/Strategipengadaan.java deleted file mode 100644 index d0321c6..0000000 --- a/src/main/java/com/iconplus/smartproc/entity/Strategipengadaan.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.iconplus.smartproc.entity; - -import jakarta.persistence.*; - -@Entity -@Table(name = "strategipengadaan") -public class Strategipengadaan { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private long id; - private String strategipengadaan; - private String keterangan; - - public Strategipengadaan() { - } - - public Strategipengadaan(String strategipengadaan, String keterangan) { - super(); - this.strategipengadaan = strategipengadaan; - this.keterangan = keterangan; - } - public long getId() { - return id; - } - public void setId(long id) { - this.id = id; - } - public String getStrategipengadaan() { - return strategipengadaan; - } - public void setStrategipengadaan(String strategipengadaan) { - this.strategipengadaan = strategipengadaan; - } - public String getKeterangan() { - return keterangan; - } - public void setKeterangan(String keterangan) { - this.keterangan = keterangan; - } -} diff --git a/src/main/java/com/iconplus/smartproc/entity/Sumberdana.java b/src/main/java/com/iconplus/smartproc/entity/Sumberdana.java deleted file mode 100644 index 467c522..0000000 --- a/src/main/java/com/iconplus/smartproc/entity/Sumberdana.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.iconplus.smartproc.entity; - -import jakarta.persistence.*; - -@Entity -@Table(name = "sumberdana") -public class Sumberdana { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private long id; - private String sumberdana; - private String keterangan; - - public Sumberdana() { - } - - public Sumberdana(String sumberdana, String keterangan) { - super(); - this.sumberdana = sumberdana; - this.keterangan = keterangan; - } - public long getId() { - return id; - } - public void setId(long id) { - this.id = id; - } - public String getSumberdana() { - return sumberdana; - } - public void setSumberdana(String sumberdana) { - this.sumberdana = sumberdana; - } - public String getKeterangan() { - return keterangan; - } - public void setKeterangan(String keterangan) { - this.keterangan = keterangan; - } -} diff --git a/src/main/java/com/iconplus/smartproc/entity/Supplypositioningmatrix.java b/src/main/java/com/iconplus/smartproc/entity/Supplypositioningmatrix.java deleted file mode 100644 index ed503c5..0000000 --- a/src/main/java/com/iconplus/smartproc/entity/Supplypositioningmatrix.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.iconplus.smartproc.entity; - -import jakarta.persistence.*; - -@Entity -@Table(name = "supplypositioningmatrix") -public class Supplypositioningmatrix { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private long id; - - private String supplypositioningmatrix; - private String keterangan; - - public Supplypositioningmatrix() { - - } - - public Supplypositioningmatrix(String supplypositioningmatrix, String keterangan) { - super(); - this.supplypositioningmatrix = supplypositioningmatrix; - this.keterangan = keterangan; - } - public long getId() { - return id; - } - public void setId(long id) { - this.id = id; - } - public String getSupplypositioningmatrix() { - return supplypositioningmatrix; - } - public void setSupplypositioningmatrix(String supplypositioningmatrix) { - this.supplypositioningmatrix = supplypositioningmatrix; - } - public String getKeterangan() { - return keterangan; - } - public void setKeterangan(String keterangan) { - this.keterangan = keterangan; - } -} diff --git a/src/main/java/com/iconplus/smartproc/entity/Unitinisiator.java b/src/main/java/com/iconplus/smartproc/entity/Unitinisiator.java deleted file mode 100644 index 661882e..0000000 --- a/src/main/java/com/iconplus/smartproc/entity/Unitinisiator.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.iconplus.smartproc.entity; - -import jakarta.persistence.*; -@Entity -@Table(name = "unitinisiator") -public class Unitinisiator { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private long id; - - private String unitinisiator; - private String keterangan; - - public Unitinisiator() { - - } - - public Unitinisiator(String unitinisiator, String keterangan) { - super(); - this.unitinisiator = unitinisiator; - this.keterangan = keterangan; - } - public long getId() { - return id; - } - public void setId(long id) { - this.id = id; - } - public String getUnitinisiator() { - return unitinisiator; - } - public void setUnitinisiator(String unitinisiator) { - this.unitinisiator = unitinisiator; - } - public String getKeterangan() { - return keterangan; - } - public void setKeterangan(String keterangan) { - this.keterangan = keterangan; - } -} diff --git a/src/main/java/com/iconplus/smartproc/entity/Users.java b/src/main/java/com/iconplus/smartproc/entity/Users.java deleted file mode 100644 index 8aea9f2..0000000 --- a/src/main/java/com/iconplus/smartproc/entity/Users.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.iconplus.smartproc.entity; - -import jakarta.persistence.*; - -@Entity -@Table(name = "users") -public class Users { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private long id; - private String username; - private String nama; - private String email; - private String password; - private String instansi_id; - private String bidang_id; - private String jabatan; - private String role_id; - private Boolean is_active; - - public Users() { - } - - public Users(String username, String nama, String email, String password, String instansi_id, String bidang_id, String jabatan, String role_id, Boolean is_active) { - super(); - this.username = username; - this.nama = nama; - this.email = email; - this.password = password; - this.instansi_id = instansi_id; - this.bidang_id = bidang_id; - this.jabatan = jabatan; - this.role_id = role_id; - this.is_active = is_active; - } - public long getId() { - return id; - } - public void setId(long id) { - this.id = id; - } - public String getUsername() { - return username; - } - public void setUsername(String username) { - this.username = username; - } - public String getNama() { - return nama; - } - public void setNama(String nama) { - this.nama = nama; - } - public String getEmail() { - return email; - } - public void setEmail(String email) { - this.email = email; - } - public String getPassword() { - return password; - } - public void setPassword(String password) { - this.password = password; - } - public String getInstansi() { - return instansi_id; - } - public void setInstansi(String instansi_id) { - this.instansi_id = instansi_id; - } - public String getBidang() { - return bidang_id; - } - public void setBidang(String bidang_id) { - this.bidang_id = bidang_id; - } - public String getJabatan() { - return jabatan; - } - public void setJabatan(String jabatan) { - this.jabatan = jabatan; - } - public String getRole() { - return role_id; - } - public void setRole(String role_id) { - this.role_id = role_id; - } - public Boolean getIsactive() { - return is_active; - } - public void setIsactive(Boolean is_active) { - this.is_active = is_active; - } -} diff --git a/src/main/java/com/iconplus/smartproc/exception/BaseException.java b/src/main/java/com/iconplus/smartproc/exception/BaseException.java new file mode 100644 index 0000000..b3af918 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/exception/BaseException.java @@ -0,0 +1,49 @@ +package com.iconplus.smartproc.exception; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import org.springframework.http.HttpStatus; + +import java.util.Map; + +@Setter +@Getter +@ToString +public class BaseException extends RuntimeException { + + protected HttpStatus httpStatus; + protected String errorCode; + protected String errorDesc; + protected String errorMessage; + protected String rootCause; + protected Map errorMessageMap; + + + public BaseException(HttpStatus httpStatus, String errorCode, String rootCause, String errorDesc, String errorMessage) { + super(rootCause); + this.httpStatus = httpStatus; + this.errorCode = errorCode; + this.errorDesc = errorDesc; + this.errorMessage = errorMessage; + } + + public BaseException(HttpStatus httpStatus, String errorCode, String rootCause) { + super(rootCause); + this.httpStatus = httpStatus; + this.errorCode = errorCode; + } + + public BaseException(String errorCode, String rootCause) { + super(rootCause); + this.errorCode = errorCode; + } + + public BaseException(HttpStatus httpStatus, String errorCode, String rootCause, Map errorMessageMap){ + super(rootCause); + this.httpStatus = httpStatus; + this.errorCode = errorCode; + this.errorMessageMap = errorMessageMap; + } + +} diff --git a/src/main/java/com/iconplus/smartproc/exception/BusinessException.java b/src/main/java/com/iconplus/smartproc/exception/BusinessException.java new file mode 100644 index 0000000..c668dd1 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/exception/BusinessException.java @@ -0,0 +1,47 @@ +package com.iconplus.smartproc.exception; + +import org.springframework.http.HttpStatus; + +import java.util.Map; + +public class BusinessException extends BaseException { + + public BusinessException(String errorCode, String errorDesc, String errorMessage) { + super(HttpStatus.CONFLICT, errorCode, "", errorDesc, errorMessage); + } + + public BusinessException(HttpStatus httpStatus, String errorCode, String errorDesc, String errorMessage) { + super(httpStatus, errorCode, "", errorDesc, errorMessage); + } + + public BusinessException(String errorCode) { + super(HttpStatus.CONFLICT, errorCode, ""); + } + public BusinessException(HttpStatus httpStatus, String errorCode) { + super(httpStatus, errorCode, ""); + } + + public BusinessException(String errorCode, Map maps) { + super(HttpStatus.CONFLICT, errorCode, "", maps); + } + + public BusinessException(HttpStatus httpStatus, String errorCode, Map maps) { + super(httpStatus, errorCode, "", maps); + } + + public BusinessException(String errorCode, String rootCause) { + super(HttpStatus.CONFLICT, errorCode, rootCause); + } + + public BusinessException(HttpStatus httpStatus, String errorCode, String rootCause) { + super(httpStatus, errorCode, rootCause); + } + + public BusinessException(String errorCode, String rootCause, Map maps) { + super(HttpStatus.CONFLICT, errorCode, rootCause, maps); + } + + public BusinessException(HttpStatus httpStatus, String errorCode, String rootCause, Map maps) { + super(httpStatus, errorCode, rootCause, maps); + } +} diff --git a/src/main/java/com/iconplus/smartproc/exception/ErrorHelper.java b/src/main/java/com/iconplus/smartproc/exception/ErrorHelper.java new file mode 100644 index 0000000..afdc490 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/exception/ErrorHelper.java @@ -0,0 +1,115 @@ +package com.iconplus.smartproc.exception; + +import lombok.extern.log4j.Log4j2; +import org.apache.velocity.Template; +import org.apache.velocity.VelocityContext; +import org.apache.velocity.app.Velocity; +import org.apache.velocity.app.VelocityEngine; +import org.apache.velocity.runtime.resource.loader.StringResourceLoader; +import org.apache.velocity.runtime.resource.util.StringResourceRepository; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; + +import java.io.StringWriter; +import java.util.Map; + +import static org.apache.velocity.runtime.RuntimeConstants.RESOURCE_LOADER; + +@Configuration +@Log4j2 +public class ErrorHelper { + + public static final String RAW_TEMPLATE = "rawTemplate"; + private final VelocityEngine engine; + + public ErrorHelper() { + engine = new VelocityEngine(); + this.addVelocityProperties(); + engine.init(); + } + + public ResponseEntity throwErrorException(String errorCode, HttpStatus httpStatus) { + + ErrorResponse errorResponse = new ErrorResponse(); + errorResponse.setCode(errorCode); + errorResponse.setTitle("Kesalahan terjadi"); + errorResponse.setMessage("Kesalahan terjadi"); + + return new ResponseEntity<>(errorResponse, new HttpHeaders(), httpStatus); + } + + public ResponseEntity throwErrorExceptionWithHardcodedMsg(String errorCode, HttpStatus httpStatus, + String errorDesc, String errorMsg) { + + ErrorResponse errorResponse = new ErrorResponse(); + errorResponse.setCode(errorCode); + errorResponse.setTitle(errorDesc); + errorResponse.setMessage(errorMsg); + return new ResponseEntity<>(errorResponse, new HttpHeaders(), httpStatus); + } + + public ResponseEntity throwErrorExceptionWithMetadata(String errorCode, HttpStatus httpStatus, + Map metadata) { + + ErrorResponse errorResponse = new ErrorResponse(); + errorResponse.setCode(errorCode); + errorResponse.setTitle("Kesalahan terjadi"); + errorResponse.setMessage(transform("Kesalahan terjadi", metadata)); + + return new ResponseEntity<>(errorResponse, new HttpHeaders(), httpStatus); + } + + public ResponseEntity throwErrorExceptionWithMessageAndMetadataWithoutLocalization(HttpStatus httpStatus, String errorCode, String errorTitle, String errorMessage, + Map metadata) { + + ErrorResponse errorResponse = new ErrorResponse(); + errorResponse.setCode(errorCode); + errorResponse.setTitle(errorTitle); + errorResponse.setMessage(transform(errorMessage, metadata)); + + return new ResponseEntity<>(errorResponse, new HttpHeaders(), httpStatus); + } + + private String transform(String rawNotificationTemplate, Map parameters) { + + VelocityContext context = this.getVelocityContext(rawNotificationTemplate, parameters); + Template template = engine.getTemplate(RAW_TEMPLATE); + + StringWriter templateWriter = new StringWriter(rawNotificationTemplate.length()); + template.merge(context, templateWriter); + + return templateWriter.toString(); + } + + private VelocityContext getVelocityContext(String rawNotificationTemplate, Map parameters) { + StringResourceRepository resourceRepository = (StringResourceRepository) engine + .getApplicationAttribute(StringResourceLoader.REPOSITORY_NAME_DEFAULT); + resourceRepository.putStringResource(RAW_TEMPLATE, rawNotificationTemplate); + + return new VelocityContext(parameters); + } + + private void addVelocityProperties() { + Velocity.addProperty("string.resource.loader.description", "Velocity StringResource loader"); + + engine.addProperty(RESOURCE_LOADER, "string"); + engine.addProperty("string.resource.loader.repository.static", "false"); + engine.addProperty("string.resource.loader.class", + "org.apache.velocity.runtime.resource.loader.StringResourceLoader"); + engine.addProperty("string.resource.loader.repository.class", + "org.apache.velocity.runtime.resource.util.StringResourceRepositoryImpl"); + engine.setProperty("runtime.log.logsystem.class", "org.apache.velocity.runtime.log.NullLogChute"); + } + + public ResponseEntity throwErrorExceptionWithMessage(HttpStatus httpStatus, String errorCode, String errorTitle, String errorMessage) { + + ErrorResponse errorResponse = new ErrorResponse(); + errorResponse.setCode(errorCode); + errorResponse.setTitle(errorTitle); + errorResponse.setMessage(errorMessage); + + return new ResponseEntity<>(errorResponse, new HttpHeaders(), httpStatus); + } +} \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/exception/ErrorResponse.java b/src/main/java/com/iconplus/smartproc/exception/ErrorResponse.java new file mode 100644 index 0000000..979099e --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/exception/ErrorResponse.java @@ -0,0 +1,16 @@ +package com.iconplus.smartproc.exception; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@NoArgsConstructor +@AllArgsConstructor +@Data +public class ErrorResponse implements Serializable { + private String code; + private String title; + private String message; +} diff --git a/src/main/java/com/iconplus/smartproc/exception/GlobalExceptionHandler.java b/src/main/java/com/iconplus/smartproc/exception/GlobalExceptionHandler.java new file mode 100644 index 0000000..2050dca --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/exception/GlobalExceptionHandler.java @@ -0,0 +1,102 @@ +package com.iconplus.smartproc.exception; + +import lombok.extern.log4j.Log4j2; +import org.apache.commons.lang3.StringUtils; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.FieldError; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.client.HttpServerErrorException; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.TimeoutException; + +@Log4j2 +@ControllerAdvice +public class GlobalExceptionHandler { + + private ErrorHelper errorHelper; + + public GlobalExceptionHandler(ErrorHelper errorHelper) { + this.errorHelper = errorHelper; + } + + private Boolean isError = false; + private static final String DEFAULT_ERROR_CODE = "80000"; + + @ExceptionHandler(Exception.class) + public ResponseEntity renderDefaultResponse(Exception ex) { + log.error("Exception occurred: ", ex); + + return errorHelper.throwErrorException(DEFAULT_ERROR_CODE, HttpStatus.INTERNAL_SERVER_ERROR); + } + + @ExceptionHandler(BusinessException.class) + public ResponseEntity renderBusinessErrorResponse(BusinessException exception) { + log.error("BusinessException occurred: ", exception); + if (Objects.nonNull(exception.getErrorMessageMap())) { + return getErrorResponseResponseEntity(exception.getErrorDesc(), exception.getErrorMessage(), exception.getErrorCode(), exception.getHttpStatus(), exception.getErrorMessageMap()); + } + + return getErrorResponseResponseEntity(exception.getErrorDesc(), exception.getErrorMessage(), exception.getErrorCode(), exception.getHttpStatus(), null); + } + + + @ExceptionHandler(TechnicalException.class) + public ResponseEntity renderTechnicalErrorResponse(TechnicalException exception) { + log.error("TechnicalException occurred: ", exception); + + return getErrorResponseResponseEntity(exception.getErrorDesc(), exception.getErrorMessage(), exception.getErrorCode(), exception.getHttpStatus(), null); + } + + @ExceptionHandler(MethodArgumentNotValidException.class) + public ResponseEntity renderMethodArgumentErrorResponse(MethodArgumentNotValidException exception) { + log.error("MethodArgumentNotValidException occurred: ", exception); + + List errors = new ArrayList(); + + for (FieldError error : exception.getBindingResult().getFieldErrors()) { + errors.add(error.getField().concat(":").concat(error.getDefaultMessage())); + } + + return errorHelper.throwErrorExceptionWithMessage(HttpStatus.BAD_REQUEST, "80400", "Request Validation Error", errors.toString()); + } + + @ExceptionHandler(HttpServerErrorException.class) + public ResponseEntity renderHttpServerErrorResponse(HttpServerErrorException exception) { + log.error("HttpServerErrorException occurred: ", exception); + + return errorHelper.throwErrorException(DEFAULT_ERROR_CODE, HttpStatus.INTERNAL_SERVER_ERROR); + } + + @ExceptionHandler(TimeoutException.class) + public ResponseEntity renderTimeoutResponse(TimeoutException exception) { + log.error("TimeoutException occurred: ", exception); + + return errorHelper.throwErrorException("80001", HttpStatus.INTERNAL_SERVER_ERROR); + } + + private ResponseEntity getErrorResponseResponseEntity(String errorDesc, String errorMessage, + String errorCode, HttpStatus httpStatus, + Map metadata) { + if (StringUtils.isNotBlank(errorDesc) && StringUtils.isNotBlank(errorMessage)) { + + return errorHelper.throwErrorExceptionWithMessageAndMetadataWithoutLocalization(httpStatus, errorCode, errorDesc, errorMessage, metadata); + } else { + if (Objects.nonNull(metadata)) { + return errorHelper.throwErrorExceptionWithMetadata(errorCode, httpStatus, metadata); + } + + return errorHelper.throwErrorException(errorCode, httpStatus); + } + } + + public Boolean isError() { + return isError; + } +} \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/exception/ResponseExceptionResolver.java b/src/main/java/com/iconplus/smartproc/exception/ResponseExceptionResolver.java new file mode 100644 index 0000000..a0f30fd --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/exception/ResponseExceptionResolver.java @@ -0,0 +1,69 @@ +package com.iconplus.smartproc.exception; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.SneakyThrows; +import lombok.extern.log4j.Log4j2; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver; +import org.springframework.web.servlet.view.json.MappingJackson2JsonView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Map; + +@Log4j2 +@Component +public class ResponseExceptionResolver extends AbstractHandlerExceptionResolver { + + private static final String DEFAULT_ERROR_CODE = "80000"; + + + public ResponseExceptionResolver() {} + + @SneakyThrows + @Override + protected ModelAndView doResolveException( + HttpServletRequest request, + HttpServletResponse response, + Object handler, + Exception ex + ) { + return handleException(request, response, ex); + } + + private ModelAndView handleException( + HttpServletRequest request, + HttpServletResponse response, + Exception exception + ) { + if (ObjectUtils.isNotEmpty(response) && HttpStatus.UNAUTHORIZED.value() == response.getStatus() + && ObjectUtils.isNotEmpty(exception) && exception instanceof BusinessException + ) { + BusinessException businessException = (BusinessException) exception; + ErrorResponse errorResponse = new ErrorResponse(); + errorResponse.setCode(businessException.getErrorCode()); + errorResponse.setTitle(businessException.getErrorDesc()); + errorResponse.setMessage(businessException.getErrorMessage()); + log.info("Error Response Exception : {}", errorResponse); + return new ModelAndView(new MappingJackson2JsonView(), this.getErrorResponse(errorResponse)); + } + response.setHeader("Content-Type", MediaType.APPLICATION_JSON_VALUE); + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + + ErrorResponse errorResponse = new ErrorResponse(); + errorResponse.setCode(DEFAULT_ERROR_CODE); + errorResponse.setTitle("Kesalahan terjadi"); + errorResponse.setMessage("Kesalahan terjadi"); + return new ModelAndView(new MappingJackson2JsonView(), this.getErrorResponse(errorResponse)); + } + + private Map getErrorResponse(ErrorResponse errorResponse) { + return new ObjectMapper().convertValue(errorResponse, new TypeReference>() { + }); + } +} diff --git a/src/main/java/com/iconplus/smartproc/exception/TechnicalException.java b/src/main/java/com/iconplus/smartproc/exception/TechnicalException.java new file mode 100644 index 0000000..386f2db --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/exception/TechnicalException.java @@ -0,0 +1,40 @@ +package com.iconplus.smartproc.exception; + +import org.springframework.http.HttpStatus; + +import java.util.Map; + +public class TechnicalException extends BaseException { + + public TechnicalException(String errorCode, String errorDesc, String errorMessage) { + super(HttpStatus.INTERNAL_SERVER_ERROR, errorCode, "", errorDesc, errorMessage); + } + + public TechnicalException(HttpStatus httpStatus, String errorCode, String errorDesc, String errorMessage){ + super(httpStatus, errorCode, "", errorDesc, errorMessage); + } + + public TechnicalException(String errorCode){ + super(HttpStatus.INTERNAL_SERVER_ERROR, errorCode, ""); + } + + public TechnicalException(HttpStatus httpStatus, String errorCode){ + super(httpStatus, errorCode, ""); + } + + public TechnicalException(String errorCode, String rootCause){ + super(HttpStatus.INTERNAL_SERVER_ERROR, errorCode, rootCause); + } + + public TechnicalException(HttpStatus httpStatus, String errorCode, String rootCause) { + super(httpStatus, errorCode, rootCause); + } + + public TechnicalException(String errorCode, String rootCause, Map maps) { + super(HttpStatus.CONFLICT, errorCode, rootCause, maps); + } + + public TechnicalException(HttpStatus httpStatus, String errorCode, String rootCause, Map maps) { + super(httpStatus, errorCode, rootCause, maps); + } +} diff --git a/src/main/java/com/iconplus/smartproc/helper/base/BaseEntity.java b/src/main/java/com/iconplus/smartproc/helper/base/BaseEntity.java new file mode 100644 index 0000000..521bd66 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/base/BaseEntity.java @@ -0,0 +1,30 @@ +package com.iconplus.smartproc.helper.base; + +import lombok.Data; +import org.hibernate.annotations.CreationTimestamp; +import org.hibernate.annotations.UpdateTimestamp; + +import javax.persistence.Column; +import javax.persistence.MappedSuperclass; +import java.io.Serializable; +import java.sql.Timestamp; + +@Data +@MappedSuperclass +public class BaseEntity implements Serializable { + + @Column(name = "created_by", length = 50) + private String createdBy; + + @Column(name = "created_time", nullable = false, updatable=false) + @CreationTimestamp + private Timestamp createdTime; + + @Column(name = "updated_by", length = 50) + private String updatedBy; + + @Column(name = "updated_time") + @UpdateTimestamp + private Timestamp updatedTime; + +} diff --git a/src/main/java/com/iconplus/smartproc/helper/base/BaseInterfaceRequest.java b/src/main/java/com/iconplus/smartproc/helper/base/BaseInterfaceRequest.java new file mode 100644 index 0000000..cb66808 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/base/BaseInterfaceRequest.java @@ -0,0 +1,10 @@ +package com.iconplus.smartproc.helper.base; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import java.io.Serializable; + +@JsonIgnoreProperties(ignoreUnknown = true) +public interface BaseInterfaceRequest extends Serializable { + +} diff --git a/src/main/java/com/iconplus/smartproc/helper/base/BaseInterfaceResponse.java b/src/main/java/com/iconplus/smartproc/helper/base/BaseInterfaceResponse.java new file mode 100644 index 0000000..733120d --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/base/BaseInterfaceResponse.java @@ -0,0 +1,12 @@ +package com.iconplus.smartproc.helper.base; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; + +import java.io.Serializable; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +public interface BaseInterfaceResponse extends Serializable { + +} diff --git a/src/main/java/com/iconplus/smartproc/helper/base/BasePaginationRequest.java b/src/main/java/com/iconplus/smartproc/helper/base/BasePaginationRequest.java new file mode 100644 index 0000000..79b8c46 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/base/BasePaginationRequest.java @@ -0,0 +1,18 @@ +package com.iconplus.smartproc.helper.base; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@AllArgsConstructor +@NoArgsConstructor +@Data +public class BasePaginationRequest extends BaseRequest{ + + + private Integer pageSize; + private Integer pageNumber; + private String sortBy; + private String sortType; +} + diff --git a/src/main/java/com/iconplus/smartproc/helper/base/BasePaginationResponse.java b/src/main/java/com/iconplus/smartproc/helper/base/BasePaginationResponse.java new file mode 100644 index 0000000..a9bd7b5 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/base/BasePaginationResponse.java @@ -0,0 +1,14 @@ +package com.iconplus.smartproc.helper.base; + +import com.iconplus.smartproc.helper.model.Pagination; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@AllArgsConstructor +@NoArgsConstructor +@Data +public class BasePaginationResponse extends BaseResponse{ + + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/helper/base/BaseRequest.java b/src/main/java/com/iconplus/smartproc/helper/base/BaseRequest.java new file mode 100644 index 0000000..6d35ffa --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/base/BaseRequest.java @@ -0,0 +1,10 @@ +package com.iconplus.smartproc.helper.base; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import java.io.Serializable; + +@JsonIgnoreProperties(ignoreUnknown = true) +public class BaseRequest implements Serializable { + +} diff --git a/src/main/java/com/iconplus/smartproc/helper/base/BaseResponse.java b/src/main/java/com/iconplus/smartproc/helper/base/BaseResponse.java new file mode 100644 index 0000000..f552bed --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/base/BaseResponse.java @@ -0,0 +1,12 @@ +package com.iconplus.smartproc.helper.base; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; + +import java.io.Serializable; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +public class BaseResponse implements Serializable { + +} diff --git a/src/main/java/com/iconplus/smartproc/helper/model/EmptyRequest.java b/src/main/java/com/iconplus/smartproc/helper/model/EmptyRequest.java new file mode 100644 index 0000000..c9048cb --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/model/EmptyRequest.java @@ -0,0 +1,7 @@ +package com.iconplus.smartproc.helper.model; + +import com.iconplus.smartproc.helper.base.BaseRequest; + +public class EmptyRequest extends BaseRequest { + +} diff --git a/src/main/java/com/iconplus/smartproc/helper/model/EmptyResponse.java b/src/main/java/com/iconplus/smartproc/helper/model/EmptyResponse.java new file mode 100644 index 0000000..d33ba27 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/model/EmptyResponse.java @@ -0,0 +1,9 @@ +package com.iconplus.smartproc.helper.model; + +import brave.internal.Nullable; +import com.iconplus.smartproc.helper.base.BaseResponse; + +@Nullable +public class EmptyResponse extends BaseResponse { + +} diff --git a/src/main/java/com/iconplus/smartproc/helper/model/Pagination.java b/src/main/java/com/iconplus/smartproc/helper/model/Pagination.java new file mode 100644 index 0000000..879b5e2 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/model/Pagination.java @@ -0,0 +1,22 @@ +package com.iconplus.smartproc.helper.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class Pagination implements Serializable { + private Integer pageSize; + private Integer currentPage; + private Integer totalPages; + private Long totalRecords; + private Boolean isFirstPage; + private Boolean isLastPage; +} + diff --git a/src/main/java/com/iconplus/smartproc/helper/service/BaseInterfaceService.java b/src/main/java/com/iconplus/smartproc/helper/service/BaseInterfaceService.java new file mode 100644 index 0000000..1d02476 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/service/BaseInterfaceService.java @@ -0,0 +1,8 @@ +package com.iconplus.smartproc.helper.service; + +import com.iconplus.smartproc.helper.base.BaseInterfaceRequest; +import com.iconplus.smartproc.helper.base.BaseInterfaceResponse; + +public interface BaseInterfaceService { + V execute(T input); +} diff --git a/src/main/java/com/iconplus/smartproc/helper/service/BasePaginationService.java b/src/main/java/com/iconplus/smartproc/helper/service/BasePaginationService.java new file mode 100644 index 0000000..27ca323 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/service/BasePaginationService.java @@ -0,0 +1,30 @@ +package com.iconplus.smartproc.helper.service; + +import com.iconplus.smartproc.helper.base.BasePaginationRequest; +import com.iconplus.smartproc.helper.base.BasePaginationResponse; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.beans.factory.annotation.Value; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public abstract class BasePaginationService implements BaseService{ + + @Value("${default.page.size}") + private Integer pageSize; + + @Value("${default.page.number}") + private Integer pageNumber; + + @Value("${default.page.sortBy}") + private String sortBy; + + @Value("${default.page.sortType}") + private String sortType; + + @Value("${default.page.maxPageSize}") + private Integer maxPageSize; + +} diff --git a/src/main/java/com/iconplus/smartproc/helper/service/BaseService.java b/src/main/java/com/iconplus/smartproc/helper/service/BaseService.java new file mode 100644 index 0000000..ffe5715 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/service/BaseService.java @@ -0,0 +1,9 @@ +package com.iconplus.smartproc.helper.service; + + +import com.iconplus.smartproc.helper.base.BaseRequest; +import com.iconplus.smartproc.helper.base.BaseResponse; + +public interface BaseService { + V execute(T input); +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/JenisAnggaran.java b/src/main/java/com/iconplus/smartproc/model/entity/JenisAnggaran.java new file mode 100644 index 0000000..62c2a98 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/JenisAnggaran.java @@ -0,0 +1,38 @@ +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.*; + +@Entity +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "jenis_anggaran") +public class JenisAnggaran extends BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private long id; + + @Column(name = "jenis_anggaran") + private String jenisAnggaran; + + @Column(name = "keterangan") + private String keterangan; + + @Column(name = "is_active") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isActive; + + @Column(name = "deleted") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean deleted; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/JenisKontrak.java b/src/main/java/com/iconplus/smartproc/model/entity/JenisKontrak.java new file mode 100644 index 0000000..ecc1276 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/JenisKontrak.java @@ -0,0 +1,25 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.Builder; +import lombok.Data; + +import javax.persistence.*; + +@Entity +@Table(name = "jenis_kontrak") +@Data +@Builder +public class JenisKontrak extends BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private long id; + + @Column(name = "jenis_kontrak") + private String jenisKontrak; + + @Column(name = "keterangan") + private String keterangan; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/JenisPengadaan.java b/src/main/java/com/iconplus/smartproc/model/entity/JenisPengadaan.java new file mode 100644 index 0000000..3b99ec2 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/JenisPengadaan.java @@ -0,0 +1,25 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.Builder; +import lombok.Data; + +import javax.persistence.*; + +@Entity +@Table(name = "jenis_pengadaan") +@Data +@Builder +public class JenisPengadaan extends BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private long id; + + @Column(name = "jenis_anggaran") + private String jenisPengadaan; + + @Column(name = "keterangan") + private String keterangan; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/Lokasi.java b/src/main/java/com/iconplus/smartproc/model/entity/Lokasi.java new file mode 100644 index 0000000..f6d2dc9 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/Lokasi.java @@ -0,0 +1,25 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.Builder; +import lombok.Data; + +import javax.persistence.*; + +@Entity +@Table(name = "lokasi") +@Data +@Builder +public class Lokasi extends BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private long id; + + @Column(name = "lokasi") + private String lokasi; + + @Column(name = "keterangan") + private String keterangan; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/MetodePengadaan.java b/src/main/java/com/iconplus/smartproc/model/entity/MetodePengadaan.java new file mode 100644 index 0000000..2d2d62c --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/MetodePengadaan.java @@ -0,0 +1,25 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.Builder; +import lombok.Data; + +import javax.persistence.*; + +@Entity +@Table(name = "metode_pengadaan") +@Data +@Builder +public class MetodePengadaan extends BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private long id; + + @Column(name = "metode_pengadaan") + private String metodePengadaan; + + @Column(name = "keterangan") + private String keterangan; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/MetodePenyampaian.java b/src/main/java/com/iconplus/smartproc/model/entity/MetodePenyampaian.java new file mode 100644 index 0000000..ad66214 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/MetodePenyampaian.java @@ -0,0 +1,26 @@ +package com.iconplus.smartproc.model.entity; + + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.Builder; +import lombok.Data; + +import javax.persistence.*; + +@Entity +@Table(name = "metode_penyampaian") +@Data +@Builder +public class MetodePenyampaian extends BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private long id; + + @Column(name = "metode_penyampaian") + private String metodePenyampaian; + + @Column(name = "keterangan") + private String keterangan; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/Roles.java b/src/main/java/com/iconplus/smartproc/model/entity/Roles.java new file mode 100644 index 0000000..1f42682 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/Roles.java @@ -0,0 +1,28 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.Builder; +import lombok.Data; + +import javax.persistence.*; + +@Entity +@Table(name = "roles") +@Data +@Builder +public class Roles extends BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private long id; + + @Column(name = "role") + private String role; + + @Column(name = "keterangan") + private String keterangan; + + @Column(name = "is_active") + private Boolean isactive; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/StrategiPengadaan.java b/src/main/java/com/iconplus/smartproc/model/entity/StrategiPengadaan.java new file mode 100644 index 0000000..e604b32 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/StrategiPengadaan.java @@ -0,0 +1,20 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.Builder; +import lombok.Data; + +import javax.persistence.*; + +@Entity +@Table(name = "strategi_pengadaan") +@Data +@Builder +public class StrategiPengadaan extends BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; + private String strategipengadaan; + private String keterangan; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/SumberDana.java b/src/main/java/com/iconplus/smartproc/model/entity/SumberDana.java new file mode 100644 index 0000000..1b95dba --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/SumberDana.java @@ -0,0 +1,25 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.Builder; +import lombok.Data; + +import javax.persistence.*; + +@Entity +@Table(name = "sumberdana") +@Data +@Builder +public class SumberDana extends BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private long id; + + @Column(name = "sumber_dana") + private String sumberDana; + + @Column(name = "keterangan") + private String keterangan; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/SupplyPositioningMatrix.java b/src/main/java/com/iconplus/smartproc/model/entity/SupplyPositioningMatrix.java new file mode 100644 index 0000000..f12b371 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/SupplyPositioningMatrix.java @@ -0,0 +1,25 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.Builder; +import lombok.Data; + +import javax.persistence.*; + +@Entity +@Table(name = "supply_positioning_matrix") +@Data +@Builder +public class SupplyPositioningMatrix extends BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private long id; + + @Column(name = "supply_positioning_matrix") + private String supplypositioningmatrix; + + @Column(name = "keterangan") + private String keterangan; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/UnitInisiator.java b/src/main/java/com/iconplus/smartproc/model/entity/UnitInisiator.java new file mode 100644 index 0000000..f5f282e --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/UnitInisiator.java @@ -0,0 +1,25 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.Builder; +import lombok.Data; + +import javax.persistence.*; + +@Entity +@Table(name = "unit_inisiator") +@Data +@Builder +public class UnitInisiator extends BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private long id; + + @Column(name = "unit_inisiator") + private String unitInisiator; + + @Column(name = "keterangan") + private String keterangan; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/Users.java b/src/main/java/com/iconplus/smartproc/model/entity/Users.java new file mode 100644 index 0000000..f9bcffa --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/Users.java @@ -0,0 +1,51 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.Builder; +import lombok.Data; +import org.hibernate.annotations.Type; + +import javax.persistence.*; + +@Entity +@Table(name = "users") +@Data +@Builder +public class Users extends BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private long id; + + @Column(name = "username") + private String username; + + @Column(name = "nama") + private String nama; + + @Column(name = "email") + private String email; + + @Column(name = "password") + private String password; + + @Column(name = "instansi_id") + private String instansiId; + + @Column(name = "bidang_id") + private String bidangId; + + @Column(name = "jabatan") + private String jabatan; + + @Column(name = "role_id") + private Long roleId; + + @Column(name = "is_active") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isActive; + + @Column(name = "deleted") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean deleted; +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/JenisAnggaranView.java b/src/main/java/com/iconplus/smartproc/model/projection/JenisAnggaranView.java new file mode 100644 index 0000000..b243e86 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/JenisAnggaranView.java @@ -0,0 +1,16 @@ +package com.iconplus.smartproc.model.projection; + +public interface JenisAnggaranView { + + Long getId(); + String getJenisAnggaran(); + String getKeterangan(); + Boolean getIsActive(); + Boolean getDeleted(); + + void setId(Long id); + void setJenisAnggaran(String jenisAnggaran); + void setKeterangan(String keterangan); + void setIsActive(Boolean isActive); + void setDeleted(Boolean deleted); +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/JenisAnggaranRequest.java b/src/main/java/com/iconplus/smartproc/model/request/JenisAnggaranRequest.java new file mode 100644 index 0000000..003af07 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/JenisAnggaranRequest.java @@ -0,0 +1,19 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.Builder; +import lombok.Data; +import org.springframework.data.domain.Pageable; + +@Data +@Builder +public class JenisAnggaranRequest extends BaseRequest { + + private Long id; + private String jenisAnggaran; + private String keterangan; + private Boolean isActive; + private Boolean deleted; + private String search; + private transient Pageable pageable; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListJenisAnggaranResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListJenisAnggaranResponse.java new file mode 100644 index 0000000..404c6d9 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListJenisAnggaranResponse.java @@ -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 GetListJenisAnggaranResponse extends BaseResponse { + + private List listJenisAnggaranResponse; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/JenisAnggaranResponse.java b/src/main/java/com/iconplus/smartproc/model/response/JenisAnggaranResponse.java new file mode 100644 index 0000000..3d73169 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/JenisAnggaranResponse.java @@ -0,0 +1,21 @@ +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 JenisAnggaranResponse extends BaseResponse { + + private long id; + private String jenisAnggaran; + private String keterangan; + private Boolean isActive; + private Boolean deleted; + +} diff --git a/src/main/java/com/iconplus/smartproc/repository/JenisAnggaranRepository.java b/src/main/java/com/iconplus/smartproc/repository/JenisAnggaranRepository.java new file mode 100644 index 0000000..373b3b3 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/JenisAnggaranRepository.java @@ -0,0 +1,32 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.JenisAnggaran; +import com.iconplus.smartproc.model.projection.JenisAnggaranView; +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 JenisAnggaranRepository extends JpaRepository { + + @Query(value = "SELECT ja.id as id, " + + "ja.jenisAnggaran as jenisAnggaran, " + + "ja.keterangan as keterangan, " + + "ja.isActive as isActive, " + + "ja.deleted as deleted " + + "FROM JenisAnggaran ja " + + "WHERE ja.deleted = false " + + "AND (:search is null " + + "or (UPPER(ja.jenisAnggaran) like :search OR UPPER(ja.keterangan) like :search)) " + + "ORDER BY ja.id") + Page getAllJenisAnggaran(String search, Pageable pageable); + + Optional findByIdAndDeletedFalse(Long id); + + Optional findByJenisAnggaranAndDeletedFalse(String jenisAnggaran); + +} diff --git a/src/main/java/com/iconplus/smartproc/repository/JenisanggaranRepository.java b/src/main/java/com/iconplus/smartproc/repository/JenisKontrakRepository.java similarity index 55% rename from src/main/java/com/iconplus/smartproc/repository/JenisanggaranRepository.java rename to src/main/java/com/iconplus/smartproc/repository/JenisKontrakRepository.java index 3ccdc51..efeb796 100644 --- a/src/main/java/com/iconplus/smartproc/repository/JenisanggaranRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/JenisKontrakRepository.java @@ -1,10 +1,10 @@ package com.iconplus.smartproc.repository; -import com.iconplus.smartproc.entity.Jenisanggaran; +import com.iconplus.smartproc.model.entity.JenisKontrak; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository -public interface JenisanggaranRepository extends JpaRepository { +public interface JenisKontrakRepository extends JpaRepository { } diff --git a/src/main/java/com/iconplus/smartproc/repository/JenispengadaanRepository.java b/src/main/java/com/iconplus/smartproc/repository/JenisPengadaanRepository.java similarity index 54% rename from src/main/java/com/iconplus/smartproc/repository/JenispengadaanRepository.java rename to src/main/java/com/iconplus/smartproc/repository/JenisPengadaanRepository.java index bf31075..8eff2e3 100644 --- a/src/main/java/com/iconplus/smartproc/repository/JenispengadaanRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/JenisPengadaanRepository.java @@ -1,10 +1,10 @@ package com.iconplus.smartproc.repository; -import com.iconplus.smartproc.entity.Jenispengadaan; +import com.iconplus.smartproc.model.entity.JenisPengadaan; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository -public interface JenispengadaanRepository extends JpaRepository { +public interface JenisPengadaanRepository extends JpaRepository { } \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/repository/LokasiRepository.java b/src/main/java/com/iconplus/smartproc/repository/LokasiRepository.java index f2696e8..f3e178b 100644 --- a/src/main/java/com/iconplus/smartproc/repository/LokasiRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/LokasiRepository.java @@ -1,6 +1,6 @@ package com.iconplus.smartproc.repository; -import com.iconplus.smartproc.entity.Lokasi; +import com.iconplus.smartproc.model.entity.Lokasi; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/iconplus/smartproc/repository/MetodepenyampaianRepository.java b/src/main/java/com/iconplus/smartproc/repository/MetodePengadaanRepository.java similarity index 53% rename from src/main/java/com/iconplus/smartproc/repository/MetodepenyampaianRepository.java rename to src/main/java/com/iconplus/smartproc/repository/MetodePengadaanRepository.java index b3b89ad..8eeb1f9 100644 --- a/src/main/java/com/iconplus/smartproc/repository/MetodepenyampaianRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/MetodePengadaanRepository.java @@ -1,10 +1,10 @@ package com.iconplus.smartproc.repository; -import com.iconplus.smartproc.entity.Metodepenyampaian; +import com.iconplus.smartproc.model.entity.MetodePengadaan; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository -public interface MetodepenyampaianRepository extends JpaRepository { +public interface MetodePengadaanRepository extends JpaRepository { } diff --git a/src/main/java/com/iconplus/smartproc/repository/MetodepengadaanRepository.java b/src/main/java/com/iconplus/smartproc/repository/MetodePenyampaianRepository.java similarity index 53% rename from src/main/java/com/iconplus/smartproc/repository/MetodepengadaanRepository.java rename to src/main/java/com/iconplus/smartproc/repository/MetodePenyampaianRepository.java index d91d85f..1132dde 100644 --- a/src/main/java/com/iconplus/smartproc/repository/MetodepengadaanRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/MetodePenyampaianRepository.java @@ -1,10 +1,10 @@ package com.iconplus.smartproc.repository; -import com.iconplus.smartproc.entity.Metodepengadaan; +import com.iconplus.smartproc.model.entity.MetodePenyampaian; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository -public interface MetodepengadaanRepository extends JpaRepository { +public interface MetodePenyampaianRepository extends JpaRepository { } diff --git a/src/main/java/com/iconplus/smartproc/repository/RolesRepository.java b/src/main/java/com/iconplus/smartproc/repository/RolesRepository.java index 2d15fc0..2abc8e5 100644 --- a/src/main/java/com/iconplus/smartproc/repository/RolesRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/RolesRepository.java @@ -1,6 +1,6 @@ package com.iconplus.smartproc.repository; -import com.iconplus.smartproc.entity.Roles; +import com.iconplus.smartproc.model.entity.Roles; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/iconplus/smartproc/repository/StrategiPengadaanRepository.java b/src/main/java/com/iconplus/smartproc/repository/StrategiPengadaanRepository.java new file mode 100644 index 0000000..4efbab5 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/StrategiPengadaanRepository.java @@ -0,0 +1,10 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.StrategiPengadaan; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface StrategiPengadaanRepository extends JpaRepository { + +} diff --git a/src/main/java/com/iconplus/smartproc/repository/StrategipengadaanRepository.java b/src/main/java/com/iconplus/smartproc/repository/StrategipengadaanRepository.java deleted file mode 100644 index d1733a9..0000000 --- a/src/main/java/com/iconplus/smartproc/repository/StrategipengadaanRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.iconplus.smartproc.repository; - -import com.iconplus.smartproc.entity.Strategipengadaan; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface StrategipengadaanRepository extends JpaRepository { - -} diff --git a/src/main/java/com/iconplus/smartproc/repository/JeniskontrakRepository.java b/src/main/java/com/iconplus/smartproc/repository/SumberDanaRepository.java similarity index 56% rename from src/main/java/com/iconplus/smartproc/repository/JeniskontrakRepository.java rename to src/main/java/com/iconplus/smartproc/repository/SumberDanaRepository.java index 5d82ff8..41230fb 100644 --- a/src/main/java/com/iconplus/smartproc/repository/JeniskontrakRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/SumberDanaRepository.java @@ -1,10 +1,10 @@ package com.iconplus.smartproc.repository; -import com.iconplus.smartproc.entity.Jeniskontrak; +import com.iconplus.smartproc.model.entity.SumberDana; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository -public interface JeniskontrakRepository extends JpaRepository { +public interface SumberDanaRepository extends JpaRepository { } diff --git a/src/main/java/com/iconplus/smartproc/repository/SupplyPositioningMatrixRepository.java b/src/main/java/com/iconplus/smartproc/repository/SupplyPositioningMatrixRepository.java new file mode 100644 index 0000000..ff1a570 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/SupplyPositioningMatrixRepository.java @@ -0,0 +1,10 @@ +package com.iconplus.smartproc.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; +import com.iconplus.smartproc.model.entity.SupplyPositioningMatrix; + +@Repository +public interface SupplyPositioningMatrixRepository extends JpaRepository { + +} diff --git a/src/main/java/com/iconplus/smartproc/repository/SupplypositioningmatrixRepository.java b/src/main/java/com/iconplus/smartproc/repository/SupplypositioningmatrixRepository.java deleted file mode 100644 index a4c1d9b..0000000 --- a/src/main/java/com/iconplus/smartproc/repository/SupplypositioningmatrixRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.iconplus.smartproc.repository; - -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; -import com.iconplus.smartproc.entity.Supplypositioningmatrix; - -@Repository -public interface SupplypositioningmatrixRepository extends JpaRepository { - -} diff --git a/src/main/java/com/iconplus/smartproc/repository/SumberdanaRepository.java b/src/main/java/com/iconplus/smartproc/repository/UnitInisiatorRepository.java similarity index 55% rename from src/main/java/com/iconplus/smartproc/repository/SumberdanaRepository.java rename to src/main/java/com/iconplus/smartproc/repository/UnitInisiatorRepository.java index 9d204f5..bf610f6 100644 --- a/src/main/java/com/iconplus/smartproc/repository/SumberdanaRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/UnitInisiatorRepository.java @@ -1,10 +1,10 @@ package com.iconplus.smartproc.repository; -import com.iconplus.smartproc.entity.Sumberdana; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import com.iconplus.smartproc.model.entity.UnitInisiator; @Repository -public interface SumberdanaRepository extends JpaRepository { +public interface UnitInisiatorRepository extends JpaRepository { } diff --git a/src/main/java/com/iconplus/smartproc/repository/UnitinisiatorRepository.java b/src/main/java/com/iconplus/smartproc/repository/UnitinisiatorRepository.java deleted file mode 100644 index 2fd6cde..0000000 --- a/src/main/java/com/iconplus/smartproc/repository/UnitinisiatorRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.iconplus.smartproc.repository; - -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; -import com.iconplus.smartproc.entity.Unitinisiator; - -@Repository -public interface UnitinisiatorRepository extends JpaRepository { - -} diff --git a/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java b/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java index 8a67e92..aa25de3 100644 --- a/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java @@ -1,6 +1,6 @@ package com.iconplus.smartproc.repository; -import com.iconplus.smartproc.entity.Users; +import com.iconplus.smartproc.model.entity.Users; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/iconplus/smartproc/service/jenisanggaran/DeleteJenisAnggaranService.java b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/DeleteJenisAnggaranService.java new file mode 100644 index 0000000..9999044 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/DeleteJenisAnggaranService.java @@ -0,0 +1,39 @@ +package com.iconplus.smartproc.service.jenisanggaran; + +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.entity.JenisAnggaran; +import com.iconplus.smartproc.model.request.JenisAnggaranRequest; +import com.iconplus.smartproc.repository.JenisAnggaranRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class DeleteJenisAnggaranService implements BaseService { + + private JenisAnggaranRepository jenisAnggaranRepository; + + public DeleteJenisAnggaranService(JenisAnggaranRepository jenisAnggaranRepository) { + this.jenisAnggaranRepository = jenisAnggaranRepository; + } + + + @Override + public EmptyResponse execute(JenisAnggaranRequest input) { + + var jenisAnggaran = jenisAnggaranRepository.findByIdAndDeletedFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, input.getId()))); + + jenisAnggaran.setDeleted(true); + jenisAnggaranRepository.save(jenisAnggaran); + log.info("success delete jenis anggaran id {}", jenisAnggaran.getDeleted()); + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/jenisanggaran/GetJenisAnggaranByIdService.java b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/GetJenisAnggaranByIdService.java new file mode 100644 index 0000000..814afad --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/GetJenisAnggaranByIdService.java @@ -0,0 +1,45 @@ +package com.iconplus.smartproc.service.jenisanggaran; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.JenisAnggaranRequest; +import com.iconplus.smartproc.model.response.JenisAnggaranResponse; +import com.iconplus.smartproc.repository.JenisAnggaranRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +public class GetJenisAnggaranByIdService implements BaseService { + + private final JenisAnggaranRepository jenisAnggaranRepository; + + public GetJenisAnggaranByIdService(JenisAnggaranRepository jenisAnggaranRepository) { + this.jenisAnggaranRepository = jenisAnggaranRepository; + } + + @Override + public JenisAnggaranResponse execute(JenisAnggaranRequest input) { + JenisAnggaranResponse jenisAnggaranResponse = new JenisAnggaranResponse(); + var jenisAnggaranView = jenisAnggaranRepository.findByIdAndDeletedFalse(input.getId()); + if (jenisAnggaranView.isEmpty()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, input.getId())); + } + + jenisAnggaranResponse.setJenisAnggaran(jenisAnggaranView.get().getJenisAnggaran()); + jenisAnggaranResponse.setKeterangan(jenisAnggaranView.get().getKeterangan()); + jenisAnggaranResponse.setIsActive(jenisAnggaranView.get().getIsActive()); + jenisAnggaranResponse.setDeleted(jenisAnggaranView.get().getDeleted()); + + return JenisAnggaranResponse.builder() + .id(jenisAnggaranView.get().getId()) + .jenisAnggaran(jenisAnggaranView.get().getJenisAnggaran()) + .keterangan(jenisAnggaranView.get().getKeterangan()) + .isActive(jenisAnggaranView.get().getIsActive()) + .deleted(jenisAnggaranView.get().getDeleted()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/jenisanggaran/GetListJenisAnggaranService.java b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/GetListJenisAnggaranService.java new file mode 100644 index 0000000..5ad60e1 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/GetListJenisAnggaranService.java @@ -0,0 +1,60 @@ +package com.iconplus.smartproc.service.jenisanggaran; + +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.JenisAnggaranView; +import com.iconplus.smartproc.model.request.JenisAnggaranRequest; +import com.iconplus.smartproc.model.response.GetListJenisAnggaranResponse; +import com.iconplus.smartproc.model.response.JenisAnggaranResponse; +import com.iconplus.smartproc.repository.JenisAnggaranRepository; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListJenisAnggaranService implements BaseService { + + private JenisAnggaranRepository jenisAnggaranRepository; + + public GetListJenisAnggaranService(JenisAnggaranRepository jenisAnggaranRepository) { + this.jenisAnggaranRepository = jenisAnggaranRepository; + } + + @Override + public GetListJenisAnggaranResponse execute(JenisAnggaranRequest input) { + validateRequest(input); + List jenisAnggaranResponseList = new ArrayList<>(); + var jenisAnggaranViews = jenisAnggaranRepository.getAllJenisAnggaran(input.getSearch(), input.getPageable()); + + for (JenisAnggaranView jenisAnggaranView : jenisAnggaranViews) { + JenisAnggaranResponse jenisAnggaranResponse = JenisAnggaranResponse.builder() + .id(jenisAnggaranView.getId()) + .jenisAnggaran(jenisAnggaranView.getJenisAnggaran()) + .keterangan(jenisAnggaranView.getKeterangan()) + .isActive(jenisAnggaranView.getIsActive()) + .deleted(jenisAnggaranView.getDeleted()) + .build(); + jenisAnggaranResponseList.add(jenisAnggaranResponse); + } + + return GetListJenisAnggaranResponse.builder() + .listJenisAnggaranResponse(jenisAnggaranResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(jenisAnggaranViews.getTotalPages()) + .totalRecords(jenisAnggaranViews.getTotalElements()) + .isFirstPage(jenisAnggaranViews.isFirst()) + .isLastPage(jenisAnggaranViews.isLast()) + .build()) + .build(); + } + + private void validateRequest(JenisAnggaranRequest input) { + if (StringUtils.isNotBlank(input.getSearch())) { + input.setSearch('%'+ input.getSearch().toUpperCase()+'%'); + } + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/jenisanggaran/PostCreateJenisAnggaranService.java b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/PostCreateJenisAnggaranService.java new file mode 100644 index 0000000..4350cc9 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/PostCreateJenisAnggaranService.java @@ -0,0 +1,53 @@ +package com.iconplus.smartproc.service.jenisanggaran; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.JenisAnggaran; +import com.iconplus.smartproc.model.request.JenisAnggaranRequest; +import com.iconplus.smartproc.model.response.JenisAnggaranResponse; +import com.iconplus.smartproc.repository.JenisAnggaranRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +import java.sql.Timestamp; + +@Service +@Slf4j +public class PostCreateJenisAnggaranService implements BaseService { + + private final JenisAnggaranRepository jenisAnggaranRepository; + + public PostCreateJenisAnggaranService(JenisAnggaranRepository jenisAnggaranRepository) { + this.jenisAnggaranRepository = jenisAnggaranRepository; + } + + @Override + public JenisAnggaranResponse execute(JenisAnggaranRequest input) { + + var existJenisAnggaran = jenisAnggaranRepository.findByJenisAnggaranAndDeletedFalse(input.getJenisAnggaran()); + if (existJenisAnggaran.isPresent()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10002, + Constants.ERR_TTL_10002, + String.format(Constants.ERR_MSG_10002, existJenisAnggaran.get().getId())); + } + + JenisAnggaran jenisAnggaran = JenisAnggaran.builder() + .jenisAnggaran(input.getJenisAnggaran()) + .keterangan(input.getKeterangan()) + .isActive(input.getIsActive()) + .deleted(false) + .build(); + jenisAnggaran.setCreatedTime(new Timestamp(System.currentTimeMillis())); + + var result = jenisAnggaranRepository.save(jenisAnggaran); + log.info("success insert jenis anggaran id : {}", result.getId()); + return JenisAnggaranResponse.builder() + .id(result.getId()) + .build(); + + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/jenisanggaran/PutUpdateJenisAnggaranService.java b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/PutUpdateJenisAnggaranService.java new file mode 100644 index 0000000..eb1479a --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/PutUpdateJenisAnggaranService.java @@ -0,0 +1,45 @@ +package com.iconplus.smartproc.service.jenisanggaran; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.JenisAnggaranRequest; +import com.iconplus.smartproc.model.response.JenisAnggaranResponse; +import com.iconplus.smartproc.repository.JenisAnggaranRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.BooleanUtils; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +import java.sql.Timestamp; + +@Service +@Slf4j +public class PutUpdateJenisAnggaranService implements BaseService { + + private JenisAnggaranRepository jenisAnggaranRepository; + + public PutUpdateJenisAnggaranService(JenisAnggaranRepository jenisAnggaranRepository) { + this.jenisAnggaranRepository = jenisAnggaranRepository; + } + + @Override + public JenisAnggaranResponse execute(JenisAnggaranRequest input) { + + var jenisAnggaran = jenisAnggaranRepository.findByIdAndDeletedFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, input.getId()))); + + jenisAnggaran.setJenisAnggaran(input.getJenisAnggaran()); + jenisAnggaran.setKeterangan(input.getKeterangan()); + jenisAnggaran.setDeleted(BooleanUtils.isTrue(input.getDeleted())); + jenisAnggaran.setUpdatedTime(new Timestamp(System.currentTimeMillis())); + jenisAnggaranRepository.save(jenisAnggaran); + log.info("Success edit jenis anggaran id {}", jenisAnggaran.getId()); + return JenisAnggaranResponse.builder() + .id(jenisAnggaran.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/util/Constants.java b/src/main/java/com/iconplus/smartproc/util/Constants.java new file mode 100644 index 0000000..5a72c7a --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/util/Constants.java @@ -0,0 +1,15 @@ +package com.iconplus.smartproc.util; + +public class Constants { + private Constants() { + } + + public static final String ERR_CODE_10001 = "10001"; + public static final String ERR_TTL_10001 = "Data tidak ditemukan"; + public static final String ERR_MSG_10001 = "Jenis Anggaran dengan id : %s tidak ditemukan"; + + public static final String ERR_CODE_10002 = "10002"; + public static final String ERR_TTL_10002 = "Data tersedia"; + public static final String ERR_MSG_10002 = "Jenis Anggaran dengan id : %s sudah tersedia"; + +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 2dc4474..dd5e35d 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,6 +1,6 @@ spring.datasource.url=jdbc:postgresql://localhost:5432/smartproc spring.datasource.username=postgres -spring.datasource.password=postgres +spring.datasource.password=postgre spring.jpa.show-sql=true ## Hibernate Properties From 69e7e592b009cf679a5fa3421678831b2a890a23 Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Tue, 23 May 2023 11:40:53 +0700 Subject: [PATCH 02/63] refactor base smartproc --- .../smartproc/controller/RolesController.java | 2 +- .../controller/StrategiPengadaanController.java | 2 +- .../SupplyPositioningMatrixController.java | 2 +- .../smartproc/model/entity/JenisAnggaran.java | 4 ---- .../smartproc/model/entity/JenisKontrak.java | 5 +++++ .../smartproc/model/entity/JenisPengadaan.java | 5 +++++ .../com/iconplus/smartproc/model/entity/Lokasi.java | 5 +++++ .../smartproc/model/entity/MetodePengadaan.java | 5 +++++ .../smartproc/model/entity/MetodePenyampaian.java | 5 +++++ .../com/iconplus/smartproc/model/entity/Roles.java | 8 +++++++- .../smartproc/model/entity/StrategiPengadaan.java | 12 +++++++++++- .../iconplus/smartproc/model/entity/SumberDana.java | 5 +++++ .../model/entity/SupplyPositioningMatrix.java | 7 ++++++- .../smartproc/model/entity/UnitInisiator.java | 5 +++++ .../model/projection/JenisAnggaranView.java | 2 -- .../repository/JenisAnggaranRepository.java | 1 - .../jenisanggaran/GetJenisAnggaranByIdService.java | 2 -- .../jenisanggaran/GetListJenisAnggaranService.java | 1 - .../PostCreateJenisAnggaranService.java | 1 - 19 files changed, 62 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/iconplus/smartproc/controller/RolesController.java b/src/main/java/com/iconplus/smartproc/controller/RolesController.java index 364f5e7..30ea420 100644 --- a/src/main/java/com/iconplus/smartproc/controller/RolesController.java +++ b/src/main/java/com/iconplus/smartproc/controller/RolesController.java @@ -46,7 +46,7 @@ public class RolesController { roles.setRole(rolesDetails.getRole()); roles.setKeterangan(rolesDetails.getKeterangan()); - roles.setIsactive(rolesDetails.getIsactive()); + roles.setIsActive(rolesDetails.getIsActive()); Roles updatedRoles = rolesRepository.save(roles); return ResponseEntity.ok(updatedRoles); diff --git a/src/main/java/com/iconplus/smartproc/controller/StrategiPengadaanController.java b/src/main/java/com/iconplus/smartproc/controller/StrategiPengadaanController.java index d76fbf9..6321505 100644 --- a/src/main/java/com/iconplus/smartproc/controller/StrategiPengadaanController.java +++ b/src/main/java/com/iconplus/smartproc/controller/StrategiPengadaanController.java @@ -44,7 +44,7 @@ public class StrategiPengadaanController { StrategiPengadaan strategipengadaan = strategipengadaanRepository.findById(id) .orElseThrow(() -> new ResourceNotFoundException("Strategipengadaan not exist with id :" + id)); - strategipengadaan.setStrategipengadaan(strategiPengadaanDetails.getStrategipengadaan()); + strategipengadaan.setStrategiPengadaan(strategiPengadaanDetails.getStrategiPengadaan()); strategipengadaan.setKeterangan(strategiPengadaanDetails.getKeterangan()); StrategiPengadaan updatedStrategiPengadaan = strategipengadaanRepository.save(strategipengadaan); diff --git a/src/main/java/com/iconplus/smartproc/controller/SupplyPositioningMatrixController.java b/src/main/java/com/iconplus/smartproc/controller/SupplyPositioningMatrixController.java index 29f66e6..36b00ce 100644 --- a/src/main/java/com/iconplus/smartproc/controller/SupplyPositioningMatrixController.java +++ b/src/main/java/com/iconplus/smartproc/controller/SupplyPositioningMatrixController.java @@ -53,7 +53,7 @@ public class SupplyPositioningMatrixController { SupplyPositioningMatrix supplypositioningmatrix = supplypositioningmatrixRepository.findById(id) .orElseThrow(() -> new ResourceNotFoundException("Supplypositioningmatrix not exist with id :" + id)); - supplypositioningmatrix.setSupplypositioningmatrix(supplyPositioningMatrixDetails.getSupplypositioningmatrix()); + supplypositioningmatrix.setSupplyPositioningMatrix(supplyPositioningMatrixDetails.getSupplyPositioningMatrix()); supplypositioningmatrix.setKeterangan(supplyPositioningMatrixDetails.getKeterangan()); SupplyPositioningMatrix updatedSupplyPositioningMatrix = supplypositioningmatrixRepository.save(supplypositioningmatrix); diff --git a/src/main/java/com/iconplus/smartproc/model/entity/JenisAnggaran.java b/src/main/java/com/iconplus/smartproc/model/entity/JenisAnggaran.java index 62c2a98..7e28219 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/JenisAnggaran.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/JenisAnggaran.java @@ -27,10 +27,6 @@ public class JenisAnggaran extends BaseEntity { @Column(name = "keterangan") private String keterangan; - @Column(name = "is_active") - @Type(type = "org.hibernate.type.NumericBooleanType") - private Boolean isActive; - @Column(name = "deleted") @Type(type = "org.hibernate.type.NumericBooleanType") private Boolean deleted; diff --git a/src/main/java/com/iconplus/smartproc/model/entity/JenisKontrak.java b/src/main/java/com/iconplus/smartproc/model/entity/JenisKontrak.java index ecc1276..20b5e37 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/JenisKontrak.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/JenisKontrak.java @@ -3,6 +3,7 @@ package com.iconplus.smartproc.model.entity; import com.iconplus.smartproc.helper.base.BaseEntity; import lombok.Builder; import lombok.Data; +import org.hibernate.annotations.Type; import javax.persistence.*; @@ -22,4 +23,8 @@ public class JenisKontrak extends BaseEntity { @Column(name = "keterangan") private String keterangan; + @Column(name = "deleted") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean deleted; + } diff --git a/src/main/java/com/iconplus/smartproc/model/entity/JenisPengadaan.java b/src/main/java/com/iconplus/smartproc/model/entity/JenisPengadaan.java index 3b99ec2..074a799 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/JenisPengadaan.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/JenisPengadaan.java @@ -3,6 +3,7 @@ package com.iconplus.smartproc.model.entity; import com.iconplus.smartproc.helper.base.BaseEntity; import lombok.Builder; import lombok.Data; +import org.hibernate.annotations.Type; import javax.persistence.*; @@ -22,4 +23,8 @@ public class JenisPengadaan extends BaseEntity { @Column(name = "keterangan") private String keterangan; + @Column(name = "deleted") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean deleted; + } diff --git a/src/main/java/com/iconplus/smartproc/model/entity/Lokasi.java b/src/main/java/com/iconplus/smartproc/model/entity/Lokasi.java index f6d2dc9..707dde5 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/Lokasi.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/Lokasi.java @@ -3,6 +3,7 @@ package com.iconplus.smartproc.model.entity; import com.iconplus.smartproc.helper.base.BaseEntity; import lombok.Builder; import lombok.Data; +import org.hibernate.annotations.Type; import javax.persistence.*; @@ -22,4 +23,8 @@ public class Lokasi extends BaseEntity { @Column(name = "keterangan") private String keterangan; + @Column(name = "deleted") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean deleted; + } diff --git a/src/main/java/com/iconplus/smartproc/model/entity/MetodePengadaan.java b/src/main/java/com/iconplus/smartproc/model/entity/MetodePengadaan.java index 2d2d62c..0f0b34f 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/MetodePengadaan.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/MetodePengadaan.java @@ -3,6 +3,7 @@ package com.iconplus.smartproc.model.entity; import com.iconplus.smartproc.helper.base.BaseEntity; import lombok.Builder; import lombok.Data; +import org.hibernate.annotations.Type; import javax.persistence.*; @@ -22,4 +23,8 @@ public class MetodePengadaan extends BaseEntity { @Column(name = "keterangan") private String keterangan; + @Column(name = "deleted") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean deleted; + } diff --git a/src/main/java/com/iconplus/smartproc/model/entity/MetodePenyampaian.java b/src/main/java/com/iconplus/smartproc/model/entity/MetodePenyampaian.java index ad66214..900a8e1 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/MetodePenyampaian.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/MetodePenyampaian.java @@ -4,6 +4,7 @@ package com.iconplus.smartproc.model.entity; import com.iconplus.smartproc.helper.base.BaseEntity; import lombok.Builder; import lombok.Data; +import org.hibernate.annotations.Type; import javax.persistence.*; @@ -23,4 +24,8 @@ public class MetodePenyampaian extends BaseEntity { @Column(name = "keterangan") private String keterangan; + @Column(name = "deleted") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean deleted; + } diff --git a/src/main/java/com/iconplus/smartproc/model/entity/Roles.java b/src/main/java/com/iconplus/smartproc/model/entity/Roles.java index 1f42682..5be5838 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/Roles.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/Roles.java @@ -3,6 +3,7 @@ package com.iconplus.smartproc.model.entity; import com.iconplus.smartproc.helper.base.BaseEntity; import lombok.Builder; import lombok.Data; +import org.hibernate.annotations.Type; import javax.persistence.*; @@ -23,6 +24,11 @@ public class Roles extends BaseEntity { private String keterangan; @Column(name = "is_active") - private Boolean isactive; + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isActive; + + @Column(name = "deleted") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean deleted; } diff --git a/src/main/java/com/iconplus/smartproc/model/entity/StrategiPengadaan.java b/src/main/java/com/iconplus/smartproc/model/entity/StrategiPengadaan.java index e604b32..a890f8e 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/StrategiPengadaan.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/StrategiPengadaan.java @@ -3,6 +3,7 @@ package com.iconplus.smartproc.model.entity; import com.iconplus.smartproc.helper.base.BaseEntity; import lombok.Builder; import lombok.Data; +import org.hibernate.annotations.Type; import javax.persistence.*; @@ -13,8 +14,17 @@ import javax.persistence.*; public class StrategiPengadaan extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") private long id; - private String strategipengadaan; + + @Column(name = "strategi_pengadaan") + private String strategiPengadaan; + + @Column(name = "keterangan") private String keterangan; + @Column(name = "deleted") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean deleted; + } diff --git a/src/main/java/com/iconplus/smartproc/model/entity/SumberDana.java b/src/main/java/com/iconplus/smartproc/model/entity/SumberDana.java index 1b95dba..7922d18 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/SumberDana.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/SumberDana.java @@ -3,6 +3,7 @@ package com.iconplus.smartproc.model.entity; import com.iconplus.smartproc.helper.base.BaseEntity; import lombok.Builder; import lombok.Data; +import org.hibernate.annotations.Type; import javax.persistence.*; @@ -22,4 +23,8 @@ public class SumberDana extends BaseEntity { @Column(name = "keterangan") private String keterangan; + @Column(name = "deleted") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean deleted; + } diff --git a/src/main/java/com/iconplus/smartproc/model/entity/SupplyPositioningMatrix.java b/src/main/java/com/iconplus/smartproc/model/entity/SupplyPositioningMatrix.java index f12b371..39b4881 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/SupplyPositioningMatrix.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/SupplyPositioningMatrix.java @@ -3,6 +3,7 @@ package com.iconplus.smartproc.model.entity; import com.iconplus.smartproc.helper.base.BaseEntity; import lombok.Builder; import lombok.Data; +import org.hibernate.annotations.Type; import javax.persistence.*; @@ -17,9 +18,13 @@ public class SupplyPositioningMatrix extends BaseEntity { private long id; @Column(name = "supply_positioning_matrix") - private String supplypositioningmatrix; + private String supplyPositioningMatrix; @Column(name = "keterangan") private String keterangan; + @Column(name = "deleted") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean deleted; + } diff --git a/src/main/java/com/iconplus/smartproc/model/entity/UnitInisiator.java b/src/main/java/com/iconplus/smartproc/model/entity/UnitInisiator.java index f5f282e..c33558f 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/UnitInisiator.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/UnitInisiator.java @@ -3,6 +3,7 @@ package com.iconplus.smartproc.model.entity; import com.iconplus.smartproc.helper.base.BaseEntity; import lombok.Builder; import lombok.Data; +import org.hibernate.annotations.Type; import javax.persistence.*; @@ -22,4 +23,8 @@ public class UnitInisiator extends BaseEntity { @Column(name = "keterangan") private String keterangan; + @Column(name = "deleted") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean deleted; + } diff --git a/src/main/java/com/iconplus/smartproc/model/projection/JenisAnggaranView.java b/src/main/java/com/iconplus/smartproc/model/projection/JenisAnggaranView.java index b243e86..3f77ef0 100644 --- a/src/main/java/com/iconplus/smartproc/model/projection/JenisAnggaranView.java +++ b/src/main/java/com/iconplus/smartproc/model/projection/JenisAnggaranView.java @@ -5,12 +5,10 @@ public interface JenisAnggaranView { Long getId(); String getJenisAnggaran(); String getKeterangan(); - Boolean getIsActive(); Boolean getDeleted(); void setId(Long id); void setJenisAnggaran(String jenisAnggaran); void setKeterangan(String keterangan); - void setIsActive(Boolean isActive); void setDeleted(Boolean deleted); } diff --git a/src/main/java/com/iconplus/smartproc/repository/JenisAnggaranRepository.java b/src/main/java/com/iconplus/smartproc/repository/JenisAnggaranRepository.java index 373b3b3..8f7d4e1 100644 --- a/src/main/java/com/iconplus/smartproc/repository/JenisAnggaranRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/JenisAnggaranRepository.java @@ -16,7 +16,6 @@ public interface JenisAnggaranRepository extends JpaRepository Date: Tue, 23 May 2023 12:02:37 +0700 Subject: [PATCH 03/63] rename object --- .../smartproc/model/response/GetListJenisAnggaranResponse.java | 2 +- .../service/jenisanggaran/GetListJenisAnggaranService.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListJenisAnggaranResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListJenisAnggaranResponse.java index 404c6d9..7d2cf14 100644 --- a/src/main/java/com/iconplus/smartproc/model/response/GetListJenisAnggaranResponse.java +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListJenisAnggaranResponse.java @@ -15,6 +15,6 @@ import java.util.List; @AllArgsConstructor public class GetListJenisAnggaranResponse extends BaseResponse { - private List listJenisAnggaranResponse; + private List data; private Pagination pagination; } diff --git a/src/main/java/com/iconplus/smartproc/service/jenisanggaran/GetListJenisAnggaranService.java b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/GetListJenisAnggaranService.java index 70924d6..e20f1d7 100644 --- a/src/main/java/com/iconplus/smartproc/service/jenisanggaran/GetListJenisAnggaranService.java +++ b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/GetListJenisAnggaranService.java @@ -39,7 +39,7 @@ public class GetListJenisAnggaranService implements BaseService Date: Tue, 23 May 2023 19:42:51 +0700 Subject: [PATCH 04/63] add spring security and token management --- pom.xml | 67 +++++++++-- .../CustomUserDetailsService.java | 33 ++++++ .../JwtAuthenticationAccessDenied.java | 39 +++++++ .../JwtAuthenticationEntryPoint.java | 54 +++++++++ .../configuration/JwtRequestFilter.java | 79 +++++++++++++ .../smartproc/configuration/JwtTokenUtil.java | 91 +++++++++++++++ .../configuration/KeyConfiguration.java | 30 +++++ .../configuration/WebSecurityConfig.java | 57 +++++++++ .../smartproc/controller/UsersController.java | 2 +- .../smartproc/exception/ErrorDetails.java | 28 ----- .../smartproc/exception/ErrorHelper.java | 3 +- .../smartproc/helper/service/TokenUtils.java | 53 +++++++++ .../iconplus/smartproc/model/entity/Menu.java | 52 +++++++++ .../smartproc/model/entity/Permission.java | 41 +++++++ .../model/entity/TokenManagement.java | 51 ++++++++ .../smartproc/model/entity/Users.java | 4 +- .../model/projection/TokenManagementView.java | 16 +++ .../model/projection/UserRoleView.java | 19 +++ .../smartproc/model/request/LoginRequest.java | 17 +++ .../model/request/PostAccessTokenRequest.java | 16 +++ .../model/response/LoginResponse.java | 26 +++++ .../response/PostAccessTokenResponse.java | 16 +++ .../smartproc/model/token/TokenContent.java | 16 +++ .../smartproc/repository/RolesRepository.java | 16 +++ .../repository/TokenManagementRepository.java | 19 +++ .../smartproc/repository/UsersRepository.java | 4 + .../service/authentication/LoginService.java | 47 ++++++++ .../PostCheckAccessTokenService.java | 55 +++++++++ .../iconplus/smartproc/util/CommonUtil.java | 25 ++++ .../iconplus/smartproc/util/Constants.java | 17 +++ .../com/iconplus/smartproc/util/RSAUtil.java | 109 ++++++++++++++++++ src/main/resources/application-local.yml | 22 ++++ src/main/resources/application.properties | 12 -- src/main/resources/application.yml | 7 ++ src/main/resources/bootstrap.properties | 5 + 35 files changed, 1095 insertions(+), 53 deletions(-) create mode 100644 src/main/java/com/iconplus/smartproc/configuration/CustomUserDetailsService.java create mode 100644 src/main/java/com/iconplus/smartproc/configuration/JwtAuthenticationAccessDenied.java create mode 100644 src/main/java/com/iconplus/smartproc/configuration/JwtAuthenticationEntryPoint.java create mode 100644 src/main/java/com/iconplus/smartproc/configuration/JwtRequestFilter.java create mode 100644 src/main/java/com/iconplus/smartproc/configuration/JwtTokenUtil.java create mode 100644 src/main/java/com/iconplus/smartproc/configuration/KeyConfiguration.java create mode 100644 src/main/java/com/iconplus/smartproc/configuration/WebSecurityConfig.java delete mode 100644 src/main/java/com/iconplus/smartproc/exception/ErrorDetails.java create mode 100644 src/main/java/com/iconplus/smartproc/helper/service/TokenUtils.java create mode 100644 src/main/java/com/iconplus/smartproc/model/entity/Menu.java create mode 100644 src/main/java/com/iconplus/smartproc/model/entity/Permission.java create mode 100644 src/main/java/com/iconplus/smartproc/model/entity/TokenManagement.java create mode 100644 src/main/java/com/iconplus/smartproc/model/projection/TokenManagementView.java create mode 100644 src/main/java/com/iconplus/smartproc/model/projection/UserRoleView.java create mode 100644 src/main/java/com/iconplus/smartproc/model/request/LoginRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/model/request/PostAccessTokenRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/LoginResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/PostAccessTokenResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/model/token/TokenContent.java create mode 100644 src/main/java/com/iconplus/smartproc/repository/TokenManagementRepository.java create mode 100644 src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/authentication/PostCheckAccessTokenService.java create mode 100644 src/main/java/com/iconplus/smartproc/util/CommonUtil.java create mode 100644 src/main/java/com/iconplus/smartproc/util/RSAUtil.java create mode 100644 src/main/resources/application-local.yml delete mode 100644 src/main/resources/application.properties create mode 100644 src/main/resources/application.yml create mode 100644 src/main/resources/bootstrap.properties diff --git a/pom.xml b/pom.xml index 33b56a1..0536c6e 100644 --- a/pom.xml +++ b/pom.xml @@ -17,6 +17,59 @@ 11 + + + org.springframework.boot + spring-boot-starter-security + 2.5.4 + + + org.springframework.security + spring-security-web + + + org.springframework.security + spring-security-config + + + + + org.springframework.security.oauth.boot + spring-security-oauth2-autoconfigure + 2.5.2 + + + org.springframework.security + spring-security-web + + + org.springframework.security + spring-security-config + + + + + org.springframework.security + spring-security-web + 5.3.9.RELEASE + + + org.springframework.security + spring-security-config + 5.3.9.RELEASE + + + + io.jsonwebtoken + jjwt + 0.9.1 + + + com.nimbusds + nimbus-jose-jwt + 8.19 + + org.springframework.boot spring-boot-starter-data-jpa @@ -34,20 +87,16 @@ brave 5.16.0 - + + org.apache.velocity + velocity-engine-core + 2.3 + org.apache.commons commons-lang3 3.12.0 - - - org.apache.velocity - velocity - 1.7 - - - org.springframework.boot spring-boot-devtools diff --git a/src/main/java/com/iconplus/smartproc/configuration/CustomUserDetailsService.java b/src/main/java/com/iconplus/smartproc/configuration/CustomUserDetailsService.java new file mode 100644 index 0000000..3d6bc23 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/configuration/CustomUserDetailsService.java @@ -0,0 +1,33 @@ +package com.iconplus.smartproc.configuration; + +import com.iconplus.smartproc.model.projection.UserRoleView; +import com.iconplus.smartproc.repository.RolesRepository; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +@Service +public class CustomUserDetailsService implements UserDetailsService { + + private final RolesRepository rolesRepository; + + public CustomUserDetailsService(RolesRepository rolesRepository) { + this.rolesRepository = rolesRepository; + } + + + @Override + public UserDetails loadUserByUsername(String username) { + List authorities = null; + Optional userRole = rolesRepository.getUserRoleByUserId(username); + if (userRole.isPresent()) { + authorities=List.of(new SimpleGrantedAuthority(userRole.get().getRole())); + } + + return new org.springframework.security.core.userdetails.User(username, username, authorities); + } +} diff --git a/src/main/java/com/iconplus/smartproc/configuration/JwtAuthenticationAccessDenied.java b/src/main/java/com/iconplus/smartproc/configuration/JwtAuthenticationAccessDenied.java new file mode 100644 index 0000000..a7d80d5 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/configuration/JwtAuthenticationAccessDenied.java @@ -0,0 +1,39 @@ +package com.iconplus.smartproc.configuration; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.iconplus.smartproc.exception.ErrorResponse; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.log4j.Log4j2; +import org.springframework.http.MediaType; +import org.springframework.security.access.AccessDeniedException; +import org.springframework.security.web.access.AccessDeniedHandler; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +@Component +@Log4j2 +public class JwtAuthenticationAccessDenied implements AccessDeniedHandler { + + private static final String DEFAULT_CODE = "30000"; + private static final String DEFAULT_MESSAGE = "Access denied"; + + @Override + public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, AccessDeniedException e) throws IOException { + + log.error("Access denied, {}", e.getMessage()); + + ErrorResponse errorResponse = new ErrorResponse(); + errorResponse.setCode(DEFAULT_CODE); + errorResponse.setTitle(Constants.TITLE_INVALID_NEXT_STEP); + errorResponse.setMessage(DEFAULT_MESSAGE); + + httpServletResponse.setStatus(HttpServletResponse.SC_FORBIDDEN); + httpServletResponse.setContentType(MediaType.APPLICATION_JSON_VALUE); + + httpServletResponse.getOutputStream() + .println(new ObjectMapper().writeValueAsString(errorResponse)); + } +} diff --git a/src/main/java/com/iconplus/smartproc/configuration/JwtAuthenticationEntryPoint.java b/src/main/java/com/iconplus/smartproc/configuration/JwtAuthenticationEntryPoint.java new file mode 100644 index 0000000..e6fa58d --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/configuration/JwtAuthenticationEntryPoint.java @@ -0,0 +1,54 @@ +package com.iconplus.smartproc.configuration; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.iconplus.smartproc.exception.ErrorResponse; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.MediaType; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.web.AuthenticationEntryPoint; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + + +@Component +public class JwtAuthenticationEntryPoint implements AuthenticationEntryPoint { + + @Override + public void commence(HttpServletRequest request, HttpServletResponse response, + AuthenticationException authException) throws IOException { + + ErrorResponse errorResponse = new ErrorResponse(); + + response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); + response.setContentType(MediaType.APPLICATION_JSON_VALUE); + + var exception = (Exception) request.getAttribute("exception"); + + String message; + + if (exception != null) { + + if (exception.getCause() != null) { + message = exception.getCause().toString() + " " + exception.getMessage(); + } else { + message = exception.getMessage(); + } + + errorResponse.setCode(Constants.ERR_CODE_40051); + errorResponse.setTitle(Constants.TITLE_INVALID_NEXT_STEP); + errorResponse.setMessage(message); + response.getOutputStream() + .println(new ObjectMapper().writeValueAsString(errorResponse)); + } else { + errorResponse.setCode(Constants.ERR_CODE_80007); + errorResponse.setTitle(Constants.TITLE_INVALID_NEXT_STEP); + errorResponse.setMessage("Invalid Access Token"); + response.getOutputStream() + .println(new ObjectMapper().writeValueAsString(errorResponse)); + } + } + +} diff --git a/src/main/java/com/iconplus/smartproc/configuration/JwtRequestFilter.java b/src/main/java/com/iconplus/smartproc/configuration/JwtRequestFilter.java new file mode 100644 index 0000000..b04e38b --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/configuration/JwtRequestFilter.java @@ -0,0 +1,79 @@ +package com.iconplus.smartproc.configuration; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.model.request.PostAccessTokenRequest; +import com.iconplus.smartproc.service.authentication.PostCheckAccessTokenService; +import io.jsonwebtoken.ExpiredJwtException; +import org.springframework.http.HttpStatus; +import org.springframework.security.authentication.BadCredentialsException; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; +import org.springframework.web.filter.OncePerRequestFilter; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +@Component +public class JwtRequestFilter extends OncePerRequestFilter { + + private final JwtTokenUtil jwtTokenUtil; + private final PostCheckAccessTokenService postCheckAccessTokenService; + + public JwtRequestFilter(JwtTokenUtil jwtTokenUtil, + PostCheckAccessTokenService postCheckAccessTokenService) { + this.jwtTokenUtil = jwtTokenUtil; + this.postCheckAccessTokenService = postCheckAccessTokenService; + } + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) + throws ServletException, IOException { + try { + String jwtToken = extractJwtFromRequest(request); + if (StringUtils.hasText(jwtToken) && jwtTokenUtil.validateTokenOnly(jwtToken)) { + isValidToken(request, jwtToken); + UserDetails userDetails = new org.springframework.security.core.userdetails.User(jwtTokenUtil.getUsernameFromToken(jwtToken), "", + jwtTokenUtil.getRolesFromToken(jwtToken)); + + UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken = new UsernamePasswordAuthenticationToken( + userDetails, null, userDetails.getAuthorities()); + SecurityContextHolder.getContext().setAuthentication(usernamePasswordAuthenticationToken); + } + } catch(ExpiredJwtException | BadCredentialsException ex) + { + request.setAttribute("exception", ex); + } + chain.doFilter(request, response); + } + + private void isValidToken(HttpServletRequest request, String jwtToken) { + String requestUrl = request.getRequestURI(); + String refreshTokenUrl = "/authentication-service/authentication/v1/refresh-token"; + if (!refreshTokenUrl.equals(requestUrl)) { + var isValid = isValidAuthenticateToken(jwtToken); + if (!isValid) { + throw new BusinessException(HttpStatus.UNAUTHORIZED, "Invalid Access Token"); + } + } + } + + private boolean isValidAuthenticateToken(String jwtToken) { + return postCheckAccessTokenService.execute(PostAccessTokenRequest.builder() + .accessToken(jwtToken) + .build()).getIsValid(); + } + + private String extractJwtFromRequest(HttpServletRequest request) { + String bearerToken = request.getHeader("Authorization"); + if (StringUtils.hasText(bearerToken) && bearerToken.startsWith("Bearer ")) { + return bearerToken.substring(7); + } + return null; + } +} \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/configuration/JwtTokenUtil.java b/src/main/java/com/iconplus/smartproc/configuration/JwtTokenUtil.java new file mode 100644 index 0000000..ebab745 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/configuration/JwtTokenUtil.java @@ -0,0 +1,91 @@ +package com.iconplus.smartproc.configuration; + +import com.iconplus.smartproc.model.token.TokenContent; +import io.jsonwebtoken.*; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.authentication.BadCredentialsException; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.stereotype.Component; + +import java.io.Serializable; +import java.security.KeyPair; +import java.util.*; +import java.util.function.Function; + +@Component +public class JwtTokenUtil implements Serializable { + private static final long serialVersionUID = -2550185165626007488L; + + @Autowired + private KeyPair keyPair; + + //retrieve expiration date from jwt token + public Date getExpirationDateFromToken(String token) { + return getClaimFromToken(token, Claims::getExpiration); + } + public T getClaimFromToken(String token, Function claimsResolver) { + final Claims claims = getAllClaimsFromToken(token); + return claimsResolver.apply(claims); + } + //for retrieveing any information from token we will need the secret key + public Claims getAllClaimsFromToken(String token) { + return Jwts.parser().setSigningKey(keyPair.getPublic()).parseClaimsJws(token).getBody(); + } + + private Boolean isTokenExpired(String token) { + final Date expiration = getExpirationDateFromToken(token); + return expiration.before(new Date()); + } + + public String generateToken(String username, TokenContent tokenContent, Integer expirationInMs, String channel, String scopeType) { + Map claims = new HashMap<>(); + + claims.put("authorities", tokenContent.getAccessMenu()); + claims.put("fullname", tokenContent.getFullname()); + claims.put("username", tokenContent.getUsername()); + claims.put("user_id", tokenContent.getUserId()); + claims.put("role", tokenContent.getRole()); + + return doGenerateToken(claims, username, expirationInMs); + } + + public String doGenerateToken(Map claims, String subject, Integer expirationInMs) { + return Jwts.builder().setClaims(claims).setSubject(subject).setIssuedAt(new Date(System.currentTimeMillis())) + .setExpiration(new Date(System.currentTimeMillis() + expirationInMs)) + .signWith(SignatureAlgorithm.RS256, keyPair.getPrivate()).compact(); + } + + public Boolean validateToken(String token, UserDetails userDetails) { + final String username = getUsernameFromToken(token); + return (username.equals(userDetails.getUsername()) && !isTokenExpired(token)); + } + + public boolean validateTokenOnly(String authToken) { + try { + Jwts.parser().setSigningKey(keyPair.getPublic()).parseClaimsJws(authToken); + return true; + } catch (SignatureException | MalformedJwtException | UnsupportedJwtException | IllegalArgumentException ex) { + throw new BadCredentialsException("INVALID_CREDENTIALS", ex); + } catch (ExpiredJwtException ex) { + throw ex; + } + } + + public String getUsernameFromToken(String token) { + Claims claims = Jwts.parser().setSigningKey(keyPair.getPublic()).parseClaimsJws(token).getBody(); + return claims.getSubject(); + + } + + @SuppressWarnings("squid:S4834") + public List getRolesFromToken(String token) { + Claims claims = Jwts.parser().setSigningKey(keyPair.getPublic()).parseClaimsJws(token).getBody(); + List authorityList = new ArrayList<>(); + ArrayList authorities = claims.get("authorities", ArrayList.class); + authorities.forEach(c-> authorityList.add(new SimpleGrantedAuthority(c))); + return authorityList; + + } +} \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/configuration/KeyConfiguration.java b/src/main/java/com/iconplus/smartproc/configuration/KeyConfiguration.java new file mode 100644 index 0000000..6077f9c --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/configuration/KeyConfiguration.java @@ -0,0 +1,30 @@ +package com.iconplus.smartproc.configuration; + +import com.iconplus.smartproc.util.RSAUtil; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.security.KeyPair; +import java.security.PrivateKey; +import java.security.PublicKey; + +@Configuration +public class KeyConfiguration { + + @Value("${jwt.private-key}") + private String privateKey; + + @Value("${jwt.public-key}") + private String publicKey; + + @Bean + public KeyPair keypairBean() { + + PublicKey pubKey = RSAUtil.getPublicKey(publicKey); + PrivateKey privKey = RSAUtil.getPrivateKey(privateKey); + + return new KeyPair(pubKey, privKey); + } + +} diff --git a/src/main/java/com/iconplus/smartproc/configuration/WebSecurityConfig.java b/src/main/java/com/iconplus/smartproc/configuration/WebSecurityConfig.java new file mode 100644 index 0000000..9c6274a --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/configuration/WebSecurityConfig.java @@ -0,0 +1,57 @@ +package com.iconplus.smartproc.configuration; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.builders.WebSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; + + +@Configuration +@EnableWebSecurity +@EnableGlobalMethodSecurity(prePostEnabled = true) +public class WebSecurityConfig extends WebSecurityConfigurerAdapter { + + @Autowired + private JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint; + + @Autowired + private JwtAuthenticationAccessDenied jwtAuthenticationAccessDenied; + + @Autowired + private JwtRequestFilter jwtRequestFilter; + + @Override + protected void configure(HttpSecurity httpSecurity) throws Exception { + httpSecurity + .sessionManagement() + .sessionCreationPolicy(SessionCreationPolicy.STATELESS) + .sessionFixation().none().and() + .csrf().disable(); + httpSecurity.authorizeRequests() + .antMatchers("/api*/**").permitAll() + .antMatchers("/actuator/health").permitAll() + .antMatchers("/swagger*/**").permitAll() + .antMatchers("/v2*/**").permitAll() + .antMatchers("/token/jwks.json").permitAll() + .anyRequest().authenticated().and() + .exceptionHandling().authenticationEntryPoint(jwtAuthenticationEntryPoint) + .accessDeniedHandler(jwtAuthenticationAccessDenied); + httpSecurity.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class); + + } + + @Override + public void configure(WebSecurity web) throws Exception { + web.ignoring().antMatchers("/v2/api-docs", + "/configuration/ui", + "/swagger-resources/**", + "/configuration/security", + "/swagger-ui.html", + "/webjars/**"); + } +} \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/controller/UsersController.java b/src/main/java/com/iconplus/smartproc/controller/UsersController.java index 9a87b64..73758c8 100644 --- a/src/main/java/com/iconplus/smartproc/controller/UsersController.java +++ b/src/main/java/com/iconplus/smartproc/controller/UsersController.java @@ -45,7 +45,7 @@ public class UsersController { .orElseThrow(() -> new ResourceNotFoundException("Users not exist with id :" + id)); users.setUsername(usersDetails.getUsername()); - users.setNama(usersDetails.getNama()); + users.setFullname(usersDetails.getFullname()); users.setEmail(usersDetails.getEmail()); users.setPassword(usersDetails.getPassword()); // users.setInstansi(usersDetails.getInstansi()); diff --git a/src/main/java/com/iconplus/smartproc/exception/ErrorDetails.java b/src/main/java/com/iconplus/smartproc/exception/ErrorDetails.java deleted file mode 100644 index a4ac27c..0000000 --- a/src/main/java/com/iconplus/smartproc/exception/ErrorDetails.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.iconplus.smartproc.exception; - -import java.util.Date; - -public class ErrorDetails { - private Date timestamp; - private String message; - private String details; - - public ErrorDetails(Date timestamp, String message, String details) { - super(); - this.timestamp = timestamp; - this.message = message; - this.details = details; - } - - public Date getTimestamp() { - return timestamp; - } - - public String getMessage() { - return message; - } - - public String getDetails() { - return details; - } -} diff --git a/src/main/java/com/iconplus/smartproc/exception/ErrorHelper.java b/src/main/java/com/iconplus/smartproc/exception/ErrorHelper.java index afdc490..012e13e 100644 --- a/src/main/java/com/iconplus/smartproc/exception/ErrorHelper.java +++ b/src/main/java/com/iconplus/smartproc/exception/ErrorHelper.java @@ -5,6 +5,7 @@ import org.apache.velocity.Template; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; import org.apache.velocity.app.VelocityEngine; +import org.apache.velocity.context.Context; import org.apache.velocity.runtime.resource.loader.StringResourceLoader; import org.apache.velocity.runtime.resource.util.StringResourceRepository; import org.springframework.context.annotation.Configuration; @@ -88,7 +89,7 @@ public class ErrorHelper { .getApplicationAttribute(StringResourceLoader.REPOSITORY_NAME_DEFAULT); resourceRepository.putStringResource(RAW_TEMPLATE, rawNotificationTemplate); - return new VelocityContext(parameters); + return new VelocityContext((Context) parameters); } private void addVelocityProperties() { diff --git a/src/main/java/com/iconplus/smartproc/helper/service/TokenUtils.java b/src/main/java/com/iconplus/smartproc/helper/service/TokenUtils.java new file mode 100644 index 0000000..4256cb4 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/service/TokenUtils.java @@ -0,0 +1,53 @@ +package com.iconplus.smartproc.helper.service; + +import com.nimbusds.jose.JWSObject; +import com.nimbusds.jose.Payload; +import lombok.extern.log4j.Log4j2; +import net.minidev.json.JSONObject; +import org.apache.commons.lang3.StringUtils; + +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +@Log4j2 +public class TokenUtils { + + private TokenUtils() { + + } + + public static Map decodeToken(String jwtToken) { + Map body = new HashMap<>(); + + try { + if (jwtToken != null) { + jwtToken = jwtToken.replace("Bearer", ""); + jwtToken = jwtToken.trim(); + } + if (StringUtils.isBlank(jwtToken)) { + return body; + } + JWSObject token = JWSObject.parse(jwtToken); + + Payload tokenPayload = token.getPayload(); + JSONObject tokenBody = tokenPayload.toJSONObject(); + + tokenBody.forEach((key, value) -> { + if (Objects.isNull(value)) { + value = ""; + } + + body.put(key, value.toString()); + }); + } catch (Exception e) { + log.error("Failed to parse JWT Token. Error: {}", e.getMessage()); + } + + return body; + } + + public static Object getValueByParam(String param, String token) { + return decodeToken(token).get(param); + } +} \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/model/entity/Menu.java b/src/main/java/com/iconplus/smartproc/model/entity/Menu.java new file mode 100644 index 0000000..d37879f --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/Menu.java @@ -0,0 +1,52 @@ +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.GeneratorType; +import org.hibernate.annotations.Type; + +import javax.persistence.*; + + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "permission") +public class Menu extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "subMenu") + private String subMenu; + + @Column(name = "menu") + private String menu; + +// @Column(name = "can_view") +// @Type(type = "org.hibernate.type.NumericBooleanType") +// private Boolean canView; +// +// @Column(name = "can_read") +// @Type(type = "org.hibernate.type.NumericBooleanType") +// private Boolean canRead; +// +// @Column(name = "can_create") +// @Type(type = "org.hibernate.type.NumericBooleanType") +// private Boolean canCreate; +// +// @Column(name = "can_delete") +// @Type(type = "org.hibernate.type.NumericBooleanType") +// private Boolean canDelete; + + @Column(name = "deleted") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean deleted; +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/Permission.java b/src/main/java/com/iconplus/smartproc/model/entity/Permission.java new file mode 100644 index 0000000..9d54f1a --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/Permission.java @@ -0,0 +1,41 @@ +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.GenericGenerator; +import org.hibernate.annotations.Type; + +import javax.persistence.Column; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Table(name = "permission") +public class Permission extends BaseEntity { + + @Id + @GeneratedValue(generator = "UUID") + @GenericGenerator( + name = "UUID", + strategy = "org.hibernate.id.UUIDGenerator" + ) + @Column(name = "id") + private String id; + + @Column(name = "role_id") + private Long roleId; + + @Column(name = "role_id") + private Long menuId; + + @Column(name = "deleted") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean deleted; +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/TokenManagement.java b/src/main/java/com/iconplus/smartproc/model/entity/TokenManagement.java new file mode 100644 index 0000000..10c7b65 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/TokenManagement.java @@ -0,0 +1,51 @@ +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.GenericGenerator; +import org.hibernate.annotations.Type; + +import javax.persistence.*; +import java.sql.Timestamp; + +@Data +@Builder +@Entity +@AllArgsConstructor +@NoArgsConstructor +@Table(name = "token_management") +public class TokenManagement extends BaseEntity { + + @Id + @GeneratedValue(generator = "UUID") + @GenericGenerator( + name = "UUID", + strategy = "org.hibernate.id.UUIDGenerator" + ) + @Column(name = "id") + private String id; + + @Column(name = "user_id") + private String userId; + + @Lob + @Column(name = "access_token") + private String accessToken; + + @Lob + @Column(name = "refresh_token") + private String refreshToken; + + @Column(name = "issued_time") + private Timestamp issuedTime; + + @Column(name = "expired_time") + private Timestamp expiredTime; + + @Column(name = "deleted") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean deleted; +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/Users.java b/src/main/java/com/iconplus/smartproc/model/entity/Users.java index f9bcffa..1e5ab59 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/Users.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/Users.java @@ -20,8 +20,8 @@ public class Users extends BaseEntity { @Column(name = "username") private String username; - @Column(name = "nama") - private String nama; + @Column(name = "fullname") + private String fullname; @Column(name = "email") private String email; diff --git a/src/main/java/com/iconplus/smartproc/model/projection/TokenManagementView.java b/src/main/java/com/iconplus/smartproc/model/projection/TokenManagementView.java new file mode 100644 index 0000000..9e651d8 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/TokenManagementView.java @@ -0,0 +1,16 @@ +package com.iconplus.smartproc.model.projection; + +import java.sql.Clob; + +public interface TokenManagementView { + + String getId(); + void setId(String id); + + String getUserId(); + void setUserId(String userId); + + Clob getAccessToken(); + void setAccessToken(Clob accessToken); + +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/UserRoleView.java b/src/main/java/com/iconplus/smartproc/model/projection/UserRoleView.java new file mode 100644 index 0000000..284aa4d --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/UserRoleView.java @@ -0,0 +1,19 @@ +package com.iconplus.smartproc.model.projection; + +public interface UserRoleView { + + Long getId(); + String getUsername(); + String getPassword(); + Long getRoleId(); + String getRole(); + Boolean getDeleted(); + + void setId(Long id); + void setUsername(String username); + void setPassword(String password); + void setRoleId(Long roleId); + void setRole(String role); + void setDeleted(Boolean deleted); + +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/LoginRequest.java b/src/main/java/com/iconplus/smartproc/model/request/LoginRequest.java new file mode 100644 index 0000000..c33198e --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/LoginRequest.java @@ -0,0 +1,17 @@ +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 +@NoArgsConstructor +@AllArgsConstructor +public class LoginRequest extends BaseRequest { + + private String email; + private String password; +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/PostAccessTokenRequest.java b/src/main/java/com/iconplus/smartproc/model/request/PostAccessTokenRequest.java new file mode 100644 index 0000000..e426cf0 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/PostAccessTokenRequest.java @@ -0,0 +1,16 @@ +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 +@NoArgsConstructor +@AllArgsConstructor +public class PostAccessTokenRequest extends BaseRequest { + + private String accessToken; +} \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/model/response/LoginResponse.java b/src/main/java/com/iconplus/smartproc/model/response/LoginResponse.java new file mode 100644 index 0000000..675e95b --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/LoginResponse.java @@ -0,0 +1,26 @@ +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.util.Set; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class LoginResponse extends BaseResponse { + + private String accessToken; + private String validity; + private String refreshToken; + private String username; + private String email; + private Long roleId; + private String role; + Set accessMenu; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/PostAccessTokenResponse.java b/src/main/java/com/iconplus/smartproc/model/response/PostAccessTokenResponse.java new file mode 100644 index 0000000..a9c4f88 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/PostAccessTokenResponse.java @@ -0,0 +1,16 @@ +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 PostAccessTokenResponse extends BaseResponse { + + private Boolean isValid; +} \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/model/token/TokenContent.java b/src/main/java/com/iconplus/smartproc/model/token/TokenContent.java new file mode 100644 index 0000000..28907de --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/token/TokenContent.java @@ -0,0 +1,16 @@ +package com.iconplus.smartproc.model.token; + +import lombok.Builder; +import lombok.Data; + +import java.util.Set; + +@Builder +@Data +public class TokenContent { + private String userId; + private String role; + private Set accessMenu; + private String fullname; + private String username; +} diff --git a/src/main/java/com/iconplus/smartproc/repository/RolesRepository.java b/src/main/java/com/iconplus/smartproc/repository/RolesRepository.java index 2abc8e5..9b55ea3 100644 --- a/src/main/java/com/iconplus/smartproc/repository/RolesRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/RolesRepository.java @@ -1,10 +1,26 @@ package com.iconplus.smartproc.repository; import com.iconplus.smartproc.model.entity.Roles; +import com.iconplus.smartproc.model.projection.UserRoleView; 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 RolesRepository extends JpaRepository { + + @Query(value = "SELECT u.id as id, " + + "u.username as username, " + + "u.password as password, " + + "u.roleId as roleId, " + + "r.role as role " + + "FROM Users u " + + "join Roles r on r.id=u.roleId " + + "WHERE u.deleted = false " + + "AND r.deleted = false " + + "AND u.username = :userName ") + Optional getUserRoleByUserId(String userName); } diff --git a/src/main/java/com/iconplus/smartproc/repository/TokenManagementRepository.java b/src/main/java/com/iconplus/smartproc/repository/TokenManagementRepository.java new file mode 100644 index 0000000..9809026 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/TokenManagementRepository.java @@ -0,0 +1,19 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.TokenManagement; +import com.iconplus.smartproc.model.projection.TokenManagementView; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface TokenManagementRepository extends JpaRepository { + + @Query(value = "SELECT access_token as accessToken FROM token_management " + + "WHERE user_id = :userId " + + "AND deleted = false " + + "AND expired_time >= SYSDATE", nativeQuery = true) + List findAccessTokenByUserIdAndDeletedFalse(String userId); +} diff --git a/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java b/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java index aa25de3..e15d932 100644 --- a/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java @@ -4,7 +4,11 @@ import com.iconplus.smartproc.model.entity.Users; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.Optional; + @Repository public interface UsersRepository extends JpaRepository { + + Optional findByEmailAndDeletedFalse(String email); } diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java b/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java new file mode 100644 index 0000000..e824182 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java @@ -0,0 +1,47 @@ +package com.iconplus.smartproc.service.authentication; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.LoginRequest; +import com.iconplus.smartproc.model.response.LoginResponse; +import com.iconplus.smartproc.repository.UsersRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class LoginService implements BaseService { + + + private final UsersRepository usersRepository; + + public LoginService(UsersRepository userRepository) { + this.usersRepository = userRepository; + + } + + @Override + public LoginResponse execute(LoginRequest input) { + + var user= usersRepository.findByEmailAndDeletedFalse(input.getEmail()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10003, + Constants.ERR_TTL_10003, + String.format(Constants.ERR_MSG_10003, input.getEmail()))); + + if (!StringUtils.equalsIgnoreCase(input.getPassword(), user.getPassword())) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10004, + Constants.ERR_TTL_10004, + Constants.ERR_MSG_10004); + } + + + + return LoginResponse.builder() + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/PostCheckAccessTokenService.java b/src/main/java/com/iconplus/smartproc/service/authentication/PostCheckAccessTokenService.java new file mode 100644 index 0000000..a77aa51 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/authentication/PostCheckAccessTokenService.java @@ -0,0 +1,55 @@ +package com.iconplus.smartproc.service.authentication; + +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.helper.service.TokenUtils; +import com.iconplus.smartproc.model.projection.TokenManagementView; +import com.iconplus.smartproc.model.request.PostAccessTokenRequest; +import com.iconplus.smartproc.model.response.PostAccessTokenResponse; +import com.iconplus.smartproc.repository.TokenManagementRepository; +import com.iconplus.smartproc.util.CommonUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +@Service +@Slf4j +public class PostCheckAccessTokenService implements BaseService { + + private TokenManagementRepository tokenManagementRepository; + + public PostCheckAccessTokenService(TokenManagementRepository tokenManagementRepository) { + this.tokenManagementRepository = tokenManagementRepository; + } + + @Override + public PostAccessTokenResponse execute(PostAccessTokenRequest input) { + + var decodeToken = TokenUtils.decodeToken(input.getAccessToken()); + String userId = decodeToken.get("user_id"); + + List tokenManagementViews = tokenManagementRepository.findAccessTokenByUserIdAndDeletedFalse(userId); + if (tokenManagementViews.isEmpty()) { + log.error("access token not found in db"); + return PostAccessTokenResponse.builder() + .isValid(false) + .build(); + } + + List userTokenList = tokenManagementViews.stream() + .map(c-> CommonUtil.clobToString(c.getAccessToken())) + .collect(Collectors.toList()); + + boolean isMatch = userTokenList.stream().anyMatch(s -> s.equals(input.getAccessToken())); + if (isMatch) { + return PostAccessTokenResponse.builder() + .isValid(true) + .build(); + } + + return PostAccessTokenResponse.builder() + .isValid(false) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/util/CommonUtil.java b/src/main/java/com/iconplus/smartproc/util/CommonUtil.java new file mode 100644 index 0000000..617d5be --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/util/CommonUtil.java @@ -0,0 +1,25 @@ +package com.iconplus.smartproc.util; + +import com.iconplus.smartproc.exception.TechnicalException; + +import java.sql.Clob; +import java.sql.SQLException; + +public class CommonUtil { + private CommonUtil() { + } + + public static String clobToString(Clob input) { + try { + if (input != null) { + return input.getSubString(1, (int) input.length()); + } else { + return null; + } + } catch (SQLException exception) { + throw new TechnicalException(Constants.ERR_TTL_40041, + Constants.ERR_TTL_40041, + Constants.ERR_MSG_40041); + } + } +} diff --git a/src/main/java/com/iconplus/smartproc/util/Constants.java b/src/main/java/com/iconplus/smartproc/util/Constants.java index 5a72c7a..9273684 100644 --- a/src/main/java/com/iconplus/smartproc/util/Constants.java +++ b/src/main/java/com/iconplus/smartproc/util/Constants.java @@ -12,4 +12,21 @@ public class Constants { public static final String ERR_TTL_10002 = "Data tersedia"; public static final String ERR_MSG_10002 = "Jenis Anggaran dengan id : %s sudah tersedia"; + public static final String ERR_CODE_10003 = "10003"; + public static final String ERR_TTL_10003 = "Data tidak tersedia"; + public static final String ERR_MSG_10003 = "User dengan email : %s tidak ditemukan"; + + public static final String ERR_CODE_10004 = "10004"; + public static final String ERR_TTL_10004 = "Gagal Authentikasi User"; + public static final String ERR_MSG_10004 = "Silahkan Periksa kembali Email dan Password Anda"; + + public static final String ERR_CODE_40041 = "40041"; + public static final String ERR_TTL_40041 = "Terjadi Gangguan"; + public static final String ERR_MSG_40041 = "Masalah Koneksi System"; + + public static final String ERR_CODE_40051 = "40051"; + public static final String ERR_CODE_80007 = "80007"; + public static final String TITLE_INVALID_NEXT_STEP = "Proses tidak dapat dilanjutkan"; + + } diff --git a/src/main/java/com/iconplus/smartproc/util/RSAUtil.java b/src/main/java/com/iconplus/smartproc/util/RSAUtil.java new file mode 100644 index 0000000..7d182e2 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/util/RSAUtil.java @@ -0,0 +1,109 @@ +package com.iconplus.smartproc.util; + +import com.iconplus.smartproc.exception.TechnicalException; +import lombok.extern.log4j.Log4j2; + +import javax.crypto.BadPaddingException; +import javax.crypto.Cipher; +import javax.crypto.IllegalBlockSizeException; +import javax.crypto.NoSuchPaddingException; +import java.security.*; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; +import java.util.Base64; + +@Log4j2 +public class RSAUtil { + + private RSAUtil(){ + + } + + public static PrivateKey getPrivateKey(String base64PrivateKey){ + PrivateKey privateKey = null; + PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(Base64.getDecoder().decode(base64PrivateKey.getBytes())); + try { + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + privateKey = keyFactory.generatePrivate(keySpec); + } catch (InvalidKeySpecException e) { + log.error("InvalidKeySpecException : "+e.getMessage()); + throw new TechnicalException("80000", "InvalidKeySpecException : "+e.getMessage()); + } catch (NoSuchAlgorithmException e) { + log.error("NoSuchAlgorithmException : "+e.getMessage()); + throw new TechnicalException("80000", "NoSuchAlgorithmException : "+e.getMessage()); + } + return privateKey; + } + + public static PublicKey getPublicKey(String base64PublicKey){ + PublicKey publicKey = null; + X509EncodedKeySpec keySpec = new X509EncodedKeySpec(Base64.getDecoder().decode(base64PublicKey.getBytes())); + try { + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + publicKey = keyFactory.generatePublic(keySpec); + } catch (InvalidKeySpecException e) { + log.error("InvalidKeySpecException : "+e.getMessage()); + throw new TechnicalException("80000", "InvalidKeySpecException : "+e.getMessage()); + } catch (NoSuchAlgorithmException e) { + log.error("NoSuchAlgorithmException : "+e.getMessage()); + throw new TechnicalException("80000", "NoSuchAlgorithmException : "+e.getMessage()); + } + return publicKey; + } + + private static String decryptChipper(byte[] data, PrivateKey privateKey) { + try { + Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPPadding"); + cipher.init(Cipher.DECRYPT_MODE, privateKey); + return new String(cipher.doFinal(data)); + } catch (NoSuchAlgorithmException e) { + log.error("NoSuchAlgorithmException : "+e.getMessage()); + throw new TechnicalException("80000", "NoSuchAlgorithmException : "+e.getMessage()); + } catch (NoSuchPaddingException e) { + log.error("NoSuchPaddingException : "+e.getMessage()); + throw new TechnicalException("80000", "NoSuchPaddingException : "+e.getMessage()); + } catch (InvalidKeyException e) { + log.error("InvalidKeyException : "+e.getMessage()); + throw new TechnicalException("80000", "InvalidKeyException : "+e.getMessage()); + } catch (IllegalBlockSizeException e) { + log.error("IllegalBlockSizeException : "+e.getMessage()); + throw new TechnicalException("80000", "IllegalBlockSizeException : "+e.getMessage()); + } catch (BadPaddingException e) { + log.error("BadPaddingException : "+e.getMessage()); + throw new TechnicalException("80000", "BadPaddingException : "+e.getMessage()); + } + } + + private static byte[] encryptChipper(byte[] data, PublicKey publicKey) { + try { + Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPPadding"); + cipher.init(Cipher.ENCRYPT_MODE, publicKey); + return cipher.doFinal(data); + } catch (NoSuchAlgorithmException e) { + log.error("NoSuchAlgorithmException : "+e.getMessage()); + throw new TechnicalException("80000", "NoSuchAlgorithmException : "+e.getMessage()); + } catch (NoSuchPaddingException e) { + log.error("NoSuchPaddingException : "+e.getMessage()); + throw new TechnicalException("80000", "NoSuchPaddingException : "+e.getMessage()); + } catch (InvalidKeyException e) { + log.error("InvalidKeyException : "+e.getMessage()); + throw new TechnicalException("80000", "InvalidKeyException : "+e.getMessage()); + } catch (IllegalBlockSizeException e) { + log.error("IllegalBlockSizeException : "+e.getMessage()); + throw new TechnicalException("80000", "IllegalBlockSizeException : "+e.getMessage()); + } catch (BadPaddingException e) { + log.error("BadPaddingException : "+e.getMessage()); + throw new TechnicalException("80000", "BadPaddingException : "+e.getMessage()); + } + } + + public static String decrypt(String data, String base64PrivateKey) { + return decryptChipper(Base64.getDecoder().decode(data.getBytes()), getPrivateKey(base64PrivateKey)); + } + + public static String encrypt(String data, String base64PublicKey) { + return Base64.getEncoder().encodeToString(encryptChipper(data.getBytes(), getPublicKey(base64PublicKey))); + } + +} diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml new file mode 100644 index 0000000..60a202b --- /dev/null +++ b/src/main/resources/application-local.yml @@ -0,0 +1,22 @@ +#Configuration for database +jwt: + public-key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx3MRA7zxvaWKrtmPl2hRJLFiyryvj0ZUlmWw9OZIgqwJUDBTsg5yFX4hCQrANV1yy5ibTqAn2APdNCdhGgp8R2YLWrUR2vVGbmnKXXzEDsFpT6cgo+/a+lWaUq8aYEhzVg8Xjmy9oG1s521LklEz/jKD2xNE4OgY2Y1SgfUH+bexs84ZEyUhcSpCrcZenjCns7Ubp9zsWPrXa/j6kr7ZuFWH7nXN/i+oYF0HFhc+hDaVr2R9Q7s56wAQNE8XfI2Q+h4iRI1hWa5Vva9ha1DnCN9McJDLBHoGy1coIUEoQKkDhCNQmdHlubIJYDoFIyfDTrSQIXw2gzrrC9sOgYU64wIDAQAB + private-key: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDHcxEDvPG9pYqu2Y+XaFEksWLKvK+PRlSWZbD05kiCrAlQMFOyDnIVfiEJCsA1XXLLmJtOoCfYA900J2EaCnxHZgtatRHa9UZuacpdfMQOwWlPpyCj79r6VZpSrxpgSHNWDxeObL2gbWznbUuSUTP+MoPbE0Tg6BjZjVKB9Qf5t7GzzhkTJSFxKkKtxl6eMKeztRun3OxY+tdr+PqSvtm4VYfudc3+L6hgXQcWFz6ENpWvZH1DuznrABA0Txd8jZD6HiJEjWFZrlW9r2FrUOcI30xwkMsEegbLVyghQShAqQOEI1CZ0eW5sglgOgUjJ8NOtJAhfDaDOusL2w6BhTrjAgMBAAECggEAL8SPPqXx/8m1/Up96XVCeddCIewu39GoUJzqVL0SgLlTQbFRWkO7bwpWPyQkBKPs6nYSPDJ/WG0UfXkw+FuqiC8YaREUxawYwjj0Do/jJOWNo1YTqy+28l2uKD9nwceYV/QlYCcLA3Exs/upLdHk8eyHR+DFjlgIG5KNQDK/Rj8cLdQGJjAZjHUGzaRq/HhDi+0LVkOoUvzbzle8RSiiZnNrxCt0UV1CambQzvyxXzqLgtGe4s+qItwk/zzkvXDRnRju3+/AyaFaToA2Wnp9gdV2rT4cRGHhj0Dqh0vwrBH4RiPtEfLQjIa9DhTPHfpr6ACGe6GF96fJ889WIEl4gQKBgQDrGgYKGwIhY9j2V7tu6eHmLxYFGzxSPOtfBZPzSLUyQXrcd6wFlb+Fsae2bgBFZJzilIv4lG0wNaGSFjAjteyXMoqVCTIUKJCjzWs+g3qjuA5fu9IAeWEEaXuKSVvkV5tJrnwhmqYdH1jQx5xhpO434W2a4wuEgOnU6SzNjvS/TwKBgQDZLb3Q9KRwlMcyt/rgjeTOf2SD1jvlKD2t+YRuaxlzBs7j99hCEP3GLaTz6/rIptfkutwk10FM/piO5PCyoPXNc2A1Z73ukmsirMRy2G06PfqKBQrV/B9vtIqPW1Agz7KUpXARrHL8Bb6T2ljKl2HU+kC4Pgx2GZQgYnbEvNBGLQKBgQCNf3grFN5PYlzuxxbURofjlmtWX3IKvQechSrqvdPwj2B22L/8DIjc2nPqZIJdQZT6+hTUY+DjpyO7XQdUNuZSieTGlmZBo7iKHdRyJ4fkiZ59F/notyUhFqt4K3bXE7MuwYmMYBuiY399COaiDjYiA9eH5SbFdSFHN5/ziBreGQKBgGZHNG2DyS1745PvMScvq+HT/PJZojt5iBK2v7eAmKujOSwDPMVgWyNJu7VkHOcCLAp8NdDjzs0D2bTx/KkjRJ9NBrIf+UKxkeLymlG7uzUCm0sEtOWxptxkmhyJVGMfbWqzvuOT41LtIaNf4REH2fsDIBekoRm9UhUuSeC9SxjBAoGAP6pdT7HlMsr++XJFqs9+dj7tRsX+a6Coi3T8BFaf2Nl9YxMFFaSBbNOO4QfZWyCUcfbkLrcdEka5VTVt/HwckDKzckxWqH3hMn2+kAKJnHhAvB1M38KAyvdpA54vNgVyID+vL5VbqpHk8wsUbVWZc8F/ERELfuHwzcD0rt6Opnc= + expired-time : + service-account: + access-token: 480 + refresh-token: 720 + +spring: + datasource: + driver-class-name: org.postgresql.Driver + url: jdbc:postgresql://localhost:5432/smartproc + username: postgres + password: postgre + jackson: + default-property-inclusion: NON_NULL + jpa: + hibernate: + ddl-auto: update + database-platform: org.hibernate.dialect.PostgreSQLDialect + show-sql: true diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties deleted file mode 100644 index dd5e35d..0000000 --- a/src/main/resources/application.properties +++ /dev/null @@ -1,12 +0,0 @@ -spring.datasource.url=jdbc:postgresql://localhost:5432/smartproc -spring.datasource.username=postgres -spring.datasource.password=postgre -spring.jpa.show-sql=true - -## Hibernate Properties -# The SQL dialect makes Hibernate generate better SQL for the chosen database -spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect - -# Hibernate ddl auto (create, create-drop, validate, update) -spring.jpa.hibernate.ddl-auto = update -server.port=9090 \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..b14266e --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,7 @@ +spring: + application: + name: "smartproc-service" + profiles: + active: local +server: + port: 9090 \ No newline at end of file diff --git a/src/main/resources/bootstrap.properties b/src/main/resources/bootstrap.properties new file mode 100644 index 0000000..68d2e92 --- /dev/null +++ b/src/main/resources/bootstrap.properties @@ -0,0 +1,5 @@ +spring.application.name=smartproc +spring.profiles.active=@spring.profiles.active@ +management.endpoints.web.exposure.include=* +management.endpoint.health.show-details=ALWAYS +management.metrics.tags.application=${spring.application.name} \ No newline at end of file From 5790e5ea9fe09c86b27ead862ddbe63f0d1462d5 Mon Sep 17 00:00:00 2001 From: Titan Hadiyan Date: Tue, 23 May 2023 22:28:09 +0700 Subject: [PATCH 05/63] Penyesuaian nama field yang tidak sesuai --- .gitignore | 1 + .../com/iconplus/smartproc/model/entity/JenisPengadaan.java | 2 +- .../java/com/iconplus/smartproc/model/entity/Permission.java | 2 +- .../java/com/iconplus/smartproc/model/entity/SumberDana.java | 2 +- .../service/jenisanggaran/PostCreateJenisAnggaranService.java | 2 +- src/main/resources/application-local.yml | 2 +- 6 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 24725d6..d914762 100644 --- a/.gitignore +++ b/.gitignore @@ -39,6 +39,7 @@ target transaction-logs .flattened-pom.xml secrets.yml +src/main/resources/application-local.yml .gradletasknamecache .sts4-cache diff --git a/src/main/java/com/iconplus/smartproc/model/entity/JenisPengadaan.java b/src/main/java/com/iconplus/smartproc/model/entity/JenisPengadaan.java index 074a799..52980b0 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/JenisPengadaan.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/JenisPengadaan.java @@ -17,7 +17,7 @@ public class JenisPengadaan extends BaseEntity { @Column(name = "id") private long id; - @Column(name = "jenis_anggaran") + @Column(name = "jenis_pengadaan") private String jenisPengadaan; @Column(name = "keterangan") diff --git a/src/main/java/com/iconplus/smartproc/model/entity/Permission.java b/src/main/java/com/iconplus/smartproc/model/entity/Permission.java index 9d54f1a..76aeb2e 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/Permission.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/Permission.java @@ -32,7 +32,7 @@ public class Permission extends BaseEntity { @Column(name = "role_id") private Long roleId; - @Column(name = "role_id") + @Column(name = "menu_id") private Long menuId; @Column(name = "deleted") diff --git a/src/main/java/com/iconplus/smartproc/model/entity/SumberDana.java b/src/main/java/com/iconplus/smartproc/model/entity/SumberDana.java index 7922d18..cdae9d1 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/SumberDana.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/SumberDana.java @@ -8,7 +8,7 @@ import org.hibernate.annotations.Type; import javax.persistence.*; @Entity -@Table(name = "sumberdana") +@Table(name = "sumber_dana") @Data @Builder public class SumberDana extends BaseEntity { diff --git a/src/main/java/com/iconplus/smartproc/service/jenisanggaran/PostCreateJenisAnggaranService.java b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/PostCreateJenisAnggaranService.java index 165699d..6e5d17a 100644 --- a/src/main/java/com/iconplus/smartproc/service/jenisanggaran/PostCreateJenisAnggaranService.java +++ b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/PostCreateJenisAnggaranService.java @@ -49,4 +49,4 @@ public class PostCreateJenisAnggaranService implements BaseService Date: Tue, 23 May 2023 22:31:34 +0700 Subject: [PATCH 06/63] fix null find all --- .../smartproc/model/request/RolesRequest.java | 21 +++++++++++++++++ .../model/response/RolesResponse.java | 21 +++++++++++++++++ .../repository/JenisAnggaranRepository.java | 11 ++++++++- .../smartproc/repository/RolesRepository.java | 4 ++++ .../GetListJenisAnggaranService.java | 10 +++++++- .../service/role/DeleteRoleService.java | 23 +++++++++++++++++++ .../service/role/GetRoleByIdService.java | 7 ++++++ .../service/role/GetRolesService.java | 7 ++++++ .../service/role/PostCreateRoleService.java | 7 ++++++ .../service/role/PutUpdateRoleService.java | 8 +++++++ 10 files changed, 117 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/iconplus/smartproc/model/request/RolesRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/RolesResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/service/role/DeleteRoleService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/role/GetRoleByIdService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/role/GetRolesService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/role/PostCreateRoleService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/role/PutUpdateRoleService.java diff --git a/src/main/java/com/iconplus/smartproc/model/request/RolesRequest.java b/src/main/java/com/iconplus/smartproc/model/request/RolesRequest.java new file mode 100644 index 0000000..c03828c --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/RolesRequest.java @@ -0,0 +1,21 @@ +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 +@NoArgsConstructor +@AllArgsConstructor +public class RolesRequest extends BaseRequest { + + private Long id; + private String role; + private String keterangan; + private Boolean isActive; + private Boolean deleted; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/RolesResponse.java b/src/main/java/com/iconplus/smartproc/model/response/RolesResponse.java new file mode 100644 index 0000000..012c815 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/RolesResponse.java @@ -0,0 +1,21 @@ +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 RolesResponse extends BaseResponse { + + private Long id; + private String role; + private String keterangan; + private Boolean isActive; + private Boolean deleted; + +} diff --git a/src/main/java/com/iconplus/smartproc/repository/JenisAnggaranRepository.java b/src/main/java/com/iconplus/smartproc/repository/JenisAnggaranRepository.java index 8f7d4e1..78dcd40 100644 --- a/src/main/java/com/iconplus/smartproc/repository/JenisAnggaranRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/JenisAnggaranRepository.java @@ -13,6 +13,15 @@ import java.util.Optional; @Repository public interface JenisAnggaranRepository extends JpaRepository { + @Query(value = "SELECT ja.id as id, " + + "ja.jenisAnggaran as jenisAnggaran, " + + "ja.keterangan as keterangan, " + + "ja.deleted as deleted " + + "FROM JenisAnggaran ja " + + "WHERE ja.deleted = false " + + "ORDER BY ja.id") + Page getAllJenisAnggaran(Pageable pageable); + @Query(value = "SELECT ja.id as id, " + "ja.jenisAnggaran as jenisAnggaran, " + "ja.keterangan as keterangan, " + @@ -22,7 +31,7 @@ public interface JenisAnggaranRepository extends JpaRepository getAllJenisAnggaran(String search, Pageable pageable); + Page getAllJenisAnggaranBySearch(String search, Pageable pageable); Optional findByIdAndDeletedFalse(Long id); diff --git a/src/main/java/com/iconplus/smartproc/repository/RolesRepository.java b/src/main/java/com/iconplus/smartproc/repository/RolesRepository.java index 9b55ea3..470cc0e 100644 --- a/src/main/java/com/iconplus/smartproc/repository/RolesRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/RolesRepository.java @@ -22,5 +22,9 @@ public interface RolesRepository extends JpaRepository { "AND r.deleted = false " + "AND u.username = :userName ") Optional getUserRoleByUserId(String userName); + + Optional findByIdAndDeletedFalse(Long id); + + Optional findByRoleAndDeletedFalse(Long id); } diff --git a/src/main/java/com/iconplus/smartproc/service/jenisanggaran/GetListJenisAnggaranService.java b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/GetListJenisAnggaranService.java index e20f1d7..a59ce59 100644 --- a/src/main/java/com/iconplus/smartproc/service/jenisanggaran/GetListJenisAnggaranService.java +++ b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/GetListJenisAnggaranService.java @@ -8,6 +8,7 @@ import com.iconplus.smartproc.model.response.GetListJenisAnggaranResponse; import com.iconplus.smartproc.model.response.JenisAnggaranResponse; import com.iconplus.smartproc.repository.JenisAnggaranRepository; import org.apache.commons.lang3.StringUtils; +import org.springframework.data.domain.Page; import org.springframework.stereotype.Service; import java.util.ArrayList; @@ -26,7 +27,14 @@ public class GetListJenisAnggaranService implements BaseService jenisAnggaranResponseList = new ArrayList<>(); - var jenisAnggaranViews = jenisAnggaranRepository.getAllJenisAnggaran(input.getSearch(), input.getPageable()); + Page jenisAnggaranViews; + if (StringUtils.isBlank(input.getSearch())) { + jenisAnggaranViews = jenisAnggaranRepository.getAllJenisAnggaran(input.getPageable()); + } else { + jenisAnggaranViews = jenisAnggaranRepository.getAllJenisAnggaranBySearch(input.getSearch(), input.getPageable()); + } + + for (JenisAnggaranView jenisAnggaranView : jenisAnggaranViews) { JenisAnggaranResponse jenisAnggaranResponse = JenisAnggaranResponse.builder() diff --git a/src/main/java/com/iconplus/smartproc/service/role/DeleteRoleService.java b/src/main/java/com/iconplus/smartproc/service/role/DeleteRoleService.java new file mode 100644 index 0000000..92cc5a0 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/role/DeleteRoleService.java @@ -0,0 +1,23 @@ +package com.iconplus.smartproc.service.role; + +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.RolesRequest; +import com.iconplus.smartproc.model.response.RolesResponse; +import com.iconplus.smartproc.repository.RolesRepository; +import org.springframework.stereotype.Service; + +@Service +public class DeleteRoleService implements BaseService { + + private RolesRepository rolesRepository; + + public DeleteRoleService(RolesRepository rolesRepository) { + this.rolesRepository = rolesRepository; + } + + @Override + public RolesResponse execute(RolesRequest input) { + + return null; + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/role/GetRoleByIdService.java b/src/main/java/com/iconplus/smartproc/service/role/GetRoleByIdService.java new file mode 100644 index 0000000..c23af74 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/role/GetRoleByIdService.java @@ -0,0 +1,7 @@ +package com.iconplus.smartproc.service.role; + +import org.springframework.stereotype.Service; + +@Service +public class GetRoleByIdService { +} diff --git a/src/main/java/com/iconplus/smartproc/service/role/GetRolesService.java b/src/main/java/com/iconplus/smartproc/service/role/GetRolesService.java new file mode 100644 index 0000000..86f1589 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/role/GetRolesService.java @@ -0,0 +1,7 @@ +package com.iconplus.smartproc.service.role; + +import org.springframework.stereotype.Service; + +@Service +public class GetRolesService { +} diff --git a/src/main/java/com/iconplus/smartproc/service/role/PostCreateRoleService.java b/src/main/java/com/iconplus/smartproc/service/role/PostCreateRoleService.java new file mode 100644 index 0000000..0c4c47e --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/role/PostCreateRoleService.java @@ -0,0 +1,7 @@ +package com.iconplus.smartproc.service.role; + +import org.springframework.stereotype.Service; + +@Service +public class PostCreateRoleService { +} diff --git a/src/main/java/com/iconplus/smartproc/service/role/PutUpdateRoleService.java b/src/main/java/com/iconplus/smartproc/service/role/PutUpdateRoleService.java new file mode 100644 index 0000000..9e57ba2 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/role/PutUpdateRoleService.java @@ -0,0 +1,8 @@ +package com.iconplus.smartproc.service.role; + +import com.iconplus.smartproc.helper.service.BaseService; +import org.springframework.stereotype.Service; + +//@Service +//public class PutUpdateRoleService implements BaseService<> { +//} From ed88afcdde1b42308eba5a2cebb411f83531aa23 Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Tue, 23 May 2023 23:21:07 +0700 Subject: [PATCH 07/63] fix query --- .../repository/JenisAnggaranRepository.java | 13 ++----------- .../jenisanggaran/GetListJenisAnggaranService.java | 9 +-------- src/main/resources/application-local.yml | 5 ++--- 3 files changed, 5 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/iconplus/smartproc/repository/JenisAnggaranRepository.java b/src/main/java/com/iconplus/smartproc/repository/JenisAnggaranRepository.java index 78dcd40..d601d1c 100644 --- a/src/main/java/com/iconplus/smartproc/repository/JenisAnggaranRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/JenisAnggaranRepository.java @@ -19,19 +19,10 @@ public interface JenisAnggaranRepository extends JpaRepository getAllJenisAnggaran(Pageable pageable); - - @Query(value = "SELECT ja.id as id, " + - "ja.jenisAnggaran as jenisAnggaran, " + - "ja.keterangan as keterangan, " + - "ja.deleted as deleted " + - "FROM JenisAnggaran ja " + - "WHERE ja.deleted = false " + - "AND (:search is null " + + "AND (:search = '' " + "or (UPPER(ja.jenisAnggaran) like :search OR UPPER(ja.keterangan) like :search)) " + "ORDER BY ja.id") - Page getAllJenisAnggaranBySearch(String search, Pageable pageable); + Page getAllJenisAnggaran(String search, Pageable pageable); Optional findByIdAndDeletedFalse(Long id); diff --git a/src/main/java/com/iconplus/smartproc/service/jenisanggaran/GetListJenisAnggaranService.java b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/GetListJenisAnggaranService.java index a59ce59..a313097 100644 --- a/src/main/java/com/iconplus/smartproc/service/jenisanggaran/GetListJenisAnggaranService.java +++ b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/GetListJenisAnggaranService.java @@ -27,14 +27,7 @@ public class GetListJenisAnggaranService implements BaseService jenisAnggaranResponseList = new ArrayList<>(); - Page jenisAnggaranViews; - if (StringUtils.isBlank(input.getSearch())) { - jenisAnggaranViews = jenisAnggaranRepository.getAllJenisAnggaran(input.getPageable()); - } else { - jenisAnggaranViews = jenisAnggaranRepository.getAllJenisAnggaranBySearch(input.getSearch(), input.getPageable()); - } - - + Page jenisAnggaranViews = jenisAnggaranRepository.getAllJenisAnggaran(input.getSearch(), input.getPageable()); for (JenisAnggaranView jenisAnggaranView : jenisAnggaranViews) { JenisAnggaranResponse jenisAnggaranResponse = JenisAnggaranResponse.builder() diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index 891eb04..4340c9d 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -3,9 +3,8 @@ jwt: public-key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx3MRA7zxvaWKrtmPl2hRJLFiyryvj0ZUlmWw9OZIgqwJUDBTsg5yFX4hCQrANV1yy5ibTqAn2APdNCdhGgp8R2YLWrUR2vVGbmnKXXzEDsFpT6cgo+/a+lWaUq8aYEhzVg8Xjmy9oG1s521LklEz/jKD2xNE4OgY2Y1SgfUH+bexs84ZEyUhcSpCrcZenjCns7Ubp9zsWPrXa/j6kr7ZuFWH7nXN/i+oYF0HFhc+hDaVr2R9Q7s56wAQNE8XfI2Q+h4iRI1hWa5Vva9ha1DnCN9McJDLBHoGy1coIUEoQKkDhCNQmdHlubIJYDoFIyfDTrSQIXw2gzrrC9sOgYU64wIDAQAB private-key: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDHcxEDvPG9pYqu2Y+XaFEksWLKvK+PRlSWZbD05kiCrAlQMFOyDnIVfiEJCsA1XXLLmJtOoCfYA900J2EaCnxHZgtatRHa9UZuacpdfMQOwWlPpyCj79r6VZpSrxpgSHNWDxeObL2gbWznbUuSUTP+MoPbE0Tg6BjZjVKB9Qf5t7GzzhkTJSFxKkKtxl6eMKeztRun3OxY+tdr+PqSvtm4VYfudc3+L6hgXQcWFz6ENpWvZH1DuznrABA0Txd8jZD6HiJEjWFZrlW9r2FrUOcI30xwkMsEegbLVyghQShAqQOEI1CZ0eW5sglgOgUjJ8NOtJAhfDaDOusL2w6BhTrjAgMBAAECggEAL8SPPqXx/8m1/Up96XVCeddCIewu39GoUJzqVL0SgLlTQbFRWkO7bwpWPyQkBKPs6nYSPDJ/WG0UfXkw+FuqiC8YaREUxawYwjj0Do/jJOWNo1YTqy+28l2uKD9nwceYV/QlYCcLA3Exs/upLdHk8eyHR+DFjlgIG5KNQDK/Rj8cLdQGJjAZjHUGzaRq/HhDi+0LVkOoUvzbzle8RSiiZnNrxCt0UV1CambQzvyxXzqLgtGe4s+qItwk/zzkvXDRnRju3+/AyaFaToA2Wnp9gdV2rT4cRGHhj0Dqh0vwrBH4RiPtEfLQjIa9DhTPHfpr6ACGe6GF96fJ889WIEl4gQKBgQDrGgYKGwIhY9j2V7tu6eHmLxYFGzxSPOtfBZPzSLUyQXrcd6wFlb+Fsae2bgBFZJzilIv4lG0wNaGSFjAjteyXMoqVCTIUKJCjzWs+g3qjuA5fu9IAeWEEaXuKSVvkV5tJrnwhmqYdH1jQx5xhpO434W2a4wuEgOnU6SzNjvS/TwKBgQDZLb3Q9KRwlMcyt/rgjeTOf2SD1jvlKD2t+YRuaxlzBs7j99hCEP3GLaTz6/rIptfkutwk10FM/piO5PCyoPXNc2A1Z73ukmsirMRy2G06PfqKBQrV/B9vtIqPW1Agz7KUpXARrHL8Bb6T2ljKl2HU+kC4Pgx2GZQgYnbEvNBGLQKBgQCNf3grFN5PYlzuxxbURofjlmtWX3IKvQechSrqvdPwj2B22L/8DIjc2nPqZIJdQZT6+hTUY+DjpyO7XQdUNuZSieTGlmZBo7iKHdRyJ4fkiZ59F/notyUhFqt4K3bXE7MuwYmMYBuiY399COaiDjYiA9eH5SbFdSFHN5/ziBreGQKBgGZHNG2DyS1745PvMScvq+HT/PJZojt5iBK2v7eAmKujOSwDPMVgWyNJu7VkHOcCLAp8NdDjzs0D2bTx/KkjRJ9NBrIf+UKxkeLymlG7uzUCm0sEtOWxptxkmhyJVGMfbWqzvuOT41LtIaNf4REH2fsDIBekoRm9UhUuSeC9SxjBAoGAP6pdT7HlMsr++XJFqs9+dj7tRsX+a6Coi3T8BFaf2Nl9YxMFFaSBbNOO4QfZWyCUcfbkLrcdEka5VTVt/HwckDKzckxWqH3hMn2+kAKJnHhAvB1M38KAyvdpA54vNgVyID+vL5VbqpHk8wsUbVWZc8F/ERELfuHwzcD0rt6Opnc= expired-time : - service-account: - access-token: 480 - refresh-token: 720 + access-token: 480 + refresh-token: 720 spring: datasource: From b49a2425c1bd8667363d5c43994de8b3d8c0a9d6 Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Wed, 24 May 2023 09:23:51 +0700 Subject: [PATCH 08/63] refactor v2 --- .../smartproc/controller/RolesController.java | 91 ++++++++++--------- .../smartproc/controller/UsersController.java | 41 ++++++++- .../smartproc/model/entity/Bidang.java | 38 ++++++++ .../smartproc/model/entity/Instansi.java | 38 ++++++++ .../smartproc/model/entity/JenisAnggaran.java | 10 +- .../smartproc/model/entity/JenisKontrak.java | 14 ++- .../model/entity/JenisPengadaan.java | 12 ++- .../smartproc/model/entity/Lokasi.java | 14 ++- .../model/entity/MetodePengadaan.java | 8 +- .../model/entity/MetodePenyampaian.java | 12 ++- .../smartproc/model/entity/Roles.java | 14 ++- .../model/entity/StrategiPengadaan.java | 12 ++- .../smartproc/model/entity/SumberDana.java | 12 ++- .../model/entity/SupplyPositioningMatrix.java | 12 ++- .../model/entity/TokenManagement.java | 4 +- .../smartproc/model/entity/UnitInisiator.java | 12 ++- .../smartproc/model/entity/Users.java | 22 +++-- .../model/projection/JenisAnggaranView.java | 6 +- .../smartproc/model/projection/RolesView.java | 16 ++++ .../model/projection/UserRoleView.java | 20 +++- .../model/request/JenisAnggaranRequest.java | 2 +- .../smartproc/model/request/RolesRequest.java | 5 +- .../smartproc/model/request/UsersRequest.java | 27 ++++++ .../model/response/GetRolesResponse.java | 20 ++++ .../model/response/GetUsersResponse.java | 20 ++++ .../model/response/JenisAnggaranResponse.java | 2 +- .../model/response/RolesResponse.java | 2 +- .../model/response/UsersResponse.java | 23 +++++ .../repository/JenisAnggaranRepository.java | 8 +- .../smartproc/repository/RolesRepository.java | 24 ++++- .../repository/TokenManagementRepository.java | 2 +- .../smartproc/repository/UsersRepository.java | 25 ++++- .../service/authentication/LoginService.java | 2 +- .../DeleteJenisAnggaranService.java | 7 +- .../GetJenisAnggaranByIdService.java | 6 +- .../GetListJenisAnggaranService.java | 2 +- .../PostCreateJenisAnggaranService.java | 7 +- .../PutUpdateJenisAnggaranService.java | 4 +- .../manajemenuser/GetListUserService.java | 67 ++++++++++++++ .../manajemenuser/PostCreateUserService.java | 43 +++++++++ .../service/role/DeleteRoleService.java | 23 ----- .../service/role/GetRoleByIdService.java | 7 -- .../service/role/GetRolesService.java | 7 -- .../service/role/PostCreateRoleService.java | 7 -- .../service/role/PutUpdateRoleService.java | 8 -- .../service/roles/DeleteRoleService.java | 33 +++++++ .../service/roles/GetRoleByIdService.java | 36 ++++++++ .../service/roles/GetRolesService.java | 60 ++++++++++++ .../service/roles/PostCreateRoleService.java | 44 +++++++++ .../service/roles/PutUpdateRoleService.java | 38 ++++++++ .../iconplus/smartproc/util/Constants.java | 10 +- src/main/resources/application-local.yml | 2 +- 52 files changed, 809 insertions(+), 172 deletions(-) create mode 100644 src/main/java/com/iconplus/smartproc/model/entity/Bidang.java create mode 100644 src/main/java/com/iconplus/smartproc/model/entity/Instansi.java create mode 100644 src/main/java/com/iconplus/smartproc/model/projection/RolesView.java create mode 100644 src/main/java/com/iconplus/smartproc/model/request/UsersRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/GetRolesResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/GetUsersResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/UsersResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/service/manajemenuser/GetListUserService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/manajemenuser/PostCreateUserService.java delete mode 100644 src/main/java/com/iconplus/smartproc/service/role/DeleteRoleService.java delete mode 100644 src/main/java/com/iconplus/smartproc/service/role/GetRoleByIdService.java delete mode 100644 src/main/java/com/iconplus/smartproc/service/role/GetRolesService.java delete mode 100644 src/main/java/com/iconplus/smartproc/service/role/PostCreateRoleService.java delete mode 100644 src/main/java/com/iconplus/smartproc/service/role/PutUpdateRoleService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/roles/DeleteRoleService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/roles/GetRoleByIdService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/roles/GetRolesService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/roles/PostCreateRoleService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/roles/PutUpdateRoleService.java diff --git a/src/main/java/com/iconplus/smartproc/controller/RolesController.java b/src/main/java/com/iconplus/smartproc/controller/RolesController.java index 30ea420..13eafa2 100644 --- a/src/main/java/com/iconplus/smartproc/controller/RolesController.java +++ b/src/main/java/com/iconplus/smartproc/controller/RolesController.java @@ -1,66 +1,73 @@ package com.iconplus.smartproc.controller; -import com.iconplus.smartproc.model.entity.Roles; -import com.iconplus.smartproc.exception.ResourceNotFoundException; -import com.iconplus.smartproc.repository.RolesRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.RolesRequest; +import com.iconplus.smartproc.model.response.GetRolesResponse; +import com.iconplus.smartproc.model.response.RolesResponse; +import com.iconplus.smartproc.service.roles.*; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; import org.springframework.web.bind.annotation.*; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - @CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true") @RestController @RequestMapping("/api/roles") public class RolesController { - @Autowired - private RolesRepository rolesRepository; - //get all data + private final GetRolesService getRolesService; + private final PostCreateRoleService postCreateRoleService; + private final GetRoleByIdService getRoleByIdService; + private final PutUpdateRoleService putUpdateRoleService; + private final DeleteRoleService deleteRoleService; + + public RolesController(GetRolesService getRolesService, + PostCreateRoleService postCreateRoleService, + GetRoleByIdService getRoleByIdService, + PutUpdateRoleService putUpdateRoleService, + DeleteRoleService deleteRoleService) { + this.getRolesService = getRolesService; + this.postCreateRoleService = postCreateRoleService; + this.getRoleByIdService = getRoleByIdService; + this.putUpdateRoleService = putUpdateRoleService; + this.deleteRoleService = deleteRoleService; + } + @GetMapping - public List getAllRoless(){ - return rolesRepository.findAll(); + public GetRolesResponse getRoles(@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); + RolesRequest rolesRequest = RolesRequest.builder() + .search(search) + .pageable(pageable) + .build(); + + return getRolesService.execute(rolesRequest); } - // create @PostMapping - public Roles createRoles(@RequestBody Roles roles) { - return rolesRepository.save(roles); + public RolesResponse createRoles(@RequestBody RolesRequest rolesRequest) { + return postCreateRoleService.execute(rolesRequest); } - // get roles by id rest api @GetMapping("/{id}") - public ResponseEntity getRolesById(@PathVariable Long id) { - Roles roles = rolesRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Roles not exist with id :" + id)); - return ResponseEntity.ok(roles); + public RolesResponse getRolesById(@PathVariable Long id) { + return getRoleByIdService.execute(RolesRequest.builder() + .id(id) + .build()); } - // update roles rest api @PutMapping("/{id}") - public ResponseEntity updateRoles(@PathVariable Long id, @RequestBody Roles rolesDetails){ - Roles roles = rolesRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Roles not exist with id :" + id)); - - roles.setRole(rolesDetails.getRole()); - roles.setKeterangan(rolesDetails.getKeterangan()); - roles.setIsActive(rolesDetails.getIsActive()); - - Roles updatedRoles = rolesRepository.save(roles); - return ResponseEntity.ok(updatedRoles); + public RolesResponse updateRoles(@PathVariable Long id, @RequestBody RolesRequest rolesRequest){ + rolesRequest.setId(id); + return putUpdateRoleService.execute(rolesRequest); } - // delete roles rest api @DeleteMapping("/{id}") - public ResponseEntity> deleteRoles(@PathVariable Long id){ - Roles roles = rolesRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Supposmatrix not exist with id :" + id)); - - rolesRepository.delete(roles); - Map response = new HashMap<>(); - response.put("deleted", Boolean.TRUE); - return ResponseEntity.ok(response); + public EmptyResponse deleteRoles(@PathVariable Long id){ + return deleteRoleService.execute(RolesRequest.builder() + .id(id) + .build()); } } diff --git a/src/main/java/com/iconplus/smartproc/controller/UsersController.java b/src/main/java/com/iconplus/smartproc/controller/UsersController.java index 73758c8..4dc836b 100644 --- a/src/main/java/com/iconplus/smartproc/controller/UsersController.java +++ b/src/main/java/com/iconplus/smartproc/controller/UsersController.java @@ -2,8 +2,15 @@ package com.iconplus.smartproc.controller; import com.iconplus.smartproc.model.entity.Users; import com.iconplus.smartproc.exception.ResourceNotFoundException; +import com.iconplus.smartproc.model.request.RolesRequest; +import com.iconplus.smartproc.model.request.UsersRequest; +import com.iconplus.smartproc.model.response.GetRolesResponse; +import com.iconplus.smartproc.model.response.GetUsersResponse; import com.iconplus.smartproc.repository.UsersRepository; +import com.iconplus.smartproc.service.manajemenuser.GetListUserService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -18,10 +25,36 @@ public class UsersController { @Autowired private UsersRepository usersRepository; - //get all data + private final GetListUserService getListUserService; + public UsersController(GetListUserService getListUserService) { + this.getListUserService = getListUserService; + } + + @GetMapping - public List getAllUserss(){ - return usersRepository.findAll(); + public GetUsersResponse getUsers(@RequestParam(name = "search", required = false) String search, + @RequestParam(name = "instansi", required = false) String instansi, + @RequestParam(name = "bidang", required = false) String bidang, + @RequestParam(name = "nama", required = false) String nama, + @RequestParam(name = "jabatan", required = false) String jabatan, + @RequestParam(name = "role", required = false) String role, + @RequestParam(name = "email", required = false) String email, + @RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size){ + + Pageable pageable = PageRequest.of((page - 1), size); + UsersRequest usersRequest = UsersRequest.builder() + .search(search) + .instansi(instansi) + .bidang(bidang) + .nama(nama) + .jabatan(jabatan) + .role(role) + .email(email) + .pageable(pageable) + .build(); + + return getListUserService.execute(usersRequest); } // create @@ -45,7 +78,7 @@ public class UsersController { .orElseThrow(() -> new ResourceNotFoundException("Users not exist with id :" + id)); users.setUsername(usersDetails.getUsername()); - users.setFullname(usersDetails.getFullname()); + users.setNama(usersDetails.getNama()); users.setEmail(usersDetails.getEmail()); users.setPassword(usersDetails.getPassword()); // users.setInstansi(usersDetails.getInstansi()); diff --git a/src/main/java/com/iconplus/smartproc/model/entity/Bidang.java b/src/main/java/com/iconplus/smartproc/model/entity/Bidang.java new file mode 100644 index 0000000..64002b2 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/Bidang.java @@ -0,0 +1,38 @@ +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 = "bidang") +public class Bidang extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "bidang") + private String bidang; + + @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; +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/Instansi.java b/src/main/java/com/iconplus/smartproc/model/entity/Instansi.java new file mode 100644 index 0000000..f324d83 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/Instansi.java @@ -0,0 +1,38 @@ +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 = "instansi") +public class Instansi extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "instansi") + private String instansi; + + @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; +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/JenisAnggaran.java b/src/main/java/com/iconplus/smartproc/model/entity/JenisAnggaran.java index 7e28219..7ea948b 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/JenisAnggaran.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/JenisAnggaran.java @@ -19,7 +19,7 @@ public class JenisAnggaran extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") - private long id; + private Long id; @Column(name = "jenis_anggaran") private String jenisAnggaran; @@ -27,8 +27,12 @@ public class JenisAnggaran extends BaseEntity { @Column(name = "keterangan") private String keterangan; - @Column(name = "deleted") + @Column(name = "is_active") @Type(type = "org.hibernate.type.NumericBooleanType") - private Boolean deleted; + 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/entity/JenisKontrak.java b/src/main/java/com/iconplus/smartproc/model/entity/JenisKontrak.java index 20b5e37..a84127b 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/JenisKontrak.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/JenisKontrak.java @@ -1,8 +1,10 @@ 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.*; @@ -11,11 +13,13 @@ import javax.persistence.*; @Table(name = "jenis_kontrak") @Data @Builder +@AllArgsConstructor +@NoArgsConstructor public class JenisKontrak extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") - private long id; + private Long id; @Column(name = "jenis_kontrak") private String jenisKontrak; @@ -23,8 +27,12 @@ public class JenisKontrak extends BaseEntity { @Column(name = "keterangan") private String keterangan; - @Column(name = "deleted") + @Column(name = "is_active") @Type(type = "org.hibernate.type.NumericBooleanType") - private Boolean deleted; + 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/entity/JenisPengadaan.java b/src/main/java/com/iconplus/smartproc/model/entity/JenisPengadaan.java index 52980b0..6881919 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/JenisPengadaan.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/JenisPengadaan.java @@ -1,8 +1,10 @@ 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.*; @@ -11,6 +13,8 @@ import javax.persistence.*; @Table(name = "jenis_pengadaan") @Data @Builder +@AllArgsConstructor +@NoArgsConstructor public class JenisPengadaan extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -23,8 +27,12 @@ public class JenisPengadaan extends BaseEntity { @Column(name = "keterangan") private String keterangan; - @Column(name = "deleted") + @Column(name = "is_active") @Type(type = "org.hibernate.type.NumericBooleanType") - private Boolean deleted; + 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/entity/Lokasi.java b/src/main/java/com/iconplus/smartproc/model/entity/Lokasi.java index 707dde5..8c479df 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/Lokasi.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/Lokasi.java @@ -1,8 +1,10 @@ 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.*; @@ -11,11 +13,13 @@ import javax.persistence.*; @Table(name = "lokasi") @Data @Builder +@AllArgsConstructor +@NoArgsConstructor public class Lokasi extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") - private long id; + private Long id; @Column(name = "lokasi") private String lokasi; @@ -23,8 +27,12 @@ public class Lokasi extends BaseEntity { @Column(name = "keterangan") private String keterangan; - @Column(name = "deleted") + @Column(name = "is_active") @Type(type = "org.hibernate.type.NumericBooleanType") - private Boolean deleted; + 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/entity/MetodePengadaan.java b/src/main/java/com/iconplus/smartproc/model/entity/MetodePengadaan.java index 0f0b34f..aa6a2bf 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/MetodePengadaan.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/MetodePengadaan.java @@ -1,8 +1,10 @@ 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.*; @@ -11,6 +13,8 @@ import javax.persistence.*; @Table(name = "metode_pengadaan") @Data @Builder +@AllArgsConstructor +@NoArgsConstructor public class MetodePengadaan extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -23,8 +27,8 @@ public class MetodePengadaan extends BaseEntity { @Column(name = "keterangan") private String keterangan; - @Column(name = "deleted") + @Column(name = "is_active") @Type(type = "org.hibernate.type.NumericBooleanType") - private Boolean deleted; + private Boolean isDelete; } diff --git a/src/main/java/com/iconplus/smartproc/model/entity/MetodePenyampaian.java b/src/main/java/com/iconplus/smartproc/model/entity/MetodePenyampaian.java index 900a8e1..23093cf 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/MetodePenyampaian.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/MetodePenyampaian.java @@ -2,8 +2,10 @@ 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.*; @@ -12,6 +14,8 @@ import javax.persistence.*; @Table(name = "metode_penyampaian") @Data @Builder +@AllArgsConstructor +@NoArgsConstructor public class MetodePenyampaian extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -24,8 +28,12 @@ public class MetodePenyampaian extends BaseEntity { @Column(name = "keterangan") private String keterangan; - @Column(name = "deleted") + @Column(name = "is_active") @Type(type = "org.hibernate.type.NumericBooleanType") - private Boolean deleted; + 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/entity/Roles.java b/src/main/java/com/iconplus/smartproc/model/entity/Roles.java index 5be5838..9e3fda2 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/Roles.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/Roles.java @@ -1,21 +1,25 @@ 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.*; -@Entity -@Table(name = "roles") @Data @Builder +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "roles") public class Roles extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") - private long id; + private Long id; @Column(name = "role") private String role; @@ -27,8 +31,8 @@ public class Roles extends BaseEntity { @Type(type = "org.hibernate.type.NumericBooleanType") private Boolean isActive; - @Column(name = "deleted") + @Column(name = "is_delete") @Type(type = "org.hibernate.type.NumericBooleanType") - private Boolean deleted; + private Boolean isDelete; } diff --git a/src/main/java/com/iconplus/smartproc/model/entity/StrategiPengadaan.java b/src/main/java/com/iconplus/smartproc/model/entity/StrategiPengadaan.java index a890f8e..9b84d45 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/StrategiPengadaan.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/StrategiPengadaan.java @@ -1,8 +1,10 @@ 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.*; @@ -11,6 +13,8 @@ import javax.persistence.*; @Table(name = "strategi_pengadaan") @Data @Builder +@AllArgsConstructor +@NoArgsConstructor public class StrategiPengadaan extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -23,8 +27,12 @@ public class StrategiPengadaan extends BaseEntity { @Column(name = "keterangan") private String keterangan; - @Column(name = "deleted") + @Column(name = "is_active") @Type(type = "org.hibernate.type.NumericBooleanType") - private Boolean deleted; + 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/entity/SumberDana.java b/src/main/java/com/iconplus/smartproc/model/entity/SumberDana.java index cdae9d1..1e50261 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/SumberDana.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/SumberDana.java @@ -1,8 +1,10 @@ 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.*; @@ -11,6 +13,8 @@ import javax.persistence.*; @Table(name = "sumber_dana") @Data @Builder +@AllArgsConstructor +@NoArgsConstructor public class SumberDana extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -23,8 +27,12 @@ public class SumberDana extends BaseEntity { @Column(name = "keterangan") private String keterangan; - @Column(name = "deleted") + @Column(name = "is_active") @Type(type = "org.hibernate.type.NumericBooleanType") - private Boolean deleted; + 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/entity/SupplyPositioningMatrix.java b/src/main/java/com/iconplus/smartproc/model/entity/SupplyPositioningMatrix.java index 39b4881..841b74c 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/SupplyPositioningMatrix.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/SupplyPositioningMatrix.java @@ -1,8 +1,10 @@ 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.*; @@ -11,6 +13,8 @@ import javax.persistence.*; @Table(name = "supply_positioning_matrix") @Data @Builder +@AllArgsConstructor +@NoArgsConstructor public class SupplyPositioningMatrix extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -23,8 +27,12 @@ public class SupplyPositioningMatrix extends BaseEntity { @Column(name = "keterangan") private String keterangan; - @Column(name = "deleted") + @Column(name = "is_active") @Type(type = "org.hibernate.type.NumericBooleanType") - private Boolean deleted; + 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/entity/TokenManagement.java b/src/main/java/com/iconplus/smartproc/model/entity/TokenManagement.java index 10c7b65..75c9963 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/TokenManagement.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/TokenManagement.java @@ -45,7 +45,7 @@ public class TokenManagement extends BaseEntity { @Column(name = "expired_time") private Timestamp expiredTime; - @Column(name = "deleted") + @Column(name = "is_delete") @Type(type = "org.hibernate.type.NumericBooleanType") - private Boolean deleted; + private Boolean isDelete; } diff --git a/src/main/java/com/iconplus/smartproc/model/entity/UnitInisiator.java b/src/main/java/com/iconplus/smartproc/model/entity/UnitInisiator.java index c33558f..3ff82d8 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/UnitInisiator.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/UnitInisiator.java @@ -1,8 +1,10 @@ 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.*; @@ -11,6 +13,8 @@ import javax.persistence.*; @Table(name = "unit_inisiator") @Data @Builder +@AllArgsConstructor +@NoArgsConstructor public class UnitInisiator extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -23,8 +27,12 @@ public class UnitInisiator extends BaseEntity { @Column(name = "keterangan") private String keterangan; - @Column(name = "deleted") + @Column(name = "is_active") @Type(type = "org.hibernate.type.NumericBooleanType") - private Boolean deleted; + 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/entity/Users.java b/src/main/java/com/iconplus/smartproc/model/entity/Users.java index 1e5ab59..0ec4c8d 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/Users.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/Users.java @@ -1,27 +1,31 @@ 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.*; -@Entity -@Table(name = "users") @Data @Builder +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "users") public class Users extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") - private long id; + private Long id; @Column(name = "username") private String username; - @Column(name = "fullname") - private String fullname; + @Column(name = "nama") + private String nama; @Column(name = "email") private String email; @@ -30,10 +34,10 @@ public class Users extends BaseEntity { private String password; @Column(name = "instansi_id") - private String instansiId; + private Long instansiId; @Column(name = "bidang_id") - private String bidangId; + private Long bidangId; @Column(name = "jabatan") private String jabatan; @@ -45,7 +49,7 @@ public class Users extends BaseEntity { @Type(type = "org.hibernate.type.NumericBooleanType") private Boolean isActive; - @Column(name = "deleted") + @Column(name = "is_delete") @Type(type = "org.hibernate.type.NumericBooleanType") - private Boolean deleted; + private Boolean isDelete; } diff --git a/src/main/java/com/iconplus/smartproc/model/projection/JenisAnggaranView.java b/src/main/java/com/iconplus/smartproc/model/projection/JenisAnggaranView.java index 3f77ef0..28ace7e 100644 --- a/src/main/java/com/iconplus/smartproc/model/projection/JenisAnggaranView.java +++ b/src/main/java/com/iconplus/smartproc/model/projection/JenisAnggaranView.java @@ -5,10 +5,12 @@ public interface JenisAnggaranView { Long getId(); String getJenisAnggaran(); String getKeterangan(); - Boolean getDeleted(); + String getIsActive(); + Boolean getIsDelete(); void setId(Long id); void setJenisAnggaran(String jenisAnggaran); void setKeterangan(String keterangan); - void setDeleted(Boolean deleted); + void setIsActive(Boolean isActive); + void setIsDelete(Boolean isDelete); } diff --git a/src/main/java/com/iconplus/smartproc/model/projection/RolesView.java b/src/main/java/com/iconplus/smartproc/model/projection/RolesView.java new file mode 100644 index 0000000..78e6519 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/RolesView.java @@ -0,0 +1,16 @@ +package com.iconplus.smartproc.model.projection; + +public interface RolesView { + + Long getId(); + String getRole(); + String getKeterangan(); + Boolean getIsActive(); + Boolean getIsDelete(); + + void setId(Long id); + void setRole(String role); + void setKeterangan(String keterangan); + void setIsActive(Boolean isActive); + void setIsDelete(Boolean isDelete); +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/UserRoleView.java b/src/main/java/com/iconplus/smartproc/model/projection/UserRoleView.java index 284aa4d..b931002 100644 --- a/src/main/java/com/iconplus/smartproc/model/projection/UserRoleView.java +++ b/src/main/java/com/iconplus/smartproc/model/projection/UserRoleView.java @@ -4,16 +4,32 @@ public interface UserRoleView { Long getId(); String getUsername(); + String getNama(); + String getEmail(); + Long getInstansiId(); + String getInstansi(); + Long getBidangId(); + String getBidang(); + String getJabatan(); + Boolean getIsActive(); String getPassword(); Long getRoleId(); String getRole(); - Boolean getDeleted(); + Boolean getIsDelete(); void setId(Long id); void setUsername(String username); + void setNama(String nama); + void setEmail(String email); + void setInstatnsi(String instansi); + void setBidang(String bidang); + void setJabatan(String Jabatan); + void setInstatnsiId(Long instansiId); + void setBidangId(Long bidangId); + void setIsActive(Boolean isActive); void setPassword(String password); void setRoleId(Long roleId); void setRole(String role); - void setDeleted(Boolean deleted); + void setIsDelete(Boolean isDelete); } diff --git a/src/main/java/com/iconplus/smartproc/model/request/JenisAnggaranRequest.java b/src/main/java/com/iconplus/smartproc/model/request/JenisAnggaranRequest.java index 003af07..8ed6848 100644 --- a/src/main/java/com/iconplus/smartproc/model/request/JenisAnggaranRequest.java +++ b/src/main/java/com/iconplus/smartproc/model/request/JenisAnggaranRequest.java @@ -13,7 +13,7 @@ public class JenisAnggaranRequest extends BaseRequest { private String jenisAnggaran; private String keterangan; private Boolean isActive; - private Boolean deleted; + private Boolean isDelete; private String search; private transient Pageable pageable; } diff --git a/src/main/java/com/iconplus/smartproc/model/request/RolesRequest.java b/src/main/java/com/iconplus/smartproc/model/request/RolesRequest.java index c03828c..7177a9b 100644 --- a/src/main/java/com/iconplus/smartproc/model/request/RolesRequest.java +++ b/src/main/java/com/iconplus/smartproc/model/request/RolesRequest.java @@ -5,6 +5,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import org.springframework.data.domain.Pageable; @Data @Builder @@ -16,6 +17,8 @@ public class RolesRequest extends BaseRequest { private String role; private String keterangan; private Boolean isActive; - private Boolean deleted; + private Boolean isDelete; + private String search; + private transient Pageable pageable; } diff --git a/src/main/java/com/iconplus/smartproc/model/request/UsersRequest.java b/src/main/java/com/iconplus/smartproc/model/request/UsersRequest.java new file mode 100644 index 0000000..373b00c --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/UsersRequest.java @@ -0,0 +1,27 @@ +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 UsersRequest extends BaseRequest { + + private Long id; + private String username; + private String instansi; + private String bidang; + private String nama; + private String jabatan; + private String role; + private String email; + private Boolean isActive; + private String search; + private transient Pageable pageable; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetRolesResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetRolesResponse.java new file mode 100644 index 0000000..5967478 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetRolesResponse.java @@ -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 GetRolesResponse extends BaseResponse { + + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetUsersResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetUsersResponse.java new file mode 100644 index 0000000..6b86b9c --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetUsersResponse.java @@ -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 GetUsersResponse extends BaseResponse { + + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/JenisAnggaranResponse.java b/src/main/java/com/iconplus/smartproc/model/response/JenisAnggaranResponse.java index 3d73169..39cd323 100644 --- a/src/main/java/com/iconplus/smartproc/model/response/JenisAnggaranResponse.java +++ b/src/main/java/com/iconplus/smartproc/model/response/JenisAnggaranResponse.java @@ -16,6 +16,6 @@ public class JenisAnggaranResponse extends BaseResponse { private String jenisAnggaran; private String keterangan; private Boolean isActive; - private Boolean deleted; + private Boolean isDelete; } diff --git a/src/main/java/com/iconplus/smartproc/model/response/RolesResponse.java b/src/main/java/com/iconplus/smartproc/model/response/RolesResponse.java index 012c815..11ece70 100644 --- a/src/main/java/com/iconplus/smartproc/model/response/RolesResponse.java +++ b/src/main/java/com/iconplus/smartproc/model/response/RolesResponse.java @@ -16,6 +16,6 @@ public class RolesResponse extends BaseResponse { private String role; private String keterangan; private Boolean isActive; - private Boolean deleted; + private Boolean isDelete; } diff --git a/src/main/java/com/iconplus/smartproc/model/response/UsersResponse.java b/src/main/java/com/iconplus/smartproc/model/response/UsersResponse.java new file mode 100644 index 0000000..9bcf829 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/UsersResponse.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; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class UsersResponse extends BaseResponse { + private Long id; + private String instansi; + private String bidang; + private String nama; + private String jabatan; + private String role; + private String email; + private Boolean isActive; + private Boolean isDelete; +} diff --git a/src/main/java/com/iconplus/smartproc/repository/JenisAnggaranRepository.java b/src/main/java/com/iconplus/smartproc/repository/JenisAnggaranRepository.java index d601d1c..a25164b 100644 --- a/src/main/java/com/iconplus/smartproc/repository/JenisAnggaranRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/JenisAnggaranRepository.java @@ -16,16 +16,16 @@ public interface JenisAnggaranRepository extends JpaRepository getAllJenisAnggaran(String search, Pageable pageable); - Optional findByIdAndDeletedFalse(Long id); + Optional findByIdAndIsDeleteFalse(Long id); - Optional findByJenisAnggaranAndDeletedFalse(String jenisAnggaran); + Optional findByJenisAnggaranAndIsDeleteFalse(String jenisAnggaran); } diff --git a/src/main/java/com/iconplus/smartproc/repository/RolesRepository.java b/src/main/java/com/iconplus/smartproc/repository/RolesRepository.java index 470cc0e..5cf54e5 100644 --- a/src/main/java/com/iconplus/smartproc/repository/RolesRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/RolesRepository.java @@ -1,11 +1,15 @@ package com.iconplus.smartproc.repository; import com.iconplus.smartproc.model.entity.Roles; +import com.iconplus.smartproc.model.projection.RolesView; import com.iconplus.smartproc.model.projection.UserRoleView; +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 @@ -18,13 +22,25 @@ public interface RolesRepository extends JpaRepository { "r.role as role " + "FROM Users u " + "join Roles r on r.id=u.roleId " + - "WHERE u.deleted = false " + - "AND r.deleted = false " + + "WHERE u.isDelete = false " + + "AND r.isDelete = false " + "AND u.username = :userName ") Optional getUserRoleByUserId(String userName); - Optional findByIdAndDeletedFalse(Long id); + @Query(value = "SELECT r.id as id, " + + "r.role as role, " + + "r.keterangan as keterangan, " + + "r.isActive as isActive, " + + "r.isDelete as isDelete " + + "FROM Roles r " + + "WHERE r.isDelete = false " + + "AND (:search = '' " + + "or (UPPER(r.role) like :search OR UPPER(r.keterangan) like :search)) " + + "ORDER BY r.id") + Page findAllRolesANdDeletedFalse(String search, Pageable pageable); - Optional findByRoleAndDeletedFalse(Long id); + Optional findByIdAndIsDeleteFalse(Long id); + + Optional findByRoleAndIsDeleteFalse(String role); } diff --git a/src/main/java/com/iconplus/smartproc/repository/TokenManagementRepository.java b/src/main/java/com/iconplus/smartproc/repository/TokenManagementRepository.java index 9809026..57e0b55 100644 --- a/src/main/java/com/iconplus/smartproc/repository/TokenManagementRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/TokenManagementRepository.java @@ -13,7 +13,7 @@ public interface TokenManagementRepository extends JpaRepository= SYSDATE", nativeQuery = true) List findAccessTokenByUserIdAndDeletedFalse(String userId); } diff --git a/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java b/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java index e15d932..14e45c0 100644 --- a/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java @@ -1,7 +1,11 @@ package com.iconplus.smartproc.repository; import com.iconplus.smartproc.model.entity.Users; +import com.iconplus.smartproc.model.projection.UserRoleView; +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; @@ -9,6 +13,25 @@ import java.util.Optional; @Repository public interface UsersRepository extends JpaRepository { - Optional findByEmailAndDeletedFalse(String email); + @Query("SELECT u.id as id, " + + "u.nama as nama, " + + "u.jabatan as jabatan, " + + "r.role as role, " + + "u.email as email, " + + "u.isActive as isActive, " + + "u.isDelete as isDelete " + + "FROM Users u " + + "JOIN Roles r ON r.id = u.roleId " + + "Where u.isDelete = false " + + "AND (:search='' " + + "or (UPPER(u.nama) like :search " + + " OR UPPER(u.jabatan) like :search " + + " OR UPPER(r.role) like :search " + + " OR UPPER(u.email) like :search) " + + ") " + + "ORDER by u.id") + Page getAllUsersAndDeletedFase(String search, Pageable pageable); + + Optional findByEmailAndIsDeleteFalse(String email); } diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java b/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java index e824182..2b371b4 100644 --- a/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java +++ b/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java @@ -26,7 +26,7 @@ public class LoginService implements BaseService { @Override public LoginResponse execute(LoginRequest input) { - var user= usersRepository.findByEmailAndDeletedFalse(input.getEmail()) + var user= usersRepository.findByEmailAndIsDeleteFalse(input.getEmail()) .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, Constants.ERR_CODE_10003, Constants.ERR_TTL_10003, diff --git a/src/main/java/com/iconplus/smartproc/service/jenisanggaran/DeleteJenisAnggaranService.java b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/DeleteJenisAnggaranService.java index 9999044..3a13142 100644 --- a/src/main/java/com/iconplus/smartproc/service/jenisanggaran/DeleteJenisAnggaranService.java +++ b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/DeleteJenisAnggaranService.java @@ -3,7 +3,6 @@ package com.iconplus.smartproc.service.jenisanggaran; 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.entity.JenisAnggaran; import com.iconplus.smartproc.model.request.JenisAnggaranRequest; import com.iconplus.smartproc.repository.JenisAnggaranRepository; import com.iconplus.smartproc.util.Constants; @@ -25,15 +24,15 @@ public class DeleteJenisAnggaranService implements BaseService new BusinessException(HttpStatus.CONFLICT, Constants.ERR_CODE_10001, Constants.ERR_TTL_10001, String.format(Constants.ERR_MSG_10001, input.getId()))); - jenisAnggaran.setDeleted(true); + jenisAnggaran.setIsDelete(true); jenisAnggaranRepository.save(jenisAnggaran); - log.info("success delete jenis anggaran id {}", jenisAnggaran.getDeleted()); + log.info("success delete jenis anggaran id {}", jenisAnggaran.getIsDelete()); return new EmptyResponse(); } } diff --git a/src/main/java/com/iconplus/smartproc/service/jenisanggaran/GetJenisAnggaranByIdService.java b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/GetJenisAnggaranByIdService.java index 9d69226..25a5125 100644 --- a/src/main/java/com/iconplus/smartproc/service/jenisanggaran/GetJenisAnggaranByIdService.java +++ b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/GetJenisAnggaranByIdService.java @@ -21,7 +21,7 @@ public class GetJenisAnggaranByIdService implements BaseService new BusinessException(HttpStatus.CONFLICT, Constants.ERR_CODE_10001, Constants.ERR_TTL_10001, @@ -34,7 +34,7 @@ public class PutUpdateJenisAnggaranService implements BaseService { + + private UsersRepository usersRepository; + + public GetListUserService(UsersRepository usersRepository) { + this.usersRepository = usersRepository; + } + + @Override + public GetUsersResponse execute(UsersRequest input) { + validateRequest(input); + List usersResponses = new ArrayList<>(); + var userRoleViews = usersRepository.getAllUsersAndDeletedFase(input.getEmail(), input.getPageable()); + + for (UserRoleView userRoleView : userRoleViews) { + UsersResponse usersResponse = UsersResponse.builder() + .id(userRoleView.getId()) + .instansi(userRoleView.getInstansi()) + .bidang(userRoleView.getBidang()) + .nama(userRoleView.getNama()) + .jabatan(userRoleView.getJabatan()) + .role(userRoleView.getRole()) + .email(userRoleView.getEmail()) + .isActive(userRoleView.getIsActive()) + .build(); + usersResponses.add(usersResponse); + } + + return GetUsersResponse.builder() + .data(usersResponses) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(userRoleViews.getTotalPages()) + .totalRecords(userRoleViews.getTotalElements()) + .isFirstPage(userRoleViews.isFirst()) + .isLastPage(userRoleViews.isLast()) + .build()) + .build(); + } + + private void validateRequest(UsersRequest input) { + if (StringUtils.isNotBlank(input.getSearch())) { + input.setSearch('%'+ input.getSearch().toUpperCase()+'%'); + } + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/manajemenuser/PostCreateUserService.java b/src/main/java/com/iconplus/smartproc/service/manajemenuser/PostCreateUserService.java new file mode 100644 index 0000000..4598602 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/manajemenuser/PostCreateUserService.java @@ -0,0 +1,43 @@ +package com.iconplus.smartproc.service.manajemenuser; + +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.Users; +import com.iconplus.smartproc.model.request.UsersRequest; +import com.iconplus.smartproc.model.response.UsersResponse; +import com.iconplus.smartproc.repository.UsersRepository; +import org.springframework.stereotype.Service; + +@Service +public class PostCreateUserService implements BaseService { + + private UsersRepository usersRepository; + + public PostCreateUserService(UsersRepository usersRepository) { + this.usersRepository = usersRepository; + } + + @Override + public UsersResponse execute(UsersRequest input) { + + + Users users = Users.builder() +// .id(input.getId()) +// .username(input.getUsername()) +// .email(input.getEmail()) +// .nama(input.getNama()) +// .bidangId(1L) +// .instansiId(1L) +// .roleId(in) +// .jabatan() +// .password() +// .isActive() +// .deleted(false) + .build(); + + var result = usersRepository.save(users); + return UsersResponse.builder() + .id(result.getId()) + .build(); + + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/role/DeleteRoleService.java b/src/main/java/com/iconplus/smartproc/service/role/DeleteRoleService.java deleted file mode 100644 index 92cc5a0..0000000 --- a/src/main/java/com/iconplus/smartproc/service/role/DeleteRoleService.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.iconplus.smartproc.service.role; - -import com.iconplus.smartproc.helper.service.BaseService; -import com.iconplus.smartproc.model.request.RolesRequest; -import com.iconplus.smartproc.model.response.RolesResponse; -import com.iconplus.smartproc.repository.RolesRepository; -import org.springframework.stereotype.Service; - -@Service -public class DeleteRoleService implements BaseService { - - private RolesRepository rolesRepository; - - public DeleteRoleService(RolesRepository rolesRepository) { - this.rolesRepository = rolesRepository; - } - - @Override - public RolesResponse execute(RolesRequest input) { - - return null; - } -} diff --git a/src/main/java/com/iconplus/smartproc/service/role/GetRoleByIdService.java b/src/main/java/com/iconplus/smartproc/service/role/GetRoleByIdService.java deleted file mode 100644 index c23af74..0000000 --- a/src/main/java/com/iconplus/smartproc/service/role/GetRoleByIdService.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.iconplus.smartproc.service.role; - -import org.springframework.stereotype.Service; - -@Service -public class GetRoleByIdService { -} diff --git a/src/main/java/com/iconplus/smartproc/service/role/GetRolesService.java b/src/main/java/com/iconplus/smartproc/service/role/GetRolesService.java deleted file mode 100644 index 86f1589..0000000 --- a/src/main/java/com/iconplus/smartproc/service/role/GetRolesService.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.iconplus.smartproc.service.role; - -import org.springframework.stereotype.Service; - -@Service -public class GetRolesService { -} diff --git a/src/main/java/com/iconplus/smartproc/service/role/PostCreateRoleService.java b/src/main/java/com/iconplus/smartproc/service/role/PostCreateRoleService.java deleted file mode 100644 index 0c4c47e..0000000 --- a/src/main/java/com/iconplus/smartproc/service/role/PostCreateRoleService.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.iconplus.smartproc.service.role; - -import org.springframework.stereotype.Service; - -@Service -public class PostCreateRoleService { -} diff --git a/src/main/java/com/iconplus/smartproc/service/role/PutUpdateRoleService.java b/src/main/java/com/iconplus/smartproc/service/role/PutUpdateRoleService.java deleted file mode 100644 index 9e57ba2..0000000 --- a/src/main/java/com/iconplus/smartproc/service/role/PutUpdateRoleService.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.iconplus.smartproc.service.role; - -import com.iconplus.smartproc.helper.service.BaseService; -import org.springframework.stereotype.Service; - -//@Service -//public class PutUpdateRoleService implements BaseService<> { -//} diff --git a/src/main/java/com/iconplus/smartproc/service/roles/DeleteRoleService.java b/src/main/java/com/iconplus/smartproc/service/roles/DeleteRoleService.java new file mode 100644 index 0000000..f5a4c17 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/roles/DeleteRoleService.java @@ -0,0 +1,33 @@ +package com.iconplus.smartproc.service.roles; + +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.entity.Roles; +import com.iconplus.smartproc.model.request.RolesRequest; +import com.iconplus.smartproc.repository.RolesRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + +@Service +public class DeleteRoleService implements BaseService { + + private RolesRepository rolesRepository; + public DeleteRoleService(RolesRepository rolesRepository) { + this.rolesRepository = rolesRepository; + } + + @Override + public EmptyResponse execute(RolesRequest input) { + + Roles role = rolesRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10005, + Constants.ERR_TTL_10005, + String.format(Constants.ERR_MSG_10005, input.getId()))); + + role.setIsDelete(true); + rolesRepository.save(role); + + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/roles/GetRoleByIdService.java b/src/main/java/com/iconplus/smartproc/service/roles/GetRoleByIdService.java new file mode 100644 index 0000000..bc7f7c2 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/roles/GetRoleByIdService.java @@ -0,0 +1,36 @@ +package com.iconplus.smartproc.service.roles; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.Roles; +import com.iconplus.smartproc.model.request.RolesRequest; +import com.iconplus.smartproc.model.response.RolesResponse; +import com.iconplus.smartproc.repository.RolesRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + +@Service +public class GetRoleByIdService implements BaseService { + + private final RolesRepository rolesRepository; + public GetRoleByIdService(RolesRepository rolesRepository) { + this.rolesRepository = rolesRepository; + } + + @Override + public RolesResponse execute(RolesRequest input) { + + Roles role = rolesRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10005, + Constants.ERR_TTL_10005, + String.format(Constants.ERR_MSG_10005, input.getId()))); + + return RolesResponse.builder() + .id(role.getId()) + .role(role.getRole()) + .keterangan(role.getKeterangan()) + .isActive(role.getIsActive()) + .isDelete(role.getIsDelete()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/roles/GetRolesService.java b/src/main/java/com/iconplus/smartproc/service/roles/GetRolesService.java new file mode 100644 index 0000000..d2399b4 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/roles/GetRolesService.java @@ -0,0 +1,60 @@ +package com.iconplus.smartproc.service.roles; + +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.RolesView; +import com.iconplus.smartproc.model.request.RolesRequest; +import com.iconplus.smartproc.model.response.GetRolesResponse; +import com.iconplus.smartproc.model.response.RolesResponse; +import com.iconplus.smartproc.repository.RolesRepository; +import org.apache.commons.lang3.StringUtils; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetRolesService implements BaseService { + + private final RolesRepository rolesRepository; + public GetRolesService(RolesRepository rolesRepository) { + this.rolesRepository = rolesRepository; + } + + @Override + public GetRolesResponse execute(RolesRequest input) { + validateRequest(input); + List rolesResponseList = new ArrayList<>(); + Page rolesViews = rolesRepository.findAllRolesANdDeletedFalse(input.getSearch(), input.getPageable()); + + for (RolesView rolesView : rolesViews) { + RolesResponse rolesResponse = RolesResponse.builder() + .id(rolesView.getId()) + .role(rolesView.getRole()) + .keterangan(rolesView.getKeterangan()) + .isActive(rolesView.getIsActive()) + .isDelete(rolesView.getIsDelete()) + .build(); + rolesResponseList.add(rolesResponse); + } + + return GetRolesResponse.builder() + .data(rolesResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(rolesViews.getTotalPages()) + .totalRecords(rolesViews.getTotalElements()) + .isFirstPage(rolesViews.isFirst()) + .isLastPage(rolesViews.isLast()) + .build()) + .build(); + } + + private void validateRequest(RolesRequest input) { + if (StringUtils.isNotBlank(input.getSearch())) { + input.setSearch('%'+ input.getSearch().toUpperCase()+'%'); + } + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/roles/PostCreateRoleService.java b/src/main/java/com/iconplus/smartproc/service/roles/PostCreateRoleService.java new file mode 100644 index 0000000..c571fd5 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/roles/PostCreateRoleService.java @@ -0,0 +1,44 @@ +package com.iconplus.smartproc.service.roles; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.Roles; +import com.iconplus.smartproc.model.request.RolesRequest; +import com.iconplus.smartproc.model.response.RolesResponse; +import com.iconplus.smartproc.repository.RolesRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + +import java.util.Optional; + +@Service +public class PostCreateRoleService implements BaseService { + + private final RolesRepository rolesRepository; + public PostCreateRoleService(RolesRepository rolesRepository) { + this.rolesRepository = rolesRepository; + } + + @Override + public RolesResponse execute(RolesRequest input) { + + Optional role = rolesRepository.findByRoleAndIsDeleteFalse(input.getRole()); + if (role.isPresent()) { + throw new BusinessException(Constants.ERR_CODE_10006, + Constants.ERR_TTL_10006, + String.format(Constants.ERR_MSG_10006, input.getRole())); + } + + Roles roles = Roles.builder() + .role(input.getRole()) + .keterangan(input.getKeterangan()) + .isActive(input.getIsActive()) + .isDelete(false) + .build(); + var result = rolesRepository.save(roles); + + return RolesResponse.builder() + .id(result.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/roles/PutUpdateRoleService.java b/src/main/java/com/iconplus/smartproc/service/roles/PutUpdateRoleService.java new file mode 100644 index 0000000..e48aa65 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/roles/PutUpdateRoleService.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.service.roles; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.Roles; +import com.iconplus.smartproc.model.request.RolesRequest; +import com.iconplus.smartproc.model.response.RolesResponse; +import com.iconplus.smartproc.repository.RolesRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + +@Service +public class PutUpdateRoleService implements BaseService { + + private final RolesRepository rolesRepository; + public PutUpdateRoleService(RolesRepository rolesRepository) { + this.rolesRepository = rolesRepository; + } + + @Override + public RolesResponse execute(RolesRequest input) { + + Roles role = rolesRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10005, + Constants.ERR_TTL_10005, + String.format(Constants.ERR_MSG_10005, input.getId()))); + + role.setRole(input.getRole()); + role.setKeterangan(input.getKeterangan()); + role.setIsActive(input.getIsActive()); + rolesRepository.save(role); + + return RolesResponse.builder() + .id(role.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 9273684..e013a2f 100644 --- a/src/main/java/com/iconplus/smartproc/util/Constants.java +++ b/src/main/java/com/iconplus/smartproc/util/Constants.java @@ -10,7 +10,7 @@ public class Constants { public static final String ERR_CODE_10002 = "10002"; public static final String ERR_TTL_10002 = "Data tersedia"; - public static final String ERR_MSG_10002 = "Jenis Anggaran dengan id : %s sudah tersedia"; + public static final String ERR_MSG_10002 = "Jenis Anggaran : %s sudah tersedia"; public static final String ERR_CODE_10003 = "10003"; public static final String ERR_TTL_10003 = "Data tidak tersedia"; @@ -20,6 +20,14 @@ public class Constants { public static final String ERR_TTL_10004 = "Gagal Authentikasi User"; public static final String ERR_MSG_10004 = "Silahkan Periksa kembali Email dan Password Anda"; + public static final String ERR_CODE_10005 = "10005"; + public static final String ERR_TTL_10005 = "Data tidak tersedia"; + public static final String ERR_MSG_10005 = "Role dengan id : %s tidak ditemukan"; + + public static final String ERR_CODE_10006 = "10006"; + public static final String ERR_TTL_10006 = "Data tersedia"; + public static final String ERR_MSG_10006 = "Role : %s sudah tersedia"; + public static final String ERR_CODE_40041 = "40041"; public static final String ERR_TTL_40041 = "Terjadi Gangguan"; public static final String ERR_MSG_40041 = "Masalah Koneksi System"; diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index 4340c9d..69e2bf7 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -11,7 +11,7 @@ spring: driver-class-name: org.postgresql.Driver url: jdbc:postgresql://localhost:5432/smartproc username: postgres - password: postgres + password: postgre jackson: default-property-inclusion: NON_NULL jpa: From 4c500b18f5188878440e7746ce2f9c22938b9284 Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Wed, 24 May 2023 09:31:01 +0700 Subject: [PATCH 09/63] refactor v2 --- .../smartproc/helper/base/BaseEntity.java | 16 ++++++++-------- .../PostCreateJenisAnggaranService.java | 1 - .../PutUpdateJenisAnggaranService.java | 2 +- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/iconplus/smartproc/helper/base/BaseEntity.java b/src/main/java/com/iconplus/smartproc/helper/base/BaseEntity.java index 521bd66..d59a2ea 100644 --- a/src/main/java/com/iconplus/smartproc/helper/base/BaseEntity.java +++ b/src/main/java/com/iconplus/smartproc/helper/base/BaseEntity.java @@ -13,18 +13,18 @@ import java.sql.Timestamp; @MappedSuperclass public class BaseEntity implements Serializable { - @Column(name = "created_by", length = 50) - private String createdBy; + @Column(name = "user_created", length = 50) + private String userCreated; - @Column(name = "created_time", nullable = false, updatable=false) + @Column(name = "time_created", nullable = false, updatable=false) @CreationTimestamp - private Timestamp createdTime; + private Timestamp timeCreated; - @Column(name = "updated_by", length = 50) - private String updatedBy; + @Column(name = "user_update", length = 50) + private String userUpdate; - @Column(name = "updated_time") + @Column(name = "last_update") @UpdateTimestamp - private Timestamp updatedTime; + private Timestamp lastUpdate; } diff --git a/src/main/java/com/iconplus/smartproc/service/jenisanggaran/PostCreateJenisAnggaranService.java b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/PostCreateJenisAnggaranService.java index d22e05b..7ea011d 100644 --- a/src/main/java/com/iconplus/smartproc/service/jenisanggaran/PostCreateJenisAnggaranService.java +++ b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/PostCreateJenisAnggaranService.java @@ -39,7 +39,6 @@ public class PostCreateJenisAnggaranService implements BaseService Date: Wed, 24 May 2023 12:21:01 +0700 Subject: [PATCH 10/63] add api instansi and user management --- .../controller/InstansiController.java | 74 ++++++++++++++++++ .../smartproc/controller/UsersController.java | 77 +++++++------------ .../smartproc/model/entity/Instansi.java | 3 + .../model/projection/InstansiView.java | 23 ++++++ .../model/projection/UserRoleView.java | 6 +- .../model/request/InstansiRequest.java | 25 ++++++ .../smartproc/model/request/UsersRequest.java | 4 + .../response/GetListInstansiResponse.java | 20 +++++ .../model/response/InstansiResponse.java | 21 +++++ .../model/response/UsersResponse.java | 12 ++- .../repository/BidangRepository.java | 13 ++++ .../repository/InstansiRepository.java | 30 ++++++++ .../smartproc/repository/UsersRepository.java | 31 ++++++++ .../smartproc/service/CommonService.java | 47 +++++++++++ .../instansi/DeleteInstansiService.java | 30 ++++++++ .../instansi/GetInstansiByIdService.java | 34 ++++++++ .../instansi/GetListInstansiService.java | 65 ++++++++++++++++ .../instansi/PostCreateInstansiService.java | 41 ++++++++++ .../instansi/PutUpdateInstansiService.java | 35 +++++++++ .../manajemenuser/DeleteUserService.java | 30 ++++++++ .../manajemenuser/GetListUserService.java | 10 ++- .../manajemenuser/GetUserByIdService.java | 40 ++++++++++ .../manajemenuser/PostCreateUserService.java | 38 +++++---- .../manajemenuser/PutUpdateUserService.java | 45 +++++++++++ 24 files changed, 683 insertions(+), 71 deletions(-) create mode 100644 src/main/java/com/iconplus/smartproc/controller/InstansiController.java create mode 100644 src/main/java/com/iconplus/smartproc/model/projection/InstansiView.java create mode 100644 src/main/java/com/iconplus/smartproc/model/request/InstansiRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/GetListInstansiResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/InstansiResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/repository/BidangRepository.java create mode 100644 src/main/java/com/iconplus/smartproc/repository/InstansiRepository.java create mode 100644 src/main/java/com/iconplus/smartproc/service/CommonService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/instansi/DeleteInstansiService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/instansi/GetInstansiByIdService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/instansi/GetListInstansiService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/instansi/PostCreateInstansiService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/instansi/PutUpdateInstansiService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/manajemenuser/DeleteUserService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/manajemenuser/GetUserByIdService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/manajemenuser/PutUpdateUserService.java diff --git a/src/main/java/com/iconplus/smartproc/controller/InstansiController.java b/src/main/java/com/iconplus/smartproc/controller/InstansiController.java new file mode 100644 index 0000000..bd1455c --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/controller/InstansiController.java @@ -0,0 +1,74 @@ +package com.iconplus.smartproc.controller; + +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.InstansiRequest; +import com.iconplus.smartproc.model.response.GetListInstansiResponse; +import com.iconplus.smartproc.model.response.InstansiResponse; +import com.iconplus.smartproc.service.instansi.*; +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/instansi") +public class InstansiController { + + private final GetListInstansiService getListInstansiService; + private final PostCreateInstansiService postCreateInstansiService; + private final PutUpdateInstansiService putUpdateInstansiService; + private final GetInstansiByIdService getInstansiByIdService; + private final DeleteInstansiService deleteInstansiService; + + public InstansiController(GetListInstansiService getListInstansiService, + PostCreateInstansiService postCreateInstansiService, + PutUpdateInstansiService putUpdateInstansiService, + GetInstansiByIdService getInstansiByIdService, + DeleteInstansiService deleteInstansiService) { + this.getListInstansiService = getListInstansiService; + this.postCreateInstansiService = postCreateInstansiService; + this.putUpdateInstansiService = putUpdateInstansiService; + this.getInstansiByIdService = getInstansiByIdService; + this.deleteInstansiService = deleteInstansiService; + + } + + @GetMapping + public GetListInstansiResponse 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); + InstansiRequest instansiRequest = InstansiRequest.builder() + .search(search) + .pageable(pageable) + .build(); + + return getListInstansiService.execute(instansiRequest); + } + + @PostMapping + public InstansiResponse createInstansi(@RequestBody InstansiRequest request) { + return postCreateInstansiService.execute(request); + } + + @GetMapping("/{id}") + public InstansiResponse getInstansiById(@PathVariable Long id) { + return getInstansiByIdService.execute(InstansiRequest.builder() + .id(id) + .build()); + } + + @PutMapping("/{id}") + public InstansiResponse updateInstansi(@PathVariable Long id, @RequestBody InstansiRequest request){ + request.setId(id); + return putUpdateInstansiService.execute(request); + } + + @DeleteMapping("/{id}") + public EmptyResponse deleteInstansi(@PathVariable Long id){ + return deleteInstansiService.execute(InstansiRequest.builder() + .id(id) + .build()); + } +} diff --git a/src/main/java/com/iconplus/smartproc/controller/UsersController.java b/src/main/java/com/iconplus/smartproc/controller/UsersController.java index 4dc836b..adb8bf4 100644 --- a/src/main/java/com/iconplus/smartproc/controller/UsersController.java +++ b/src/main/java/com/iconplus/smartproc/controller/UsersController.java @@ -1,33 +1,34 @@ package com.iconplus.smartproc.controller; -import com.iconplus.smartproc.model.entity.Users; -import com.iconplus.smartproc.exception.ResourceNotFoundException; -import com.iconplus.smartproc.model.request.RolesRequest; +import com.iconplus.smartproc.helper.model.EmptyResponse; import com.iconplus.smartproc.model.request.UsersRequest; -import com.iconplus.smartproc.model.response.GetRolesResponse; import com.iconplus.smartproc.model.response.GetUsersResponse; -import com.iconplus.smartproc.repository.UsersRepository; -import com.iconplus.smartproc.service.manajemenuser.GetListUserService; -import org.springframework.beans.factory.annotation.Autowired; +import com.iconplus.smartproc.model.response.UsersResponse; +import com.iconplus.smartproc.service.manajemenuser.*; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; -import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - @CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true") @RestController @RequestMapping("/api/users") public class UsersController { - @Autowired - private UsersRepository usersRepository; private final GetListUserService getListUserService; - public UsersController(GetListUserService getListUserService) { + private final PostCreateUserService postCreateUserService; + private final PutUpdateUserService putUpdateUserService; + private final GetUserByIdService getUserByIdService; + private final DeleteUserService deleteUserService; + public UsersController(GetListUserService getListUserService, + PostCreateUserService postCreateUserService, + PutUpdateUserService putUpdateUserService, + GetUserByIdService getUserByIdService, + DeleteUserService deleteUserService) { this.getListUserService = getListUserService; + this.postCreateUserService = postCreateUserService; + this.putUpdateUserService = putUpdateUserService; + this.getUserByIdService = getUserByIdService; + this.deleteUserService = deleteUserService; } @@ -57,48 +58,28 @@ public class UsersController { return getListUserService.execute(usersRequest); } - // create @PostMapping - public Users createUsers(@RequestBody Users users) { - return usersRepository.save(users); + public UsersResponse createUsers(@RequestBody UsersRequest request) { + return postCreateUserService.execute(request); } - // get users by id rest api @GetMapping("/{id}") - public ResponseEntity getUsersById(@PathVariable Long id) { - Users users = usersRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Users not exist with id :" + id)); - return ResponseEntity.ok(users); + public UsersResponse getUsersById(@PathVariable Long id) { + return getUserByIdService.execute(UsersRequest.builder() + .id(id) + .build()); } - // update users rest api @PutMapping("/{id}") - public ResponseEntity updateUsers(@PathVariable Long id, @RequestBody Users usersDetails){ - Users users = usersRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Users not exist with id :" + id)); - - users.setUsername(usersDetails.getUsername()); - users.setNama(usersDetails.getNama()); - users.setEmail(usersDetails.getEmail()); - users.setPassword(usersDetails.getPassword()); -// users.setInstansi(usersDetails.getInstansi()); -// users.setBidang(usersDetails.getBidang()); -// users.setJabatan(usersDetails.getJabatan()); -// users.setRole(usersDetails.getRole()); - - Users updatedUsers = usersRepository.save(users); - return ResponseEntity.ok(updatedUsers); + public UsersResponse updateUsers(@PathVariable Long id, @RequestBody UsersRequest request){ + request.setId(id); + return putUpdateUserService.execute(request); } - // delete users rest api @DeleteMapping("/{id}") - public ResponseEntity> deleteUsers(@PathVariable Long id){ - Users users = usersRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Users not exist with id :" + id)); - - usersRepository.delete(users); - Map response = new HashMap<>(); - response.put("deleted", Boolean.TRUE); - return ResponseEntity.ok(response); + public EmptyResponse deleteUsers(@PathVariable Long id){ + return deleteUserService.execute(UsersRequest.builder() + .id(id) + .build()); } } \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/model/entity/Instansi.java b/src/main/java/com/iconplus/smartproc/model/entity/Instansi.java index f324d83..ca5a949 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/Instansi.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/Instansi.java @@ -25,6 +25,9 @@ public class Instansi extends BaseEntity { @Column(name = "instansi") private String instansi; + @Column(name = "alamat") + private String alamat; + @Column(name = "keterangan") private String keterangan; diff --git a/src/main/java/com/iconplus/smartproc/model/projection/InstansiView.java b/src/main/java/com/iconplus/smartproc/model/projection/InstansiView.java new file mode 100644 index 0000000..3dd7329 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/InstansiView.java @@ -0,0 +1,23 @@ +package com.iconplus.smartproc.model.projection; + +public interface InstansiView { + + Long getId(); + void setId(Long id); + + String getInstansi(); + void setInstansi(String instansi); + + String getAlamat(); + void setAlamat(String alamat); + + String getKeterangan(); + void setKeterangan(String keterangan); + + Boolean getIsActive(); + void setIsActive(Boolean isActive); + + Boolean getIsDelete(); + void setIsDelete(Boolean isDelete); + +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/UserRoleView.java b/src/main/java/com/iconplus/smartproc/model/projection/UserRoleView.java index b931002..39dbd1b 100644 --- a/src/main/java/com/iconplus/smartproc/model/projection/UserRoleView.java +++ b/src/main/java/com/iconplus/smartproc/model/projection/UserRoleView.java @@ -21,11 +21,11 @@ public interface UserRoleView { void setUsername(String username); void setNama(String nama); void setEmail(String email); - void setInstatnsi(String instansi); + void setInstansiId(Long instansiId); + void setInstansi(String instansi); + void setBidangId(Long bidangId); void setBidang(String bidang); void setJabatan(String Jabatan); - void setInstatnsiId(Long instansiId); - void setBidangId(Long bidangId); void setIsActive(Boolean isActive); void setPassword(String password); void setRoleId(Long roleId); diff --git a/src/main/java/com/iconplus/smartproc/model/request/InstansiRequest.java b/src/main/java/com/iconplus/smartproc/model/request/InstansiRequest.java new file mode 100644 index 0000000..6ccc0ea --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/InstansiRequest.java @@ -0,0 +1,25 @@ +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 +@NoArgsConstructor +@AllArgsConstructor +public class InstansiRequest extends BaseRequest { + + private Long id; + private String instansi; + private String alamat; + private String keterangan; + private Boolean isActive; + private String search; + private transient Pageable pageable; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/UsersRequest.java b/src/main/java/com/iconplus/smartproc/model/request/UsersRequest.java index 373b00c..c90a863 100644 --- a/src/main/java/com/iconplus/smartproc/model/request/UsersRequest.java +++ b/src/main/java/com/iconplus/smartproc/model/request/UsersRequest.java @@ -15,10 +15,14 @@ public class UsersRequest extends BaseRequest { private Long id; private String username; + private String password; + private Long instansiId; private String instansi; + private Long bidangId; private String bidang; private String nama; private String jabatan; + private Long roleId; private String role; private String email; private Boolean isActive; diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListInstansiResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListInstansiResponse.java new file mode 100644 index 0000000..4fef9e0 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListInstansiResponse.java @@ -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 GetListInstansiResponse extends BaseResponse { + + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/InstansiResponse.java b/src/main/java/com/iconplus/smartproc/model/response/InstansiResponse.java new file mode 100644 index 0000000..520da30 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/InstansiResponse.java @@ -0,0 +1,21 @@ +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 InstansiResponse extends BaseResponse { + + private Long id; + private String instansi; + private String alamat; + private String keterangan; + private Boolean isActive; + private Boolean isDelete; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/UsersResponse.java b/src/main/java/com/iconplus/smartproc/model/response/UsersResponse.java index 9bcf829..d180742 100644 --- a/src/main/java/com/iconplus/smartproc/model/response/UsersResponse.java +++ b/src/main/java/com/iconplus/smartproc/model/response/UsersResponse.java @@ -12,11 +12,19 @@ import lombok.NoArgsConstructor; @NoArgsConstructor public class UsersResponse extends BaseResponse { private Long id; - private String instansi; - private String bidang; private String nama; + private String username; private String jabatan; + + private Long instansiId; + private String instansi; + + private Long bidangId; + private String bidang; + + private Long roleId; private String role; + private String email; private Boolean isActive; private Boolean isDelete; diff --git a/src/main/java/com/iconplus/smartproc/repository/BidangRepository.java b/src/main/java/com/iconplus/smartproc/repository/BidangRepository.java new file mode 100644 index 0000000..e24fe16 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/BidangRepository.java @@ -0,0 +1,13 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.Bidang; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface BidangRepository extends JpaRepository { + + Optional findByIdAndIsDeleteFalse(Long id); +} diff --git a/src/main/java/com/iconplus/smartproc/repository/InstansiRepository.java b/src/main/java/com/iconplus/smartproc/repository/InstansiRepository.java new file mode 100644 index 0000000..ded6024 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/InstansiRepository.java @@ -0,0 +1,30 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.Instansi; +import com.iconplus.smartproc.model.projection.InstansiView; +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 InstansiRepository extends JpaRepository { + + @Query(value = "SELECT i.id as id," + + "i.instansi as instansi, " + + "i.alamat as alamat, " + + "i.keterangan as keterangan, " + + "i.isActive as isActive, " + + "i.isDelete as isDelete " + + "FROM Instansi i " + + "WHERE i.isDelete = false " + + "AND (:search = '' or UPPER(i.instansi) like :search)") + Page getListInstansi(String search, Pageable pageable); + + Optional findByIdAndIsDeleteFalse(Long id); + + Optional findByInstansiAndIsDeleteFalse(String instansi); +} diff --git a/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java b/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java index 14e45c0..c8481ce 100644 --- a/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java @@ -15,13 +15,21 @@ public interface UsersRepository extends JpaRepository { @Query("SELECT u.id as id, " + "u.nama as nama, " + + "u.username as username, " + "u.jabatan as jabatan, " + + "u.roleId as roleId, " + "r.role as role, " + + "u.bidangId as bidangId, " + + "b.bidang as bidang, " + + "u.instansiId as instansiId, " + + "i.instansi as instansi, " + "u.email as email, " + "u.isActive as isActive, " + "u.isDelete as isDelete " + "FROM Users u " + "JOIN Roles r ON r.id = u.roleId " + + "JOIN Bidang b ON b.id = u.bidangId " + + "JOIN Instansi i ON i.id = u.instansiId " + "Where u.isDelete = false " + "AND (:search='' " + "or (UPPER(u.nama) like :search " + @@ -33,5 +41,28 @@ public interface UsersRepository extends JpaRepository { Page getAllUsersAndDeletedFase(String search, Pageable pageable); Optional findByEmailAndIsDeleteFalse(String email); + + Optional findByIdAndIsDeleteFalse(Long id); + + @Query("SELECT u.id as id, " + + "u.nama as nama, " + + "u.username as username, " + + "u.jabatan as jabatan, " + + "u.roleId as roleId, " + + "r.role as role, " + + "u.bidangId as bidangId, " + + "b.bidang as bidang, " + + "u.instansiId as instansiId, " + + "i.instansi as instansi, " + + "u.email as email, " + + "u.isActive as isActive, " + + "u.isDelete as isDelete " + + "FROM Users u " + + "JOIN Roles r ON r.id = u.roleId " + + "JOIN Bidang b ON b.id = u.bidangId " + + "JOIN Instansi i ON i.id = u.instansiId " + + "Where u.isDelete = false " + + "AND u.id = :id") + Optional getUserByIdAndDeletedFase(Long id); } diff --git a/src/main/java/com/iconplus/smartproc/service/CommonService.java b/src/main/java/com/iconplus/smartproc/service/CommonService.java new file mode 100644 index 0000000..beae0dd --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/CommonService.java @@ -0,0 +1,47 @@ +package com.iconplus.smartproc.service; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.model.request.UsersRequest; +import com.iconplus.smartproc.repository.BidangRepository; +import com.iconplus.smartproc.repository.InstansiRepository; +import com.iconplus.smartproc.repository.RolesRepository; +import com.iconplus.smartproc.repository.UsersRepository; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +@Service +public class CommonService { + + private UsersRepository usersRepository; + private RolesRepository rolesRepository; + private BidangRepository bidangRepository; + private InstansiRepository instansiRepository; + + public CommonService(UsersRepository usersRepository, + RolesRepository rolesRepository, + BidangRepository bidangRepository, + InstansiRepository instansiRepository) { + this.usersRepository = usersRepository; + this.rolesRepository = rolesRepository; + this.bidangRepository = bidangRepository; + this.instansiRepository = instansiRepository; + } + + public void validateUserRequst(UsersRequest input) { + + var roles= rolesRepository.findByIdAndIsDeleteFalse(input.getRoleId()); + if (roles.isEmpty()) { + throw new BusinessException("err", "err", "err"); + } + + var bidang= bidangRepository.findByIdAndIsDeleteFalse(input.getBidangId()); + if (bidang.isEmpty()) { + throw new BusinessException("err", "err", "err"); + } + + var instansi= instansiRepository.findByIdAndIsDeleteFalse(input.getInstansiId()); + if (instansi.isEmpty()) { + throw new BusinessException("err", "err", "err"); + } + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/instansi/DeleteInstansiService.java b/src/main/java/com/iconplus/smartproc/service/instansi/DeleteInstansiService.java new file mode 100644 index 0000000..4ddb038 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/instansi/DeleteInstansiService.java @@ -0,0 +1,30 @@ +package com.iconplus.smartproc.service.instansi; + +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.InstansiRequest; +import com.iconplus.smartproc.repository.InstansiRepository; +import org.springframework.stereotype.Service; + +@Service +public class DeleteInstansiService implements BaseService { + + private InstansiRepository instansiRepository; + + public DeleteInstansiService(InstansiRepository instansiRepository) { + this.instansiRepository = instansiRepository; + } + + @Override + public EmptyResponse execute(InstansiRequest input) { + + var instansi = instansiRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException("err", "err", "err")); + + instansi.setIsDelete(true); + instansiRepository.save(instansi); + + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/instansi/GetInstansiByIdService.java b/src/main/java/com/iconplus/smartproc/service/instansi/GetInstansiByIdService.java new file mode 100644 index 0000000..d98dc2a --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/instansi/GetInstansiByIdService.java @@ -0,0 +1,34 @@ +package com.iconplus.smartproc.service.instansi; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.InstansiRequest; +import com.iconplus.smartproc.model.response.InstansiResponse; +import com.iconplus.smartproc.repository.InstansiRepository; +import org.springframework.stereotype.Service; + +@Service +public class GetInstansiByIdService implements BaseService { + + private InstansiRepository instansiRepository; + + public GetInstansiByIdService(InstansiRepository instansiRepository) { + this.instansiRepository = instansiRepository; + } + + @Override + public InstansiResponse execute(InstansiRequest input) { + + var instansi= instansiRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException("err", "err", "err")); + + return InstansiResponse.builder() + .id(instansi.getId()) + .instansi(instansi.getInstansi()) + .alamat(instansi.getAlamat()) + .keterangan(instansi.getKeterangan()) + .isActive(instansi.getIsActive()) + .isDelete(instansi.getIsDelete()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/instansi/GetListInstansiService.java b/src/main/java/com/iconplus/smartproc/service/instansi/GetListInstansiService.java new file mode 100644 index 0000000..93f0c8b --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/instansi/GetListInstansiService.java @@ -0,0 +1,65 @@ +package com.iconplus.smartproc.service.instansi; + +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.InstansiView; +import com.iconplus.smartproc.model.request.InstansiRequest; +import com.iconplus.smartproc.model.request.UsersRequest; +import com.iconplus.smartproc.model.response.GetListInstansiResponse; +import com.iconplus.smartproc.model.response.InstansiResponse; +import com.iconplus.smartproc.repository.InstansiRepository; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListInstansiService implements BaseService { + + private InstansiRepository instansiRepository; + + public GetListInstansiService(InstansiRepository instansiRepository) { + this.instansiRepository = instansiRepository; + } + + @Override + public GetListInstansiResponse execute(InstansiRequest input) { + validateRequest(input); + + List instansiResponseList = new ArrayList<>(); + var listInstansi = instansiRepository.getListInstansi(input.getSearch(), input.getPageable()); + + for (InstansiView instansiView : listInstansi) { + InstansiResponse instansiResponse = InstansiResponse.builder() + .id(instansiView.getId()) + .instansi(instansiView.getInstansi()) + .alamat(instansiView.getAlamat()) + .keterangan(instansiView.getKeterangan()) + .isActive(instansiView.getIsActive()) + .isDelete(instansiView.getIsDelete()) + .build(); + + instansiResponseList.add(instansiResponse); + } + + return GetListInstansiResponse.builder() + .data(instansiResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(listInstansi.getTotalPages()) + .totalRecords(listInstansi.getTotalElements()) + .isFirstPage(listInstansi.isFirst()) + .isLastPage(listInstansi.isLast()) + .build()) + .build(); + + } + + private void validateRequest(InstansiRequest input) { + if (StringUtils.isNotBlank(input.getSearch())) { + input.setSearch('%'+ input.getSearch().toUpperCase()+'%'); + } + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/instansi/PostCreateInstansiService.java b/src/main/java/com/iconplus/smartproc/service/instansi/PostCreateInstansiService.java new file mode 100644 index 0000000..d5c22d2 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/instansi/PostCreateInstansiService.java @@ -0,0 +1,41 @@ +package com.iconplus.smartproc.service.instansi; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.Instansi; +import com.iconplus.smartproc.model.request.InstansiRequest; +import com.iconplus.smartproc.model.response.InstansiResponse; +import com.iconplus.smartproc.repository.InstansiRepository; +import org.springframework.stereotype.Service; + +@Service +public class PostCreateInstansiService implements BaseService { + + private InstansiRepository instansiRepository; + + public PostCreateInstansiService(InstansiRepository instansiRepository) { + this.instansiRepository = instansiRepository; + } + + @Override + public InstansiResponse execute(InstansiRequest input) { + + var instansi = instansiRepository.findByInstansiAndIsDeleteFalse(input.getInstansi()); + if (instansi.isPresent()) { + throw new BusinessException("err", "err", "err"); + } + + Instansi instansiEntity = Instansi.builder() + .instansi(input.getInstansi()) + .alamat(input.getAlamat()) + .keterangan(input.getKeterangan()) + .isActive(input.getIsActive()) + .isDelete(false) + .build(); + var result = instansiRepository.save(instansiEntity); + + return InstansiResponse.builder() + .id(result.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/instansi/PutUpdateInstansiService.java b/src/main/java/com/iconplus/smartproc/service/instansi/PutUpdateInstansiService.java new file mode 100644 index 0000000..15c3c6d --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/instansi/PutUpdateInstansiService.java @@ -0,0 +1,35 @@ +package com.iconplus.smartproc.service.instansi; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.InstansiRequest; +import com.iconplus.smartproc.model.response.InstansiResponse; +import com.iconplus.smartproc.repository.InstansiRepository; +import org.springframework.stereotype.Service; + +@Service +public class PutUpdateInstansiService implements BaseService { + + private InstansiRepository instansiRepository; + + public PutUpdateInstansiService(InstansiRepository instansiRepository) { + this.instansiRepository = instansiRepository; + } + + @Override + public InstansiResponse execute(InstansiRequest input) { + + var instansi = instansiRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException("err", "err", "err")); + + instansi.setInstansi(input.getInstansi()); + instansi.setAlamat(input.getAlamat()); + instansi.setKeterangan(input.getKeterangan()); + instansi.setIsActive(input.getIsActive()); + var result = instansiRepository.save(instansi); + + return InstansiResponse.builder() + .id(result.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/manajemenuser/DeleteUserService.java b/src/main/java/com/iconplus/smartproc/service/manajemenuser/DeleteUserService.java new file mode 100644 index 0000000..9c2d58b --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/manajemenuser/DeleteUserService.java @@ -0,0 +1,30 @@ +package com.iconplus.smartproc.service.manajemenuser; + +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.UsersRequest; +import com.iconplus.smartproc.repository.UsersRepository; +import org.springframework.stereotype.Service; + +@Service +public class DeleteUserService implements BaseService { + + private UsersRepository usersRepository; + + public DeleteUserService(UsersRepository usersRepository) { + this.usersRepository = usersRepository; + } + + @Override + public EmptyResponse execute(UsersRequest input) { + + var users = usersRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException("err", "err", "err")); + + users.setIsDelete(true); + usersRepository.save(users); + + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/manajemenuser/GetListUserService.java b/src/main/java/com/iconplus/smartproc/service/manajemenuser/GetListUserService.java index f9a01b5..487bfd8 100644 --- a/src/main/java/com/iconplus/smartproc/service/manajemenuser/GetListUserService.java +++ b/src/main/java/com/iconplus/smartproc/service/manajemenuser/GetListUserService.java @@ -3,14 +3,12 @@ package com.iconplus.smartproc.service.manajemenuser; import com.iconplus.smartproc.helper.model.Pagination; import com.iconplus.smartproc.helper.service.BaseService; import com.iconplus.smartproc.model.projection.UserRoleView; -import com.iconplus.smartproc.model.request.RolesRequest; import com.iconplus.smartproc.model.request.UsersRequest; import com.iconplus.smartproc.model.response.GetUsersResponse; import com.iconplus.smartproc.model.response.UsersResponse; import com.iconplus.smartproc.repository.UsersRepository; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; -import org.springframework.data.domain.Page; import org.springframework.stereotype.Service; import java.util.ArrayList; @@ -35,11 +33,15 @@ public class GetListUserService implements BaseService { + + private UsersRepository usersRepository; + + public GetUserByIdService(UsersRepository usersRepository) { + this.usersRepository = usersRepository; + } + + @Override + public UsersResponse execute(UsersRequest input) { + + var userRoleView = usersRepository.getUserByIdAndDeletedFase(input.getId()) + .orElseThrow(() -> new BusinessException("err", "err", "err")); + + return UsersResponse.builder() + .id(userRoleView.getId()) + .nama(userRoleView.getNama()) + .username(userRoleView.getUsername()) + .jabatan(userRoleView.getJabatan()) + .roleId(userRoleView.getRoleId()) + .role(userRoleView.getRole()) + .bidangId(userRoleView.getBidangId()) + .bidang(userRoleView.getBidang()) + .instansiId(userRoleView.getInstansiId()) + .instansi(userRoleView.getInstansi()) + .email(userRoleView.getEmail()) + .isActive(userRoleView.getIsActive()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/manajemenuser/PostCreateUserService.java b/src/main/java/com/iconplus/smartproc/service/manajemenuser/PostCreateUserService.java index 4598602..2b790b7 100644 --- a/src/main/java/com/iconplus/smartproc/service/manajemenuser/PostCreateUserService.java +++ b/src/main/java/com/iconplus/smartproc/service/manajemenuser/PostCreateUserService.java @@ -1,40 +1,50 @@ package com.iconplus.smartproc.service.manajemenuser; +import com.iconplus.smartproc.exception.BusinessException; import com.iconplus.smartproc.helper.service.BaseService; import com.iconplus.smartproc.model.entity.Users; import com.iconplus.smartproc.model.request.UsersRequest; + import com.iconplus.smartproc.model.response.UsersResponse; import com.iconplus.smartproc.repository.UsersRepository; +import com.iconplus.smartproc.service.CommonService; import org.springframework.stereotype.Service; @Service public class PostCreateUserService implements BaseService { private UsersRepository usersRepository; + private CommonService commonService; - public PostCreateUserService(UsersRepository usersRepository) { + public PostCreateUserService(UsersRepository usersRepository, + CommonService commonService) { this.usersRepository = usersRepository; + this.commonService = commonService; } @Override public UsersResponse execute(UsersRequest input) { + var users = usersRepository.findByEmailAndIsDeleteFalse(input.getEmail()); + if (users.isPresent()) { + throw new BusinessException("err", "err", "err"); + } - Users users = Users.builder() -// .id(input.getId()) -// .username(input.getUsername()) -// .email(input.getEmail()) -// .nama(input.getNama()) -// .bidangId(1L) -// .instansiId(1L) -// .roleId(in) -// .jabatan() -// .password() -// .isActive() -// .deleted(false) + commonService.validateUserRequst(input); + Users usersEntity = Users.builder() + .instansiId(input.getInstansiId()) + .bidangId(input.getBidangId()) + .nama(input.getNama()) + .username(input.getUsername()) + .jabatan(input.getJabatan()) + .roleId(input.getRoleId()) + .email(input.getEmail()) + .password(input.getPassword()) + .isActive(input.getIsActive()) + .isDelete(false) .build(); - var result = usersRepository.save(users); + var result = usersRepository.save(usersEntity); return UsersResponse.builder() .id(result.getId()) .build(); diff --git a/src/main/java/com/iconplus/smartproc/service/manajemenuser/PutUpdateUserService.java b/src/main/java/com/iconplus/smartproc/service/manajemenuser/PutUpdateUserService.java new file mode 100644 index 0000000..821a977 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/manajemenuser/PutUpdateUserService.java @@ -0,0 +1,45 @@ +package com.iconplus.smartproc.service.manajemenuser; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.UsersRequest; +import com.iconplus.smartproc.model.response.UsersResponse; +import com.iconplus.smartproc.repository.UsersRepository; +import com.iconplus.smartproc.service.CommonService; +import org.springframework.stereotype.Service; + +@Service +public class PutUpdateUserService implements BaseService { + + private UsersRepository usersRepository; + private CommonService commonService; + + public PutUpdateUserService(UsersRepository usersRepository, + CommonService commonService) { + this.usersRepository = usersRepository; + this.commonService = commonService; + } + @Override + public UsersResponse execute(UsersRequest input) { + + var users = usersRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException("err", "err", "err")); + + commonService.validateUserRequst(input); + + users.setInstansiId(input.getInstansiId()); + users.setBidangId(input.getBidangId()); + users.setNama(input.getNama()); + users.setUsername(input.getUsername()); + users.setJabatan(input.getJabatan()); + users.setRoleId(input.getRoleId()); + users.setEmail(input.getEmail()); + users.setPassword(input.getPassword()); + users.setIsActive(input.getIsActive()); + users.setIsDelete(false); + var result = usersRepository.save(users); + return UsersResponse.builder() + .id(result.getId()) + .build(); + } +} From a2a23fd71cfdeb53b604b89a59f5963202039c87 Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Wed, 24 May 2023 14:00:01 +0700 Subject: [PATCH 11/63] add bidang api --- .../controller/BidangController.java | 74 +++++++++++++++++++ .../smartproc/model/entity/Bidang.java | 3 + .../model/projection/BidangView.java | 22 ++++++ .../model/request/BidangRequest.java | 24 ++++++ .../model/response/BidangResponse.java | 23 ++++++ .../model/response/GetListBidangResponse.java | 20 +++++ .../repository/BidangRepository.java | 18 +++++ .../service/bidang/DeleteBidangService.java | 29 ++++++++ .../service/bidang/GetBidangService.java | 31 ++++++++ .../service/bidang/GetListBidangService.java | 62 ++++++++++++++++ .../bidang/PostCreateBidangService.java | 36 +++++++++ .../bidang/PutUpdateBidangService.java | 32 ++++++++ 12 files changed, 374 insertions(+) create mode 100644 src/main/java/com/iconplus/smartproc/controller/BidangController.java create mode 100644 src/main/java/com/iconplus/smartproc/model/projection/BidangView.java create mode 100644 src/main/java/com/iconplus/smartproc/model/request/BidangRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/BidangResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/GetListBidangResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/service/bidang/DeleteBidangService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/bidang/GetBidangService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/bidang/GetListBidangService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/bidang/PostCreateBidangService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/bidang/PutUpdateBidangService.java diff --git a/src/main/java/com/iconplus/smartproc/controller/BidangController.java b/src/main/java/com/iconplus/smartproc/controller/BidangController.java new file mode 100644 index 0000000..9090a81 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/controller/BidangController.java @@ -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()); + } + +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/Bidang.java b/src/main/java/com/iconplus/smartproc/model/entity/Bidang.java index 64002b2..b644d2f 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/Bidang.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/Bidang.java @@ -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; diff --git a/src/main/java/com/iconplus/smartproc/model/projection/BidangView.java b/src/main/java/com/iconplus/smartproc/model/projection/BidangView.java new file mode 100644 index 0000000..6174611 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/BidangView.java @@ -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); +}; diff --git a/src/main/java/com/iconplus/smartproc/model/request/BidangRequest.java b/src/main/java/com/iconplus/smartproc/model/request/BidangRequest.java new file mode 100644 index 0000000..05c0f0c --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/BidangRequest.java @@ -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; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/BidangResponse.java b/src/main/java/com/iconplus/smartproc/model/response/BidangResponse.java new file mode 100644 index 0000000..0069708 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/BidangResponse.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; + +@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; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListBidangResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListBidangResponse.java new file mode 100644 index 0000000..742a32f --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListBidangResponse.java @@ -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 data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/repository/BidangRepository.java b/src/main/java/com/iconplus/smartproc/repository/BidangRepository.java index e24fe16..4c6f278 100644 --- a/src/main/java/com/iconplus/smartproc/repository/BidangRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/BidangRepository.java @@ -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 { + @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 getListBidang(String search, Pageable pageable); + Optional findByIdAndIsDeleteFalse(Long id); } diff --git a/src/main/java/com/iconplus/smartproc/service/bidang/DeleteBidangService.java b/src/main/java/com/iconplus/smartproc/service/bidang/DeleteBidangService.java new file mode 100644 index 0000000..87ab8dc --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/bidang/DeleteBidangService.java @@ -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 { + + 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(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/bidang/GetBidangService.java b/src/main/java/com/iconplus/smartproc/service/bidang/GetBidangService.java new file mode 100644 index 0000000..26ce5c0 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/bidang/GetBidangService.java @@ -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 { + + 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(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/bidang/GetListBidangService.java b/src/main/java/com/iconplus/smartproc/service/bidang/GetListBidangService.java new file mode 100644 index 0000000..57135b8 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/bidang/GetListBidangService.java @@ -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 { + + private BidangRepository bidangRepository; + + public GetListBidangService(BidangRepository bidangRepository) { + this.bidangRepository = bidangRepository; + } + + @Override + public GetListBidangResponse execute(BidangRequest input) { + validateRequest(input); + List 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()+'%'); + } + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/bidang/PostCreateBidangService.java b/src/main/java/com/iconplus/smartproc/service/bidang/PostCreateBidangService.java new file mode 100644 index 0000000..b68b4ee --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/bidang/PostCreateBidangService.java @@ -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 { + + 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(); + + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/bidang/PutUpdateBidangService.java b/src/main/java/com/iconplus/smartproc/service/bidang/PutUpdateBidangService.java new file mode 100644 index 0000000..33c8f89 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/bidang/PutUpdateBidangService.java @@ -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 { + + 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(); + } +} From 11430dc068fca0f731d8c739029694efe3944d6d Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Wed, 24 May 2023 17:21:33 +0700 Subject: [PATCH 12/63] fix search user --- .../java/com/iconplus/smartproc/repository/UsersRepository.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java b/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java index c8481ce..4f5b0aa 100644 --- a/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java @@ -35,6 +35,8 @@ public interface UsersRepository extends JpaRepository { "or (UPPER(u.nama) like :search " + " OR UPPER(u.jabatan) like :search " + " OR UPPER(r.role) like :search " + + " OR UPPER(b.bidang) like :search " + + " OR UPPER(i.instansi) like :search " + " OR UPPER(u.email) like :search) " + ") " + "ORDER by u.id") From 28f17d5b5405e0f7ffb7ab8bd1bd2d1f42ad599f Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Wed, 24 May 2023 23:53:00 +0700 Subject: [PATCH 13/63] enhance api sumber dana --- .../controller/SumberDanaController.java | 117 +++++++++--------- .../model/projection/SumberDanaView.java | 17 +++ .../model/request/SumberDanaRequest.java | 23 ++++ .../response/GetListSumberDanaResponse.java | 20 +++ .../model/response/SumberDanaResponse.java | 20 +++ .../repository/SumberDanaRepository.java | 20 +++ .../sumberdana/DeleteSumberDanaService.java | 26 ++++ .../sumberdana/GetListSumberDanaService.java | 49 ++++++++ .../sumberdana/GetSumberDanaService.java | 31 +++++ .../PostCreateSumberDanaService.java | 40 ++++++ .../sumberdana/PutSumberDanaService.java | 32 +++++ 11 files changed, 334 insertions(+), 61 deletions(-) create mode 100644 src/main/java/com/iconplus/smartproc/model/projection/SumberDanaView.java create mode 100644 src/main/java/com/iconplus/smartproc/model/request/SumberDanaRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/GetListSumberDanaResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/SumberDanaResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/service/sumberdana/DeleteSumberDanaService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/sumberdana/GetListSumberDanaService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/sumberdana/GetSumberDanaService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/sumberdana/PostCreateSumberDanaService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/sumberdana/PutSumberDanaService.java diff --git a/src/main/java/com/iconplus/smartproc/controller/SumberDanaController.java b/src/main/java/com/iconplus/smartproc/controller/SumberDanaController.java index 95873cf..5670f07 100644 --- a/src/main/java/com/iconplus/smartproc/controller/SumberDanaController.java +++ b/src/main/java/com/iconplus/smartproc/controller/SumberDanaController.java @@ -1,78 +1,73 @@ package com.iconplus.smartproc.controller; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.CrossOrigin; -import org.springframework.web.bind.annotation.DeleteMapping; -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; +import com.iconplus.smartproc.helper.model.EmptyResponse; +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.service.sumberdana.*; +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/sumberdana") public class SumberDanaController { - @Autowired - private SumberDanaRepository sumberdanaRepository; - //get all data - @GetMapping - public List getAllSumberdanas(){ - return sumberdanaRepository.findAll(); - } + private GetListSumberDanaService getListSumberDanaService; + private PostCreateSumberDanaService postCreateSumberDanaService; + private DeleteSumberDanaService deleteSumberDanaService; + private GetSumberDanaService getSumberDanaService; + private PutSumberDanaService putSumberDanaService; - // create - @PostMapping - public SumberDana createSumberdana(@RequestBody SumberDana sumberdana) { - return sumberdanaRepository.save(sumberdana); - } + public SumberDanaController(GetListSumberDanaService getListSumberDanaService, + PostCreateSumberDanaService postCreateSumberDanaService, + DeleteSumberDanaService deleteSumberDanaService, + 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("/{id}") - public ResponseEntity getSumberdanaById(@PathVariable Long id) { - SumberDana sumberdana = sumberdanaRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Sumberdana not exist with id :" + id)); - return ResponseEntity.ok(sumberdana); - } + @GetMapping + public GetListSumberDanaResponse getListSumberDana(@RequestParam(name = "search", required = false) String search, + @RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size){ - // update sumberdana rest api - @PutMapping("/{id}") - public ResponseEntity updateSumberdana(@PathVariable Long id, @RequestBody SumberDana sumberDanaDetails){ - SumberDana sumberdana = sumberdanaRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Sumberdana not exist with id :" + id)); + Pageable pageable = PageRequest.of((page - 1), size); + SumberDanaRequest sumberDanaRequest = SumberDanaRequest.builder() + .search(search) + .pageable(pageable) + .build(); - sumberdana.setSumberDana(sumberDanaDetails.getSumberDana()); - sumberdana.setKeterangan(sumberDanaDetails.getKeterangan()); - - SumberDana updatedSumberDana = sumberdanaRepository.save(sumberdana); - return ResponseEntity.ok(updatedSumberDana); - } - - // delete sumberdana rest api - @DeleteMapping("/{id}") - public ResponseEntity> deleteSumberdana(@PathVariable Long id){ - SumberDana sumberdana = sumberdanaRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Sumberdana not exist with id :" + id)); - - sumberdanaRepository.delete(sumberdana); - Map response = new HashMap<>(); - response.put("deleted", Boolean.TRUE); - return ResponseEntity.ok(response); - } + return getListSumberDanaService.execute(sumberDanaRequest); + } + @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()); + } } diff --git a/src/main/java/com/iconplus/smartproc/model/projection/SumberDanaView.java b/src/main/java/com/iconplus/smartproc/model/projection/SumberDanaView.java new file mode 100644 index 0000000..22e0572 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/SumberDanaView.java @@ -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); + +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/SumberDanaRequest.java b/src/main/java/com/iconplus/smartproc/model/request/SumberDanaRequest.java new file mode 100644 index 0000000..11a7802 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/SumberDanaRequest.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; + +@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; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListSumberDanaResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListSumberDanaResponse.java new file mode 100644 index 0000000..7d12fcd --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListSumberDanaResponse.java @@ -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 data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/SumberDanaResponse.java b/src/main/java/com/iconplus/smartproc/model/response/SumberDanaResponse.java new file mode 100644 index 0000000..6bbe13e --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/SumberDanaResponse.java @@ -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; +} diff --git a/src/main/java/com/iconplus/smartproc/repository/SumberDanaRepository.java b/src/main/java/com/iconplus/smartproc/repository/SumberDanaRepository.java index 41230fb..8769890 100644 --- a/src/main/java/com/iconplus/smartproc/repository/SumberDanaRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/SumberDanaRepository.java @@ -1,10 +1,30 @@ package com.iconplus.smartproc.repository; 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.Query; import org.springframework.stereotype.Repository; +import java.util.Optional; + @Repository public interface SumberDanaRepository extends JpaRepository { + + Optional findByIdAndIsDeleteFalse(Long id); + Optional 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 getListSumberDana(String search, Pageable pageable); + } diff --git a/src/main/java/com/iconplus/smartproc/service/sumberdana/DeleteSumberDanaService.java b/src/main/java/com/iconplus/smartproc/service/sumberdana/DeleteSumberDanaService.java new file mode 100644 index 0000000..2707b3c --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/sumberdana/DeleteSumberDanaService.java @@ -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 { + + 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(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/sumberdana/GetListSumberDanaService.java b/src/main/java/com/iconplus/smartproc/service/sumberdana/GetListSumberDanaService.java new file mode 100644 index 0000000..10742bb --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/sumberdana/GetListSumberDanaService.java @@ -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 { + + private SumberDanaRepository sumberDanaRepository; + + public GetListSumberDanaService(SumberDanaRepository sumberDanaRepository) { + this.sumberDanaRepository = sumberDanaRepository; + } + + @Override + public GetListSumberDanaResponse execute(SumberDanaRequest input) { + List 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(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/sumberdana/GetSumberDanaService.java b/src/main/java/com/iconplus/smartproc/service/sumberdana/GetSumberDanaService.java new file mode 100644 index 0000000..6c30c19 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/sumberdana/GetSumberDanaService.java @@ -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 { + + 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(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/sumberdana/PostCreateSumberDanaService.java b/src/main/java/com/iconplus/smartproc/service/sumberdana/PostCreateSumberDanaService.java new file mode 100644 index 0000000..d898f90 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/sumberdana/PostCreateSumberDanaService.java @@ -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 { + + 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(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/sumberdana/PutSumberDanaService.java b/src/main/java/com/iconplus/smartproc/service/sumberdana/PutSumberDanaService.java new file mode 100644 index 0000000..010d999 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/sumberdana/PutSumberDanaService.java @@ -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 { + + 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(); + + } +} From f96c8d2f17cc497883068bc4cc0d24f6effd9176 Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Thu, 25 May 2023 00:46:50 +0700 Subject: [PATCH 14/63] enhance crud jenis pengadaan --- .../controller/JenisAnggaranController.java | 5 - .../controller/JenisPengadaanController.java | 106 ++++++++++-------- .../model/projection/JenisPengadaanView.java | 16 +++ .../model/request/JenisPengadaanRequest.java | 22 ++++ .../GetListJenisPengadaanResponse.java | 20 ++++ .../response/JenisPengadaanResponse.java | 21 ++++ .../repository/JenisPengadaanRepository.java | 19 ++++ .../DeleteJenisPengadaanService.java | 26 +++++ .../GetJenisPengadaanService.java | 32 ++++++ .../GetListJenisPengadaanService.java | 59 ++++++++++ .../PostCreateJenisPengadaanService.java | 37 ++++++ .../PutUpdateJenisPengadaanService.java | 30 +++++ 12 files changed, 340 insertions(+), 53 deletions(-) create mode 100644 src/main/java/com/iconplus/smartproc/model/projection/JenisPengadaanView.java create mode 100644 src/main/java/com/iconplus/smartproc/model/request/JenisPengadaanRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/GetListJenisPengadaanResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/JenisPengadaanResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/service/jenispengadaan/DeleteJenisPengadaanService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/jenispengadaan/GetJenisPengadaanService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/jenispengadaan/GetListJenisPengadaanService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/jenispengadaan/PostCreateJenisPengadaanService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/jenispengadaan/PutUpdateJenisPengadaanService.java diff --git a/src/main/java/com/iconplus/smartproc/controller/JenisAnggaranController.java b/src/main/java/com/iconplus/smartproc/controller/JenisAnggaranController.java index c2e0d14..cb61b31 100644 --- a/src/main/java/com/iconplus/smartproc/controller/JenisAnggaranController.java +++ b/src/main/java/com/iconplus/smartproc/controller/JenisAnggaranController.java @@ -5,9 +5,7 @@ import com.iconplus.smartproc.helper.model.EmptyResponse; import com.iconplus.smartproc.model.request.JenisAnggaranRequest; import com.iconplus.smartproc.model.response.GetListJenisAnggaranResponse; import com.iconplus.smartproc.model.response.JenisAnggaranResponse; -import com.iconplus.smartproc.repository.JenisAnggaranRepository; import com.iconplus.smartproc.service.jenisanggaran.*; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.web.bind.annotation.*; @@ -17,9 +15,6 @@ import org.springframework.web.bind.annotation.*; @RequestMapping("/api/jenisanggaran") public class JenisAnggaranController { - @Autowired - private JenisAnggaranRepository jenisanggaranRepository; - private final GetListJenisAnggaranService getListJenisAnggaranService; private final GetJenisAnggaranByIdService getJenisAnggaranByIdService; private final PostCreateJenisAnggaranService postCreateJenisAnggaranService; diff --git a/src/main/java/com/iconplus/smartproc/controller/JenisPengadaanController.java b/src/main/java/com/iconplus/smartproc/controller/JenisPengadaanController.java index 50290a8..ed8559c 100644 --- a/src/main/java/com/iconplus/smartproc/controller/JenisPengadaanController.java +++ b/src/main/java/com/iconplus/smartproc/controller/JenisPengadaanController.java @@ -1,65 +1,75 @@ package com.iconplus.smartproc.controller; -import com.iconplus.smartproc.model.entity.JenisPengadaan; -import com.iconplus.smartproc.exception.ResourceNotFoundException; -import com.iconplus.smartproc.repository.JenisPengadaanRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.JenisPengadaanRequest; +import com.iconplus.smartproc.model.response.GetListJenisPengadaanResponse; +import com.iconplus.smartproc.model.response.JenisPengadaanResponse; +import com.iconplus.smartproc.service.jenispengadaan.*; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; import org.springframework.web.bind.annotation.*; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - @CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true") @RestController @RequestMapping("/api/jenispengadaan") public class JenisPengadaanController { - @Autowired - private JenisPengadaanRepository jenispengadaanRepository; - //get all data - @GetMapping - public List getAllJenispengadaans(){ - return jenispengadaanRepository.findAll(); - } + private final GetListJenisPengadaanService getListJenisPengadaanService; + private final GetJenisPengadaanService getJenisPengadaanService; + private final PostCreateJenisPengadaanService postCreateJenisPengadaanService; + private final DeleteJenisPengadaanService deleteJenisPengadaanService; + private final PutUpdateJenisPengadaanService putUpdateJenisPengadaanService; - // create - @PostMapping - public JenisPengadaan createJenispengadaan(@RequestBody JenisPengadaan jenispengadaan) { - return jenispengadaanRepository.save(jenispengadaan); - } + public JenisPengadaanController(GetListJenisPengadaanService getListJenisPengadaanService, + GetJenisPengadaanService getJenisPengadaanService, + PostCreateJenisPengadaanService postCreateJenisPengadaanService, + DeleteJenisPengadaanService deleteJenisPengadaanService, + PutUpdateJenisPengadaanService putUpdateJenisPengadaanService) { + this.getListJenisPengadaanService = getListJenisPengadaanService; + this.getJenisPengadaanService = getJenisPengadaanService; + this.postCreateJenisPengadaanService = postCreateJenisPengadaanService; + this.deleteJenisPengadaanService = deleteJenisPengadaanService; + this.putUpdateJenisPengadaanService = putUpdateJenisPengadaanService; + } - // get jenispengadaan by id rest api - @GetMapping("/{id}") - public ResponseEntity getJenispengadaanById(@PathVariable Long id) { - JenisPengadaan jenispengadaan = jenispengadaanRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Jenispengadaan not exist with id :" + id)); - return ResponseEntity.ok(jenispengadaan); - } + @GetMapping + public GetListJenisPengadaanResponse getListJenisPengadaan(@RequestParam(name = "search", required = false) String search, + @RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size){ - // update jenispengadaan rest api - @PutMapping("/{id}") - public ResponseEntity updateJenispengadaan(@PathVariable Long id, @RequestBody JenisPengadaan jenisPengadaanDetails){ - JenisPengadaan jenispengadaan = jenispengadaanRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Jenispengadaan not exist with id :" + id)); + Pageable pageable = PageRequest.of((page - 1), size); + JenisPengadaanRequest jenisPengadaanRequest = JenisPengadaanRequest.builder() + .search(search) + .pageable(pageable) + .build(); - jenispengadaan.setJenisPengadaan(jenisPengadaanDetails.getJenisPengadaan()); - jenispengadaan.setKeterangan(jenisPengadaanDetails.getKeterangan()); + return getListJenisPengadaanService.execute(jenisPengadaanRequest); + } - JenisPengadaan updatedJenisPengadaan = jenispengadaanRepository.save(jenispengadaan); - return ResponseEntity.ok(updatedJenisPengadaan); - } + @PostMapping + public JenisPengadaanResponse createJenisPengadaan(@RequestBody JenisPengadaanRequest jenisPengadaanRequest) { + return postCreateJenisPengadaanService.execute(jenisPengadaanRequest); + } - // delete jenispengadaan rest api - @DeleteMapping("/{id}") - public ResponseEntity> deleteJenispengadaan(@PathVariable Long id){ - JenisPengadaan jenispengadaan = jenispengadaanRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Supposmatrix not exist with id :" + id)); + @GetMapping("/{id}") + public JenisPengadaanResponse getJenisPengadaannById(@PathVariable Long id) { + return getJenisPengadaanService.execute(JenisPengadaanRequest.builder() + .id(id) + .build()); + } - jenispengadaanRepository.delete(jenispengadaan); - Map response = new HashMap<>(); - response.put("deleted", Boolean.TRUE); - return ResponseEntity.ok(response); - } + + @PutMapping("/{id}") + public JenisPengadaanResponse updateJenisPengadaan(@PathVariable Long id, + @RequestBody JenisPengadaanRequest jenisPengadaanRequest){ + jenisPengadaanRequest.setId(id); + return putUpdateJenisPengadaanService.execute(jenisPengadaanRequest); + } + + @DeleteMapping("/{id}") + public EmptyResponse deleteJenisAnggaran(@PathVariable Long id) { + return deleteJenisPengadaanService.execute(JenisPengadaanRequest.builder() + .id(id) + .build()); + } } diff --git a/src/main/java/com/iconplus/smartproc/model/projection/JenisPengadaanView.java b/src/main/java/com/iconplus/smartproc/model/projection/JenisPengadaanView.java new file mode 100644 index 0000000..702dc10 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/JenisPengadaanView.java @@ -0,0 +1,16 @@ +package com.iconplus.smartproc.model.projection; + +public interface JenisPengadaanView { + + Long getId(); + void setId(Long id); + + String getJenisPengadaan(); + void setJenisPengadaan(String jenisPengadaan); + + String getKeterangan(); + void setKeterangan(String keterangan); + + Boolean getIsActive(); + void setIsActive(Boolean isActive); +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/JenisPengadaanRequest.java b/src/main/java/com/iconplus/smartproc/model/request/JenisPengadaanRequest.java new file mode 100644 index 0000000..ec8a2f1 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/JenisPengadaanRequest.java @@ -0,0 +1,22 @@ +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 JenisPengadaanRequest extends BaseRequest { + + private Long id; + private String jenisPengadaan; + private String keterangan; + private Boolean isActive; + private String search; + private transient Pageable pageable; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListJenisPengadaanResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListJenisPengadaanResponse.java new file mode 100644 index 0000000..22dc679 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListJenisPengadaanResponse.java @@ -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 GetListJenisPengadaanResponse extends BaseResponse { + + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/JenisPengadaanResponse.java b/src/main/java/com/iconplus/smartproc/model/response/JenisPengadaanResponse.java new file mode 100644 index 0000000..367a31c --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/JenisPengadaanResponse.java @@ -0,0 +1,21 @@ +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 JenisPengadaanResponse extends BaseResponse { + + private Long id; + private String jenisPengadaan; + private String keterangan; + private Boolean isActive; + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/repository/JenisPengadaanRepository.java b/src/main/java/com/iconplus/smartproc/repository/JenisPengadaanRepository.java index 8eff2e3..79cd333 100644 --- a/src/main/java/com/iconplus/smartproc/repository/JenisPengadaanRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/JenisPengadaanRepository.java @@ -1,10 +1,29 @@ package com.iconplus.smartproc.repository; import com.iconplus.smartproc.model.entity.JenisPengadaan; +import com.iconplus.smartproc.model.projection.JenisPengadaanView; +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 JenisPengadaanRepository extends JpaRepository { + + Optional findByIdAndIsDeleteFalse(Long id); + Optional findByJenisPengadaanAndIsDeleteFalse(String jenisPengadaan); + + @Query(value = "SELECT jp.id as id, " + + "jp.jenisPengadaan as jenisPengadaan, " + + "jp.keterangan as keterangan, " + + "jp.isActive as isActive " + + "FROM JenisPengadaan jp " + + "WHERE jp.isDelete = false " + + "AND (:search='' OR UPPER(jp.jenisPengadaan) like :search) " + + "ORDER BY jp.id") + Page getListJenisPengadaan(String search, Pageable pageable); } \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/service/jenispengadaan/DeleteJenisPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/jenispengadaan/DeleteJenisPengadaanService.java new file mode 100644 index 0000000..db71fe9 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jenispengadaan/DeleteJenisPengadaanService.java @@ -0,0 +1,26 @@ +package com.iconplus.smartproc.service.jenispengadaan; + +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.JenisPengadaanRequest; +import com.iconplus.smartproc.repository.JenisPengadaanRepository; +import org.springframework.stereotype.Service; + +@Service +public class DeleteJenisPengadaanService implements BaseService { + + private JenisPengadaanRepository jenisPengadaanRepository; + public DeleteJenisPengadaanService(JenisPengadaanRepository jenisPengadaanRepository) { + this.jenisPengadaanRepository = jenisPengadaanRepository; + } + + @Override + public EmptyResponse execute(JenisPengadaanRequest input) { + var jenisPengadaan = jenisPengadaanRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException("err", "err", "err")); + jenisPengadaan.setIsDelete(true); + jenisPengadaanRepository.save(jenisPengadaan); + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/jenispengadaan/GetJenisPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/jenispengadaan/GetJenisPengadaanService.java new file mode 100644 index 0000000..8e13017 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jenispengadaan/GetJenisPengadaanService.java @@ -0,0 +1,32 @@ +package com.iconplus.smartproc.service.jenispengadaan; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.JenisPengadaanRequest; +import com.iconplus.smartproc.model.response.JenisPengadaanResponse; +import com.iconplus.smartproc.repository.JenisPengadaanRepository; +import org.springframework.stereotype.Service; + +@Service +public class GetJenisPengadaanService implements BaseService { + + private JenisPengadaanRepository jenisPengadaanRepository; + public GetJenisPengadaanService(JenisPengadaanRepository jenisPengadaanRepository) { + this.jenisPengadaanRepository = jenisPengadaanRepository; + } + + @Override + public JenisPengadaanResponse execute(JenisPengadaanRequest input) { + + var jenisPengadaan = jenisPengadaanRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException("err", "err", "err")); + + return JenisPengadaanResponse.builder() + .id(jenisPengadaan.getId()) + .jenisPengadaan(jenisPengadaan.getJenisPengadaan()) + .keterangan(jenisPengadaan.getKeterangan()) + .isActive(jenisPengadaan.getIsActive()) + .isDelete(jenisPengadaan.getIsDelete()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/jenispengadaan/GetListJenisPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/jenispengadaan/GetListJenisPengadaanService.java new file mode 100644 index 0000000..1460e96 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jenispengadaan/GetListJenisPengadaanService.java @@ -0,0 +1,59 @@ +package com.iconplus.smartproc.service.jenispengadaan; + +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.JenisPengadaanView; +import com.iconplus.smartproc.model.request.JenisPengadaanRequest; +import com.iconplus.smartproc.model.response.GetListJenisPengadaanResponse; +import com.iconplus.smartproc.model.response.JenisPengadaanResponse; +import com.iconplus.smartproc.repository.JenisPengadaanRepository; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListJenisPengadaanService implements BaseService { + + private JenisPengadaanRepository jenisPengadaanRepository; + public GetListJenisPengadaanService(JenisPengadaanRepository jenisPengadaanRepository) { + this.jenisPengadaanRepository = jenisPengadaanRepository; + } + + @Override + public GetListJenisPengadaanResponse execute(JenisPengadaanRequest input) { + validateRequest(input); + List jenisPengadaanResponseList = new ArrayList<>(); + var jenisPengadaanViews = jenisPengadaanRepository.getListJenisPengadaan(input.getSearch(), input.getPageable()); + + for (JenisPengadaanView jenisPengadaanView : jenisPengadaanViews) { + JenisPengadaanResponse jenisPengadaanResponse = JenisPengadaanResponse.builder() + .id(jenisPengadaanView.getId()) + .jenisPengadaan(jenisPengadaanView.getJenisPengadaan()) + .keterangan(jenisPengadaanView.getKeterangan()) + .isActive(jenisPengadaanView.getIsActive()) + .build(); + jenisPengadaanResponseList.add(jenisPengadaanResponse); + } + + return GetListJenisPengadaanResponse.builder() + .data(jenisPengadaanResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(jenisPengadaanViews.getTotalPages()) + .totalRecords(jenisPengadaanViews.getTotalElements()) + .isFirstPage(jenisPengadaanViews.isFirst()) + .isLastPage(jenisPengadaanViews.isLast()) + .build()) + .build(); + + } + + private void validateRequest(JenisPengadaanRequest input) { + if (StringUtils.isNotBlank(input.getSearch())) { + input.setSearch('%'+ input.getSearch().toUpperCase()+'%'); + } + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/jenispengadaan/PostCreateJenisPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/jenispengadaan/PostCreateJenisPengadaanService.java new file mode 100644 index 0000000..20b272e --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jenispengadaan/PostCreateJenisPengadaanService.java @@ -0,0 +1,37 @@ +package com.iconplus.smartproc.service.jenispengadaan; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.JenisPengadaan; +import com.iconplus.smartproc.model.request.JenisPengadaanRequest; +import com.iconplus.smartproc.model.response.JenisPengadaanResponse; +import com.iconplus.smartproc.repository.JenisPengadaanRepository; +import org.springframework.stereotype.Service; + +@Service +public class PostCreateJenisPengadaanService implements BaseService { + + private JenisPengadaanRepository jenisPengadaanRepository; + public PostCreateJenisPengadaanService(JenisPengadaanRepository jenisPengadaanRepository) { + this.jenisPengadaanRepository = jenisPengadaanRepository; + } + + @Override + public JenisPengadaanResponse execute(JenisPengadaanRequest input) { + var jenisPengadaan = jenisPengadaanRepository.findByJenisPengadaanAndIsDeleteFalse(input.getJenisPengadaan()); + if (jenisPengadaan.isPresent()) { + throw new BusinessException("err", "err", "err"); + } + + JenisPengadaan jenisPengadaanEntity = JenisPengadaan.builder() + .jenisPengadaan(input.getJenisPengadaan()) + .keterangan(input.getKeterangan()) + .isActive(input.getIsActive()) + .isDelete(false) + .build(); + var result = jenisPengadaanRepository.save(jenisPengadaanEntity); + return JenisPengadaanResponse.builder() + .id(result.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/jenispengadaan/PutUpdateJenisPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/jenispengadaan/PutUpdateJenisPengadaanService.java new file mode 100644 index 0000000..18373b9 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jenispengadaan/PutUpdateJenisPengadaanService.java @@ -0,0 +1,30 @@ +package com.iconplus.smartproc.service.jenispengadaan; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.JenisPengadaanRequest; +import com.iconplus.smartproc.model.response.JenisPengadaanResponse; +import com.iconplus.smartproc.repository.JenisPengadaanRepository; +import org.springframework.stereotype.Service; + +@Service +public class PutUpdateJenisPengadaanService implements BaseService { + + private JenisPengadaanRepository jenisPengadaanRepository; + public PutUpdateJenisPengadaanService(JenisPengadaanRepository jenisPengadaanRepository) { + this.jenisPengadaanRepository = jenisPengadaanRepository; + } + + @Override + public JenisPengadaanResponse execute(JenisPengadaanRequest input) { + var jenisPengadaan = jenisPengadaanRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException("err", "err", "err")); + jenisPengadaan.setJenisPengadaan(input.getJenisPengadaan()); + jenisPengadaan.setKeterangan(input.getKeterangan()); + jenisPengadaan.setIsActive(input.getIsActive()); + jenisPengadaanRepository.save(jenisPengadaan); + return JenisPengadaanResponse.builder() + .id(jenisPengadaan.getId()) + .build(); + } +} From 77dfe44ee6bda2df7dbdc41f0f02ce2a2fedd4cd Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Thu, 25 May 2023 01:52:31 +0700 Subject: [PATCH 15/63] unitinisiator --- .../controller/UnitInisiatorController.java | 104 +++++++++--------- .../model/projection/UnitInisiatorView.java | 20 ++++ .../model/request/UnitInisiatorRequest.java | 22 ++++ .../GetListUnitInisiatorResponse.java | 21 ++++ .../model/response/UnitInisiatorResponse.java | 19 ++++ .../repository/UnitInisiatorRepository.java | 22 +++- .../sumberdana/GetListSumberDanaService.java | 9 ++ .../DeleteUnitInisiatorService.java | 27 +++++ .../GetListUnitInisiatorService.java | 60 ++++++++++ .../GetUnitInisiatorService.java | 32 ++++++ .../PostCreateUnitInisiatorService.java | 39 +++++++ .../PutUpdateUnitInisiatorService.java | 32 ++++++ 12 files changed, 355 insertions(+), 52 deletions(-) create mode 100644 src/main/java/com/iconplus/smartproc/model/projection/UnitInisiatorView.java create mode 100644 src/main/java/com/iconplus/smartproc/model/request/UnitInisiatorRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/GetListUnitInisiatorResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/UnitInisiatorResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/service/unitinisiator/DeleteUnitInisiatorService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/unitinisiator/GetListUnitInisiatorService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/unitinisiator/GetUnitInisiatorService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/unitinisiator/PostCreateUnitInisiatorService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/unitinisiator/PutUpdateUnitInisiatorService.java diff --git a/src/main/java/com/iconplus/smartproc/controller/UnitInisiatorController.java b/src/main/java/com/iconplus/smartproc/controller/UnitInisiatorController.java index 07edb83..74461ed 100644 --- a/src/main/java/com/iconplus/smartproc/controller/UnitInisiatorController.java +++ b/src/main/java/com/iconplus/smartproc/controller/UnitInisiatorController.java @@ -1,74 +1,76 @@ package com.iconplus.smartproc.controller; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.CrossOrigin; -import org.springframework.web.bind.annotation.DeleteMapping; -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.UnitInisiator; -import com.iconplus.smartproc.repository.UnitInisiatorRepository; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.UnitInisiatorRequest; +import com.iconplus.smartproc.model.response.GetListUnitInisiatorResponse; +import com.iconplus.smartproc.model.response.UnitInisiatorResponse; +import com.iconplus.smartproc.service.unitinisiator.*; +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/unitinisiator") public class UnitInisiatorController { - @Autowired - private UnitInisiatorRepository unitinisiatorRepository; - //get all data + private final GetUnitInisiatorService getUnitInisiatorService; + private final GetListUnitInisiatorService getListUnitInisiatorService; + private final PostCreateUnitInisiatorService postCreateUnitInisiatorService; + private final DeleteUnitInisiatorService deleteUnitInisiatorService; + private final PutUpdateUnitInisiatorService putUpdateUnitInisiatorService; + + public UnitInisiatorController(GetUnitInisiatorService getUnitInisiatorService, + GetListUnitInisiatorService getListUnitInisiatorService, + PostCreateUnitInisiatorService postCreateUnitInisiatorService, + DeleteUnitInisiatorService deleteUnitInisiatorService, + PutUpdateUnitInisiatorService putUpdateUnitInisiatorService) { + this.getUnitInisiatorService = getUnitInisiatorService; + this.getListUnitInisiatorService = getListUnitInisiatorService; + this.postCreateUnitInisiatorService = postCreateUnitInisiatorService; + this.deleteUnitInisiatorService = deleteUnitInisiatorService; + this.putUpdateUnitInisiatorService = putUpdateUnitInisiatorService; + + } + + @GetMapping - public List getAllUnitinisiator(){ - return unitinisiatorRepository.findAll(); + public GetListUnitInisiatorResponse getListUnitInisiator(@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); + UnitInisiatorRequest unitInisiatorRequest = UnitInisiatorRequest.builder() + .search(search) + .pageable(pageable) + .build(); + + return getListUnitInisiatorService.execute(unitInisiatorRequest); } - // create @PostMapping - public UnitInisiator createUnitinisiator(@RequestBody UnitInisiator unitinisiator) { - return unitinisiatorRepository.save(unitinisiator); + public UnitInisiatorResponse createUnitInisiator(@RequestBody UnitInisiatorRequest request) { + return postCreateUnitInisiatorService.execute(request); } - // get unitinisiator by id rest api @GetMapping("/{id}") - public ResponseEntity getUnitinisiatorById(@PathVariable Long id) { - UnitInisiator unitinisiator = unitinisiatorRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Unitinisiator not exist with id :" + id)); - return ResponseEntity.ok(unitinisiator); + public UnitInisiatorResponse getUnitInisiator(@PathVariable Long id) { + return getUnitInisiatorService.execute(UnitInisiatorRequest.builder() + .id(id) + .build()); } - // update jenispengadaan rest api @PutMapping("/{id}") - public ResponseEntity updateUnitinisiator(@PathVariable Long id, @RequestBody UnitInisiator unitInisiatorDetails){ - UnitInisiator unitinisiator = unitinisiatorRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Unitinisiator not exist with id :" + id)); - - unitinisiator.setUnitInisiator(unitInisiatorDetails.getUnitInisiator()); - unitinisiator.setKeterangan(unitInisiatorDetails.getKeterangan()); - - UnitInisiator updatedUnitInisiator = unitinisiatorRepository.save(unitinisiator); - return ResponseEntity.ok(updatedUnitInisiator); + public UnitInisiatorResponse updateUnitInisiator(@PathVariable Long id, @RequestBody UnitInisiatorRequest request){ + request.setId(id); + return putUpdateUnitInisiatorService.execute(request); } - // delete jenispengadaan rest api @DeleteMapping("/{id}") - public ResponseEntity> deleteUnitinisiator(@PathVariable Long id){ - UnitInisiator unitinisiator = unitinisiatorRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Unit inisiator not exist with id :" + id)); - - unitinisiatorRepository.delete(unitinisiator); - Map response = new HashMap<>(); - response.put("deleted", Boolean.TRUE); - return ResponseEntity.ok(response); + public EmptyResponse deleteUnitInisiator(@PathVariable Long id){ + return deleteUnitInisiatorService.execute(UnitInisiatorRequest.builder() + .id(id) + .build()); } + } diff --git a/src/main/java/com/iconplus/smartproc/model/projection/UnitInisiatorView.java b/src/main/java/com/iconplus/smartproc/model/projection/UnitInisiatorView.java new file mode 100644 index 0000000..4928f5d --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/UnitInisiatorView.java @@ -0,0 +1,20 @@ +package com.iconplus.smartproc.model.projection; + +public interface UnitInisiatorView { + + Long getId(); + void setId(Long id); + + String getUnitInisiator(); + void setUnitInisiator(String unitInisiator); + + String getKeterangan(); + void setKeterangan(String keterangan); + + Boolean getIsActive(); + void setIsActive(Boolean isActive); + + Boolean getIsDelete(); + void setIsDelete(Boolean isDelete); + +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/UnitInisiatorRequest.java b/src/main/java/com/iconplus/smartproc/model/request/UnitInisiatorRequest.java new file mode 100644 index 0000000..a88ee4d --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/UnitInisiatorRequest.java @@ -0,0 +1,22 @@ +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 UnitInisiatorRequest extends BaseRequest { + + private Long id; + private String unitInisiator; + private String keterangan; + private Boolean isActive; + private String search; + private transient Pageable pageable; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListUnitInisiatorResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListUnitInisiatorResponse.java new file mode 100644 index 0000000..f765075 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListUnitInisiatorResponse.java @@ -0,0 +1,21 @@ +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 GetListUnitInisiatorResponse extends BaseResponse { + + private List data; + private Pagination pagination; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/UnitInisiatorResponse.java b/src/main/java/com/iconplus/smartproc/model/response/UnitInisiatorResponse.java new file mode 100644 index 0000000..4b722ef --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/UnitInisiatorResponse.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 +@AllArgsConstructor +@NoArgsConstructor +public class UnitInisiatorResponse extends BaseResponse { + private Long id; + private String unitInisiator; + private String keterangan; + private Boolean isActive; + private Boolean isDelete; +} diff --git a/src/main/java/com/iconplus/smartproc/repository/UnitInisiatorRepository.java b/src/main/java/com/iconplus/smartproc/repository/UnitInisiatorRepository.java index bf610f6..0670075 100644 --- a/src/main/java/com/iconplus/smartproc/repository/UnitInisiatorRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/UnitInisiatorRepository.java @@ -1,10 +1,30 @@ package com.iconplus.smartproc.repository; +import com.iconplus.smartproc.model.projection.UnitInisiatorView; +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 com.iconplus.smartproc.model.entity.UnitInisiator; +import java.util.Optional; + @Repository public interface UnitInisiatorRepository extends JpaRepository { - + + Optional findByIdAndIsDeleteFalse(Long id); + Optional findByUnitInisiatorAndIsDeleteFalse(String unitInisiator); + + @Query(value = "SELECT ui.id as id, " + + "ui.unitInisiator as unitInisiator, " + + "ui.keterangan as keterangan, " + + "ui.isActive as isActive " + + "FROM UnitInisiator ui " + + "WHERE ui.isDelete = false " + + "AND (:search = '' OR UPPER(ui.unitInisiator) like :search) " + + "ORDER BY ui.id") + Page getListUnitInisiator(String search, Pageable pageable); + + } diff --git a/src/main/java/com/iconplus/smartproc/service/sumberdana/GetListSumberDanaService.java b/src/main/java/com/iconplus/smartproc/service/sumberdana/GetListSumberDanaService.java index 10742bb..c9afe2c 100644 --- a/src/main/java/com/iconplus/smartproc/service/sumberdana/GetListSumberDanaService.java +++ b/src/main/java/com/iconplus/smartproc/service/sumberdana/GetListSumberDanaService.java @@ -3,10 +3,12 @@ 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.RolesRequest; 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.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import java.util.ArrayList; @@ -23,6 +25,7 @@ public class GetListSumberDanaService implements BaseService sumberDanaResponseList = new ArrayList<>(); var sumberDanaViews= sumberDanaRepository.getListSumberDana(input.getSearch(), input.getPageable()); for (SumberDanaView sumberDanaView : sumberDanaViews) { @@ -46,4 +49,10 @@ public class GetListSumberDanaService implements BaseService { + + private UnitInisiatorRepository unitInisiatorRepository; + + private DeleteUnitInisiatorService(UnitInisiatorRepository unitInisiatorRepository) { + this.unitInisiatorRepository = unitInisiatorRepository; + } + + @Override + public EmptyResponse execute(UnitInisiatorRequest input) { + + var unitInisiator = unitInisiatorRepository.findByIdAndIsDeleteFalse(input.getId()).orElseThrow(() -> new BusinessException("err", "err", "err")); + unitInisiator.setIsDelete(true); + unitInisiatorRepository.save(unitInisiator); + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/unitinisiator/GetListUnitInisiatorService.java b/src/main/java/com/iconplus/smartproc/service/unitinisiator/GetListUnitInisiatorService.java new file mode 100644 index 0000000..5dde2dc --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/unitinisiator/GetListUnitInisiatorService.java @@ -0,0 +1,60 @@ +package com.iconplus.smartproc.service.unitinisiator; + +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.UnitInisiatorView; +import com.iconplus.smartproc.model.request.UnitInisiatorRequest; +import com.iconplus.smartproc.model.response.GetListUnitInisiatorResponse; +import com.iconplus.smartproc.model.response.UnitInisiatorResponse; +import com.iconplus.smartproc.repository.UnitInisiatorRepository; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListUnitInisiatorService implements BaseService { + + private UnitInisiatorRepository unitInisiatorRepository; + + private GetListUnitInisiatorService(UnitInisiatorRepository unitInisiatorRepository) { + this.unitInisiatorRepository = unitInisiatorRepository; + } + + @Override + public GetListUnitInisiatorResponse execute(UnitInisiatorRequest input) { + validateRequest(input); + List unitInisiatorResponseList = new ArrayList<>(); + var unitInisiatorViews = unitInisiatorRepository.getListUnitInisiator(input.getSearch(), input.getPageable()); + + for (UnitInisiatorView unitInisiatorView : unitInisiatorViews) { + UnitInisiatorResponse unitInisiatorResponse = UnitInisiatorResponse.builder() + .id(unitInisiatorView.getId()) + .unitInisiator(unitInisiatorView.getUnitInisiator()) + .keterangan(unitInisiatorView.getKeterangan()) + .isActive(unitInisiatorView.getIsActive()) + .isDelete(unitInisiatorView.getIsDelete()) + .build(); + unitInisiatorResponseList.add(unitInisiatorResponse); + } + + return GetListUnitInisiatorResponse.builder() + .data(unitInisiatorResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(unitInisiatorViews.getTotalPages()) + .totalRecords(unitInisiatorViews.getTotalElements()) + .isFirstPage(unitInisiatorViews.isFirst()) + .isLastPage(unitInisiatorViews.isLast()) + .build()) + .build(); + } + + private void validateRequest(UnitInisiatorRequest input) { + if (StringUtils.isNotBlank(input.getSearch())) { + input.setSearch('%'+ input.getSearch().toUpperCase()+'%'); + } + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/unitinisiator/GetUnitInisiatorService.java b/src/main/java/com/iconplus/smartproc/service/unitinisiator/GetUnitInisiatorService.java new file mode 100644 index 0000000..6259640 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/unitinisiator/GetUnitInisiatorService.java @@ -0,0 +1,32 @@ +package com.iconplus.smartproc.service.unitinisiator; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.UnitInisiatorRequest; +import com.iconplus.smartproc.model.response.UnitInisiatorResponse; +import com.iconplus.smartproc.repository.UnitInisiatorRepository; +import org.springframework.stereotype.Service; + +@Service +public class GetUnitInisiatorService implements BaseService { + + private UnitInisiatorRepository unitInisiatorRepository; + + private GetUnitInisiatorService(UnitInisiatorRepository unitInisiatorRepository) { + this.unitInisiatorRepository = unitInisiatorRepository; + } + + @Override + public UnitInisiatorResponse execute(UnitInisiatorRequest input) { + + var unitInisiator = unitInisiatorRepository.findByIdAndIsDeleteFalse(input.getId()).orElseThrow(() -> new BusinessException("err", "err", "err")); + return UnitInisiatorResponse.builder() + .id(unitInisiator.getId()) + .unitInisiator(unitInisiator.getUnitInisiator()) + .keterangan(unitInisiator.getKeterangan()) + .isActive(unitInisiator.getIsActive()) + .isDelete(unitInisiator.getIsDelete()) + .build(); + + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/unitinisiator/PostCreateUnitInisiatorService.java b/src/main/java/com/iconplus/smartproc/service/unitinisiator/PostCreateUnitInisiatorService.java new file mode 100644 index 0000000..3ef252e --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/unitinisiator/PostCreateUnitInisiatorService.java @@ -0,0 +1,39 @@ +package com.iconplus.smartproc.service.unitinisiator; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.UnitInisiator; +import com.iconplus.smartproc.model.request.UnitInisiatorRequest; +import com.iconplus.smartproc.model.response.UnitInisiatorResponse; +import com.iconplus.smartproc.repository.UnitInisiatorRepository; +import org.springframework.stereotype.Service; + +@Service +public class PostCreateUnitInisiatorService implements BaseService { + + private UnitInisiatorRepository unitInisiatorRepository; + private PostCreateUnitInisiatorService(UnitInisiatorRepository unitInisiatorRepository) { + this.unitInisiatorRepository = unitInisiatorRepository; + } + + @Override + public UnitInisiatorResponse execute(UnitInisiatorRequest input) { + + var unitInisiator = unitInisiatorRepository.findByUnitInisiatorAndIsDeleteFalse(input.getUnitInisiator()); + if (unitInisiator.isPresent()) { + throw new BusinessException("err", "err", "err"); + } + + UnitInisiator unitInisiatorEntity = UnitInisiator.builder() + .unitInisiator(input.getUnitInisiator()) + .keterangan(input.getKeterangan()) + .isActive(input.getIsActive()) + .isDelete(false) + .build(); + var result = unitInisiatorRepository.save(unitInisiatorEntity); + + return UnitInisiatorResponse.builder() + .id(result.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/unitinisiator/PutUpdateUnitInisiatorService.java b/src/main/java/com/iconplus/smartproc/service/unitinisiator/PutUpdateUnitInisiatorService.java new file mode 100644 index 0000000..11fedc3 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/unitinisiator/PutUpdateUnitInisiatorService.java @@ -0,0 +1,32 @@ +package com.iconplus.smartproc.service.unitinisiator; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.UnitInisiatorRequest; +import com.iconplus.smartproc.model.response.UnitInisiatorResponse; +import com.iconplus.smartproc.repository.UnitInisiatorRepository; +import org.springframework.stereotype.Service; + +@Service +public class PutUpdateUnitInisiatorService implements BaseService { + + private UnitInisiatorRepository unitInisiatorRepository; + + private PutUpdateUnitInisiatorService(UnitInisiatorRepository unitInisiatorRepository) { + this.unitInisiatorRepository = unitInisiatorRepository; + } + + @Override + public UnitInisiatorResponse execute(UnitInisiatorRequest input) { + + var unitInisiator = unitInisiatorRepository.findByIdAndIsDeleteFalse(input.getId()).orElseThrow(() -> new BusinessException("err", "err", "err")); + unitInisiator.setUnitInisiator(input.getUnitInisiator()); + unitInisiator.setKeterangan(input.getKeterangan()); + unitInisiator.setIsActive(input.getIsActive()); + var result = unitInisiatorRepository.save(unitInisiator); + + return UnitInisiatorResponse.builder() + .id(result.getId()) + .build(); + } +} From d50b2a8eef69a06fae2303452ecd83fa766263a0 Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Thu, 25 May 2023 11:55:47 +0700 Subject: [PATCH 16/63] temp authentication user --- .../smartproc/configuration/JwtTokenUtil.java | 4 +- .../controller/AuthenticationController.java | 35 ++++++ .../iconplus/smartproc/model/entity/Menu.java | 52 --------- .../smartproc/model/entity/Menus.java | 45 ++++++++ .../smartproc/model/entity/Permission.java | 33 +++--- .../model/entity/TokenManagement.java | 2 +- .../model/request/RefreshTokenRequest.java | 15 +++ .../model/response/LoginResponse.java | 2 +- .../model/response/RefreshTokenResponse.java | 17 +++ .../smartproc/model/token/TokenContent.java | 4 +- .../repository/TokenManagementRepository.java | 8 ++ .../smartproc/repository/UsersRepository.java | 22 ++++ .../smartproc/service/CommonService.java | 47 +++++++- .../service/authentication/LoginService.java | 57 +++++++++- .../TokenManagementService.java | 100 ++++++++++++++++++ src/main/resources/application-local.yml | 3 + 16 files changed, 368 insertions(+), 78 deletions(-) create mode 100644 src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java delete mode 100644 src/main/java/com/iconplus/smartproc/model/entity/Menu.java create mode 100644 src/main/java/com/iconplus/smartproc/model/entity/Menus.java create mode 100644 src/main/java/com/iconplus/smartproc/model/request/RefreshTokenRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/RefreshTokenResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/service/authentication/TokenManagementService.java diff --git a/src/main/java/com/iconplus/smartproc/configuration/JwtTokenUtil.java b/src/main/java/com/iconplus/smartproc/configuration/JwtTokenUtil.java index ebab745..aff55c6 100644 --- a/src/main/java/com/iconplus/smartproc/configuration/JwtTokenUtil.java +++ b/src/main/java/com/iconplus/smartproc/configuration/JwtTokenUtil.java @@ -39,11 +39,11 @@ public class JwtTokenUtil implements Serializable { return expiration.before(new Date()); } - public String generateToken(String username, TokenContent tokenContent, Integer expirationInMs, String channel, String scopeType) { + public String generateToken(String username, TokenContent tokenContent, Integer expirationInMs) { Map claims = new HashMap<>(); claims.put("authorities", tokenContent.getAccessMenu()); - claims.put("fullname", tokenContent.getFullname()); + claims.put("nama", tokenContent.getNama()); claims.put("username", tokenContent.getUsername()); claims.put("user_id", tokenContent.getUserId()); claims.put("role", tokenContent.getRole()); diff --git a/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java b/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java new file mode 100644 index 0000000..c14e678 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java @@ -0,0 +1,35 @@ +package com.iconplus.smartproc.controller; + +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.RefreshTokenResponse; +import com.iconplus.smartproc.service.authentication.LoginService; +import com.iconplus.smartproc.service.authentication.TokenManagementService; +import org.springframework.web.bind.annotation.*; + +@CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true") +@RestController +@RequestMapping("/api/authentication") +public class AuthenticationController { + + private LoginService loginService; + private TokenManagementService tokenManagementService; + + public AuthenticationController(LoginService loginService, + TokenManagementService tokenManagementService) { + this.loginService = loginService; + this.tokenManagementService = tokenManagementService; + } + + @PostMapping("/login") + public LoginResponse getLoginResponse(@RequestBody LoginRequest loginRequest) { + return loginService.execute(loginRequest); + } + + @PostMapping("/refresh-token") + public RefreshTokenResponse getRefreshToken(@RequestBody RefreshTokenRequest refreshTokenRequest) { + return tokenManagementService.execute(refreshTokenRequest); + } + +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/Menu.java b/src/main/java/com/iconplus/smartproc/model/entity/Menu.java deleted file mode 100644 index d37879f..0000000 --- a/src/main/java/com/iconplus/smartproc/model/entity/Menu.java +++ /dev/null @@ -1,52 +0,0 @@ -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.GeneratorType; -import org.hibernate.annotations.Type; - -import javax.persistence.*; - - -@Data -@Builder -@AllArgsConstructor -@NoArgsConstructor -@Entity -@Table(name = "permission") -public class Menu extends BaseEntity { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "id") - private Long id; - - @Column(name = "subMenu") - private String subMenu; - - @Column(name = "menu") - private String menu; - -// @Column(name = "can_view") -// @Type(type = "org.hibernate.type.NumericBooleanType") -// private Boolean canView; -// -// @Column(name = "can_read") -// @Type(type = "org.hibernate.type.NumericBooleanType") -// private Boolean canRead; -// -// @Column(name = "can_create") -// @Type(type = "org.hibernate.type.NumericBooleanType") -// private Boolean canCreate; -// -// @Column(name = "can_delete") -// @Type(type = "org.hibernate.type.NumericBooleanType") -// private Boolean canDelete; - - @Column(name = "deleted") - @Type(type = "org.hibernate.type.NumericBooleanType") - private Boolean deleted; -} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/Menus.java b/src/main/java/com/iconplus/smartproc/model/entity/Menus.java new file mode 100644 index 0000000..9001e39 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/Menus.java @@ -0,0 +1,45 @@ +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.GeneratorType; +import org.hibernate.annotations.Type; + +import javax.persistence.*; + + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "menus") +public class Menus extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "parent_id") + private Long parentId; + + @Column(name = "nama") + private String nama; + + @Column(name = "link") + private String link; + + @Column(name = "urutan") + private Long urutan; + + @Column(name = "icon") + private String icon; + + @Column(name = "is_delete") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isDelete; +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/Permission.java b/src/main/java/com/iconplus/smartproc/model/entity/Permission.java index 76aeb2e..46e9df1 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/Permission.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/Permission.java @@ -8,10 +8,7 @@ import lombok.NoArgsConstructor; import org.hibernate.annotations.GenericGenerator; import org.hibernate.annotations.Type; -import javax.persistence.Column; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.Table; +import javax.persistence.*; @Data @Builder @@ -21,13 +18,9 @@ import javax.persistence.Table; public class Permission extends BaseEntity { @Id - @GeneratedValue(generator = "UUID") - @GenericGenerator( - name = "UUID", - strategy = "org.hibernate.id.UUIDGenerator" - ) + @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") - private String id; + private Long id; @Column(name = "role_id") private Long roleId; @@ -35,7 +28,23 @@ public class Permission extends BaseEntity { @Column(name = "menu_id") private Long menuId; - @Column(name = "deleted") + @Column(name = "can_view") @Type(type = "org.hibernate.type.NumericBooleanType") - private Boolean deleted; + private Boolean canView; + + @Column(name = "can_read") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean canRead; + + @Column(name = "can_update") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean canUpdate; + + @Column(name = "can_delete") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean canDelete; + + @Column(name = "is_delete") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isDelete; } diff --git a/src/main/java/com/iconplus/smartproc/model/entity/TokenManagement.java b/src/main/java/com/iconplus/smartproc/model/entity/TokenManagement.java index 75c9963..45aa828 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/TokenManagement.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/TokenManagement.java @@ -29,7 +29,7 @@ public class TokenManagement extends BaseEntity { private String id; @Column(name = "user_id") - private String userId; + private Long userId; @Lob @Column(name = "access_token") diff --git a/src/main/java/com/iconplus/smartproc/model/request/RefreshTokenRequest.java b/src/main/java/com/iconplus/smartproc/model/request/RefreshTokenRequest.java new file mode 100644 index 0000000..d56621f --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/RefreshTokenRequest.java @@ -0,0 +1,15 @@ +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 RefreshTokenRequest extends BaseRequest { + private String refreshToken; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/LoginResponse.java b/src/main/java/com/iconplus/smartproc/model/response/LoginResponse.java index 675e95b..10c2b58 100644 --- a/src/main/java/com/iconplus/smartproc/model/response/LoginResponse.java +++ b/src/main/java/com/iconplus/smartproc/model/response/LoginResponse.java @@ -15,7 +15,7 @@ import java.util.Set; public class LoginResponse extends BaseResponse { private String accessToken; - private String validity; + private Integer validity; private String refreshToken; private String username; private String email; diff --git a/src/main/java/com/iconplus/smartproc/model/response/RefreshTokenResponse.java b/src/main/java/com/iconplus/smartproc/model/response/RefreshTokenResponse.java new file mode 100644 index 0000000..3ecb322 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/RefreshTokenResponse.java @@ -0,0 +1,17 @@ +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 RefreshTokenResponse extends BaseResponse { + private String accessToken; + private String refreshToken; + private Integer validity; +} diff --git a/src/main/java/com/iconplus/smartproc/model/token/TokenContent.java b/src/main/java/com/iconplus/smartproc/model/token/TokenContent.java index 28907de..3efd7fb 100644 --- a/src/main/java/com/iconplus/smartproc/model/token/TokenContent.java +++ b/src/main/java/com/iconplus/smartproc/model/token/TokenContent.java @@ -8,9 +8,9 @@ import java.util.Set; @Builder @Data public class TokenContent { - private String userId; + private Long userId; private String role; private Set accessMenu; - private String fullname; + private String nama; private String username; } diff --git a/src/main/java/com/iconplus/smartproc/repository/TokenManagementRepository.java b/src/main/java/com/iconplus/smartproc/repository/TokenManagementRepository.java index 57e0b55..82a6e51 100644 --- a/src/main/java/com/iconplus/smartproc/repository/TokenManagementRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/TokenManagementRepository.java @@ -7,6 +7,7 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; import java.util.List; +import java.util.Optional; @Repository public interface TokenManagementRepository extends JpaRepository { @@ -16,4 +17,11 @@ public interface TokenManagementRepository extends JpaRepository= SYSDATE", nativeQuery = true) List findAccessTokenByUserIdAndDeletedFalse(String userId); + + @Query(value = "SELECT tm from TokenManagement tm " + + "WHERE tm.refreshToken = :refreshToken " + + "and tm.isDelete = false") + Optional findByRefreshToken(String refreshToken); + + Optional findByUserId(Long id); } diff --git a/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java b/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java index 4f5b0aa..652c64c 100644 --- a/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java @@ -44,6 +44,28 @@ public interface UsersRepository extends JpaRepository { Optional findByEmailAndIsDeleteFalse(String email); + @Query("SELECT u.id as id, " + + "u.nama as nama, " + + "u.username as username, " + + "u.password as password, " + + "u.jabatan as jabatan, " + + "u.roleId as roleId, " + + "r.role as role, " + + "u.bidangId as bidangId, " + + "b.bidang as bidang, " + + "u.instansiId as instansiId, " + + "i.instansi as instansi, " + + "u.email as email, " + + "u.isActive as isActive, " + + "u.isDelete as isDelete " + + "FROM Users u " + + "JOIN Roles r ON r.id = u.roleId " + + "JOIN Bidang b ON b.id = u.bidangId " + + "JOIN Instansi i ON i.id = u.instansiId " + + "Where u.isDelete = false " + + "AND (u.username = :input OR u.email = :input)") + Optional getByUsernameOrEmail(String input); + Optional findByIdAndIsDeleteFalse(Long id); @Query("SELECT u.id as id, " + diff --git a/src/main/java/com/iconplus/smartproc/service/CommonService.java b/src/main/java/com/iconplus/smartproc/service/CommonService.java index beae0dd..2746885 100644 --- a/src/main/java/com/iconplus/smartproc/service/CommonService.java +++ b/src/main/java/com/iconplus/smartproc/service/CommonService.java @@ -1,14 +1,15 @@ package com.iconplus.smartproc.service; import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.model.entity.TokenManagement; import com.iconplus.smartproc.model.request.UsersRequest; -import com.iconplus.smartproc.repository.BidangRepository; -import com.iconplus.smartproc.repository.InstansiRepository; -import com.iconplus.smartproc.repository.RolesRepository; -import com.iconplus.smartproc.repository.UsersRepository; +import com.iconplus.smartproc.repository.*; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import java.sql.Timestamp; +import java.time.Instant; + @Service public class CommonService { @@ -16,15 +17,18 @@ public class CommonService { private RolesRepository rolesRepository; private BidangRepository bidangRepository; private InstansiRepository instansiRepository; + private TokenManagementRepository tokenManagementRepository; public CommonService(UsersRepository usersRepository, RolesRepository rolesRepository, BidangRepository bidangRepository, - InstansiRepository instansiRepository) { + InstansiRepository instansiRepository, + TokenManagementRepository tokenManagementRepository) { this.usersRepository = usersRepository; this.rolesRepository = rolesRepository; this.bidangRepository = bidangRepository; this.instansiRepository = instansiRepository; + this.tokenManagementRepository = tokenManagementRepository; } public void validateUserRequst(UsersRequest input) { @@ -44,4 +48,37 @@ public class CommonService { throw new BusinessException("err", "err", "err"); } } + + public void saveUserToken(TokenManagement tokenManagement, Integer tokenExpiry) { + + var issuedTime = Timestamp.from(Instant.now()); + var expirationTime = Timestamp.from(Instant.now().plusMillis(tokenExpiry * (long) 60000)); + + if (StringUtils.isNotBlank(tokenManagement.getId())) { + tokenManagement.setIssuedTime(issuedTime); + tokenManagement.setExpiredTime(expirationTime); + tokenManagementRepository.save(tokenManagement); + return; + } + + var existToken = tokenManagementRepository.findByUserId(tokenManagement.getUserId()); + + if (existToken.isPresent()) { + existToken.get().setAccessToken(tokenManagement.getAccessToken()); + existToken.get().setRefreshToken(tokenManagement.getRefreshToken()); + existToken.get().setIsDelete(false); + existToken.get().setIssuedTime(issuedTime); + existToken.get().setExpiredTime(expirationTime); + tokenManagementRepository.save(existToken.get()); + } else { + tokenManagementRepository.save(TokenManagement.builder() + .userId(tokenManagement.getUserId()) + .accessToken(tokenManagement.getAccessToken()) + .refreshToken(tokenManagement.getRefreshToken()) + .issuedTime(issuedTime) + .expiredTime(expirationTime) + .isDelete(false) + .build()); + } + } } diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java b/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java index 2b371b4..82350c9 100644 --- a/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java +++ b/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java @@ -1,47 +1,98 @@ package com.iconplus.smartproc.service.authentication; +import com.iconplus.smartproc.configuration.JwtTokenUtil; import com.iconplus.smartproc.exception.BusinessException; import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.TokenManagement; import com.iconplus.smartproc.model.request.LoginRequest; import com.iconplus.smartproc.model.response.LoginResponse; +import com.iconplus.smartproc.model.token.TokenContent; import com.iconplus.smartproc.repository.UsersRepository; +import com.iconplus.smartproc.service.CommonService; import com.iconplus.smartproc.util.Constants; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.HashMap; +import java.util.Map; @Service @Slf4j public class LoginService implements BaseService { + @Value("${jwt.expired-time.access-token:15}") + private Integer accessTokenExp; + @Value("${jwt.expired-time.refresh-token:60}") + private Integer refreshTokenExp; private final UsersRepository usersRepository; + private final JwtTokenUtil jwtTokenUtil; + private final CommonService commonService; - public LoginService(UsersRepository userRepository) { + + public LoginService(UsersRepository userRepository, + JwtTokenUtil jwtTokenUtil, + CommonService commonService) { this.usersRepository = userRepository; + this.jwtTokenUtil = jwtTokenUtil; + this.commonService = commonService; } + @Transactional @Override public LoginResponse execute(LoginRequest input) { - var user= usersRepository.findByEmailAndIsDeleteFalse(input.getEmail()) + var userRoleView= usersRepository.getByUsernameOrEmail(input.getEmail()) .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, Constants.ERR_CODE_10003, Constants.ERR_TTL_10003, String.format(Constants.ERR_MSG_10003, input.getEmail()))); - if (!StringUtils.equalsIgnoreCase(input.getPassword(), user.getPassword())) { + if (!StringUtils.equalsIgnoreCase(input.getPassword(), userRoleView.getPassword())) { throw new BusinessException(HttpStatus.CONFLICT, Constants.ERR_CODE_10004, Constants.ERR_TTL_10004, Constants.ERR_MSG_10004); } + var tokenContent = TokenContent.builder() + .userId(userRoleView.getId()) + .username(userRoleView.getUsername()) + .nama(userRoleView.getNama()) + .role(userRoleView.getRole()) + .accessMenu(null) + .build(); + + Map claims = new HashMap<>(); + claims.put("userId", userRoleView.getId()); + + final String accessToken = jwtTokenUtil.generateToken(String.valueOf(userRoleView.getId()), tokenContent, accessTokenExp * 60000); + String refreshToken = jwtTokenUtil.doGenerateToken(claims, String.valueOf(userRoleView.getId()), refreshTokenExp * 60000); + + if (StringUtils.isBlank(accessToken) || StringUtils.isBlank(refreshToken)) { + log.error("token null"); + throw new BusinessException("err", "err", "err"); + } + + commonService.saveUserToken(TokenManagement.builder() + .userId(userRoleView.getId()) + .accessToken(accessToken) + .refreshToken(refreshToken) + .build(), accessTokenExp); return LoginResponse.builder() + .accessToken(accessToken) + .validity(accessTokenExp * 60) + .refreshToken(refreshToken) + .username(userRoleView.getUsername()) + .email(userRoleView.getEmail()) + .role(userRoleView.getRole()) .build(); } } diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/TokenManagementService.java b/src/main/java/com/iconplus/smartproc/service/authentication/TokenManagementService.java new file mode 100644 index 0000000..fba5e59 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/authentication/TokenManagementService.java @@ -0,0 +1,100 @@ +package com.iconplus.smartproc.service.authentication; + +import com.iconplus.smartproc.configuration.JwtTokenUtil; +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.helper.service.TokenUtils; +import com.iconplus.smartproc.model.entity.TokenManagement; +import com.iconplus.smartproc.model.request.RefreshTokenRequest; +import com.iconplus.smartproc.model.response.RefreshTokenResponse; +import com.iconplus.smartproc.model.token.TokenContent; +import com.iconplus.smartproc.repository.TokenManagementRepository; +import com.iconplus.smartproc.repository.UsersRepository; +import com.iconplus.smartproc.service.CommonService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Objects; + +@Service +@Slf4j +public class TokenManagementService implements BaseService { + + @Value("${jwt.expired-time.access-token:15}") + private Integer accessTokenExp; + + private final TokenManagementRepository tokenManagementRepository; + private final UsersRepository usersRepository; + private final JwtTokenUtil jwtTokenUtil; + private final CommonService commonService; + + public TokenManagementService(TokenManagementRepository tokenManagementRepository, + JwtTokenUtil jwtTokenUtil, + UsersRepository usersRepository, + CommonService commonService) { + this.tokenManagementRepository = tokenManagementRepository; + this.jwtTokenUtil = jwtTokenUtil; + this.usersRepository = usersRepository; + this.commonService = commonService; + } + + @Transactional + @Override + public RefreshTokenResponse execute(RefreshTokenRequest input) { + + try { + jwtTokenUtil.validateTokenOnly(input.getRefreshToken()); + } catch (Exception e) { + throw new BusinessException(HttpStatus.UNAUTHORIZED, "err", "err", "err"); + } + + var decodeToken = TokenUtils.decodeToken(input.getRefreshToken()); + Long userId = Long.valueOf(decodeToken.get("userId")); + + var tokenManagement1 = tokenManagementRepository.findByRefreshToken(input.getRefreshToken()); + + TokenManagement tokenManagement = tokenManagementRepository.findByRefreshToken(input.getRefreshToken()) + .map(c -> verifyRefreshToken(c, userId)) + .orElseThrow(() -> { + log.error("failed validate token to existing db"); + return new BusinessException( + HttpStatus.UNAUTHORIZED, "err", "err", + "err"); + }); + + var userRoleView = usersRepository.getUserByIdAndDeletedFase(userId).orElseThrow(() -> new BusinessException("err", "err", "err")); + + var tokenContent = TokenContent.builder() + .userId(userRoleView.getId()) + .username(userRoleView.getUsername()) + .nama(userRoleView.getNama()) + .role(userRoleView.getRole()) + .accessMenu(null) + .build(); + + final String accessToken = jwtTokenUtil.generateToken(String.valueOf(userRoleView.getId()), tokenContent, accessTokenExp * 60000); + + tokenManagement.setAccessToken(accessToken); + tokenManagement.setRefreshToken(input.getRefreshToken()); + commonService.saveUserToken(tokenManagement, accessTokenExp); + + return RefreshTokenResponse.builder() + .accessToken(accessToken) + .refreshToken(input.getRefreshToken()) + .validity(accessTokenExp * 60) + .build(); + } + + private TokenManagement verifyRefreshToken(TokenManagement tokenManagement, Long userId) { + if (!Objects.equals(userId, tokenManagement.getUserId())) { + throw new BusinessException(HttpStatus.UNAUTHORIZED, + "err", + "err", + "err"); + } + return tokenManagement; + } +} diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index 69e2bf7..4d67143 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -12,6 +12,9 @@ spring: url: jdbc:postgresql://localhost:5432/smartproc username: postgres password: postgre +# autoCommit=false + hikari: + auto-commit: false jackson: default-property-inclusion: NON_NULL jpa: From c833f09200399f07f661d12caa6e53601c7eb620 Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Thu, 25 May 2023 14:54:43 +0700 Subject: [PATCH 17/63] fix authentication --- .../smartproc/configuration/JwtRequestFilter.java | 2 +- .../smartproc/configuration/WebSecurityConfig.java | 1 + .../iconplus/smartproc/model/entity/TokenManagement.java | 6 ++---- .../smartproc/model/projection/TokenManagementView.java | 8 ++++---- .../smartproc/repository/TokenManagementRepository.java | 6 +++--- .../smartproc/service/authentication/LoginService.java | 3 ++- .../authentication/PostCheckAccessTokenService.java | 4 ++-- .../service/authentication/TokenManagementService.java | 3 ++- 8 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/iconplus/smartproc/configuration/JwtRequestFilter.java b/src/main/java/com/iconplus/smartproc/configuration/JwtRequestFilter.java index b04e38b..2b976b7 100644 --- a/src/main/java/com/iconplus/smartproc/configuration/JwtRequestFilter.java +++ b/src/main/java/com/iconplus/smartproc/configuration/JwtRequestFilter.java @@ -54,7 +54,7 @@ public class JwtRequestFilter extends OncePerRequestFilter { private void isValidToken(HttpServletRequest request, String jwtToken) { String requestUrl = request.getRequestURI(); - String refreshTokenUrl = "/authentication-service/authentication/v1/refresh-token"; + String refreshTokenUrl = "/api/authentication/refresh-token"; if (!refreshTokenUrl.equals(requestUrl)) { var isValid = isValidAuthenticateToken(jwtToken); if (!isValid) { diff --git a/src/main/java/com/iconplus/smartproc/configuration/WebSecurityConfig.java b/src/main/java/com/iconplus/smartproc/configuration/WebSecurityConfig.java index 9c6274a..0546d49 100644 --- a/src/main/java/com/iconplus/smartproc/configuration/WebSecurityConfig.java +++ b/src/main/java/com/iconplus/smartproc/configuration/WebSecurityConfig.java @@ -34,6 +34,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { .csrf().disable(); httpSecurity.authorizeRequests() .antMatchers("/api*/**").permitAll() + .antMatchers("/api/authentication/*").permitAll() .antMatchers("/actuator/health").permitAll() .antMatchers("/swagger*/**").permitAll() .antMatchers("/v2*/**").permitAll() diff --git a/src/main/java/com/iconplus/smartproc/model/entity/TokenManagement.java b/src/main/java/com/iconplus/smartproc/model/entity/TokenManagement.java index 45aa828..c1d2761 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/TokenManagement.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/TokenManagement.java @@ -31,12 +31,10 @@ public class TokenManagement extends BaseEntity { @Column(name = "user_id") private Long userId; - @Lob - @Column(name = "access_token") + @Column(name = "access_token", length = 2500) private String accessToken; - @Lob - @Column(name = "refresh_token") + @Column(name = "refresh_token", length = 2500) private String refreshToken; @Column(name = "issued_time") diff --git a/src/main/java/com/iconplus/smartproc/model/projection/TokenManagementView.java b/src/main/java/com/iconplus/smartproc/model/projection/TokenManagementView.java index 9e651d8..5bf6c24 100644 --- a/src/main/java/com/iconplus/smartproc/model/projection/TokenManagementView.java +++ b/src/main/java/com/iconplus/smartproc/model/projection/TokenManagementView.java @@ -7,10 +7,10 @@ public interface TokenManagementView { String getId(); void setId(String id); - String getUserId(); - void setUserId(String userId); + Long getUserId(); + void setUserId(Long userId); - Clob getAccessToken(); - void setAccessToken(Clob accessToken); + String getAccessToken(); + void setAccessToken(String accessToken); } diff --git a/src/main/java/com/iconplus/smartproc/repository/TokenManagementRepository.java b/src/main/java/com/iconplus/smartproc/repository/TokenManagementRepository.java index 82a6e51..a0d1c86 100644 --- a/src/main/java/com/iconplus/smartproc/repository/TokenManagementRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/TokenManagementRepository.java @@ -14,9 +14,9 @@ public interface TokenManagementRepository extends JpaRepository= SYSDATE", nativeQuery = true) - List findAccessTokenByUserIdAndDeletedFalse(String userId); + "AND is_delete = 0 " + + "AND expired_time >= CURRENT_TIMESTAMP", nativeQuery = true) + List findAccessTokenByUserIdAndDeletedFalse(Long userId); @Query(value = "SELECT tm from TokenManagement tm " + "WHERE tm.refreshToken = :refreshToken " + diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java b/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java index 82350c9..e52c99b 100644 --- a/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java +++ b/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java @@ -18,6 +18,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; @Service @@ -65,7 +66,7 @@ public class LoginService implements BaseService { .username(userRoleView.getUsername()) .nama(userRoleView.getNama()) .role(userRoleView.getRole()) - .accessMenu(null) + .accessMenu(new HashSet<>()) .build(); Map claims = new HashMap<>(); diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/PostCheckAccessTokenService.java b/src/main/java/com/iconplus/smartproc/service/authentication/PostCheckAccessTokenService.java index a77aa51..85c9d5e 100644 --- a/src/main/java/com/iconplus/smartproc/service/authentication/PostCheckAccessTokenService.java +++ b/src/main/java/com/iconplus/smartproc/service/authentication/PostCheckAccessTokenService.java @@ -27,7 +27,7 @@ public class PostCheckAccessTokenService implements BaseService tokenManagementViews = tokenManagementRepository.findAccessTokenByUserIdAndDeletedFalse(userId); if (tokenManagementViews.isEmpty()) { @@ -38,7 +38,7 @@ public class PostCheckAccessTokenService implements BaseService userTokenList = tokenManagementViews.stream() - .map(c-> CommonUtil.clobToString(c.getAccessToken())) + .map(TokenManagementView::getAccessToken) .collect(Collectors.toList()); boolean isMatch = userTokenList.stream().anyMatch(s -> s.equals(input.getAccessToken())); diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/TokenManagementService.java b/src/main/java/com/iconplus/smartproc/service/authentication/TokenManagementService.java index fba5e59..e32bdd4 100644 --- a/src/main/java/com/iconplus/smartproc/service/authentication/TokenManagementService.java +++ b/src/main/java/com/iconplus/smartproc/service/authentication/TokenManagementService.java @@ -17,6 +17,7 @@ import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.HashSet; import java.util.Objects; @Service @@ -72,7 +73,7 @@ public class TokenManagementService implements BaseService()) .build(); final String accessToken = jwtTokenUtil.generateToken(String.valueOf(userRoleView.getId()), tokenContent, accessTokenExp * 60000); From b66e0e6fa417b53cb80fce1c68a9f4aced8511da Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Thu, 25 May 2023 14:58:04 +0700 Subject: [PATCH 18/63] fix authentication --- src/main/resources/application-local.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index 4d67143..69e2bf7 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -12,9 +12,6 @@ spring: url: jdbc:postgresql://localhost:5432/smartproc username: postgres password: postgre -# autoCommit=false - hikari: - auto-commit: false jackson: default-property-inclusion: NON_NULL jpa: From c4700af83261061e3634c33f8825f38e6e8f2ba9 Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Thu, 25 May 2023 15:39:36 +0700 Subject: [PATCH 19/63] add api context and logout --- .../controller/AuthenticationController.java | 14 +- .../smartproc/helper/context/ApiContext.java | 50 +++++ .../helper/context/ApiContextFactory.java | 184 ++++++++++++++++++ .../helper/context/AutoConfiguration.java | 21 ++ .../helper/context/ContextProvider.java | 30 +++ .../context/HttpHeadersInterceptor.java | 33 ++++ .../repository/TokenManagementRepository.java | 2 + .../service/authentication/LogoutService.java | 44 +++++ 8 files changed, 377 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/iconplus/smartproc/helper/context/ApiContext.java create mode 100644 src/main/java/com/iconplus/smartproc/helper/context/ApiContextFactory.java create mode 100644 src/main/java/com/iconplus/smartproc/helper/context/AutoConfiguration.java create mode 100644 src/main/java/com/iconplus/smartproc/helper/context/ContextProvider.java create mode 100644 src/main/java/com/iconplus/smartproc/helper/context/HttpHeadersInterceptor.java create mode 100644 src/main/java/com/iconplus/smartproc/service/authentication/LogoutService.java diff --git a/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java b/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java index c14e678..438ddd2 100644 --- a/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java +++ b/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java @@ -1,10 +1,13 @@ package com.iconplus.smartproc.controller; +import com.iconplus.smartproc.helper.model.EmptyRequest; +import com.iconplus.smartproc.helper.model.EmptyResponse; 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.RefreshTokenResponse; import com.iconplus.smartproc.service.authentication.LoginService; +import com.iconplus.smartproc.service.authentication.LogoutService; import com.iconplus.smartproc.service.authentication.TokenManagementService; import org.springframework.web.bind.annotation.*; @@ -15,11 +18,14 @@ public class AuthenticationController { private LoginService loginService; private TokenManagementService tokenManagementService; + private LogoutService logoutService; public AuthenticationController(LoginService loginService, - TokenManagementService tokenManagementService) { + TokenManagementService tokenManagementService, + LogoutService logoutService) { this.loginService = loginService; this.tokenManagementService = tokenManagementService; + this.logoutService = logoutService; } @PostMapping("/login") @@ -32,4 +38,10 @@ public class AuthenticationController { return tokenManagementService.execute(refreshTokenRequest); } + @PostMapping("/logout") + public EmptyResponse logoutUser(EmptyRequest request) { + return logoutService.execute(request); + + } + } diff --git a/src/main/java/com/iconplus/smartproc/helper/context/ApiContext.java b/src/main/java/com/iconplus/smartproc/helper/context/ApiContext.java new file mode 100644 index 0000000..aa7bd6d --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/context/ApiContext.java @@ -0,0 +1,50 @@ + +package com.iconplus.smartproc.helper.context; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.http.HttpHeaders; + +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class ApiContext { + + private HttpHeaders httpHeaders; + private String userRefId; + private String customerId; + private String otpMobileNo; + private String cid; + private String passportNo; + private String tokenScope; + private String deviceId; + private String boUserFullName; + private String boUserId; + private String authorization; + private String language; + private String requestId; + private String correlationId; + private String forwardedFor; + private String userAgent; + private String platform; + private String clientVersion; + private String channelId; + private String apiKey; + private String sleuthId; + private String userName; + private String userId; + private String smUniversalId; + private String clientId; + private String clientSecret; + private String secretKey; + private String timestamp; + private String mandiriKey; + private String signature; + private String clientIp; + private String releaseId; + private List stackTrace; + private String snapshot; +} diff --git a/src/main/java/com/iconplus/smartproc/helper/context/ApiContextFactory.java b/src/main/java/com/iconplus/smartproc/helper/context/ApiContextFactory.java new file mode 100644 index 0000000..ede7786 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/context/ApiContextFactory.java @@ -0,0 +1,184 @@ +package com.iconplus.smartproc.helper.context; + +import brave.internal.Platform; +import com.iconplus.smartproc.helper.service.TokenUtils; +import lombok.extern.log4j.Log4j2; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.util.StringUtils; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.util.Enumeration; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Log4j2 +public class ApiContextFactory { + + private ApiContextFactory() { + } + + private static final String DEFAULT_LANGUAGE = "id-id"; + private static final String HEADER_AUTHORIZATION = "Authorization"; + private static final String HEADER_ACCEPT_LANGUAGE = HttpHeaders.ACCEPT_LANGUAGE; + private static final String HEADER_REQUEST_ID = "X-Request-ID"; + private static final String HEADER_CORRELATION_ID = "X-Correlation-ID"; + private static final String HEADER_FORWARDED_FOR = "X-Forwarded-For"; + private static final String HEADER_USER_AGENT = "User-Agent"; + private static final String HEADER_PLATFORM = "X-Platform"; + private static final String HEADER_CLIENT_VERSION = "X-Client-Version"; + private static final String HEADER_CHANNEL_ID = "X-Channel-ID"; + private static final String HEADER_API_KEY = "X-API-Key"; + private static final String HEADER_SLEUTH_ID = "X-Sleuth-ID"; + private static final String HEADER_USER_NAME = "X-User-Name"; + private static final String HEADER_USER_ID = "X-User-ID"; + private static final String HEADER_SM_UNIVERSAL_ID = "sm_universalId"; + private static final String HEADER_CUSTOMER_ID = "X-Customer-ID"; + private static final String HEADER_CLIENT_ID = "X-Client-ID"; + private static final String HEADER_CLIENT_SECRET = "X-Client-Secret"; + private static final String HEADER_SECRET_KEY = "X-Secret-Key"; + private static final String HEADER_TIMESTAMP = "X-TIMESTAMP"; + private static final String HEADER_MANDIRI_KEY = "X-MANDIRI-KEY"; + private static final String HEADER_SIGNATURE = "X-SIGNATURE"; + private static final String HEADER_RELEASE_ID = "X-Release-ID"; + + private static final String JWT_USER_ID = "user_id"; + private static final String JWT_CUSTOMER_ID = "customer_id"; + private static final String JWT_OTP_MOBILE_NO = "otpMobileNo"; + private static final String JWT_CID = "cid"; + private static final String JWT_PASSPORT_NO = "passportNo"; + private static final String JWT_LOGIN_SCOPE = "scope"; + private static final String JWT_DEVICE_ID = "device_id"; + private static final String JWT_CLIENT_ID = "clientId"; + private static final String JWT_BO_USER_FULL_NAME = "boUserFullName"; + private static final String JWT_BO_USER_ID = "boUserId"; + + private static final String X_FORWARDED_FOR = "x-forwarded-for"; + private static final String PROXY_CLIENT_IP = "proxy-client-ip"; + private static final String WL_PROXY_CLIENT_IP = "wl-proxy-client-ip"; + private static final String HTTP_CLIENT_IP = "http_client_ip"; + private static final String HTTP_X_FORWARDED_FOR = "http_x_forwarded_for"; + private static final String UNKNOWN = "unknown"; + + private static final String CLIENT_IP = "clientIp"; + + private static final List ALLOW_HEADER_LIST = List + .of(HEADER_AUTHORIZATION, HEADER_ACCEPT_LANGUAGE, HEADER_REQUEST_ID, + HEADER_CORRELATION_ID, HEADER_FORWARDED_FOR, HEADER_USER_AGENT, HEADER_PLATFORM, + HEADER_CLIENT_VERSION, HEADER_CHANNEL_ID, HEADER_API_KEY, JWT_DEVICE_ID, HEADER_SLEUTH_ID, HEADER_USER_NAME, + HEADER_USER_ID, HEADER_SM_UNIVERSAL_ID, HEADER_CUSTOMER_ID, HEADER_CLIENT_ID, HEADER_CLIENT_SECRET, HEADER_SECRET_KEY, + HEADER_TIMESTAMP, HEADER_MANDIRI_KEY, HEADER_SIGNATURE, HEADER_RELEASE_ID).stream() + .map(String::toLowerCase).collect(Collectors.toList()); + + public static ApiContext generateApiContext() throws IOException { + ApiContext apiContext = new ApiContext(); + + HttpHeaders httpHeaders = constructHttpHeaders(); + String platform = httpHeaders.getFirst(HEADER_PLATFORM); + String authentication = httpHeaders.getFirst(HEADER_AUTHORIZATION); + + if (authentication != null) { + authentication = authentication.replace("Bearer", ""); + authentication = authentication.trim(); + } + + + if (authentication != null) { + Map jwtBodyMap = TokenUtils.decodeToken(authentication); + apiContext.setUserId(jwtBodyMap.getOrDefault(JWT_USER_ID, "")); + apiContext.setCustomerId(jwtBodyMap.getOrDefault(JWT_CUSTOMER_ID, "")); + apiContext.setDeviceId(jwtBodyMap.getOrDefault(JWT_DEVICE_ID, "")); + apiContext.setTokenScope(jwtBodyMap.getOrDefault(JWT_LOGIN_SCOPE, "")); + apiContext.setClientId(jwtBodyMap.getOrDefault(JWT_CLIENT_ID, "")); + } + + if(StringUtils.isEmpty(apiContext.getClientId())) { + apiContext.setClientId(httpHeaders.getFirst(HEADER_CLIENT_ID)); + } + + apiContext.setHttpHeaders(httpHeaders); + apiContext.setAuthorization(authentication); + apiContext.setLanguage(httpHeaders.getFirst(HEADER_ACCEPT_LANGUAGE)); + apiContext.setRequestId(httpHeaders.getFirst(HEADER_REQUEST_ID)); + apiContext.setCorrelationId(httpHeaders.getFirst(HEADER_CORRELATION_ID)); + apiContext.setForwardedFor(httpHeaders.getFirst(HEADER_FORWARDED_FOR)); + apiContext.setUserAgent(httpHeaders.getFirst(HEADER_USER_AGENT)); + apiContext.setPlatform(httpHeaders.getFirst(HEADER_PLATFORM)); + apiContext.setClientVersion(httpHeaders.getFirst(HEADER_CLIENT_VERSION)); + apiContext.setChannelId(httpHeaders.getFirst(HEADER_CHANNEL_ID)); + apiContext.setSleuthId(httpHeaders.getFirst(HEADER_SLEUTH_ID)); + apiContext.setApiKey(httpHeaders.getFirst(HEADER_API_KEY)); + apiContext.setClientSecret(httpHeaders.getFirst(HEADER_CLIENT_SECRET)); + apiContext.setSecretKey(httpHeaders.getFirst(HEADER_SECRET_KEY)); + apiContext.setTimestamp(httpHeaders.getFirst(HEADER_TIMESTAMP)); + apiContext.setMandiriKey(httpHeaders.getFirst(HEADER_MANDIRI_KEY)); + apiContext.setSignature(httpHeaders.getFirst(HEADER_SIGNATURE)); + apiContext.setClientIp(httpHeaders.getFirst(CLIENT_IP)); + apiContext.setReleaseId(httpHeaders.getFirst(HEADER_RELEASE_ID)); + + //fill the username with user id if its empty, because AD changed the design and they remove the x-user-name + String userName = httpHeaders.getFirst(HEADER_USER_NAME); + if (userName == null || userName.equals("")) { + userName = httpHeaders.getFirst(HEADER_USER_ID); + } + apiContext.setUserName(userName); + + return apiContext; + } + + public static HttpHeaders constructHttpHeaders() throws IOException { + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.setContentType(MediaType.APPLICATION_JSON); + HttpServletRequest curRequest = ((ServletRequestAttributes) RequestContextHolder + .currentRequestAttributes()).getRequest(); + Enumeration headerNames = curRequest.getHeaderNames(); + + if (headerNames != null) { + while (headerNames.hasMoreElements()) { + String header = headerNames.nextElement(); + String value = curRequest.getHeader(header); + if (ALLOW_HEADER_LIST.contains(header)) { + log.debug("Adding header {} with value {}", header, value); + httpHeaders.add(header, value); + } else { + log.debug("Header {} with value {} is not required to be copied", header, + value); + } + } + } + + if (!httpHeaders.containsKey(HEADER_ACCEPT_LANGUAGE) || StringUtils + .isEmpty(httpHeaders.getFirst( + HEADER_ACCEPT_LANGUAGE))) { + httpHeaders.set(HEADER_ACCEPT_LANGUAGE, DEFAULT_LANGUAGE); + } + + httpHeaders.add(CLIENT_IP, getClientIp(httpHeaders, curRequest.getRemoteAddr())); + + return httpHeaders; + } + + public static String getClientIp(HttpHeaders httpHeaders, String remoteAddr) { + String ip = httpHeaders.getFirst(X_FORWARDED_FOR); + if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) { + ip = httpHeaders.getFirst(PROXY_CLIENT_IP); + } + if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) { + ip = httpHeaders.getFirst(WL_PROXY_CLIENT_IP); + } + if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) { + ip = httpHeaders.getFirst(HTTP_CLIENT_IP); + } + if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) { + ip = httpHeaders.getFirst(HTTP_X_FORWARDED_FOR); + } + if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) { + ip = remoteAddr; + } + return ip; + } +} diff --git a/src/main/java/com/iconplus/smartproc/helper/context/AutoConfiguration.java b/src/main/java/com/iconplus/smartproc/helper/context/AutoConfiguration.java new file mode 100644 index 0000000..e91c5af --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/context/AutoConfiguration.java @@ -0,0 +1,21 @@ +package com.iconplus.smartproc.helper.context; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.context.annotation.RequestScope; + +import java.io.IOException; + +@Configuration +public class AutoConfiguration { + + @RequestScope + @Bean + @ConditionalOnMissingBean(ApiContext.class) + public ApiContext apiContext() throws IOException { + return ApiContextFactory.generateApiContext(); + } + + +} diff --git a/src/main/java/com/iconplus/smartproc/helper/context/ContextProvider.java b/src/main/java/com/iconplus/smartproc/helper/context/ContextProvider.java new file mode 100644 index 0000000..599c9fc --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/context/ContextProvider.java @@ -0,0 +1,30 @@ +package com.iconplus.smartproc.helper.context; + +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; + +public class ContextProvider implements ApplicationContextAware { + + private static ApplicationContext CONTEXT; + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + CONTEXT = applicationContext; + } + + /** + * Get a Spring bean by type. + **/ + public static T getBean(Class beanClass) { + return CONTEXT.getBean(beanClass); + } + + /** + * Get a Spring bean by name. + **/ + public static Object getBean(String beanName) { + return CONTEXT.getBean(beanName); + } + +} \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/helper/context/HttpHeadersInterceptor.java b/src/main/java/com/iconplus/smartproc/helper/context/HttpHeadersInterceptor.java new file mode 100644 index 0000000..9cdc799 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/context/HttpHeadersInterceptor.java @@ -0,0 +1,33 @@ +package com.iconplus.smartproc.helper.context; + +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpRequest; +import org.springframework.http.client.ClientHttpRequestExecution; +import org.springframework.http.client.ClientHttpRequestInterceptor; +import org.springframework.http.client.ClientHttpResponse; +import org.springframework.stereotype.Component; + +import java.io.IOException; + +@Log4j2 +@Component +public class HttpHeadersInterceptor implements ClientHttpRequestInterceptor { + + @Autowired + private ApiContext apiContext; + + public HttpHeadersInterceptor(ApiContext apiContext) { + this.apiContext = apiContext; + } + + @Override + public ClientHttpResponse intercept(HttpRequest request, byte[] body, + ClientHttpRequestExecution execution) throws IOException { + apiContext.getHttpHeaders().entrySet().stream() + .filter(x -> x.getKey() != null) + .forEach(x -> request.getHeaders().add(x.getKey(), x.getValue().get(0))); + return execution.execute(request, body); + } + +} diff --git a/src/main/java/com/iconplus/smartproc/repository/TokenManagementRepository.java b/src/main/java/com/iconplus/smartproc/repository/TokenManagementRepository.java index a0d1c86..c598f8b 100644 --- a/src/main/java/com/iconplus/smartproc/repository/TokenManagementRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/TokenManagementRepository.java @@ -23,5 +23,7 @@ public interface TokenManagementRepository extends JpaRepository findByRefreshToken(String refreshToken); + Optional findByAccessTokenAndIsDeleteFalse(String accessToken); + Optional findByUserId(Long id); } diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/LogoutService.java b/src/main/java/com/iconplus/smartproc/service/authentication/LogoutService.java new file mode 100644 index 0000000..823b5a5 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/authentication/LogoutService.java @@ -0,0 +1,44 @@ +package com.iconplus.smartproc.service.authentication; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.context.ApiContext; +import com.iconplus.smartproc.helper.model.EmptyRequest; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.TokenManagement; +import com.iconplus.smartproc.repository.TokenManagementRepository; +import com.iconplus.smartproc.repository.UsersRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class LogoutService implements BaseService { + + private ApiContext apiContext; + private TokenManagementRepository tokenManagementRepository; + private LogoutService(ApiContext apiContext, + TokenManagementRepository tokenManagementRepository) { + this.apiContext = apiContext; + this.tokenManagementRepository = tokenManagementRepository; + } + + @Override + public EmptyResponse execute(EmptyRequest input) { + + String accessToken = apiContext.getAuthorization(); + TokenManagement tokenManagement = getTokenManagement(accessToken); + tokenManagement.setIsDelete(true); + tokenManagementRepository.save(tokenManagement); + return new EmptyResponse(); + } + + private TokenManagement getTokenManagement(String accessToken) { + var tokenManagement = tokenManagementRepository.findByAccessTokenAndIsDeleteFalse(accessToken); + if (tokenManagement.isEmpty()) { + throw new BusinessException("err", "err", "err"); + } + return tokenManagement.get(); + } +} From f8f489f565d97ee28910ce562a19b287c190e7f5 Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Thu, 25 May 2023 18:07:24 +0700 Subject: [PATCH 20/63] add api forgot password --- .../controller/AuthenticationController.java | 12 +++++- .../model/request/ForgotPasswordRequest.java | 17 ++++++++ .../authentication/ForgotPasswordService.java | 40 +++++++++++++++++++ 3 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/iconplus/smartproc/model/request/ForgotPasswordRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/service/authentication/ForgotPasswordService.java diff --git a/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java b/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java index 438ddd2..b642974 100644 --- a/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java +++ b/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java @@ -2,10 +2,12 @@ package com.iconplus.smartproc.controller; import com.iconplus.smartproc.helper.model.EmptyRequest; import com.iconplus.smartproc.helper.model.EmptyResponse; +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.RefreshTokenResponse; +import com.iconplus.smartproc.service.authentication.ForgotPasswordService; import com.iconplus.smartproc.service.authentication.LoginService; import com.iconplus.smartproc.service.authentication.LogoutService; import com.iconplus.smartproc.service.authentication.TokenManagementService; @@ -19,13 +21,16 @@ public class AuthenticationController { private LoginService loginService; private TokenManagementService tokenManagementService; private LogoutService logoutService; + private ForgotPasswordService forgotPasswordService; public AuthenticationController(LoginService loginService, TokenManagementService tokenManagementService, - LogoutService logoutService) { + LogoutService logoutService, + ForgotPasswordService forgotPasswordService) { this.loginService = loginService; this.tokenManagementService = tokenManagementService; this.logoutService = logoutService; + this.forgotPasswordService = forgotPasswordService; } @PostMapping("/login") @@ -44,4 +49,9 @@ public class AuthenticationController { } + @PostMapping("/forgot-password") + public EmptyResponse forgotPassword(@RequestBody ForgotPasswordRequest forgotPasswordRequest) { + return forgotPasswordService.execute(forgotPasswordRequest); + } + } diff --git a/src/main/java/com/iconplus/smartproc/model/request/ForgotPasswordRequest.java b/src/main/java/com/iconplus/smartproc/model/request/ForgotPasswordRequest.java new file mode 100644 index 0000000..7c29ff4 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/ForgotPasswordRequest.java @@ -0,0 +1,17 @@ +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 ForgotPasswordRequest extends BaseRequest { + private String currentPassword; + private String newPassword; + private String confirmationPassword; +} diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/ForgotPasswordService.java b/src/main/java/com/iconplus/smartproc/service/authentication/ForgotPasswordService.java new file mode 100644 index 0000000..070de1f --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/authentication/ForgotPasswordService.java @@ -0,0 +1,40 @@ +package com.iconplus.smartproc.service.authentication; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.context.ApiContext; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.ForgotPasswordRequest; +import com.iconplus.smartproc.repository.UsersRepository; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +@Service +public class ForgotPasswordService implements BaseService { + + private ApiContext apiContext; + private UsersRepository usersRepository; + public ForgotPasswordService(UsersRepository usersRepository, + ApiContext apiContext) { + this.usersRepository = usersRepository; + this.apiContext = apiContext; + } + + @Override + public EmptyResponse execute(ForgotPasswordRequest input) { + + Long id = Long.valueOf(apiContext.getUserId()); + var users = usersRepository.findByIdAndIsDeleteFalse(id).orElseThrow(() -> new BusinessException("err", "err", "err")); + + if (!StringUtils.equalsIgnoreCase(input.getCurrentPassword(), users.getPassword()) || + StringUtils.equalsIgnoreCase(input.getNewPassword(), users.getPassword()) || + !StringUtils.equalsIgnoreCase(input.getConfirmationPassword(), input.getNewPassword())) { + throw new BusinessException("err", "err", "err"); + } + + users.setPassword(input.getNewPassword()); + usersRepository.save(users); + + return new EmptyResponse(); + } +} From 6bc02da7410aad3c109f30d7935192315aad5916 Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Thu, 25 May 2023 21:58:37 +0700 Subject: [PATCH 21/63] add permission logic --- .../smartproc/model/entity/Permission.java | 5 +++ .../model/projection/PermissionView.java | 29 +++++++++++++++ .../model/response/PermissionResponse.java | 24 +++++++++++++ .../model/response/RolesResponse.java | 4 +++ .../smartproc/repository/MenusRepository.java | 13 +++++++ .../repository/PermissionRepository.java | 28 +++++++++++++++ .../service/roles/GetRoleByIdService.java | 27 +++++++++++++- .../service/roles/PostCreateRoleService.java | 35 ++++++++++++++++++- 8 files changed, 163 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/iconplus/smartproc/model/projection/PermissionView.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/PermissionResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/repository/MenusRepository.java create mode 100644 src/main/java/com/iconplus/smartproc/repository/PermissionRepository.java diff --git a/src/main/java/com/iconplus/smartproc/model/entity/Permission.java b/src/main/java/com/iconplus/smartproc/model/entity/Permission.java index 46e9df1..01fac6e 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/Permission.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/Permission.java @@ -14,6 +14,7 @@ import javax.persistence.*; @Builder @AllArgsConstructor @NoArgsConstructor +@Entity @Table(name = "permission") public class Permission extends BaseEntity { @@ -32,6 +33,10 @@ public class Permission extends BaseEntity { @Type(type = "org.hibernate.type.NumericBooleanType") private Boolean canView; + @Column(name = "can_create") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean canCreate; + @Column(name = "can_read") @Type(type = "org.hibernate.type.NumericBooleanType") private Boolean canRead; diff --git a/src/main/java/com/iconplus/smartproc/model/projection/PermissionView.java b/src/main/java/com/iconplus/smartproc/model/projection/PermissionView.java new file mode 100644 index 0000000..d9e0462 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/PermissionView.java @@ -0,0 +1,29 @@ +package com.iconplus.smartproc.model.projection; + +public interface PermissionView { + + Long getParentId(); + void setParentId(Long parentId); + + Long getMenuId(); + void setMenuId(Long menuId); + + String getNama(); + void setNama(String nama); + + Boolean getCanView(); + void setCanView(Boolean canView); + + Boolean getCanRead(); + void setCanRead(Boolean canRead); + + Boolean getCanUpdate(); + void setCanUpdate(Boolean canUpdate); + + Boolean getCanDelete(); + void setCanDelete(Boolean canDelete); + + Boolean getCanCreate(); + void setCanCreate(Boolean canCreate); + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/PermissionResponse.java b/src/main/java/com/iconplus/smartproc/model/response/PermissionResponse.java new file mode 100644 index 0000000..2a05304 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/PermissionResponse.java @@ -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 PermissionResponse extends BaseResponse { + + private Long id; + private Long parentId; + private Long menuId; + private String menu; + private Boolean canView; + private Boolean canCreate; + private Boolean canRead; + private Boolean canDelete; + private Boolean canUpdate; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/RolesResponse.java b/src/main/java/com/iconplus/smartproc/model/response/RolesResponse.java index 11ece70..158771d 100644 --- a/src/main/java/com/iconplus/smartproc/model/response/RolesResponse.java +++ b/src/main/java/com/iconplus/smartproc/model/response/RolesResponse.java @@ -6,6 +6,8 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.util.List; + @Data @Builder @AllArgsConstructor @@ -17,5 +19,7 @@ public class RolesResponse extends BaseResponse { private String keterangan; private Boolean isActive; private Boolean isDelete; + private List permission; + } diff --git a/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java b/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java new file mode 100644 index 0000000..4b58eb4 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java @@ -0,0 +1,13 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.Menus; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface MenusRepository extends JpaRepository { + + List findByIsDeleteFalse(); +} diff --git a/src/main/java/com/iconplus/smartproc/repository/PermissionRepository.java b/src/main/java/com/iconplus/smartproc/repository/PermissionRepository.java new file mode 100644 index 0000000..2c2d860 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/PermissionRepository.java @@ -0,0 +1,28 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.Permission; +import com.iconplus.smartproc.model.projection.PermissionView; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface PermissionRepository extends JpaRepository { + + @Query(value = "SELECT m.parentId as parentId, " + + "p.menuId as menuId, " + + "m.nama as nama, " + + "p.canView as canView, " + + "p.canCreate as canCreate, " + + "p.canUpdate as canUpdate, " + + "p.canDelete as canDelete, " + + "p.canRead as canRead " + + "FROM Permission p " + + "JOIN Menus m ON m.id = p.menuId " + + "WHERE p.isDelete = false " + + "AND m.isDelete = false " + + "AND p.roleId = :roleId") + List getAllPermissionsByRoleId(Long roleId); +} diff --git a/src/main/java/com/iconplus/smartproc/service/roles/GetRoleByIdService.java b/src/main/java/com/iconplus/smartproc/service/roles/GetRoleByIdService.java index bc7f7c2..67182b6 100644 --- a/src/main/java/com/iconplus/smartproc/service/roles/GetRoleByIdService.java +++ b/src/main/java/com/iconplus/smartproc/service/roles/GetRoleByIdService.java @@ -3,18 +3,27 @@ package com.iconplus.smartproc.service.roles; import com.iconplus.smartproc.exception.BusinessException; import com.iconplus.smartproc.helper.service.BaseService; import com.iconplus.smartproc.model.entity.Roles; +import com.iconplus.smartproc.model.projection.PermissionView; import com.iconplus.smartproc.model.request.RolesRequest; +import com.iconplus.smartproc.model.response.PermissionResponse; import com.iconplus.smartproc.model.response.RolesResponse; +import com.iconplus.smartproc.repository.PermissionRepository; import com.iconplus.smartproc.repository.RolesRepository; import com.iconplus.smartproc.util.Constants; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.List; + @Service public class GetRoleByIdService implements BaseService { private final RolesRepository rolesRepository; - public GetRoleByIdService(RolesRepository rolesRepository) { + private PermissionRepository permissionRepository; + public GetRoleByIdService(RolesRepository rolesRepository, + PermissionRepository permissionRepository) { this.rolesRepository = rolesRepository; + this.permissionRepository = permissionRepository; } @Override @@ -25,12 +34,28 @@ public class GetRoleByIdService implements BaseService permissionResponses = new ArrayList<>(); + List permissionViews = permissionRepository.getAllPermissionsByRoleId(role.getId()); + for (PermissionView permissionView : permissionViews) { + permissionResponses.add(PermissionResponse.builder() + .parentId(permissionView.getParentId()) + .menuId(permissionView.getMenuId()) + .menu(permissionView.getNama()) + .canView(permissionView.getCanView()) + .canCreate(permissionView.getCanCreate()) + .canRead(permissionView.getCanRead()) + .canUpdate(permissionView.getCanUpdate()) + .canDelete(permissionView.getCanDelete()) + .build()); + } + return RolesResponse.builder() .id(role.getId()) .role(role.getRole()) .keterangan(role.getKeterangan()) .isActive(role.getIsActive()) .isDelete(role.getIsDelete()) + .permission(permissionResponses) .build(); } } diff --git a/src/main/java/com/iconplus/smartproc/service/roles/PostCreateRoleService.java b/src/main/java/com/iconplus/smartproc/service/roles/PostCreateRoleService.java index c571fd5..f09f345 100644 --- a/src/main/java/com/iconplus/smartproc/service/roles/PostCreateRoleService.java +++ b/src/main/java/com/iconplus/smartproc/service/roles/PostCreateRoleService.java @@ -2,23 +2,37 @@ package com.iconplus.smartproc.service.roles; import com.iconplus.smartproc.exception.BusinessException; import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.Menus; +import com.iconplus.smartproc.model.entity.Permission; import com.iconplus.smartproc.model.entity.Roles; import com.iconplus.smartproc.model.request.RolesRequest; import com.iconplus.smartproc.model.response.RolesResponse; +import com.iconplus.smartproc.repository.MenusRepository; +import com.iconplus.smartproc.repository.PermissionRepository; import com.iconplus.smartproc.repository.RolesRepository; import com.iconplus.smartproc.util.Constants; import org.springframework.stereotype.Service; +import javax.transaction.Transactional; +import java.util.ArrayList; +import java.util.List; import java.util.Optional; @Service public class PostCreateRoleService implements BaseService { + private final MenusRepository menusRepository; private final RolesRepository rolesRepository; - public PostCreateRoleService(RolesRepository rolesRepository) { + private final PermissionRepository permissionRepository; + public PostCreateRoleService(RolesRepository rolesRepository, + MenusRepository menusRepository, + PermissionRepository permissionRepository) { this.rolesRepository = rolesRepository; + this.menusRepository = menusRepository; + this.permissionRepository = permissionRepository; } + @Transactional @Override public RolesResponse execute(RolesRequest input) { @@ -37,6 +51,25 @@ public class PostCreateRoleService implements BaseService menusList = menusRepository.findByIsDeleteFalse(); + + List permissions = new ArrayList<>(); + for (Menus menus : menusList) { + permissions.add(Permission.builder() + .roleId(result.getId()) + .menuId(menus.getId()) + .canRead(false) + .canCreate(false) + .canView(false) + .canUpdate(false) + .canDelete(false) + .canDelete(false) + .isDelete(false) + .build()); + } + + permissionRepository.saveAll(permissions); + return RolesResponse.builder() .id(result.getId()) .build(); From c573eb2fb37d651d03b18f8807b0d67df44d3d86 Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Fri, 26 May 2023 07:42:31 +0700 Subject: [PATCH 22/63] edit access menu --- .../controller/PermissionController.java | 29 ++++++ .../model/request/ListPermissionRequest.java | 20 ++++ .../model/request/PermissionRequest.java | 23 +++++ .../smartproc/repository/MenusRepository.java | 3 + .../repository/PermissionRepository.java | 3 + .../PutUpdatePermissionService.java | 91 +++++++++++++++++++ 6 files changed, 169 insertions(+) create mode 100644 src/main/java/com/iconplus/smartproc/controller/PermissionController.java create mode 100644 src/main/java/com/iconplus/smartproc/model/request/ListPermissionRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/model/request/PermissionRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/service/permission/PutUpdatePermissionService.java diff --git a/src/main/java/com/iconplus/smartproc/controller/PermissionController.java b/src/main/java/com/iconplus/smartproc/controller/PermissionController.java new file mode 100644 index 0000000..caca5b5 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/controller/PermissionController.java @@ -0,0 +1,29 @@ +package com.iconplus.smartproc.controller; + +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.ListPermissionRequest; +import com.iconplus.smartproc.repository.PermissionRepository; +import com.iconplus.smartproc.service.permission.PutUpdatePermissionService; +import org.springframework.web.bind.annotation.*; + +@CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true") +@RestController +@RequestMapping("/api/permission") +public class PermissionController { + + private PermissionRepository permissionRepository; + private PutUpdatePermissionService putUpdatePermissionService; + + public PermissionController(PermissionRepository permissionRepository, + PutUpdatePermissionService putUpdatePermissionService) { + this.permissionRepository = permissionRepository; + this.putUpdatePermissionService = putUpdatePermissionService; + } + + @PutMapping("/{roleId}") + public EmptyResponse editPermissionRole(@PathVariable Long roleId, @RequestBody ListPermissionRequest listPermissionRequest) { + listPermissionRequest.setRoleId(roleId); + return putUpdatePermissionService.execute(listPermissionRequest); + } + +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/ListPermissionRequest.java b/src/main/java/com/iconplus/smartproc/model/request/ListPermissionRequest.java new file mode 100644 index 0000000..4696f29 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/ListPermissionRequest.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; + +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ListPermissionRequest extends BaseRequest { + + private Long roleId; + private List data; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/PermissionRequest.java b/src/main/java/com/iconplus/smartproc/model/request/PermissionRequest.java new file mode 100644 index 0000000..909d4c6 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/PermissionRequest.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; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class PermissionRequest extends BaseRequest { + private Long id; + private Long parentId; + private Long menuId; + private String menu; + private Boolean canView; + private Boolean canCreate; + private Boolean canRead; + private Boolean canDelete; + private Boolean canUpdate; +} diff --git a/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java b/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java index 4b58eb4..6e50213 100644 --- a/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java @@ -5,9 +5,12 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import java.util.List; +import java.util.Optional; @Repository public interface MenusRepository extends JpaRepository { List findByIsDeleteFalse(); + Optional findByIdAndIsDeleteFalse(Long id); + } diff --git a/src/main/java/com/iconplus/smartproc/repository/PermissionRepository.java b/src/main/java/com/iconplus/smartproc/repository/PermissionRepository.java index 2c2d860..68813b4 100644 --- a/src/main/java/com/iconplus/smartproc/repository/PermissionRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/PermissionRepository.java @@ -7,6 +7,7 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; import java.util.List; +import java.util.Optional; @Repository public interface PermissionRepository extends JpaRepository { @@ -25,4 +26,6 @@ public interface PermissionRepository extends JpaRepository { "AND m.isDelete = false " + "AND p.roleId = :roleId") List getAllPermissionsByRoleId(Long roleId); + + Optional findByRoleIdAndMenuIdAndIsDeleteFalse(Long roleId, Long menuId); } diff --git a/src/main/java/com/iconplus/smartproc/service/permission/PutUpdatePermissionService.java b/src/main/java/com/iconplus/smartproc/service/permission/PutUpdatePermissionService.java new file mode 100644 index 0000000..c78458c --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/permission/PutUpdatePermissionService.java @@ -0,0 +1,91 @@ +package com.iconplus.smartproc.service.permission; + +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.entity.Menus; +import com.iconplus.smartproc.model.entity.Permission; +import com.iconplus.smartproc.model.entity.Roles; +import com.iconplus.smartproc.model.request.ListPermissionRequest; +import com.iconplus.smartproc.model.request.PermissionRequest; +import com.iconplus.smartproc.repository.MenusRepository; +import com.iconplus.smartproc.repository.PermissionRepository; +import com.iconplus.smartproc.repository.RolesRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +import javax.transaction.Transactional; +import java.util.ArrayList; +import java.util.List; + +@Service +public class PutUpdatePermissionService implements BaseService { + + private PermissionRepository permissionRepository; + private MenusRepository menusRepository; + private RolesRepository rolesRepository; + public PutUpdatePermissionService(PermissionRepository permissionRepository, + MenusRepository menusRepository, + RolesRepository rolesRepository) { + this.permissionRepository = permissionRepository; + this.menusRepository = menusRepository; + this.rolesRepository = rolesRepository; + } + + @Transactional + @Override + public EmptyResponse execute(ListPermissionRequest input) { + + Roles role = rolesRepository.findByIdAndIsDeleteFalse(input.getRoleId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10005, + Constants.ERR_TTL_10005, + String.format(Constants.ERR_MSG_10005, input.getRoleId()))); + + List permissionList = new ArrayList<>(); + + for (PermissionRequest permissionRequest : input.getData()) { + Permission permission = getPermission(permissionRequest, role); + permissionList.add(permission); + } + + permissionRepository.saveAll(permissionList); + + return new EmptyResponse(); + } + + public Menus findMenuById(Long menuId) { + var menus = menusRepository.findByIdAndIsDeleteFalse(menuId); + if (menus.isEmpty()) { + throw new BusinessException(HttpStatus.CONFLICT, + "err", + "err", + "err"); + } + return menus.get(); + } + + private Permission getPermission(PermissionRequest permissionRequest, Roles roles) { + var permission = permissionRepository.findByRoleIdAndMenuIdAndIsDeleteFalse(roles.getId(), permissionRequest.getMenuId()); + if (permission.isPresent()) { + permission.get().setCanView(permissionRequest.getCanView()); + permission.get().setCanRead(permissionRequest.getCanRead()); + permission.get().setCanCreate(permissionRequest.getCanCreate()); + permission.get().setCanUpdate(permissionRequest.getCanUpdate()); + permission.get().setCanDelete(permissionRequest.getCanDelete()); + return permission.get(); + } else { + return Permission.builder() + .roleId(roles.getId()) + .menuId(permissionRequest.getMenuId()) + .canView(permissionRequest.getCanView()) + .canRead(permissionRequest.getCanRead()) + .canCreate(permissionRequest.getCanCreate()) + .canUpdate(permissionRequest.getCanUpdate()) + .canDelete(permissionRequest.getCanDelete()) + .isDelete(false) + .build(); + } + } + +} From fe72608465d8239757a7a29454e06c7a0dfb4720 Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Fri, 26 May 2023 10:39:31 +0700 Subject: [PATCH 23/63] add master data api --- .../controller/JenisKontrakController.java | 110 +++++++++------- .../controller/LokasiController.java | 98 +++++++------- .../controller/MetodePengadaanController.java | 113 +++++++++-------- .../MetodePenyampaianController.java | 116 +++++++++-------- .../StrategiPengadaanController.java | 113 +++++++++-------- .../SupplyPositioningMatrixController.java | 120 ++++++++++-------- .../model/entity/MetodePengadaan.java | 4 + .../model/projection/JenisKontrakView.java | 15 +++ .../model/projection/LokasiView.java | 16 +++ .../model/projection/MetodePengadaanView.java | 16 +++ .../projection/MetodePenyampaianView.java | 16 +++ .../projection/StrategiPengadaanView.java | 16 +++ .../SupplyPositioningMatrixView.java | 16 +++ .../model/request/JenisKontrakRequest.java | 23 ++++ .../model/request/LokasiRequest.java | 23 ++++ .../model/request/MetodePengadaanRequest.java | 23 ++++ .../request/MetodePenyampaianRequest.java | 23 ++++ .../request/StrategiPengadaanRequest.java | 23 ++++ .../SupplyPositioningMatrixRequest.java | 23 ++++ .../response/GetListJenisKontrakResponse.java | 20 +++ .../model/response/GetListLokasiResponse.java | 20 +++ .../GetListMetodePengadaanResponse.java | 20 +++ .../GetListMetodePenyampaianResponse.java | 20 +++ .../GetListStrategiPengadaanResponse.java | 20 +++ ...etListSupplyPositioningMatrixResponse.java | 20 +++ .../model/response/JenisKontrakResponse.java | 21 +++ .../model/response/LokasiResponse.java | 21 +++ .../response/MetodePengadaanResponse.java | 21 +++ .../response/MetodePenyampaianResponse.java | 21 +++ .../response/StrategiPengadaanResponse.java | 21 +++ .../SupplyPositioningMatrixResponse.java | 21 +++ .../repository/JenisKontrakRepository.java | 26 +++- .../repository/LokasiRepository.java | 22 ++++ .../repository/MetodePengadaanRepository.java | 22 ++++ .../MetodePenyampaianRepository.java | 22 ++++ .../StrategiPengadaanRepository.java | 22 ++++ .../SupplyPositioningMatrixRepository.java | 22 ++++ .../DeleteJenisKontrakService.java | 38 ++++++ .../GetJenisKontrakByIdService.java | 40 ++++++ .../GetListJenisKontrakService.java | 61 +++++++++ .../PostCreateJenisKontrakService.java | 49 +++++++ .../PutUpdateJenisKontrakService.java | 45 +++++++ .../service/lokasi/DeleteLokasiService.java | 38 ++++++ .../service/lokasi/GetListLokasiService.java | 61 +++++++++ .../service/lokasi/GetLokasiByIdService.java | 43 +++++++ .../lokasi/PostCreateLokasiService.java | 49 +++++++ .../lokasi/PutUpdateLokasiService.java | 45 +++++++ .../DeleteMetodePengadaanService.java | 38 ++++++ .../GetListMetodePengadaanService.java | 61 +++++++++ .../GetMetodePengadaanByIdService.java | 40 ++++++ .../PostCreateMetodePengadaanService.java | 49 +++++++ .../PutUpdateMetodePengadaanService.java | 44 +++++++ .../DeleteMetodePenyampaianService.java | 38 ++++++ .../GetListMetodePenyampaianService.java | 61 +++++++++ .../GetMetodePenyampaianByIdService.java | 39 ++++++ .../PostCreateMetodePenyampaianService.java | 49 +++++++ .../PutUpdateMetodePenyampaianService.java | 44 +++++++ .../DeleteStrategiPengadaanService.java | 38 ++++++ .../GetListStrategiPengadaanService.java | 61 +++++++++ .../GetStrategiPengadaanByIdService.java | 39 ++++++ .../PostCreateStrategiPengadaanService.java | 49 +++++++ .../PutUpdateStrategiPengadaanService.java | 44 +++++++ .../DeleteSupplyPositioningMatrixService.java | 38 ++++++ ...GetListSupplyPositioningMatrixService.java | 61 +++++++++ ...GetSupplyPositioningMatrixByIdService.java | 39 ++++++ ...tCreateSupplyPositioningMatrixService.java | 49 +++++++ ...tUpdateSupplyPositioningMatrixService.java | 44 +++++++ 67 files changed, 2376 insertions(+), 307 deletions(-) create mode 100644 src/main/java/com/iconplus/smartproc/model/projection/JenisKontrakView.java create mode 100644 src/main/java/com/iconplus/smartproc/model/projection/LokasiView.java create mode 100644 src/main/java/com/iconplus/smartproc/model/projection/MetodePengadaanView.java create mode 100644 src/main/java/com/iconplus/smartproc/model/projection/MetodePenyampaianView.java create mode 100644 src/main/java/com/iconplus/smartproc/model/projection/StrategiPengadaanView.java create mode 100644 src/main/java/com/iconplus/smartproc/model/projection/SupplyPositioningMatrixView.java create mode 100644 src/main/java/com/iconplus/smartproc/model/request/JenisKontrakRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/model/request/LokasiRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/model/request/MetodePengadaanRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/model/request/MetodePenyampaianRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/model/request/StrategiPengadaanRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/model/request/SupplyPositioningMatrixRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/GetListJenisKontrakResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/GetListLokasiResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/GetListMetodePengadaanResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/GetListMetodePenyampaianResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/GetListStrategiPengadaanResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/GetListSupplyPositioningMatrixResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/JenisKontrakResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/LokasiResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/MetodePengadaanResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/MetodePenyampaianResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/StrategiPengadaanResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/SupplyPositioningMatrixResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/service/jeniskontrak/DeleteJenisKontrakService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/jeniskontrak/GetJenisKontrakByIdService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/jeniskontrak/GetListJenisKontrakService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/jeniskontrak/PostCreateJenisKontrakService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/jeniskontrak/PutUpdateJenisKontrakService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/lokasi/DeleteLokasiService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/lokasi/GetListLokasiService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/lokasi/GetLokasiByIdService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/lokasi/PostCreateLokasiService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/lokasi/PutUpdateLokasiService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/metodepengadaan/DeleteMetodePengadaanService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/metodepengadaan/GetListMetodePengadaanService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/metodepengadaan/GetMetodePengadaanByIdService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/metodepengadaan/PostCreateMetodePengadaanService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/metodepengadaan/PutUpdateMetodePengadaanService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/metodepenyampaian/DeleteMetodePenyampaianService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/metodepenyampaian/GetListMetodePenyampaianService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/metodepenyampaian/GetMetodePenyampaianByIdService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/metodepenyampaian/PostCreateMetodePenyampaianService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/metodepenyampaian/PutUpdateMetodePenyampaianService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/strategipengadaan/DeleteStrategiPengadaanService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/strategipengadaan/GetListStrategiPengadaanService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/strategipengadaan/GetStrategiPengadaanByIdService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/strategipengadaan/PostCreateStrategiPengadaanService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/strategipengadaan/PutUpdateStrategiPengadaanService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/DeleteSupplyPositioningMatrixService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/GetListSupplyPositioningMatrixService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/GetSupplyPositioningMatrixByIdService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/PostCreateSupplyPositioningMatrixService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/PutUpdateSupplyPositioningMatrixService.java diff --git a/src/main/java/com/iconplus/smartproc/controller/JenisKontrakController.java b/src/main/java/com/iconplus/smartproc/controller/JenisKontrakController.java index 140820d..d0d65c2 100644 --- a/src/main/java/com/iconplus/smartproc/controller/JenisKontrakController.java +++ b/src/main/java/com/iconplus/smartproc/controller/JenisKontrakController.java @@ -1,65 +1,77 @@ package com.iconplus.smartproc.controller; -import com.iconplus.smartproc.model.entity.JenisKontrak; -import com.iconplus.smartproc.exception.ResourceNotFoundException; -import com.iconplus.smartproc.repository.JenisKontrakRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.JenisKontrakRequest; +import com.iconplus.smartproc.model.response.GetListJenisKontrakResponse; +import com.iconplus.smartproc.model.response.JenisKontrakResponse; +import com.iconplus.smartproc.service.jeniskontrak.*; +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/jeniskontrak") public class JenisKontrakController { - @Autowired - private JenisKontrakRepository jeniskontrakRepository; - //get all data - @GetMapping - public List getAllJeniskontraks(){ - return jeniskontrakRepository.findAll(); - } + private final GetListJenisKontrakService getListJenisKontrakService; + private final GetJenisKontrakByIdService getJenisKontrakByIdService; + private final PostCreateJenisKontrakService postCreateJenisKontrakService; + private final PutUpdateJenisKontrakService putUpdateJenisKontrakService; + private final DeleteJenisKontrakService deleteJenisKontrakService; - // create - @PostMapping - public JenisKontrak createJeniskontrak(@RequestBody JenisKontrak jeniskontrak) { - return jeniskontrakRepository.save(jeniskontrak); - } + public JenisKontrakController(GetListJenisKontrakService getListJenisKontrakService, + GetJenisKontrakByIdService getJenisKontrakByIdService, + PostCreateJenisKontrakService postCreateJenisKontrakService, + PutUpdateJenisKontrakService putUpdateJenisKontrakService, + DeleteJenisKontrakService deleteJenisKontrakService) { + this.getListJenisKontrakService = getListJenisKontrakService; + this.getJenisKontrakByIdService = getJenisKontrakByIdService; + this.postCreateJenisKontrakService = postCreateJenisKontrakService; + this.putUpdateJenisKontrakService = putUpdateJenisKontrakService; + this.deleteJenisKontrakService = deleteJenisKontrakService; + } - // get jeniskontrak by id rest api - @GetMapping("/{id}") - public ResponseEntity getJeniskontrakById(@PathVariable Long id) { - JenisKontrak jeniskontrak = jeniskontrakRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Jeniskontrak not exist with id :" + id)); - return ResponseEntity.ok(jeniskontrak); - } - // update jeniskontrak rest api - @PutMapping("/{id}") - public ResponseEntity updateJeniskontrak(@PathVariable Long id, @RequestBody JenisKontrak jenisKontrakDetails){ - JenisKontrak jeniskontrak = jeniskontrakRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Jeniskontrak not exist with id :" + id)); + @GetMapping + public GetListJenisKontrakResponse getListJenisKontrak(@RequestParam(name = "search", required = false) String search, + @RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size){ - jeniskontrak.setJenisKontrak(jenisKontrakDetails.getJenisKontrak()); - jeniskontrak.setKeterangan(jenisKontrakDetails.getKeterangan()); + Pageable pageable = PageRequest.of((page - 1), size); + JenisKontrakRequest jenisKontrakRequest = JenisKontrakRequest.builder() + .search(search) + .pageable(pageable) + .build(); - JenisKontrak updatedJenisKontrak = jeniskontrakRepository.save(jeniskontrak); - return ResponseEntity.ok(updatedJenisKontrak); - } + return getListJenisKontrakService.execute(jenisKontrakRequest); + } - // delete jeniskontrak rest api - @DeleteMapping("/{id}") - public ResponseEntity> deleteJeniskontrak(@PathVariable Long id){ - JenisKontrak jeniskontrak = jeniskontrakRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Jeniskontrak not exist with id :" + id)); + @PostMapping + public JenisKontrakResponse createJenisKontrak(@RequestBody JenisKontrakRequest jenisKontrakRequest) { + return postCreateJenisKontrakService.execute(jenisKontrakRequest); + } - jeniskontrakRepository.delete(jeniskontrak); - Map response = new HashMap<>(); - response.put("deleted", Boolean.TRUE); - return ResponseEntity.ok(response); - } -} \ No newline at end of file + @GetMapping("/{id}") + public JenisKontrakResponse getJenisKontrakById(@PathVariable Long id) { + return getJenisKontrakByIdService.execute(JenisKontrakRequest.builder() + .id(id) + .build()); + } + + + @PutMapping("/{id}") + public JenisKontrakResponse updateJeniskontrak(@PathVariable Long id, + @RequestBody JenisKontrakRequest jenisKontrakRequest){ + jenisKontrakRequest.setId(id); + return putUpdateJenisKontrakService.execute(jenisKontrakRequest); + } + + @DeleteMapping("/{id}") + public EmptyResponse deleteJenisKontrak(@PathVariable Long id) { + return deleteJenisKontrakService.execute(JenisKontrakRequest.builder() + .id(id) + .build()); + } +} diff --git a/src/main/java/com/iconplus/smartproc/controller/LokasiController.java b/src/main/java/com/iconplus/smartproc/controller/LokasiController.java index eaccfd8..9579ced 100644 --- a/src/main/java/com/iconplus/smartproc/controller/LokasiController.java +++ b/src/main/java/com/iconplus/smartproc/controller/LokasiController.java @@ -1,69 +1,77 @@ package com.iconplus.smartproc.controller; -import com.iconplus.smartproc.model.entity.Lokasi; -import com.iconplus.smartproc.exception.ResourceNotFoundException; -import com.iconplus.smartproc.repository.LokasiRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.LokasiRequest; +import com.iconplus.smartproc.model.response.GetListLokasiResponse; +import com.iconplus.smartproc.model.response.LokasiResponse; +import com.iconplus.smartproc.service.lokasi.*; +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/lokasi") public class LokasiController { - @Autowired - private LokasiRepository lokasiRepository; - //get all data + private final GetListLokasiService getListLokasiService; + private final GetLokasiByIdService getLokasiByIdService; + private final PostCreateLokasiService postCreateLokasiService; + private final PutUpdateLokasiService putUpdateLokasiService; + private final DeleteLokasiService deleteLokasiService; + + public LokasiController(GetListLokasiService getListLokasiService, + GetLokasiByIdService getLokasiByIdService, + PostCreateLokasiService postCreateLokasiService, + PutUpdateLokasiService putUpdateLokasiService, + DeleteLokasiService deleteLokasiService) { + this.getListLokasiService = getListLokasiService; + this.getLokasiByIdService = getLokasiByIdService; + this.postCreateLokasiService = postCreateLokasiService; + this.putUpdateLokasiService = putUpdateLokasiService; + this.deleteLokasiService = deleteLokasiService; + } + + @GetMapping - public List getAllLokasis(){ - return lokasiRepository.findAll(); + public GetListLokasiResponse getListLokasi(@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); + LokasiRequest lokasiRequest = LokasiRequest.builder() + .search(search) + .pageable(pageable) + .build(); + + return getListLokasiService.execute(lokasiRequest); } - // create @PostMapping - public Lokasi createLokasi(@RequestBody Lokasi lokasi) { - return lokasiRepository.save(lokasi); + public LokasiResponse createLokasi(@RequestBody LokasiRequest lokasiRequest) { + return postCreateLokasiService.execute(lokasiRequest); } - // get lokasi by id rest api @GetMapping("/{id}") - public ResponseEntity getLokasiById(@PathVariable Long id) { - Lokasi lokasi = lokasiRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Lokasi not exist with id :" + id)); - return ResponseEntity.ok(lokasi); + public LokasiResponse getLokasiById(@PathVariable Long id) { + return getLokasiByIdService.execute(LokasiRequest.builder() + .id(id) + .build()); } - // update lokasi rest api + @PutMapping("/{id}") - public ResponseEntity updateSumberdana(@PathVariable Long id, @RequestBody Lokasi lokasiDetails){ - Lokasi lokasi = lokasiRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Lokasi not exist with id :" + id)); - - lokasi.setLokasi(lokasiDetails.getLokasi()); - lokasi.setKeterangan(lokasiDetails.getKeterangan()); - - Lokasi updatedLokasi = lokasiRepository.save(lokasi); - return ResponseEntity.ok(updatedLokasi); + public LokasiResponse updateLokasi(@PathVariable Long id, + @RequestBody LokasiRequest LokasiRequest){ + LokasiRequest.setId(id); + return putUpdateLokasiService.execute(LokasiRequest); } - // delete lokasi rest api @DeleteMapping("/{id}") - public ResponseEntity> deleteLokasi(@PathVariable Long id){ - Lokasi lokasi = lokasiRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Lokasi not exist with id :" + id)); - - lokasiRepository.delete(lokasi); - Map response = new HashMap<>(); - response.put("deleted", Boolean.TRUE); - return ResponseEntity.ok(response); + public EmptyResponse deleteLokasi(@PathVariable Long id) { + return deleteLokasiService.execute(LokasiRequest.builder() + .id(id) + .build()); } - - - - } diff --git a/src/main/java/com/iconplus/smartproc/controller/MetodePengadaanController.java b/src/main/java/com/iconplus/smartproc/controller/MetodePengadaanController.java index 4a3f594..dbff546 100644 --- a/src/main/java/com/iconplus/smartproc/controller/MetodePengadaanController.java +++ b/src/main/java/com/iconplus/smartproc/controller/MetodePengadaanController.java @@ -1,68 +1,79 @@ package com.iconplus.smartproc.controller; -import com.iconplus.smartproc.model.entity.MetodePengadaan; -import com.iconplus.smartproc.exception.ResourceNotFoundException; -import com.iconplus.smartproc.repository.MetodePengadaanRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.MetodePengadaanRequest; +import com.iconplus.smartproc.model.response.GetListMetodePengadaanResponse; +import com.iconplus.smartproc.model.response.MetodePengadaanResponse; +import com.iconplus.smartproc.repository.MetodePengadaanRepository; +import com.iconplus.smartproc.service.metodepengadaan.*; +import org.springframework.beans.factory.annotation.Autowired; +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/metodepengadaan") public class MetodePengadaanController { - @Autowired - private MetodePengadaanRepository metodepengadaanRepository; - //get all data - @GetMapping - public List getAllMetodepengadaans(){ - return metodepengadaanRepository.findAll(); - } + private final GetListMetodePengadaanService getListMetodePengadaanService; + private final GetMetodePengadaanByIdService getMetodePengadaanByIdService; + private final PostCreateMetodePengadaanService postCreateMetodePengadaanService; + private final PutUpdateMetodePengadaanService putUpdateMetodePengadaanService; + private final DeleteMetodePengadaanService deleteMetodePengadaanService; - // create - @PostMapping - public MetodePengadaan createMetodepengadaan(@RequestBody MetodePengadaan metodepengadaan) { - return metodepengadaanRepository.save(metodepengadaan); - } + public MetodePengadaanController(GetListMetodePengadaanService getListMetodePengadaanService, + GetMetodePengadaanByIdService getMetodePengadaanByIdService, + PostCreateMetodePengadaanService postCreateMetodePengadaanService, + PutUpdateMetodePengadaanService putUpdateMetodePengadaanService, + DeleteMetodePengadaanService deleteMetodePengadaanService) { + this.getListMetodePengadaanService = getListMetodePengadaanService; + this.getMetodePengadaanByIdService = getMetodePengadaanByIdService; + this.postCreateMetodePengadaanService = postCreateMetodePengadaanService; + this.putUpdateMetodePengadaanService = putUpdateMetodePengadaanService; + this.deleteMetodePengadaanService = deleteMetodePengadaanService; + } - // get metodepengadaan by id rest api - @GetMapping("/{id}") - public ResponseEntity getMetodepengadaanById(@PathVariable Long id) { - MetodePengadaan metodepengadaan = metodepengadaanRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Metodepengadaan not exist with id :" + id)); - return ResponseEntity.ok(metodepengadaan); - } - // update metodepengadaan rest api - @PutMapping("/{id}") - public ResponseEntity updateMetodepengadaan(@PathVariable Long id, @RequestBody MetodePengadaan metodePengadaanDetails){ - MetodePengadaan metodepengadaan = metodepengadaanRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Metodepengadaan not exist with id :" + id)); + @GetMapping + public GetListMetodePengadaanResponse getListMetodePengadaan(@RequestParam(name = "search", required = false) String search, + @RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size){ - metodepengadaan.setMetodePengadaan(metodePengadaanDetails.getMetodePengadaan()); - metodepengadaan.setKeterangan(metodePengadaanDetails.getKeterangan()); + Pageable pageable = PageRequest.of((page - 1), size); + MetodePengadaanRequest metodePengadaanRequest = MetodePengadaanRequest.builder() + .search(search) + .pageable(pageable) + .build(); - MetodePengadaan updatedMetodePengadaan = metodepengadaanRepository.save(metodepengadaan); - return ResponseEntity.ok(updatedMetodePengadaan); - } + return getListMetodePengadaanService.execute(metodePengadaanRequest); + } - // delete metodepengadaan rest api - @DeleteMapping("/{id}") - public ResponseEntity> deleteMetodepengadaan(@PathVariable Long id){ - MetodePengadaan metodepengadaan = metodepengadaanRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Metodepengadaan not exist with id :" + id)); + @PostMapping + public MetodePengadaanResponse createMetodePengadaan(@RequestBody MetodePengadaanRequest metodePengadaanRequest) { + return postCreateMetodePengadaanService.execute(metodePengadaanRequest); + } - metodepengadaanRepository.delete(metodepengadaan); - Map response = new HashMap<>(); - response.put("deleted", Boolean.TRUE); - return ResponseEntity.ok(response); - } + @GetMapping("/{id}") + public MetodePengadaanResponse getMetodePengadaanById(@PathVariable Long id) { + return getMetodePengadaanByIdService.execute(MetodePengadaanRequest.builder() + .id(id) + .build()); + } + + + @PutMapping("/{id}") + public MetodePengadaanResponse updateMetodepengadaan(@PathVariable Long id, + @RequestBody MetodePengadaanRequest metodePengadaanRequest){ + metodePengadaanRequest.setId(id); + return putUpdateMetodePengadaanService.execute(metodePengadaanRequest); + } + + @DeleteMapping("/{id}") + public EmptyResponse deleteMetodePengadaan(@PathVariable Long id) { + return deleteMetodePengadaanService.execute(MetodePengadaanRequest.builder() + .id(id) + .build()); + } } - - - diff --git a/src/main/java/com/iconplus/smartproc/controller/MetodePenyampaianController.java b/src/main/java/com/iconplus/smartproc/controller/MetodePenyampaianController.java index e26a782..0615825 100644 --- a/src/main/java/com/iconplus/smartproc/controller/MetodePenyampaianController.java +++ b/src/main/java/com/iconplus/smartproc/controller/MetodePenyampaianController.java @@ -1,68 +1,82 @@ package com.iconplus.smartproc.controller; -import com.iconplus.smartproc.model.entity.MetodePenyampaian; -import com.iconplus.smartproc.exception.ResourceNotFoundException; -import com.iconplus.smartproc.repository.MetodePenyampaianRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.MetodePenyampaianRequest; +import com.iconplus.smartproc.model.response.GetListMetodePenyampaianResponse; +import com.iconplus.smartproc.model.response.MetodePenyampaianResponse; +import com.iconplus.smartproc.repository.MetodePenyampaianRepository; +import com.iconplus.smartproc.service.metodepenyampaian.*; +import org.springframework.beans.factory.annotation.Autowired; +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/metodepenyampaian") public class MetodePenyampaianController { - @Autowired - private MetodePenyampaianRepository metodepenyampaianRepository; - //get all data - @GetMapping - public List getAllMetodepenyampaians(){ - return metodepenyampaianRepository.findAll(); - } + @Autowired + private MetodePenyampaianRepository metodepenyampaianRepository; - // create - @PostMapping - public MetodePenyampaian createMetodepenyampaian(@RequestBody MetodePenyampaian metodepenyampaian) { - return metodepenyampaianRepository.save(metodepenyampaian); - } + private final GetListMetodePenyampaianService getListMetodePenyampaianService; + private final GetMetodePenyampaianByIdService getMetodePenyampaianByIdService; + private final PostCreateMetodePenyampaianService postCreateMetodePenyampaianService; + private final PutUpdateMetodePenyampaianService putUpdateMetodePenyampaianService; + private final DeleteMetodePenyampaianService deleteMetodePenyampaianService; - // get metodepenyampaian by id rest api - @GetMapping("/{id}") - public ResponseEntity getMetodepenyampaianById(@PathVariable Long id) { - MetodePenyampaian metodepenyampaian = metodepenyampaianRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Metodepenyampaian not exist with id :" + id)); - return ResponseEntity.ok(metodepenyampaian); - } + public MetodePenyampaianController(GetListMetodePenyampaianService getListMetodePenyampaianService, + GetMetodePenyampaianByIdService getMetodePenyampaianByIdService, + PostCreateMetodePenyampaianService postCreateMetodePenyampaianService, + PutUpdateMetodePenyampaianService putUpdateMetodePenyampaianService, + DeleteMetodePenyampaianService deleteMetodePenyampaianService) { + this.getListMetodePenyampaianService = getListMetodePenyampaianService; + this.getMetodePenyampaianByIdService = getMetodePenyampaianByIdService; + this.postCreateMetodePenyampaianService = postCreateMetodePenyampaianService; + this.putUpdateMetodePenyampaianService = putUpdateMetodePenyampaianService; + this.deleteMetodePenyampaianService = deleteMetodePenyampaianService; + } - // update metodepenyampaian rest api - @PutMapping("/{id}") - public ResponseEntity updateMetodepenyampaian(@PathVariable Long id, @RequestBody MetodePenyampaian metodePenyampaianDetails){ - MetodePenyampaian metodepenyampaian = metodepenyampaianRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Metodepenyampaian not exist with id :" + id)); - metodepenyampaian.setMetodePenyampaian(metodePenyampaianDetails.getMetodePenyampaian()); - metodepenyampaian.setKeterangan(metodePenyampaianDetails.getKeterangan()); + @GetMapping + public GetListMetodePenyampaianResponse getListMetodePenyampaian(@RequestParam(name = "search", required = false) String search, + @RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size){ - MetodePenyampaian updatedMetodePenyampaian = metodepenyampaianRepository.save(metodepenyampaian); - return ResponseEntity.ok(updatedMetodePenyampaian); - } + Pageable pageable = PageRequest.of((page - 1), size); + MetodePenyampaianRequest metodePenyampaianRequest = MetodePenyampaianRequest.builder() + .search(search) + .pageable(pageable) + .build(); - // delete metodepenyampaian rest api - @DeleteMapping("/{id}") - public ResponseEntity> deleteMetodepenyampaian(@PathVariable Long id){ - MetodePenyampaian metodepenyampaian = metodepenyampaianRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Metodepenyampaian not exist with id :" + id)); + return getListMetodePenyampaianService.execute(metodePenyampaianRequest); + } - metodepenyampaianRepository.delete(metodepenyampaian); - Map response = new HashMap<>(); - response.put("deleted", Boolean.TRUE); - return ResponseEntity.ok(response); - } + @PostMapping + public MetodePenyampaianResponse createMetodePenyampaian(@RequestBody MetodePenyampaianRequest metodePenyampaianRequest) { + return postCreateMetodePenyampaianService.execute(metodePenyampaianRequest); + } + + @GetMapping("/{id}") + public MetodePenyampaianResponse getMetodePenyampaianById(@PathVariable Long id) { + return getMetodePenyampaianByIdService.execute(MetodePenyampaianRequest.builder() + .id(id) + .build()); + } + + + @PutMapping("/{id}") + public MetodePenyampaianResponse updateMetodepenyampaian(@PathVariable Long id, + @RequestBody MetodePenyampaianRequest metodePenyampaianRequest){ + metodePenyampaianRequest.setId(id); + return putUpdateMetodePenyampaianService.execute(metodePenyampaianRequest); + } + + @DeleteMapping("/{id}") + public EmptyResponse deleteMetodePenyampaian(@PathVariable Long id) { + return deleteMetodePenyampaianService.execute(MetodePenyampaianRequest.builder() + .id(id) + .build()); + } } - - - diff --git a/src/main/java/com/iconplus/smartproc/controller/StrategiPengadaanController.java b/src/main/java/com/iconplus/smartproc/controller/StrategiPengadaanController.java index 6321505..7575d5e 100644 --- a/src/main/java/com/iconplus/smartproc/controller/StrategiPengadaanController.java +++ b/src/main/java/com/iconplus/smartproc/controller/StrategiPengadaanController.java @@ -1,69 +1,76 @@ package com.iconplus.smartproc.controller; -import com.iconplus.smartproc.model.entity.StrategiPengadaan; -import com.iconplus.smartproc.exception.ResourceNotFoundException; -import com.iconplus.smartproc.repository.StrategiPengadaanRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.StrategiPengadaanRequest; +import com.iconplus.smartproc.model.response.GetListStrategiPengadaanResponse; +import com.iconplus.smartproc.model.response.StrategiPengadaanResponse; +import com.iconplus.smartproc.service.strategipengadaan.*; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; import org.springframework.web.bind.annotation.*; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - @CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true") @RestController @RequestMapping("/api/strategipengadaan") public class StrategiPengadaanController { - @Autowired - private StrategiPengadaanRepository strategipengadaanRepository; - //get all data - @GetMapping - public List getAllstrategipengadaans(){ - return strategipengadaanRepository.findAll(); - } + private final DeleteStrategiPengadaanService deleteStrategiPengadaanService; + private final GetListStrategiPengadaanService getListStrategiPengadaanService; + private final GetStrategiPengadaanByIdService getStrategiPengadaanByIdService; + private final PostCreateStrategiPengadaanService postCreateStrategiPengadaanService; + private final PutUpdateStrategiPengadaanService putUpdateStrategiPengadaanService; - // create - @PostMapping - public StrategiPengadaan createStrategipengadaan(@RequestBody StrategiPengadaan strategipengadaan) { - return strategipengadaanRepository.save(strategipengadaan); - } + public StrategiPengadaanController(DeleteStrategiPengadaanService deleteStrategiPengadaanService, + GetListStrategiPengadaanService getListStrategiPengadaanService, + GetStrategiPengadaanByIdService getStrategiPengadaanByIdService, + PostCreateStrategiPengadaanService postCreateStrategiPengadaanService, + PutUpdateStrategiPengadaanService putUpdateStrategiPengadaanService) { + this.deleteStrategiPengadaanService = deleteStrategiPengadaanService; + this.getListStrategiPengadaanService = getListStrategiPengadaanService; + this.getStrategiPengadaanByIdService = getStrategiPengadaanByIdService; + this.postCreateStrategiPengadaanService = postCreateStrategiPengadaanService; + this.putUpdateStrategiPengadaanService = putUpdateStrategiPengadaanService; - // get strategipengadaan by id rest api - @GetMapping("/{id}") - public ResponseEntity getStrategipengadaanById(@PathVariable Long id) { - StrategiPengadaan strategipengadaan = strategipengadaanRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Strategipengadaan not exist with id :" + id)); - return ResponseEntity.ok(strategipengadaan); - } - - // update strategipengadaan rest api - @PutMapping("/{id}") - public ResponseEntity updateStrategipengadaan(@PathVariable Long id, @RequestBody StrategiPengadaan strategiPengadaanDetails){ - StrategiPengadaan strategipengadaan = strategipengadaanRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Strategipengadaan not exist with id :" + id)); - - strategipengadaan.setStrategiPengadaan(strategiPengadaanDetails.getStrategiPengadaan()); - strategipengadaan.setKeterangan(strategiPengadaanDetails.getKeterangan()); - - StrategiPengadaan updatedStrategiPengadaan = strategipengadaanRepository.save(strategipengadaan); - return ResponseEntity.ok(updatedStrategiPengadaan); - } - - // delete strategipengadaan rest api - @DeleteMapping("/{id}") - public ResponseEntity> deleteStrategipengadaan(@PathVariable Long id){ - StrategiPengadaan strategipengadaan = strategipengadaanRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Strategipengadaan not exist with id :" + id)); - - strategipengadaanRepository.delete(strategipengadaan); - Map response = new HashMap<>(); - response.put("deleted", Boolean.TRUE); - return ResponseEntity.ok(response); - } + } + @GetMapping + public GetListStrategiPengadaanResponse getListStrategiPengadaan(@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); + StrategiPengadaanRequest strategiPengadaanRequest = StrategiPengadaanRequest.builder() + .search(search) + .pageable(pageable) + .build(); + return getListStrategiPengadaanService.execute(strategiPengadaanRequest); + } + + @PostMapping + public StrategiPengadaanResponse createStrategiPengadaan(@RequestBody StrategiPengadaanRequest strategiPengadaanRequest) { + return postCreateStrategiPengadaanService.execute(strategiPengadaanRequest); + } + + @GetMapping("/{id}") + public StrategiPengadaanResponse getStrategiPengadaan(@PathVariable Long id) { + return getStrategiPengadaanByIdService.execute(StrategiPengadaanRequest.builder() + .id(id) + .build()); + } + + @PutMapping("/{id}") + public StrategiPengadaanResponse updateStrategiPengadaan(@PathVariable Long id, + @RequestBody StrategiPengadaanRequest strategiPengadaanRequest){ + strategiPengadaanRequest.setId(id); + return putUpdateStrategiPengadaanService.execute(strategiPengadaanRequest); + } + + @DeleteMapping("/{id}") + public EmptyResponse deleteStrategiPengadaan(@PathVariable Long id) { + return deleteStrategiPengadaanService.execute(StrategiPengadaanRequest.builder() + .id(id) + .build()); + } } diff --git a/src/main/java/com/iconplus/smartproc/controller/SupplyPositioningMatrixController.java b/src/main/java/com/iconplus/smartproc/controller/SupplyPositioningMatrixController.java index 36b00ce..79a3791 100644 --- a/src/main/java/com/iconplus/smartproc/controller/SupplyPositioningMatrixController.java +++ b/src/main/java/com/iconplus/smartproc/controller/SupplyPositioningMatrixController.java @@ -1,74 +1,82 @@ package com.iconplus.smartproc.controller; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.CrossOrigin; -import org.springframework.web.bind.annotation.DeleteMapping; -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.SupplyPositioningMatrix; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.SupplyPositioningMatrixRequest; +import com.iconplus.smartproc.model.response.GetListSupplyPositioningMatrixResponse; +import com.iconplus.smartproc.model.response.SupplyPositioningMatrixResponse; import com.iconplus.smartproc.repository.SupplyPositioningMatrixRepository; +import com.iconplus.smartproc.service.supplypositioningmatrix.*; +import org.springframework.beans.factory.annotation.Autowired; +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/supplypositioningmatrix") public class SupplyPositioningMatrixController { - @Autowired - private SupplyPositioningMatrixRepository supplypositioningmatrixRepository; - //get all data - @GetMapping - public List getAllSupplypositioningmatrix(){ - return supplypositioningmatrixRepository.findAll(); - } + @Autowired + private SupplyPositioningMatrixRepository supplypositioningmatrixRepository; - // create - @PostMapping - public SupplyPositioningMatrix createSupplypositioningmatrix(@RequestBody SupplyPositioningMatrix supplypositioningmatrix) { - return supplypositioningmatrixRepository.save(supplypositioningmatrix); - } + private final GetListSupplyPositioningMatrixService getListSupplyPositioningMatrixService; + private final GetSupplyPositioningMatrixByIdService getSupplyPositioningMatrixByIdService; + private final PostCreateSupplyPositioningMatrixService postCreateSupplyPositioningMatrixService; + private final PutUpdateSupplyPositioningMatrixService putUpdateSupplyPositioningMatrixService; + private final DeleteSupplyPositioningMatrixService deleteSupplyPositioningMatrixService; - // get supplypositioningmatrix by id rest api - @GetMapping("/{id}") - public ResponseEntity getSupplypositioningmatrixById(@PathVariable Long id) { - SupplyPositioningMatrix supplypositioningmatrix = supplypositioningmatrixRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Supplypositioningmatrix not exist with id :" + id)); - return ResponseEntity.ok(supplypositioningmatrix); - } + public SupplyPositioningMatrixController(GetListSupplyPositioningMatrixService getListSupplyPositioningMatrixService, + GetSupplyPositioningMatrixByIdService getSupplyPositioningMatrixByIdService, + PostCreateSupplyPositioningMatrixService postCreateSupplyPositioningMatrixService, + PutUpdateSupplyPositioningMatrixService putUpdateSupplyPositioningMatrixService, + DeleteSupplyPositioningMatrixService deleteSupplyPositioningMatrixService) { + this.getListSupplyPositioningMatrixService = getListSupplyPositioningMatrixService; + this.getSupplyPositioningMatrixByIdService = getSupplyPositioningMatrixByIdService; + this.postCreateSupplyPositioningMatrixService = postCreateSupplyPositioningMatrixService; + this.putUpdateSupplyPositioningMatrixService = putUpdateSupplyPositioningMatrixService; + this.deleteSupplyPositioningMatrixService = deleteSupplyPositioningMatrixService; + } - // update jenispengadaan rest api - @PutMapping("/{id}") - public ResponseEntity updateSupplypositioningmatrix(@PathVariable Long id, @RequestBody SupplyPositioningMatrix supplyPositioningMatrixDetails){ - SupplyPositioningMatrix supplypositioningmatrix = supplypositioningmatrixRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Supplypositioningmatrix not exist with id :" + id)); - supplypositioningmatrix.setSupplyPositioningMatrix(supplyPositioningMatrixDetails.getSupplyPositioningMatrix()); - supplypositioningmatrix.setKeterangan(supplyPositioningMatrixDetails.getKeterangan()); + @GetMapping + public GetListSupplyPositioningMatrixResponse getListSupplyPositioningMatrix(@RequestParam(name = "search", required = false) String search, + @RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size){ - SupplyPositioningMatrix updatedSupplyPositioningMatrix = supplypositioningmatrixRepository.save(supplypositioningmatrix); - return ResponseEntity.ok(updatedSupplyPositioningMatrix); - } + Pageable pageable = PageRequest.of((page - 1), size); + SupplyPositioningMatrixRequest supplyPositioningMatrixRequest = SupplyPositioningMatrixRequest.builder() + .search(search) + .pageable(pageable) + .build(); - // delete jenispengadaan rest api - @DeleteMapping("/{id}") - public ResponseEntity> deleteSupplypositioningmatrix(@PathVariable Long id){ - SupplyPositioningMatrix supplypositioningmatrix = supplypositioningmatrixRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Unit inisiator not exist with id :" + id)); + return getListSupplyPositioningMatrixService.execute(supplyPositioningMatrixRequest); + } - supplypositioningmatrixRepository.delete(supplypositioningmatrix); - Map response = new HashMap<>(); - response.put("deleted", Boolean.TRUE); - return ResponseEntity.ok(response); - } + @PostMapping + public SupplyPositioningMatrixResponse createSupplyPositioningMatrix(@RequestBody SupplyPositioningMatrixRequest supplyPositioningMatrixRequest) { + return postCreateSupplyPositioningMatrixService.execute(supplyPositioningMatrixRequest); + } + + @GetMapping("/{id}") + public SupplyPositioningMatrixResponse getSupplyPositioningMatrixById(@PathVariable Long id) { + return getSupplyPositioningMatrixByIdService.execute(SupplyPositioningMatrixRequest.builder() + .id(id) + .build()); + } + + + @PutMapping("/{id}") + public SupplyPositioningMatrixResponse updateSupplyPositioningmatrix(@PathVariable Long id, + @RequestBody SupplyPositioningMatrixRequest supplyPositioningMatrixRequest){ + supplyPositioningMatrixRequest.setId(id); + return putUpdateSupplyPositioningMatrixService.execute(supplyPositioningMatrixRequest); + } + + @DeleteMapping("/{id}") + public EmptyResponse deleteSupplyPositioningMatrix(@PathVariable Long id) { + return deleteSupplyPositioningMatrixService.execute(SupplyPositioningMatrixRequest.builder() + .id(id) + .build()); + } } diff --git a/src/main/java/com/iconplus/smartproc/model/entity/MetodePengadaan.java b/src/main/java/com/iconplus/smartproc/model/entity/MetodePengadaan.java index aa6a2bf..ad83b9f 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/MetodePengadaan.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/MetodePengadaan.java @@ -29,6 +29,10 @@ public class MetodePengadaan extends BaseEntity { @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/JenisKontrakView.java b/src/main/java/com/iconplus/smartproc/model/projection/JenisKontrakView.java new file mode 100644 index 0000000..c5d1018 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/JenisKontrakView.java @@ -0,0 +1,15 @@ +package com.iconplus.smartproc.model.projection; + +public interface JenisKontrakView { + Long getId(); + String getJenisKontrak(); + String getKeterangan(); + Boolean getIsActive(); + Boolean getIsDelete(); + + void setId(Long id); + void setJenisKontrak(String jenisKontrak); + void setKeterangan(String keterangan); + void setIsActive(Boolean isActive); + void setIsDelete(Boolean isDelete); +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/LokasiView.java b/src/main/java/com/iconplus/smartproc/model/projection/LokasiView.java new file mode 100644 index 0000000..3854c8e --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/LokasiView.java @@ -0,0 +1,16 @@ +package com.iconplus.smartproc.model.projection; + +public interface LokasiView { + + Long getId(); + String getLokasi(); + String getKeterangan(); + Boolean getIsActive(); + Boolean getIsDelete(); + + void setId(Long id); + void setLokasi(String lokasi); + void setKeterangan(String keterangan); + void setIsActive(Boolean isActive); + void setIsDelete(Boolean isDelete); +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/MetodePengadaanView.java b/src/main/java/com/iconplus/smartproc/model/projection/MetodePengadaanView.java new file mode 100644 index 0000000..d8601ac --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/MetodePengadaanView.java @@ -0,0 +1,16 @@ +package com.iconplus.smartproc.model.projection; + +public interface MetodePengadaanView { + + Long getId(); + String getMetodePengadaan(); + String getKeterangan(); + Boolean getIsActive(); + Boolean getIsDelete(); + + void setId(Long id); + void setMetodePengadaan(String metodePengadaan); + void setKeterangan(String keterangan); + void setIsActive(Boolean isActive); + void setIsDelete(Boolean isDelete); +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/MetodePenyampaianView.java b/src/main/java/com/iconplus/smartproc/model/projection/MetodePenyampaianView.java new file mode 100644 index 0000000..423549f --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/MetodePenyampaianView.java @@ -0,0 +1,16 @@ +package com.iconplus.smartproc.model.projection; + +public interface MetodePenyampaianView { + + Long getId(); + String getMetodePenyampaian(); + String getKeterangan(); + Boolean getIsActive(); + Boolean getIsDelete(); + + void setId(Long id); + void setMetodePenyampaian(String metodePenyampaian); + void setKeterangan(String keterangan); + void setIsActive(Boolean isActive); + void setIsDelete(Boolean isDelete); +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/StrategiPengadaanView.java b/src/main/java/com/iconplus/smartproc/model/projection/StrategiPengadaanView.java new file mode 100644 index 0000000..417435b --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/StrategiPengadaanView.java @@ -0,0 +1,16 @@ +package com.iconplus.smartproc.model.projection; + +public interface StrategiPengadaanView { + + Long getId(); + String getStrategiPengadaan(); + String getKeterangan(); + Boolean getIsActive(); + Boolean getIsDelete(); + + void setId(Long id); + void setStrategiPengadaan(String strategiPengadaan); + void setKeterangan(String keterangan); + void setIsActive(Boolean isActive); + void setIsDelete(Boolean isDelete); +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/SupplyPositioningMatrixView.java b/src/main/java/com/iconplus/smartproc/model/projection/SupplyPositioningMatrixView.java new file mode 100644 index 0000000..9f84160 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/SupplyPositioningMatrixView.java @@ -0,0 +1,16 @@ +package com.iconplus.smartproc.model.projection; + +public interface SupplyPositioningMatrixView { + + Long getId(); + String getSupplyPositioningMatrix(); + String getKeterangan(); + Boolean getIsActive(); + Boolean getIsDelete(); + + void setId(Long id); + void setSupplyPositioningMatrix(String supplyPositioningMatrix); + void setKeterangan(String keterangan); + void setIsActive(Boolean isActive); + void setIsDelete(Boolean isDelete); +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/JenisKontrakRequest.java b/src/main/java/com/iconplus/smartproc/model/request/JenisKontrakRequest.java new file mode 100644 index 0000000..e3c1f4e --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/JenisKontrakRequest.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; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class JenisKontrakRequest extends BaseRequest { + + private Long id; + private String jenisKontrak; + private String keterangan; + private Boolean isActive; + private Boolean isDelete; + private String search; + private transient Pageable pageable; +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/LokasiRequest.java b/src/main/java/com/iconplus/smartproc/model/request/LokasiRequest.java new file mode 100644 index 0000000..5df5a09 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/LokasiRequest.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; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class LokasiRequest extends BaseRequest { + + private Long id; + private String lokasi; + private String keterangan; + private Boolean isActive; + private Boolean isDelete; + private String search; + private transient Pageable pageable; +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/MetodePengadaanRequest.java b/src/main/java/com/iconplus/smartproc/model/request/MetodePengadaanRequest.java new file mode 100644 index 0000000..28d825d --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/MetodePengadaanRequest.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; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class MetodePengadaanRequest extends BaseRequest { + + private Long id; + private String metodePengadaan; + private String keterangan; + private Boolean isActive; + private Boolean isDelete; + private String search; + private transient Pageable pageable; +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/MetodePenyampaianRequest.java b/src/main/java/com/iconplus/smartproc/model/request/MetodePenyampaianRequest.java new file mode 100644 index 0000000..26f32ef --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/MetodePenyampaianRequest.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; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class MetodePenyampaianRequest extends BaseRequest { + + private Long id; + private String metodePenyampaian; + private String keterangan; + private Boolean isActive; + private Boolean isDelete; + private String search; + private transient Pageable pageable; +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/StrategiPengadaanRequest.java b/src/main/java/com/iconplus/smartproc/model/request/StrategiPengadaanRequest.java new file mode 100644 index 0000000..be306f9 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/StrategiPengadaanRequest.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; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class StrategiPengadaanRequest extends BaseRequest { + + private Long id; + private String strategiPengadaan; + private String keterangan; + private Boolean isActive; + private Boolean isDelete; + private String search; + private transient Pageable pageable; +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/SupplyPositioningMatrixRequest.java b/src/main/java/com/iconplus/smartproc/model/request/SupplyPositioningMatrixRequest.java new file mode 100644 index 0000000..b010ef6 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/SupplyPositioningMatrixRequest.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; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SupplyPositioningMatrixRequest extends BaseRequest { + + private Long id; + private String supplyPositioningMatrix; + private String keterangan; + private Boolean isActive; + private Boolean isDelete; + private String search; + private transient Pageable pageable; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListJenisKontrakResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListJenisKontrakResponse.java new file mode 100644 index 0000000..0e530af --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListJenisKontrakResponse.java @@ -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 GetListJenisKontrakResponse extends BaseResponse { + + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListLokasiResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListLokasiResponse.java new file mode 100644 index 0000000..ddf4fba --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListLokasiResponse.java @@ -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 GetListLokasiResponse extends BaseResponse { + + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListMetodePengadaanResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListMetodePengadaanResponse.java new file mode 100644 index 0000000..8e4287c --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListMetodePengadaanResponse.java @@ -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 GetListMetodePengadaanResponse extends BaseResponse { + + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListMetodePenyampaianResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListMetodePenyampaianResponse.java new file mode 100644 index 0000000..58fc020 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListMetodePenyampaianResponse.java @@ -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 GetListMetodePenyampaianResponse extends BaseResponse { + + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListStrategiPengadaanResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListStrategiPengadaanResponse.java new file mode 100644 index 0000000..68e64a4 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListStrategiPengadaanResponse.java @@ -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 GetListStrategiPengadaanResponse extends BaseResponse { + + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListSupplyPositioningMatrixResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListSupplyPositioningMatrixResponse.java new file mode 100644 index 0000000..ed3efb6 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListSupplyPositioningMatrixResponse.java @@ -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 GetListSupplyPositioningMatrixResponse extends BaseResponse { + + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/JenisKontrakResponse.java b/src/main/java/com/iconplus/smartproc/model/response/JenisKontrakResponse.java new file mode 100644 index 0000000..6ff9ad1 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/JenisKontrakResponse.java @@ -0,0 +1,21 @@ +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 JenisKontrakResponse extends BaseResponse { + + private Long id; + private String jenisKontrak; + private String keterangan; + private Boolean isActive; + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/LokasiResponse.java b/src/main/java/com/iconplus/smartproc/model/response/LokasiResponse.java new file mode 100644 index 0000000..774d422 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/LokasiResponse.java @@ -0,0 +1,21 @@ +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 LokasiResponse extends BaseResponse { + + private long id; + private String lokasi; + private String keterangan; + private Boolean isActive; + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/MetodePengadaanResponse.java b/src/main/java/com/iconplus/smartproc/model/response/MetodePengadaanResponse.java new file mode 100644 index 0000000..b32cdfa --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/MetodePengadaanResponse.java @@ -0,0 +1,21 @@ +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 MetodePengadaanResponse extends BaseResponse { + + private long id; + private String metodePengadaan; + private String keterangan; + private Boolean isActive; + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/MetodePenyampaianResponse.java b/src/main/java/com/iconplus/smartproc/model/response/MetodePenyampaianResponse.java new file mode 100644 index 0000000..9538e96 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/MetodePenyampaianResponse.java @@ -0,0 +1,21 @@ +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 MetodePenyampaianResponse extends BaseResponse { + + private long id; + private String metodePenyampaian; + private String keterangan; + private Boolean isActive; + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/StrategiPengadaanResponse.java b/src/main/java/com/iconplus/smartproc/model/response/StrategiPengadaanResponse.java new file mode 100644 index 0000000..2e43692 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/StrategiPengadaanResponse.java @@ -0,0 +1,21 @@ +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 StrategiPengadaanResponse extends BaseResponse { + + private long id; + private String strategiPengadaan; + private String keterangan; + private Boolean isActive; + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/SupplyPositioningMatrixResponse.java b/src/main/java/com/iconplus/smartproc/model/response/SupplyPositioningMatrixResponse.java new file mode 100644 index 0000000..4f0dd29 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/SupplyPositioningMatrixResponse.java @@ -0,0 +1,21 @@ +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 SupplyPositioningMatrixResponse extends BaseResponse { + + private long id; + private String supplyPositioningMatrix; + private String keterangan; + private Boolean isActive; + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/repository/JenisKontrakRepository.java b/src/main/java/com/iconplus/smartproc/repository/JenisKontrakRepository.java index efeb796..187e656 100644 --- a/src/main/java/com/iconplus/smartproc/repository/JenisKontrakRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/JenisKontrakRepository.java @@ -1,10 +1,32 @@ package com.iconplus.smartproc.repository; import com.iconplus.smartproc.model.entity.JenisKontrak; +import com.iconplus.smartproc.model.projection.JenisKontrakView; +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 JenisKontrakRepository extends JpaRepository { - -} + + @Query(value = "SELECT jk.id as id, " + + "jk.jenisKontrak as jenisKontrak, " + + "jk.keterangan as keterangan, " + + "jk.isActive as isActive, " + + "jk.isDelete as isDelete " + + "FROM JenisKontrak jk " + + "WHERE jk.isDelete = false " + + "AND (:search is '' " + + "or UPPER(jk.jenisKontrak) like :search) " + + "ORDER BY jk.id") + Page getAllJenisKontrak(String search, Pageable pageable); + + Optional findByIdAndIsDeleteFalse(Long id); + + Optional findByJenisKontrakAndIsDeleteFalse(String jenisKontrak); + +} \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/repository/LokasiRepository.java b/src/main/java/com/iconplus/smartproc/repository/LokasiRepository.java index f3e178b..b48a040 100644 --- a/src/main/java/com/iconplus/smartproc/repository/LokasiRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/LokasiRepository.java @@ -1,10 +1,32 @@ package com.iconplus.smartproc.repository; import com.iconplus.smartproc.model.entity.Lokasi; +import com.iconplus.smartproc.model.projection.LokasiView; +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 LokasiRepository extends JpaRepository { + + @Query(value = "SELECT l.id as id, " + + "l.lokasi as lokasi, " + + "l.keterangan as keterangan, " + + "l.isActive as isActive, " + + "l.isDelete as isDelete " + + "FROM Lokasi l " + + "WHERE l.isDelete = false " + + "AND (:search = '' " + + "or UPPER(l.lokasi) like :search) " + + "ORDER BY l.id") + Page getAllLokasi(String search, Pageable pageable); + + Optional findByIdAndIsDeleteFalse(Long id); + + Optional findByLokasiAndIsDeleteFalse(String lokasi); } diff --git a/src/main/java/com/iconplus/smartproc/repository/MetodePengadaanRepository.java b/src/main/java/com/iconplus/smartproc/repository/MetodePengadaanRepository.java index 8eeb1f9..b8a18aa 100644 --- a/src/main/java/com/iconplus/smartproc/repository/MetodePengadaanRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/MetodePengadaanRepository.java @@ -1,10 +1,32 @@ package com.iconplus.smartproc.repository; import com.iconplus.smartproc.model.entity.MetodePengadaan; +import com.iconplus.smartproc.model.projection.MetodePengadaanView; +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 MetodePengadaanRepository extends JpaRepository { + + @Query(value = "SELECT mp.id as id, " + + "mp.metodePengadaan as metodePengadaan, " + + "mp.keterangan as keterangan, " + + "mp.isActive as isActive, " + + "mp.isDelete as isDelete " + + "FROM MetodePengadaan mp " + + "WHERE mp.isDelete = false " + + "AND (:search = '' " + + "or UPPER(mp.metodePengadaan) like :search) " + + "ORDER BY mp.id") + Page getAllMetodePengadaan(String search, Pageable pageable); + + Optional findByIdAndIsDeleteFalse(Long id); + + Optional findByMetodePengadaanAndIsDeleteFalse(String metodePengadaan); } diff --git a/src/main/java/com/iconplus/smartproc/repository/MetodePenyampaianRepository.java b/src/main/java/com/iconplus/smartproc/repository/MetodePenyampaianRepository.java index 1132dde..2c4f633 100644 --- a/src/main/java/com/iconplus/smartproc/repository/MetodePenyampaianRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/MetodePenyampaianRepository.java @@ -1,10 +1,32 @@ package com.iconplus.smartproc.repository; import com.iconplus.smartproc.model.entity.MetodePenyampaian; +import com.iconplus.smartproc.model.projection.MetodePenyampaianView; +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 MetodePenyampaianRepository extends JpaRepository { + + @Query(value = "SELECT mp.id as id, " + + "mp.metodePenyampaian as metodePenyampaian, " + + "mp.keterangan as keterangan, " + + "mp.isActive as isActive, " + + "mp.isDelete as isDelete " + + "FROM MetodePenyampaian mp " + + "WHERE mp.isDelete = false " + + "AND (:search = '' " + + "or UPPER(mp.metodePenyampaian) like :search) " + + "ORDER BY mp.id") + Page getAllMetodePenyampaian(String search, Pageable pageable); + + Optional findByIdAndIsDeleteFalse(Long id); + + Optional findByMetodePenyampaianAndIsDeleteFalse(String metodePenyampaian); } diff --git a/src/main/java/com/iconplus/smartproc/repository/StrategiPengadaanRepository.java b/src/main/java/com/iconplus/smartproc/repository/StrategiPengadaanRepository.java index 4efbab5..df56f9e 100644 --- a/src/main/java/com/iconplus/smartproc/repository/StrategiPengadaanRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/StrategiPengadaanRepository.java @@ -1,10 +1,32 @@ package com.iconplus.smartproc.repository; import com.iconplus.smartproc.model.entity.StrategiPengadaan; +import com.iconplus.smartproc.model.projection.StrategiPengadaanView; +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 StrategiPengadaanRepository extends JpaRepository { + + @Query(value = "SELECT sp.id as id, " + + "sp.strategiPengadaan as strategiPengadaan, " + + "sp.keterangan as keterangan, " + + "sp.isActive as isActive, " + + "sp.isDelete as isDelete " + + "FROM StrategiPengadaan sp " + + "WHERE sp.isDelete = false " + + "AND (:search = '' " + + "or UPPER(sp.strategiPengadaan) like :search) " + + "ORDER BY sp.id") + Page getAllStrategiPengadaan(String search, Pageable pageable); + + Optional findByIdAndIsDeleteFalse(Long id); + + Optional findByStrategiPengadaanAndIsDeleteFalse(String strategiPengadaan); } diff --git a/src/main/java/com/iconplus/smartproc/repository/SupplyPositioningMatrixRepository.java b/src/main/java/com/iconplus/smartproc/repository/SupplyPositioningMatrixRepository.java index ff1a570..85c2c48 100644 --- a/src/main/java/com/iconplus/smartproc/repository/SupplyPositioningMatrixRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/SupplyPositioningMatrixRepository.java @@ -1,10 +1,32 @@ package com.iconplus.smartproc.repository; +import com.iconplus.smartproc.model.projection.SupplyPositioningMatrixView; +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 com.iconplus.smartproc.model.entity.SupplyPositioningMatrix; +import java.util.Optional; + @Repository public interface SupplyPositioningMatrixRepository extends JpaRepository { + + @Query(value = "SELECT spm.id as id, " + + "spm.supplyPositioningMatrix as supplyPositioningMatrix, " + + "spm.keterangan as keterangan, " + + "spm.isActive as isActive, " + + "spm.isDelete as isDelete " + + "FROM SupplyPositioningMatrix spm " + + "WHERE spm.isDelete = false " + + "AND (:search = '' " + + "or UPPER(spm.supplyPositioningMatrix) like :search) " + + "ORDER BY spm.id") + Page getAllSupplyPositioningMatrix(String search, Pageable pageable); + + Optional findByIdAndIsDeleteFalse(Long id); + + Optional findBySupplyPositioningMatrixAndIsDeleteFalse(String supplyPositioningMatrix); } diff --git a/src/main/java/com/iconplus/smartproc/service/jeniskontrak/DeleteJenisKontrakService.java b/src/main/java/com/iconplus/smartproc/service/jeniskontrak/DeleteJenisKontrakService.java new file mode 100644 index 0000000..ed98e81 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jeniskontrak/DeleteJenisKontrakService.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.service.jeniskontrak; + +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.JenisKontrakRequest; +import com.iconplus.smartproc.repository.JenisKontrakRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class DeleteJenisKontrakService implements BaseService { + + private JenisKontrakRepository jenisKontrakRepository; + + public DeleteJenisKontrakService(JenisKontrakRepository jenisKontrakRepository) { + this.jenisKontrakRepository = jenisKontrakRepository; + } + + + @Override + public EmptyResponse execute(JenisKontrakRequest input) { + + var jenisKontrak = jenisKontrakRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, input.getId()))); + + jenisKontrak.setIsDelete(true); + jenisKontrakRepository.save(jenisKontrak); + log.info("success delete jenis kontrak id {}", jenisKontrak.getIsDelete()); + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/jeniskontrak/GetJenisKontrakByIdService.java b/src/main/java/com/iconplus/smartproc/service/jeniskontrak/GetJenisKontrakByIdService.java new file mode 100644 index 0000000..e9b3ac6 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jeniskontrak/GetJenisKontrakByIdService.java @@ -0,0 +1,40 @@ +package com.iconplus.smartproc.service.jeniskontrak; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.JenisKontrakRequest; +import com.iconplus.smartproc.model.response.JenisKontrakResponse; +import com.iconplus.smartproc.repository.JenisKontrakRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + + +@Service +public class GetJenisKontrakByIdService implements BaseService { + + private final JenisKontrakRepository jenisKontrakRepository; + + public GetJenisKontrakByIdService(JenisKontrakRepository jenisKontrakRepository) { + this.jenisKontrakRepository = jenisKontrakRepository; + } + + @Override + public JenisKontrakResponse execute(JenisKontrakRequest input) { + var jenisKontrakView = jenisKontrakRepository.findByIdAndIsDeleteFalse(input.getId()); + if (jenisKontrakView.isEmpty()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, input.getId())); + } + + return JenisKontrakResponse.builder() + .id(jenisKontrakView.get().getId()) + .jenisKontrak(jenisKontrakView.get().getJenisKontrak()) + .keterangan(jenisKontrakView.get().getKeterangan()) + .isActive(jenisKontrakView.get().getIsActive()) + .isDelete(jenisKontrakView.get().getIsDelete()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/jeniskontrak/GetListJenisKontrakService.java b/src/main/java/com/iconplus/smartproc/service/jeniskontrak/GetListJenisKontrakService.java new file mode 100644 index 0000000..ca09313 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jeniskontrak/GetListJenisKontrakService.java @@ -0,0 +1,61 @@ +package com.iconplus.smartproc.service.jeniskontrak; + +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.JenisKontrakView; +import com.iconplus.smartproc.model.request.JenisKontrakRequest; +import com.iconplus.smartproc.model.response.GetListJenisKontrakResponse; +import com.iconplus.smartproc.model.response.JenisKontrakResponse; +import com.iconplus.smartproc.repository.JenisKontrakRepository; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + + +@Service +public class GetListJenisKontrakService implements BaseService { + + private JenisKontrakRepository jenisKontrakRepository; + + public GetListJenisKontrakService(JenisKontrakRepository jenisKontrakRepository) { + this.jenisKontrakRepository = jenisKontrakRepository; + } + + @Override + public GetListJenisKontrakResponse execute(JenisKontrakRequest input) { + validateRequest(input); + List jenisKontrakResponseList = new ArrayList<>(); + var jenisKontrakViews = jenisKontrakRepository.getAllJenisKontrak(input.getSearch(), input.getPageable()); + + for (JenisKontrakView jenisKontrakView : jenisKontrakViews) { + JenisKontrakResponse jenisKontrakResponse = JenisKontrakResponse.builder() + .id(jenisKontrakView.getId()) + .jenisKontrak(jenisKontrakView.getJenisKontrak()) + .keterangan(jenisKontrakView.getKeterangan()) + .isActive(jenisKontrakView.getIsActive()) + .isDelete(jenisKontrakView.getIsDelete()) + .build(); + jenisKontrakResponseList.add(jenisKontrakResponse); + } + + return GetListJenisKontrakResponse.builder() + .data(jenisKontrakResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(jenisKontrakViews.getTotalPages()) + .totalRecords(jenisKontrakViews.getTotalElements()) + .isFirstPage(jenisKontrakViews.isFirst()) + .isLastPage(jenisKontrakViews.isLast()) + .build()) + .build(); + } + + private void validateRequest(JenisKontrakRequest input) { + if (StringUtils.isNotBlank(input.getSearch())) { + input.setSearch('%'+ input.getSearch().toUpperCase()+'%'); + } + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/jeniskontrak/PostCreateJenisKontrakService.java b/src/main/java/com/iconplus/smartproc/service/jeniskontrak/PostCreateJenisKontrakService.java new file mode 100644 index 0000000..548f843 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jeniskontrak/PostCreateJenisKontrakService.java @@ -0,0 +1,49 @@ +package com.iconplus.smartproc.service.jeniskontrak; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.JenisKontrak; +import com.iconplus.smartproc.model.request.JenisKontrakRequest; +import com.iconplus.smartproc.model.response.JenisKontrakResponse; +import com.iconplus.smartproc.repository.JenisKontrakRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class PostCreateJenisKontrakService implements BaseService { + + private final JenisKontrakRepository jenisKontrakRepository; + + public PostCreateJenisKontrakService(JenisKontrakRepository jenisKontrakRepository) { + this.jenisKontrakRepository = jenisKontrakRepository; + } + + @Override + public JenisKontrakResponse execute(JenisKontrakRequest input) { + + var existJenisKontrak = jenisKontrakRepository.findByJenisKontrakAndIsDeleteFalse(input.getJenisKontrak()); + if (existJenisKontrak.isPresent()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10002, + Constants.ERR_TTL_10002, + String.format(Constants.ERR_MSG_10002, existJenisKontrak.get().getId())); + } + + JenisKontrak jenisKontrak = JenisKontrak.builder() + .jenisKontrak(input.getJenisKontrak()) + .isActive(input.getIsActive()) + .keterangan(input.getKeterangan()) + .isDelete(false) + .build(); + + var result = jenisKontrakRepository.save(jenisKontrak); + log.info("success insert jenis kontrak id : {}", result.getId()); + return JenisKontrakResponse.builder() + .id(result.getId()) + .build(); + + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/jeniskontrak/PutUpdateJenisKontrakService.java b/src/main/java/com/iconplus/smartproc/service/jeniskontrak/PutUpdateJenisKontrakService.java new file mode 100644 index 0000000..fca124f --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jeniskontrak/PutUpdateJenisKontrakService.java @@ -0,0 +1,45 @@ +package com.iconplus.smartproc.service.jeniskontrak; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.JenisKontrakRequest; +import com.iconplus.smartproc.model.response.JenisKontrakResponse; +import com.iconplus.smartproc.repository.JenisKontrakRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.BooleanUtils; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +import java.sql.Timestamp; + + +@Service +@Slf4j +public class PutUpdateJenisKontrakService implements BaseService { + + private JenisKontrakRepository jenisKontrakRepository; + + public PutUpdateJenisKontrakService(JenisKontrakRepository jenisKontrakRepository) { + this.jenisKontrakRepository = jenisKontrakRepository; + } + + @Override + public JenisKontrakResponse execute(JenisKontrakRequest input) { + + var jenisKontrak = jenisKontrakRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, input.getId()))); + + jenisKontrak.setJenisKontrak(input.getJenisKontrak()); + jenisKontrak.setKeterangan(input.getKeterangan()); + jenisKontrak.setIsActive(input.getIsActive()); + jenisKontrakRepository.save(jenisKontrak); + log.info("Success edit jenis kontrak id {}", jenisKontrak.getId()); + return JenisKontrakResponse.builder() + .id(jenisKontrak.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/lokasi/DeleteLokasiService.java b/src/main/java/com/iconplus/smartproc/service/lokasi/DeleteLokasiService.java new file mode 100644 index 0000000..5d5d64d --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/lokasi/DeleteLokasiService.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.service.lokasi; + +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.LokasiRequest; +import com.iconplus.smartproc.repository.LokasiRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class DeleteLokasiService implements BaseService { + + private LokasiRepository lokasiRepository; + + public DeleteLokasiService(LokasiRepository lokasiRepository) { + this.lokasiRepository = lokasiRepository; + } + + + @Override + public EmptyResponse execute(LokasiRequest input) { + + var lokasi = lokasiRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, input.getId()))); + + lokasi.setIsDelete(true); + lokasiRepository.save(lokasi); + log.info("success delete jenis lokasi id {}", lokasi.getIsDelete()); + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/lokasi/GetListLokasiService.java b/src/main/java/com/iconplus/smartproc/service/lokasi/GetListLokasiService.java new file mode 100644 index 0000000..cb64713 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/lokasi/GetListLokasiService.java @@ -0,0 +1,61 @@ +package com.iconplus.smartproc.service.lokasi; + +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.LokasiView; +import com.iconplus.smartproc.model.request.LokasiRequest; +import com.iconplus.smartproc.model.response.GetListLokasiResponse; +import com.iconplus.smartproc.model.response.LokasiResponse; +import com.iconplus.smartproc.repository.LokasiRepository; +import org.apache.commons.lang3.StringUtils; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListLokasiService implements BaseService { + + private LokasiRepository lokasiRepository; + + public GetListLokasiService(LokasiRepository lokasiRepository) { + this.lokasiRepository = lokasiRepository; + } + + @Override + public GetListLokasiResponse execute(LokasiRequest input) { + validateRequest(input); + List lokasiResponseList = new ArrayList<>(); + Page lokasiViews = lokasiRepository.getAllLokasi(input.getSearch(), input.getPageable()); + + for (LokasiView lokasiView : lokasiViews) { + LokasiResponse lokasiResponse = LokasiResponse.builder() + .id(lokasiView.getId()) + .lokasi(lokasiView.getLokasi()) + .keterangan(lokasiView.getKeterangan()) + .isActive(lokasiView.getIsActive()) + .isDelete(lokasiView.getIsDelete()) + .build(); + lokasiResponseList.add(lokasiResponse); + } + + return GetListLokasiResponse.builder() + .data(lokasiResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(lokasiViews.getTotalPages()) + .totalRecords(lokasiViews.getTotalElements()) + .isFirstPage(lokasiViews.isFirst()) + .isLastPage(lokasiViews.isLast()) + .build()) + .build(); + } + + private void validateRequest(LokasiRequest input) { + if (StringUtils.isNotBlank(input.getSearch())) { + input.setSearch('%'+ input.getSearch().toUpperCase()+'%'); + } + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/lokasi/GetLokasiByIdService.java b/src/main/java/com/iconplus/smartproc/service/lokasi/GetLokasiByIdService.java new file mode 100644 index 0000000..8a83ef4 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/lokasi/GetLokasiByIdService.java @@ -0,0 +1,43 @@ +package com.iconplus.smartproc.service.lokasi; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.LokasiRequest; +import com.iconplus.smartproc.model.response.LokasiResponse; +import com.iconplus.smartproc.repository.LokasiRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +public class GetLokasiByIdService implements BaseService { + + private final LokasiRepository lokasiRepository; + + public GetLokasiByIdService(LokasiRepository lokasiRepository) { + this.lokasiRepository = lokasiRepository; + } + + @Override + public LokasiResponse execute(LokasiRequest input) { + LokasiResponse lokasiResponse = new LokasiResponse(); + var lokasiView = lokasiRepository.findByIdAndIsDeleteFalse(input.getId()); + if (lokasiView.isEmpty()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, input.getId())); + } + + lokasiResponse.setLokasi(lokasiView.get().getLokasi()); + lokasiResponse.setKeterangan(lokasiView.get().getKeterangan()); + lokasiResponse.setIsDelete(lokasiView.get().getIsDelete()); + + return LokasiResponse.builder() + .id(lokasiView.get().getId()) + .lokasi(lokasiView.get().getLokasi()) + .keterangan(lokasiView.get().getKeterangan()) + .isDelete(lokasiView.get().getIsDelete()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/lokasi/PostCreateLokasiService.java b/src/main/java/com/iconplus/smartproc/service/lokasi/PostCreateLokasiService.java new file mode 100644 index 0000000..53f5391 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/lokasi/PostCreateLokasiService.java @@ -0,0 +1,49 @@ +package com.iconplus.smartproc.service.lokasi; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.Lokasi; +import com.iconplus.smartproc.model.request.LokasiRequest; +import com.iconplus.smartproc.model.response.LokasiResponse; +import com.iconplus.smartproc.repository.LokasiRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class PostCreateLokasiService implements BaseService { + + private final LokasiRepository lokasiRepository; + + public PostCreateLokasiService(LokasiRepository lokasiRepository) { + this.lokasiRepository = lokasiRepository; + } + + @Override + public LokasiResponse execute(LokasiRequest input) { + + var existLokasi = lokasiRepository.findByLokasiAndIsDeleteFalse(input.getLokasi()); + if (existLokasi.isPresent()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10002, + Constants.ERR_TTL_10002, + String.format(Constants.ERR_MSG_10002, input.getLokasi())); + } + + Lokasi lokasi = Lokasi.builder() + .lokasi(input.getLokasi()) + .keterangan(input.getKeterangan()) + .isDelete(false) + .isActive(input.getIsActive()) + .build(); + + var result = lokasiRepository.save(lokasi); + log.info("success insert lokasi id : {}", result.getId()); + return LokasiResponse.builder() + .id(result.getId()) + .build(); + + } +} \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/service/lokasi/PutUpdateLokasiService.java b/src/main/java/com/iconplus/smartproc/service/lokasi/PutUpdateLokasiService.java new file mode 100644 index 0000000..7769f6c --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/lokasi/PutUpdateLokasiService.java @@ -0,0 +1,45 @@ +package com.iconplus.smartproc.service.lokasi; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.LokasiRequest; +import com.iconplus.smartproc.model.response.LokasiResponse; +import com.iconplus.smartproc.repository.LokasiRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.BooleanUtils; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +import java.sql.Timestamp; + +@Service +@Slf4j +public class PutUpdateLokasiService implements BaseService { + + private LokasiRepository lokasiRepository; + + public PutUpdateLokasiService(LokasiRepository lokasiRepository) { + this.lokasiRepository = lokasiRepository; + } + + @Override + public LokasiResponse execute(LokasiRequest input) { + + var lokasi = lokasiRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, input.getId()))); + + lokasi.setLokasi(input.getLokasi()); + lokasi.setKeterangan(input.getKeterangan()); + lokasi.setIsDelete(BooleanUtils.isTrue(input.getIsDelete())); + lokasi.setLastUpdate(new Timestamp(System.currentTimeMillis())); + lokasiRepository.save(lokasi); + log.info("Success edit lokasi id {}", lokasi.getId()); + return LokasiResponse.builder() + .id(lokasi.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/metodepengadaan/DeleteMetodePengadaanService.java b/src/main/java/com/iconplus/smartproc/service/metodepengadaan/DeleteMetodePengadaanService.java new file mode 100644 index 0000000..41c6f1d --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/metodepengadaan/DeleteMetodePengadaanService.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.service.metodepengadaan; + +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.MetodePengadaanRequest; +import com.iconplus.smartproc.repository.MetodePengadaanRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class DeleteMetodePengadaanService implements BaseService { + + private MetodePengadaanRepository metodePengadaanRepository; + + public DeleteMetodePengadaanService(MetodePengadaanRepository metodePengadaanRepository) { + this.metodePengadaanRepository = metodePengadaanRepository; + } + + + @Override + public EmptyResponse execute(MetodePengadaanRequest input) { + + var metodePengadaan = metodePengadaanRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, input.getId()))); + + metodePengadaan.setIsDelete(true); + metodePengadaanRepository.save(metodePengadaan); + log.info("success delete metode pengadaan id {}", metodePengadaan.getIsDelete()); + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/metodepengadaan/GetListMetodePengadaanService.java b/src/main/java/com/iconplus/smartproc/service/metodepengadaan/GetListMetodePengadaanService.java new file mode 100644 index 0000000..8669c5d --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/metodepengadaan/GetListMetodePengadaanService.java @@ -0,0 +1,61 @@ +package com.iconplus.smartproc.service.metodepengadaan; + +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.MetodePengadaanView; +import com.iconplus.smartproc.model.request.MetodePengadaanRequest; +import com.iconplus.smartproc.model.response.GetListMetodePengadaanResponse; +import com.iconplus.smartproc.model.response.MetodePengadaanResponse; +import com.iconplus.smartproc.repository.MetodePengadaanRepository; +import org.apache.commons.lang3.StringUtils; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListMetodePengadaanService implements BaseService { + + private MetodePengadaanRepository metodePengadaanRepository; + + public GetListMetodePengadaanService(MetodePengadaanRepository metodePengadaanRepository) { + this.metodePengadaanRepository = metodePengadaanRepository; + } + + @Override + public GetListMetodePengadaanResponse execute(MetodePengadaanRequest input) { + validateRequest(input); + List metodePengadaanResponseList = new ArrayList<>(); + Page metodePengadaanViews = metodePengadaanRepository.getAllMetodePengadaan(input.getSearch(), input.getPageable()); + + for (MetodePengadaanView metodePengadaanView : metodePengadaanViews) { + MetodePengadaanResponse metodePengadaanResponse = MetodePengadaanResponse.builder() + .id(metodePengadaanView.getId()) + .metodePengadaan(metodePengadaanView.getMetodePengadaan()) + .keterangan(metodePengadaanView.getKeterangan()) + .isActive(metodePengadaanView.getIsActive()) + .isDelete(metodePengadaanView.getIsDelete()) + .build(); + metodePengadaanResponseList.add(metodePengadaanResponse); + } + + return GetListMetodePengadaanResponse.builder() + .data(metodePengadaanResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(metodePengadaanViews.getTotalPages()) + .totalRecords(metodePengadaanViews.getTotalElements()) + .isFirstPage(metodePengadaanViews.isFirst()) + .isLastPage(metodePengadaanViews.isLast()) + .build()) + .build(); + } + + private void validateRequest(MetodePengadaanRequest input) { + if (StringUtils.isNotBlank(input.getSearch())) { + input.setSearch('%'+ input.getSearch().toUpperCase()+'%'); + } + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/metodepengadaan/GetMetodePengadaanByIdService.java b/src/main/java/com/iconplus/smartproc/service/metodepengadaan/GetMetodePengadaanByIdService.java new file mode 100644 index 0000000..6977d75 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/metodepengadaan/GetMetodePengadaanByIdService.java @@ -0,0 +1,40 @@ +package com.iconplus.smartproc.service.metodepengadaan; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.MetodePengadaanRequest; +import com.iconplus.smartproc.model.response.MetodePengadaanResponse; +import com.iconplus.smartproc.repository.MetodePengadaanRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +public class GetMetodePengadaanByIdService implements BaseService { + + private final MetodePengadaanRepository metodePengadaanRepository; + + public GetMetodePengadaanByIdService(MetodePengadaanRepository metodePengadaanRepository) { + this.metodePengadaanRepository = metodePengadaanRepository; + } + + @Override + public MetodePengadaanResponse execute(MetodePengadaanRequest input) { + + var metodePengadaanView = metodePengadaanRepository.findByIdAndIsDeleteFalse(input.getId()); + if (metodePengadaanView.isEmpty()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, input.getId())); + } + + return MetodePengadaanResponse.builder() + .id(metodePengadaanView.get().getId()) + .metodePengadaan(metodePengadaanView.get().getMetodePengadaan()) + .keterangan(metodePengadaanView.get().getKeterangan()) + .isActive(metodePengadaanView.get().getIsActive()) + .isDelete(metodePengadaanView.get().getIsDelete()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/metodepengadaan/PostCreateMetodePengadaanService.java b/src/main/java/com/iconplus/smartproc/service/metodepengadaan/PostCreateMetodePengadaanService.java new file mode 100644 index 0000000..e172e37 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/metodepengadaan/PostCreateMetodePengadaanService.java @@ -0,0 +1,49 @@ +package com.iconplus.smartproc.service.metodepengadaan; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.MetodePengadaan; +import com.iconplus.smartproc.model.request.MetodePengadaanRequest; +import com.iconplus.smartproc.model.response.MetodePengadaanResponse; +import com.iconplus.smartproc.repository.MetodePengadaanRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class PostCreateMetodePengadaanService implements BaseService { + + private final MetodePengadaanRepository metodePengadaanRepository; + + public PostCreateMetodePengadaanService(MetodePengadaanRepository metodePengadaanRepository) { + this.metodePengadaanRepository = metodePengadaanRepository; + } + + @Override + public MetodePengadaanResponse execute(MetodePengadaanRequest input) { + + var existMetodePengadaan = metodePengadaanRepository.findByMetodePengadaanAndIsDeleteFalse(input.getMetodePengadaan()); + if (existMetodePengadaan.isPresent()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10002, + Constants.ERR_TTL_10002, + String.format(Constants.ERR_MSG_10002, input.getMetodePengadaan())); + } + + MetodePengadaan metodePengadaan = MetodePengadaan.builder() + .metodePengadaan(input.getMetodePengadaan()) + .keterangan(input.getKeterangan()) + .isActive(input.getIsActive()) + .isDelete(false) + .build(); + + var result = metodePengadaanRepository.save(metodePengadaan); + log.info("success insert metode pengadaan id : {}", result.getId()); + return MetodePengadaanResponse.builder() + .id(result.getId()) + .build(); + + } +} \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/service/metodepengadaan/PutUpdateMetodePengadaanService.java b/src/main/java/com/iconplus/smartproc/service/metodepengadaan/PutUpdateMetodePengadaanService.java new file mode 100644 index 0000000..c1f02d3 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/metodepengadaan/PutUpdateMetodePengadaanService.java @@ -0,0 +1,44 @@ +package com.iconplus.smartproc.service.metodepengadaan; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.MetodePengadaanRequest; +import com.iconplus.smartproc.model.response.MetodePengadaanResponse; +import com.iconplus.smartproc.repository.MetodePengadaanRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.BooleanUtils; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +import java.sql.Timestamp; + +@Service +@Slf4j +public class PutUpdateMetodePengadaanService implements BaseService { + + private MetodePengadaanRepository metodePengadaanRepository; + + public PutUpdateMetodePengadaanService(MetodePengadaanRepository metodePengadaanRepository) { + this.metodePengadaanRepository = metodePengadaanRepository; + } + + @Override + public MetodePengadaanResponse execute(MetodePengadaanRequest input) { + + var metodePengadaan = metodePengadaanRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, input.getId()))); + + metodePengadaan.setMetodePengadaan(input.getMetodePengadaan()); + metodePengadaan.setKeterangan(input.getKeterangan()); + metodePengadaan.setIsActive(input.getIsActive()); + metodePengadaanRepository.save(metodePengadaan); + log.info("Success edit metode pengadaan id {}", metodePengadaan.getId()); + return MetodePengadaanResponse.builder() + .id(metodePengadaan.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/DeleteMetodePenyampaianService.java b/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/DeleteMetodePenyampaianService.java new file mode 100644 index 0000000..b615274 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/DeleteMetodePenyampaianService.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.service.metodepenyampaian; + +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.MetodePenyampaianRequest; +import com.iconplus.smartproc.repository.MetodePenyampaianRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class DeleteMetodePenyampaianService implements BaseService { + + private MetodePenyampaianRepository metodePenyampaianRepository; + + public DeleteMetodePenyampaianService(MetodePenyampaianRepository metodePenyampaianRepository) { + this.metodePenyampaianRepository = metodePenyampaianRepository; + } + + + @Override + public EmptyResponse execute(MetodePenyampaianRequest input) { + + var metodePenyampaian = metodePenyampaianRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, input.getId()))); + + metodePenyampaian.setIsDelete(true); + metodePenyampaianRepository.save(metodePenyampaian); + log.info("success delete metode penyampaian id {}", metodePenyampaian.getIsDelete()); + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/GetListMetodePenyampaianService.java b/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/GetListMetodePenyampaianService.java new file mode 100644 index 0000000..32d68a3 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/GetListMetodePenyampaianService.java @@ -0,0 +1,61 @@ +package com.iconplus.smartproc.service.metodepenyampaian; + +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.MetodePenyampaianView; +import com.iconplus.smartproc.model.request.MetodePenyampaianRequest; +import com.iconplus.smartproc.model.response.GetListMetodePenyampaianResponse; +import com.iconplus.smartproc.model.response.MetodePenyampaianResponse; +import com.iconplus.smartproc.repository.MetodePenyampaianRepository; +import org.apache.commons.lang3.StringUtils; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListMetodePenyampaianService implements BaseService { + + private MetodePenyampaianRepository metodePenyampaianRepository; + + public GetListMetodePenyampaianService(MetodePenyampaianRepository metodePenyampaianRepository) { + this.metodePenyampaianRepository = metodePenyampaianRepository; + } + + @Override + public GetListMetodePenyampaianResponse execute(MetodePenyampaianRequest input) { + validateRequest(input); + List metodePenyampaianResponseList = new ArrayList<>(); + Page metodePenyampaianViews = metodePenyampaianRepository.getAllMetodePenyampaian(input.getSearch(), input.getPageable()); + + for (MetodePenyampaianView metodePenyampaianView : metodePenyampaianViews) { + MetodePenyampaianResponse metodePenyampaianResponse = MetodePenyampaianResponse.builder() + .id(metodePenyampaianView.getId()) + .metodePenyampaian(metodePenyampaianView.getMetodePenyampaian()) + .keterangan(metodePenyampaianView.getKeterangan()) + .isActive(metodePenyampaianView.getIsActive()) + .isDelete(metodePenyampaianView.getIsDelete()) + .build(); + metodePenyampaianResponseList.add(metodePenyampaianResponse); + } + + return GetListMetodePenyampaianResponse.builder() + .data(metodePenyampaianResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(metodePenyampaianViews.getTotalPages()) + .totalRecords(metodePenyampaianViews.getTotalElements()) + .isFirstPage(metodePenyampaianViews.isFirst()) + .isLastPage(metodePenyampaianViews.isLast()) + .build()) + .build(); + } + + private void validateRequest(MetodePenyampaianRequest input) { + if (StringUtils.isNotBlank(input.getSearch())) { + input.setSearch('%'+ input.getSearch().toUpperCase()+'%'); + } + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/GetMetodePenyampaianByIdService.java b/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/GetMetodePenyampaianByIdService.java new file mode 100644 index 0000000..694afdb --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/GetMetodePenyampaianByIdService.java @@ -0,0 +1,39 @@ +package com.iconplus.smartproc.service.metodepenyampaian; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.MetodePenyampaianRequest; +import com.iconplus.smartproc.model.response.MetodePenyampaianResponse; +import com.iconplus.smartproc.repository.MetodePenyampaianRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +public class GetMetodePenyampaianByIdService implements BaseService { + + private final MetodePenyampaianRepository metodePenyampaianRepository; + + public GetMetodePenyampaianByIdService(MetodePenyampaianRepository metodePenyampaianRepository) { + this.metodePenyampaianRepository = metodePenyampaianRepository; + } + + @Override + public MetodePenyampaianResponse execute(MetodePenyampaianRequest input) { + var metodePenyampaianView = metodePenyampaianRepository.findByIdAndIsDeleteFalse(input.getId()); + if (metodePenyampaianView.isEmpty()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, input.getId())); + } + + return MetodePenyampaianResponse.builder() + .id(metodePenyampaianView.get().getId()) + .metodePenyampaian(metodePenyampaianView.get().getMetodePenyampaian()) + .keterangan(metodePenyampaianView.get().getKeterangan()) + .isActive(metodePenyampaianView.get().getIsActive()) + .isDelete(metodePenyampaianView.get().getIsDelete()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/PostCreateMetodePenyampaianService.java b/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/PostCreateMetodePenyampaianService.java new file mode 100644 index 0000000..cc933e9 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/PostCreateMetodePenyampaianService.java @@ -0,0 +1,49 @@ +package com.iconplus.smartproc.service.metodepenyampaian; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.MetodePenyampaian; +import com.iconplus.smartproc.model.request.MetodePenyampaianRequest; +import com.iconplus.smartproc.model.response.MetodePenyampaianResponse; +import com.iconplus.smartproc.repository.MetodePenyampaianRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class PostCreateMetodePenyampaianService implements BaseService { + + private final MetodePenyampaianRepository metodePenyampaianRepository; + + public PostCreateMetodePenyampaianService(MetodePenyampaianRepository metodePenyampaianRepository) { + this.metodePenyampaianRepository = metodePenyampaianRepository; + } + + @Override + public MetodePenyampaianResponse execute(MetodePenyampaianRequest input) { + + var existMetodePenyampaian = metodePenyampaianRepository.findByMetodePenyampaianAndIsDeleteFalse(input.getMetodePenyampaian()); + if (existMetodePenyampaian.isPresent()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10002, + Constants.ERR_TTL_10002, + String.format(Constants.ERR_MSG_10002, input.getMetodePenyampaian())); + } + + MetodePenyampaian metodePenyampaian = MetodePenyampaian.builder() + .metodePenyampaian(input.getMetodePenyampaian()) + .keterangan(input.getKeterangan()) + .isActive(input.getIsActive()) + .isDelete(false) + .build(); + + var result = metodePenyampaianRepository.save(metodePenyampaian); + log.info("success insert metode penyampaian id : {}", result.getId()); + return MetodePenyampaianResponse.builder() + .id(result.getId()) + .build(); + + } +} \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/PutUpdateMetodePenyampaianService.java b/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/PutUpdateMetodePenyampaianService.java new file mode 100644 index 0000000..704cf50 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/PutUpdateMetodePenyampaianService.java @@ -0,0 +1,44 @@ +package com.iconplus.smartproc.service.metodepenyampaian; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.MetodePenyampaianRequest; +import com.iconplus.smartproc.model.response.MetodePenyampaianResponse; +import com.iconplus.smartproc.repository.MetodePenyampaianRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.BooleanUtils; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +import java.sql.Timestamp; + +@Service +@Slf4j +public class PutUpdateMetodePenyampaianService implements BaseService { + + private MetodePenyampaianRepository metodePenyampaianRepository; + + public PutUpdateMetodePenyampaianService(MetodePenyampaianRepository metodePenyampaianRepository) { + this.metodePenyampaianRepository = metodePenyampaianRepository; + } + + @Override + public MetodePenyampaianResponse execute(MetodePenyampaianRequest input) { + + var metodePenyampaian = metodePenyampaianRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, input.getId()))); + + metodePenyampaian.setMetodePenyampaian(input.getMetodePenyampaian()); + metodePenyampaian.setKeterangan(input.getKeterangan()); + metodePenyampaian.setIsActive(input.getIsActive()); + metodePenyampaianRepository.save(metodePenyampaian); + log.info("Success edit metode penyampaian id {}", metodePenyampaian.getId()); + return MetodePenyampaianResponse.builder() + .id(metodePenyampaian.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/strategipengadaan/DeleteStrategiPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/strategipengadaan/DeleteStrategiPengadaanService.java new file mode 100644 index 0000000..c117292 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/strategipengadaan/DeleteStrategiPengadaanService.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.service.strategipengadaan; + +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.StrategiPengadaanRequest; +import com.iconplus.smartproc.repository.StrategiPengadaanRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class DeleteStrategiPengadaanService implements BaseService { + + private StrategiPengadaanRepository strategiPengadaanRepository; + + public DeleteStrategiPengadaanService(StrategiPengadaanRepository strategiPengadaanRepository) { + this.strategiPengadaanRepository = strategiPengadaanRepository; + } + + + @Override + public EmptyResponse execute(StrategiPengadaanRequest input) { + + var strategiPengadaan = strategiPengadaanRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, input.getId()))); + + strategiPengadaan.setIsDelete(true); + strategiPengadaanRepository.save(strategiPengadaan); + log.info("success delete strategi pengadaan id {}", strategiPengadaan.getIsDelete()); + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/strategipengadaan/GetListStrategiPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/strategipengadaan/GetListStrategiPengadaanService.java new file mode 100644 index 0000000..c118610 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/strategipengadaan/GetListStrategiPengadaanService.java @@ -0,0 +1,61 @@ +package com.iconplus.smartproc.service.strategipengadaan; + +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.StrategiPengadaanView; +import com.iconplus.smartproc.model.request.StrategiPengadaanRequest; +import com.iconplus.smartproc.model.response.GetListStrategiPengadaanResponse; +import com.iconplus.smartproc.model.response.StrategiPengadaanResponse; +import com.iconplus.smartproc.repository.StrategiPengadaanRepository; +import org.apache.commons.lang3.StringUtils; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListStrategiPengadaanService implements BaseService { + + private StrategiPengadaanRepository strategiPengadaanRepository; + + public GetListStrategiPengadaanService(StrategiPengadaanRepository strategiPengadaanRepository) { + this.strategiPengadaanRepository = strategiPengadaanRepository; + } + + @Override + public GetListStrategiPengadaanResponse execute(StrategiPengadaanRequest input) { + validateRequest(input); + List strategiPengadaanResponseList = new ArrayList<>(); + Page strategiPengadaanViews = strategiPengadaanRepository.getAllStrategiPengadaan(input.getSearch(), input.getPageable()); + + for (StrategiPengadaanView strategiPengadaanView : strategiPengadaanViews) { + StrategiPengadaanResponse strategiPengadaanResponse = StrategiPengadaanResponse.builder() + .id(strategiPengadaanView.getId()) + .strategiPengadaan(strategiPengadaanView.getStrategiPengadaan()) + .keterangan(strategiPengadaanView.getKeterangan()) + .isActive(strategiPengadaanView.getIsActive()) + .isDelete(strategiPengadaanView.getIsDelete()) + .build(); + strategiPengadaanResponseList.add(strategiPengadaanResponse); + } + + return GetListStrategiPengadaanResponse.builder() + .data(strategiPengadaanResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(strategiPengadaanViews.getTotalPages()) + .totalRecords(strategiPengadaanViews.getTotalElements()) + .isFirstPage(strategiPengadaanViews.isFirst()) + .isLastPage(strategiPengadaanViews.isLast()) + .build()) + .build(); + } + + private void validateRequest(StrategiPengadaanRequest input) { + if (StringUtils.isNotBlank(input.getSearch())) { + input.setSearch('%'+ input.getSearch().toUpperCase()+'%'); + } + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/strategipengadaan/GetStrategiPengadaanByIdService.java b/src/main/java/com/iconplus/smartproc/service/strategipengadaan/GetStrategiPengadaanByIdService.java new file mode 100644 index 0000000..05fcba0 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/strategipengadaan/GetStrategiPengadaanByIdService.java @@ -0,0 +1,39 @@ +package com.iconplus.smartproc.service.strategipengadaan; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.StrategiPengadaanRequest; +import com.iconplus.smartproc.model.response.StrategiPengadaanResponse; +import com.iconplus.smartproc.repository.StrategiPengadaanRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +public class GetStrategiPengadaanByIdService implements BaseService { + + private final StrategiPengadaanRepository strategiPengadaanRepository; + + public GetStrategiPengadaanByIdService(StrategiPengadaanRepository strategiPengadaanRepository) { + this.strategiPengadaanRepository = strategiPengadaanRepository; + } + + @Override + public StrategiPengadaanResponse execute(StrategiPengadaanRequest input) { + var strategiPengadaanView = strategiPengadaanRepository.findByIdAndIsDeleteFalse(input.getId()); + if (strategiPengadaanView.isEmpty()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, input.getId())); + } + + return StrategiPengadaanResponse.builder() + .id(strategiPengadaanView.get().getId()) + .strategiPengadaan(strategiPengadaanView.get().getStrategiPengadaan()) + .keterangan(strategiPengadaanView.get().getKeterangan()) + .isActive(strategiPengadaanView.get().getIsActive()) + .isDelete(strategiPengadaanView.get().getIsDelete()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/strategipengadaan/PostCreateStrategiPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/strategipengadaan/PostCreateStrategiPengadaanService.java new file mode 100644 index 0000000..a5d8672 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/strategipengadaan/PostCreateStrategiPengadaanService.java @@ -0,0 +1,49 @@ +package com.iconplus.smartproc.service.strategipengadaan; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.StrategiPengadaan; +import com.iconplus.smartproc.model.request.StrategiPengadaanRequest; +import com.iconplus.smartproc.model.response.StrategiPengadaanResponse; +import com.iconplus.smartproc.repository.StrategiPengadaanRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class PostCreateStrategiPengadaanService implements BaseService { + + private final StrategiPengadaanRepository strategiPengadaanRepository; + + public PostCreateStrategiPengadaanService(StrategiPengadaanRepository strategiPengadaanRepository) { + this.strategiPengadaanRepository = strategiPengadaanRepository; + } + + @Override + public StrategiPengadaanResponse execute(StrategiPengadaanRequest input) { + + var existStrategiPengadaan = strategiPengadaanRepository.findByStrategiPengadaanAndIsDeleteFalse(input.getStrategiPengadaan()); + if (existStrategiPengadaan.isPresent()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10002, + Constants.ERR_TTL_10002, + String.format(Constants.ERR_MSG_10002, input.getStrategiPengadaan())); + } + + StrategiPengadaan strategiPengadaan = StrategiPengadaan.builder() + .strategiPengadaan(input.getStrategiPengadaan()) + .keterangan(input.getKeterangan()) + .isActive(input.getIsActive()) + .isDelete(false) + .build(); + + var result = strategiPengadaanRepository.save(strategiPengadaan); + log.info("success insert strategi pengadaan id : {}", result.getId()); + return StrategiPengadaanResponse.builder() + .id(result.getId()) + .build(); + + } +} \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/service/strategipengadaan/PutUpdateStrategiPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/strategipengadaan/PutUpdateStrategiPengadaanService.java new file mode 100644 index 0000000..1310f46 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/strategipengadaan/PutUpdateStrategiPengadaanService.java @@ -0,0 +1,44 @@ +package com.iconplus.smartproc.service.strategipengadaan; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.StrategiPengadaanRequest; +import com.iconplus.smartproc.model.response.StrategiPengadaanResponse; +import com.iconplus.smartproc.repository.StrategiPengadaanRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.BooleanUtils; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +import java.sql.Timestamp; + +@Service +@Slf4j +public class PutUpdateStrategiPengadaanService implements BaseService { + + private StrategiPengadaanRepository strategiPengadaanRepository; + + public PutUpdateStrategiPengadaanService(StrategiPengadaanRepository strategiPengadaanRepository) { + this.strategiPengadaanRepository = strategiPengadaanRepository; + } + + @Override + public StrategiPengadaanResponse execute(StrategiPengadaanRequest input) { + + var strategiPengadaan = strategiPengadaanRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, input.getId()))); + + strategiPengadaan.setStrategiPengadaan(input.getStrategiPengadaan()); + strategiPengadaan.setKeterangan(input.getKeterangan()); + strategiPengadaan.setIsActive(input.getIsActive()); + strategiPengadaanRepository.save(strategiPengadaan); + log.info("Success edit strategi pengadaan id {}", strategiPengadaan.getId()); + return StrategiPengadaanResponse.builder() + .id(strategiPengadaan.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/DeleteSupplyPositioningMatrixService.java b/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/DeleteSupplyPositioningMatrixService.java new file mode 100644 index 0000000..b6f8df8 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/DeleteSupplyPositioningMatrixService.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.service.supplypositioningmatrix; + +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.SupplyPositioningMatrixRequest; +import com.iconplus.smartproc.repository.SupplyPositioningMatrixRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class DeleteSupplyPositioningMatrixService implements BaseService { + + private SupplyPositioningMatrixRepository supplyPositioningMatrixRepository; + + public DeleteSupplyPositioningMatrixService(SupplyPositioningMatrixRepository supplyPositioningMatrixRepository) { + this.supplyPositioningMatrixRepository = supplyPositioningMatrixRepository; + } + + + @Override + public EmptyResponse execute(SupplyPositioningMatrixRequest input) { + + var supplyPositioningMatrix = supplyPositioningMatrixRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, input.getId()))); + + supplyPositioningMatrix.setIsDelete(true); + supplyPositioningMatrixRepository.save(supplyPositioningMatrix); + log.info("success delete supply positioning matrix id {}", supplyPositioningMatrix.getIsDelete()); + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/GetListSupplyPositioningMatrixService.java b/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/GetListSupplyPositioningMatrixService.java new file mode 100644 index 0000000..af75ca4 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/GetListSupplyPositioningMatrixService.java @@ -0,0 +1,61 @@ +package com.iconplus.smartproc.service.supplypositioningmatrix; + +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.SupplyPositioningMatrixView; +import com.iconplus.smartproc.model.request.SupplyPositioningMatrixRequest; +import com.iconplus.smartproc.model.response.GetListSupplyPositioningMatrixResponse; +import com.iconplus.smartproc.model.response.SupplyPositioningMatrixResponse; +import com.iconplus.smartproc.repository.SupplyPositioningMatrixRepository; +import org.apache.commons.lang3.StringUtils; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListSupplyPositioningMatrixService implements BaseService { + + private SupplyPositioningMatrixRepository supplyPositioningMatrixRepository; + + public GetListSupplyPositioningMatrixService(SupplyPositioningMatrixRepository supplyPositioningMatrixRepository) { + this.supplyPositioningMatrixRepository = supplyPositioningMatrixRepository; + } + + @Override + public GetListSupplyPositioningMatrixResponse execute(SupplyPositioningMatrixRequest input) { + validateRequest(input); + List supplyPositioningMatrixResponseList = new ArrayList<>(); + Page supplyPositioningMatrixViews = supplyPositioningMatrixRepository.getAllSupplyPositioningMatrix(input.getSearch(), input.getPageable()); + + for (SupplyPositioningMatrixView supplyPositioningMatrixView : supplyPositioningMatrixViews) { + SupplyPositioningMatrixResponse supplyPositioningMatrixResponse = SupplyPositioningMatrixResponse.builder() + .id(supplyPositioningMatrixView.getId()) + .supplyPositioningMatrix(supplyPositioningMatrixView.getSupplyPositioningMatrix()) + .keterangan(supplyPositioningMatrixView.getKeterangan()) + .isActive(supplyPositioningMatrixView.getIsActive()) + .isDelete(supplyPositioningMatrixView.getIsDelete()) + .build(); + supplyPositioningMatrixResponseList.add(supplyPositioningMatrixResponse); + } + + return GetListSupplyPositioningMatrixResponse.builder() + .data(supplyPositioningMatrixResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(supplyPositioningMatrixViews.getTotalPages()) + .totalRecords(supplyPositioningMatrixViews.getTotalElements()) + .isFirstPage(supplyPositioningMatrixViews.isFirst()) + .isLastPage(supplyPositioningMatrixViews.isLast()) + .build()) + .build(); + } + + private void validateRequest(SupplyPositioningMatrixRequest input) { + if (StringUtils.isNotBlank(input.getSearch())) { + input.setSearch('%'+ input.getSearch().toUpperCase()+'%'); + } + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/GetSupplyPositioningMatrixByIdService.java b/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/GetSupplyPositioningMatrixByIdService.java new file mode 100644 index 0000000..65a8982 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/GetSupplyPositioningMatrixByIdService.java @@ -0,0 +1,39 @@ +package com.iconplus.smartproc.service.supplypositioningmatrix; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.SupplyPositioningMatrixRequest; +import com.iconplus.smartproc.model.response.SupplyPositioningMatrixResponse; +import com.iconplus.smartproc.repository.SupplyPositioningMatrixRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +public class GetSupplyPositioningMatrixByIdService implements BaseService { + + private final SupplyPositioningMatrixRepository supplyPositioningMatrixRepository; + + public GetSupplyPositioningMatrixByIdService(SupplyPositioningMatrixRepository supplyPositioningMatrixRepository) { + this.supplyPositioningMatrixRepository = supplyPositioningMatrixRepository; + } + + @Override + public SupplyPositioningMatrixResponse execute(SupplyPositioningMatrixRequest input) { + var supplyPositioningMatrixView = supplyPositioningMatrixRepository.findByIdAndIsDeleteFalse(input.getId()); + if (supplyPositioningMatrixView.isEmpty()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, input.getId())); + } + + return SupplyPositioningMatrixResponse.builder() + .id(supplyPositioningMatrixView.get().getId()) + .supplyPositioningMatrix(supplyPositioningMatrixView.get().getSupplyPositioningMatrix()) + .keterangan(supplyPositioningMatrixView.get().getKeterangan()) + .isActive(supplyPositioningMatrixView.get().getIsActive()) + .isDelete(supplyPositioningMatrixView.get().getIsDelete()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/PostCreateSupplyPositioningMatrixService.java b/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/PostCreateSupplyPositioningMatrixService.java new file mode 100644 index 0000000..6a03e52 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/PostCreateSupplyPositioningMatrixService.java @@ -0,0 +1,49 @@ +package com.iconplus.smartproc.service.supplypositioningmatrix; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.SupplyPositioningMatrix; +import com.iconplus.smartproc.model.request.SupplyPositioningMatrixRequest; +import com.iconplus.smartproc.model.response.SupplyPositioningMatrixResponse; +import com.iconplus.smartproc.repository.SupplyPositioningMatrixRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class PostCreateSupplyPositioningMatrixService implements BaseService { + + private final SupplyPositioningMatrixRepository supplyPositioningMatrixRepository; + + public PostCreateSupplyPositioningMatrixService(SupplyPositioningMatrixRepository supplyPositioningMatrixRepository) { + this.supplyPositioningMatrixRepository = supplyPositioningMatrixRepository; + } + + @Override + public SupplyPositioningMatrixResponse execute(SupplyPositioningMatrixRequest input) { + + var existSupplyPositioningMatrix = supplyPositioningMatrixRepository.findBySupplyPositioningMatrixAndIsDeleteFalse(input.getSupplyPositioningMatrix()); + if (existSupplyPositioningMatrix.isPresent()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10002, + Constants.ERR_TTL_10002, + String.format(Constants.ERR_MSG_10002, input.getSupplyPositioningMatrix())); + } + + SupplyPositioningMatrix supplyPositioningMatrix = SupplyPositioningMatrix.builder() + .supplyPositioningMatrix(input.getSupplyPositioningMatrix()) + .keterangan(input.getKeterangan()) + .isActive(input.getIsActive()) + .isDelete(false) + .build(); + + var result = supplyPositioningMatrixRepository.save(supplyPositioningMatrix); + log.info("success insert supply positioning matrix id : {}", result.getId()); + return SupplyPositioningMatrixResponse.builder() + .id(result.getId()) + .build(); + + } +} \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/PutUpdateSupplyPositioningMatrixService.java b/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/PutUpdateSupplyPositioningMatrixService.java new file mode 100644 index 0000000..321a744 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/PutUpdateSupplyPositioningMatrixService.java @@ -0,0 +1,44 @@ +package com.iconplus.smartproc.service.supplypositioningmatrix; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.SupplyPositioningMatrixRequest; +import com.iconplus.smartproc.model.response.SupplyPositioningMatrixResponse; +import com.iconplus.smartproc.repository.SupplyPositioningMatrixRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.BooleanUtils; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +import java.sql.Timestamp; + +@Service +@Slf4j +public class PutUpdateSupplyPositioningMatrixService implements BaseService { + + private SupplyPositioningMatrixRepository supplyPositioningMatrixRepository; + + public PutUpdateSupplyPositioningMatrixService(SupplyPositioningMatrixRepository supplyPositioningMatrixRepository) { + this.supplyPositioningMatrixRepository = supplyPositioningMatrixRepository; + } + + @Override + public SupplyPositioningMatrixResponse execute(SupplyPositioningMatrixRequest input) { + + var supplyPositioningMatrix = supplyPositioningMatrixRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, input.getId()))); + + supplyPositioningMatrix.setSupplyPositioningMatrix(input.getSupplyPositioningMatrix()); + supplyPositioningMatrix.setKeterangan(input.getKeterangan()); + supplyPositioningMatrix.setIsActive(input.getIsActive()); + supplyPositioningMatrixRepository.save(supplyPositioningMatrix); + log.info("Success edit supply positioning matrix id {}", supplyPositioningMatrix.getId()); + return SupplyPositioningMatrixResponse.builder() + .id(supplyPositioningMatrix.getId()) + .build(); + } +} From 00dd061bacf9ca78c4de8e1f308199027a2aeb2c Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Fri, 26 May 2023 16:36:02 +0700 Subject: [PATCH 24/63] add crud jabatan --- .../controller/JabatanController.java | 73 +++++++++++++++++++ .../smartproc/model/entity/Jabatan.java | 44 +++++++++++ .../model/projection/JabatanView.java | 31 ++++++++ .../model/request/JabatanRequest.java | 24 ++++++ .../response/GetListJabatanResponse.java | 20 +++++ .../model/response/JabatanResponse.java | 24 ++++++ .../repository/JabatanRepository.java | 52 +++++++++++++ .../service/jabatan/DeleteJabatanService.java | 25 +++++++ .../service/jabatan/GetJabatanService.java | 36 +++++++++ .../jabatan/GetListJabatanService.java | 65 +++++++++++++++++ .../jabatan/PostCreateJabatanService.java | 41 +++++++++++ .../jabatan/PutUpdateJabatanService.java | 34 +++++++++ 12 files changed, 469 insertions(+) create mode 100644 src/main/java/com/iconplus/smartproc/controller/JabatanController.java create mode 100644 src/main/java/com/iconplus/smartproc/model/entity/Jabatan.java create mode 100644 src/main/java/com/iconplus/smartproc/model/projection/JabatanView.java create mode 100644 src/main/java/com/iconplus/smartproc/model/request/JabatanRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/GetListJabatanResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/JabatanResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/repository/JabatanRepository.java create mode 100644 src/main/java/com/iconplus/smartproc/service/jabatan/DeleteJabatanService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/jabatan/GetJabatanService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/jabatan/GetListJabatanService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/jabatan/PostCreateJabatanService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/jabatan/PutUpdateJabatanService.java diff --git a/src/main/java/com/iconplus/smartproc/controller/JabatanController.java b/src/main/java/com/iconplus/smartproc/controller/JabatanController.java new file mode 100644 index 0000000..667f9e9 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/controller/JabatanController.java @@ -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()); + } +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/Jabatan.java b/src/main/java/com/iconplus/smartproc/model/entity/Jabatan.java new file mode 100644 index 0000000..80b5543 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/Jabatan.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.*; + +@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; +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/JabatanView.java b/src/main/java/com/iconplus/smartproc/model/projection/JabatanView.java new file mode 100644 index 0000000..da19fd4 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/JabatanView.java @@ -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); +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/JabatanRequest.java b/src/main/java/com/iconplus/smartproc/model/request/JabatanRequest.java new file mode 100644 index 0000000..c11cc34 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/JabatanRequest.java @@ -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; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListJabatanResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListJabatanResponse.java new file mode 100644 index 0000000..a778d26 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListJabatanResponse.java @@ -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 data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/JabatanResponse.java b/src/main/java/com/iconplus/smartproc/model/response/JabatanResponse.java new file mode 100644 index 0000000..d81dcd7 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/JabatanResponse.java @@ -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; +} diff --git a/src/main/java/com/iconplus/smartproc/repository/JabatanRepository.java b/src/main/java/com/iconplus/smartproc/repository/JabatanRepository.java new file mode 100644 index 0000000..a0b7aa6 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/JabatanRepository.java @@ -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 { + + Optional findByIdAndIsDeleteFalse(Long id); + + Optional 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 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 getListJabatan(String search, Pageable pageable); +} diff --git a/src/main/java/com/iconplus/smartproc/service/jabatan/DeleteJabatanService.java b/src/main/java/com/iconplus/smartproc/service/jabatan/DeleteJabatanService.java new file mode 100644 index 0000000..29d34ef --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jabatan/DeleteJabatanService.java @@ -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 { + + 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(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/jabatan/GetJabatanService.java b/src/main/java/com/iconplus/smartproc/service/jabatan/GetJabatanService.java new file mode 100644 index 0000000..cb36032 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jabatan/GetJabatanService.java @@ -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 { + + 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(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/jabatan/GetListJabatanService.java b/src/main/java/com/iconplus/smartproc/service/jabatan/GetListJabatanService.java new file mode 100644 index 0000000..504d564 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jabatan/GetListJabatanService.java @@ -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 { + + private JabatanRepository jabatanRepository; + public GetListJabatanService(JabatanRepository jabatanRepository) { + this.jabatanRepository = jabatanRepository; + } + + @Override + public GetListJabatanResponse execute(JabatanRequest input) { + validateRequest(input); + List 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()+'%'); + } + } + +} diff --git a/src/main/java/com/iconplus/smartproc/service/jabatan/PostCreateJabatanService.java b/src/main/java/com/iconplus/smartproc/service/jabatan/PostCreateJabatanService.java new file mode 100644 index 0000000..42c438f --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jabatan/PostCreateJabatanService.java @@ -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 { + + 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(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/jabatan/PutUpdateJabatanService.java b/src/main/java/com/iconplus/smartproc/service/jabatan/PutUpdateJabatanService.java new file mode 100644 index 0000000..d959a32 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jabatan/PutUpdateJabatanService.java @@ -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 { + + 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(); + } +} From cab86cf8fa5c3eda173ddb74195ba95dccc20c45 Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Fri, 26 May 2023 17:18:41 +0700 Subject: [PATCH 25/63] fix crud user --- .../smartproc/configuration/JwtTokenUtil.java | 7 +++++++ .../com/iconplus/smartproc/model/entity/Users.java | 4 ++-- .../smartproc/model/projection/UserRoleView.java | 2 ++ .../smartproc/model/request/UsersRequest.java | 1 + .../smartproc/model/response/UsersResponse.java | 2 ++ .../smartproc/model/token/TokenContent.java | 11 +++++++++-- .../smartproc/repository/UsersRepository.java | 14 ++++++++++---- .../service/authentication/LoginService.java | 7 +++++++ .../authentication/TokenManagementService.java | 5 +++++ .../service/manajemenuser/GetListUserService.java | 1 + .../service/manajemenuser/GetUserByIdService.java | 1 + .../manajemenuser/PostCreateUserService.java | 2 +- .../manajemenuser/PutUpdateUserService.java | 2 +- 13 files changed, 49 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/iconplus/smartproc/configuration/JwtTokenUtil.java b/src/main/java/com/iconplus/smartproc/configuration/JwtTokenUtil.java index aff55c6..76efbfd 100644 --- a/src/main/java/com/iconplus/smartproc/configuration/JwtTokenUtil.java +++ b/src/main/java/com/iconplus/smartproc/configuration/JwtTokenUtil.java @@ -46,7 +46,14 @@ public class JwtTokenUtil implements Serializable { claims.put("nama", tokenContent.getNama()); claims.put("username", tokenContent.getUsername()); claims.put("user_id", tokenContent.getUserId()); + claims.put("roleId", tokenContent.getRoleId()); claims.put("role", tokenContent.getRole()); + claims.put("instansiId", tokenContent.getInstansiId()); + claims.put("instansi", tokenContent.getInstansi()); + claims.put("bidangId", tokenContent.getBidangId()); + claims.put("bidang", tokenContent.getBidang()); + claims.put("jabatanId", tokenContent.getJabatanId()); + claims.put("jabatan", tokenContent.getJabatan()); return doGenerateToken(claims, username, expirationInMs); } diff --git a/src/main/java/com/iconplus/smartproc/model/entity/Users.java b/src/main/java/com/iconplus/smartproc/model/entity/Users.java index 0ec4c8d..06c169f 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/Users.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/Users.java @@ -39,8 +39,8 @@ public class Users extends BaseEntity { @Column(name = "bidang_id") private Long bidangId; - @Column(name = "jabatan") - private String jabatan; + @Column(name = "jabatan_id") + private Long jabatanId; @Column(name = "role_id") private Long roleId; diff --git a/src/main/java/com/iconplus/smartproc/model/projection/UserRoleView.java b/src/main/java/com/iconplus/smartproc/model/projection/UserRoleView.java index 39dbd1b..c8f0759 100644 --- a/src/main/java/com/iconplus/smartproc/model/projection/UserRoleView.java +++ b/src/main/java/com/iconplus/smartproc/model/projection/UserRoleView.java @@ -10,6 +10,7 @@ public interface UserRoleView { String getInstansi(); Long getBidangId(); String getBidang(); + Long getJabatanId(); String getJabatan(); Boolean getIsActive(); String getPassword(); @@ -25,6 +26,7 @@ public interface UserRoleView { void setInstansi(String instansi); void setBidangId(Long bidangId); void setBidang(String bidang); + void setJabatanId(Long jabatanId); void setJabatan(String Jabatan); void setIsActive(Boolean isActive); void setPassword(String password); diff --git a/src/main/java/com/iconplus/smartproc/model/request/UsersRequest.java b/src/main/java/com/iconplus/smartproc/model/request/UsersRequest.java index c90a863..77244bd 100644 --- a/src/main/java/com/iconplus/smartproc/model/request/UsersRequest.java +++ b/src/main/java/com/iconplus/smartproc/model/request/UsersRequest.java @@ -21,6 +21,7 @@ public class UsersRequest extends BaseRequest { private Long bidangId; private String bidang; private String nama; + private Long jabatanId; private String jabatan; private Long roleId; private String role; diff --git a/src/main/java/com/iconplus/smartproc/model/response/UsersResponse.java b/src/main/java/com/iconplus/smartproc/model/response/UsersResponse.java index d180742..b001a4a 100644 --- a/src/main/java/com/iconplus/smartproc/model/response/UsersResponse.java +++ b/src/main/java/com/iconplus/smartproc/model/response/UsersResponse.java @@ -14,6 +14,8 @@ public class UsersResponse extends BaseResponse { private Long id; private String nama; private String username; + + private Long jabatanId; private String jabatan; private Long instansiId; diff --git a/src/main/java/com/iconplus/smartproc/model/token/TokenContent.java b/src/main/java/com/iconplus/smartproc/model/token/TokenContent.java index 3efd7fb..1cf3b34 100644 --- a/src/main/java/com/iconplus/smartproc/model/token/TokenContent.java +++ b/src/main/java/com/iconplus/smartproc/model/token/TokenContent.java @@ -9,8 +9,15 @@ import java.util.Set; @Data public class TokenContent { private Long userId; - private String role; - private Set accessMenu; private String nama; private String username; + private Long roleId; + private String role; + private Long instansiId; + private String instansi; + private Long bidangId; + private String bidang; + private Long jabatanId; + private String jabatan; + private Set accessMenu; } diff --git a/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java b/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java index 652c64c..28c7327 100644 --- a/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java @@ -16,7 +16,8 @@ public interface UsersRepository extends JpaRepository { @Query("SELECT u.id as id, " + "u.nama as nama, " + "u.username as username, " + - "u.jabatan as jabatan, " + + "u.jabatanId as jabatanId, " + + "j.jabatan as jabatan, " + "u.roleId as roleId, " + "r.role as role, " + "u.bidangId as bidangId, " + @@ -30,10 +31,11 @@ public interface UsersRepository extends JpaRepository { "JOIN Roles r ON r.id = u.roleId " + "JOIN Bidang b ON b.id = u.bidangId " + "JOIN Instansi i ON i.id = u.instansiId " + + "JOIN Jabatan j ON j.id = u.jabatanId " + "Where u.isDelete = false " + "AND (:search='' " + "or (UPPER(u.nama) like :search " + - " OR UPPER(u.jabatan) like :search " + + " OR UPPER(j.jabatan) like :search " + " OR UPPER(r.role) like :search " + " OR UPPER(b.bidang) like :search " + " OR UPPER(i.instansi) like :search " + @@ -48,7 +50,8 @@ public interface UsersRepository extends JpaRepository { "u.nama as nama, " + "u.username as username, " + "u.password as password, " + - "u.jabatan as jabatan, " + + "u.jabatanId as jabatanId, " + + "j.jabatan as jabatan, " + "u.roleId as roleId, " + "r.role as role, " + "u.bidangId as bidangId, " + @@ -62,6 +65,7 @@ public interface UsersRepository extends JpaRepository { "JOIN Roles r ON r.id = u.roleId " + "JOIN Bidang b ON b.id = u.bidangId " + "JOIN Instansi i ON i.id = u.instansiId " + + "JOIN Jabatan j ON j.id = u.jabatanId " + "Where u.isDelete = false " + "AND (u.username = :input OR u.email = :input)") Optional getByUsernameOrEmail(String input); @@ -71,7 +75,8 @@ public interface UsersRepository extends JpaRepository { @Query("SELECT u.id as id, " + "u.nama as nama, " + "u.username as username, " + - "u.jabatan as jabatan, " + + "u.jabatanId as jabatanId, " + + "j.jabatan as jabatan, " + "u.roleId as roleId, " + "r.role as role, " + "u.bidangId as bidangId, " + @@ -85,6 +90,7 @@ public interface UsersRepository extends JpaRepository { "JOIN Roles r ON r.id = u.roleId " + "JOIN Bidang b ON b.id = u.bidangId " + "JOIN Instansi i ON i.id = u.instansiId " + + "JOIN Jabatan j ON j.id = u.jabatanId " + "Where u.isDelete = false " + "AND u.id = :id") Optional getUserByIdAndDeletedFase(Long id); diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java b/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java index e52c99b..ba447df 100644 --- a/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java +++ b/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java @@ -65,7 +65,14 @@ public class LoginService implements BaseService { .userId(userRoleView.getId()) .username(userRoleView.getUsername()) .nama(userRoleView.getNama()) + .roleId(userRoleView.getRoleId()) .role(userRoleView.getRole()) + .instansiId(userRoleView.getInstansiId()) + .instansi(userRoleView.getInstansi()) + .bidangId(userRoleView.getBidangId()) + .bidang(userRoleView.getBidang()) + .jabatanId(userRoleView.getJabatanId()) + .jabatan(userRoleView.getJabatan()) .accessMenu(new HashSet<>()) .build(); diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/TokenManagementService.java b/src/main/java/com/iconplus/smartproc/service/authentication/TokenManagementService.java index e32bdd4..1518953 100644 --- a/src/main/java/com/iconplus/smartproc/service/authentication/TokenManagementService.java +++ b/src/main/java/com/iconplus/smartproc/service/authentication/TokenManagementService.java @@ -72,7 +72,12 @@ public class TokenManagementService implements BaseService()) .build(); diff --git a/src/main/java/com/iconplus/smartproc/service/manajemenuser/GetListUserService.java b/src/main/java/com/iconplus/smartproc/service/manajemenuser/GetListUserService.java index 487bfd8..51cd721 100644 --- a/src/main/java/com/iconplus/smartproc/service/manajemenuser/GetListUserService.java +++ b/src/main/java/com/iconplus/smartproc/service/manajemenuser/GetListUserService.java @@ -35,6 +35,7 @@ public class GetListUserService implements BaseService Date: Sun, 28 May 2023 17:36:28 +0700 Subject: [PATCH 26/63] fix decrypt password --- .../smartproc/configuration/JwtTokenUtil.java | 1 - .../controller/MetodePengadaanController.java | 2 - .../helper/context/ApiContextFactory.java | 1 - .../smartproc/model/entity/Menus.java | 1 - .../smartproc/model/entity/Permission.java | 1 - .../model/projection/TokenManagementView.java | 1 - .../repository/BidangRepository.java | 3 +- .../smartproc/repository/RolesRepository.java | 1 - .../smartproc/service/CommonService.java | 44 ++++++++++++---- .../authentication/ForgotPasswordService.java | 40 +++++++++++--- .../service/authentication/LoginService.java | 12 +++-- .../service/authentication/LogoutService.java | 19 ++++--- .../PostCheckAccessTokenService.java | 1 - .../TokenManagementService.java | 29 ++++++++--- .../service/bidang/DeleteBidangService.java | 6 ++- .../service/bidang/GetBidangService.java | 7 ++- .../service/bidang/GetListBidangService.java | 1 - .../bidang/PostCreateBidangService.java | 16 +++++- .../bidang/PutUpdateBidangService.java | 7 ++- .../instansi/DeleteInstansiService.java | 5 +- .../instansi/GetInstansiByIdService.java | 5 +- .../instansi/GetListInstansiService.java | 1 - .../instansi/PostCreateInstansiService.java | 7 ++- .../instansi/PutUpdateInstansiService.java | 5 +- .../service/jabatan/DeleteJabatanService.java | 6 ++- .../service/jabatan/GetJabatanService.java | 5 +- .../jabatan/GetListJabatanService.java | 2 - .../jabatan/PostCreateJabatanService.java | 7 ++- .../jabatan/PutUpdateJabatanService.java | 5 +- .../DeleteJenisAnggaranService.java | 2 +- .../GetJenisAnggaranByIdService.java | 2 +- .../PostCreateJenisAnggaranService.java | 4 +- .../PutUpdateJenisAnggaranService.java | 2 +- .../DeleteJenisKontrakService.java | 2 +- .../GetJenisKontrakByIdService.java | 2 +- .../PostCreateJenisKontrakService.java | 2 +- .../PutUpdateJenisKontrakService.java | 5 +- .../DeleteJenisPengadaanService.java | 7 ++- .../GetJenisPengadaanService.java | 7 ++- .../PostCreateJenisPengadaanService.java | 7 ++- .../PutUpdateJenisPengadaanService.java | 7 ++- .../service/lokasi/DeleteLokasiService.java | 2 +- .../service/lokasi/GetLokasiByIdService.java | 2 +- .../lokasi/PostCreateLokasiService.java | 2 +- .../lokasi/PutUpdateLokasiService.java | 2 +- .../manajemenuser/DeleteUserService.java | 7 ++- .../manajemenuser/GetUserByIdService.java | 7 ++- .../manajemenuser/PostCreateUserService.java | 16 +++++- .../manajemenuser/PutUpdateUserService.java | 7 ++- .../DeleteMetodePengadaanService.java | 2 +- .../GetMetodePengadaanByIdService.java | 2 +- .../PostCreateMetodePengadaanService.java | 2 +- .../PutUpdateMetodePengadaanService.java | 5 +- .../DeleteMetodePenyampaianService.java | 2 +- .../GetMetodePenyampaianByIdService.java | 2 +- .../PostCreateMetodePenyampaianService.java | 2 +- .../PutUpdateMetodePenyampaianService.java | 5 +- .../DeleteStrategiPengadaanService.java | 2 +- .../GetStrategiPengadaanByIdService.java | 2 +- .../PostCreateStrategiPengadaanService.java | 2 +- .../PutUpdateStrategiPengadaanService.java | 5 +- .../sumberdana/DeleteSumberDanaService.java | 8 ++- .../sumberdana/GetListSumberDanaService.java | 1 - .../sumberdana/GetSumberDanaService.java | 8 ++- .../PostCreateSumberDanaService.java | 7 ++- .../sumberdana/PutSumberDanaService.java | 8 ++- .../DeleteSupplyPositioningMatrixService.java | 2 +- ...GetSupplyPositioningMatrixByIdService.java | 2 +- ...tCreateSupplyPositioningMatrixService.java | 2 +- ...tUpdateSupplyPositioningMatrixService.java | 5 +- .../DeleteUnitInisiatorService.java | 8 ++- .../GetUnitInisiatorService.java | 8 ++- .../PostCreateUnitInisiatorService.java | 7 ++- .../PutUpdateUnitInisiatorService.java | 8 ++- .../iconplus/smartproc/util/Constants.java | 36 ++++++++++++- .../smartproc/util/EncryptDecryptUtils.java | 52 +++++++++++++++++++ src/main/resources/application-local.yml | 4 ++ 77 files changed, 405 insertions(+), 129 deletions(-) create mode 100644 src/main/java/com/iconplus/smartproc/util/EncryptDecryptUtils.java diff --git a/src/main/java/com/iconplus/smartproc/configuration/JwtTokenUtil.java b/src/main/java/com/iconplus/smartproc/configuration/JwtTokenUtil.java index 76efbfd..c1b06a3 100644 --- a/src/main/java/com/iconplus/smartproc/configuration/JwtTokenUtil.java +++ b/src/main/java/com/iconplus/smartproc/configuration/JwtTokenUtil.java @@ -2,7 +2,6 @@ package com.iconplus.smartproc.configuration; import com.iconplus.smartproc.model.token.TokenContent; import io.jsonwebtoken.*; -import org.apache.commons.lang3.ObjectUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.core.authority.SimpleGrantedAuthority; diff --git a/src/main/java/com/iconplus/smartproc/controller/MetodePengadaanController.java b/src/main/java/com/iconplus/smartproc/controller/MetodePengadaanController.java index dbff546..8be516a 100644 --- a/src/main/java/com/iconplus/smartproc/controller/MetodePengadaanController.java +++ b/src/main/java/com/iconplus/smartproc/controller/MetodePengadaanController.java @@ -5,9 +5,7 @@ import com.iconplus.smartproc.helper.model.EmptyResponse; import com.iconplus.smartproc.model.request.MetodePengadaanRequest; import com.iconplus.smartproc.model.response.GetListMetodePengadaanResponse; import com.iconplus.smartproc.model.response.MetodePengadaanResponse; -import com.iconplus.smartproc.repository.MetodePengadaanRepository; import com.iconplus.smartproc.service.metodepengadaan.*; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.web.bind.annotation.*; diff --git a/src/main/java/com/iconplus/smartproc/helper/context/ApiContextFactory.java b/src/main/java/com/iconplus/smartproc/helper/context/ApiContextFactory.java index ede7786..1585470 100644 --- a/src/main/java/com/iconplus/smartproc/helper/context/ApiContextFactory.java +++ b/src/main/java/com/iconplus/smartproc/helper/context/ApiContextFactory.java @@ -1,6 +1,5 @@ package com.iconplus.smartproc.helper.context; -import brave.internal.Platform; import com.iconplus.smartproc.helper.service.TokenUtils; import lombok.extern.log4j.Log4j2; import org.springframework.http.HttpHeaders; diff --git a/src/main/java/com/iconplus/smartproc/model/entity/Menus.java b/src/main/java/com/iconplus/smartproc/model/entity/Menus.java index 9001e39..5ae714b 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/Menus.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/Menus.java @@ -5,7 +5,6 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import org.hibernate.annotations.GeneratorType; import org.hibernate.annotations.Type; import javax.persistence.*; diff --git a/src/main/java/com/iconplus/smartproc/model/entity/Permission.java b/src/main/java/com/iconplus/smartproc/model/entity/Permission.java index 01fac6e..60612d8 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/Permission.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/Permission.java @@ -5,7 +5,6 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import org.hibernate.annotations.GenericGenerator; import org.hibernate.annotations.Type; import javax.persistence.*; diff --git a/src/main/java/com/iconplus/smartproc/model/projection/TokenManagementView.java b/src/main/java/com/iconplus/smartproc/model/projection/TokenManagementView.java index 5bf6c24..ace9aff 100644 --- a/src/main/java/com/iconplus/smartproc/model/projection/TokenManagementView.java +++ b/src/main/java/com/iconplus/smartproc/model/projection/TokenManagementView.java @@ -1,6 +1,5 @@ package com.iconplus.smartproc.model.projection; -import java.sql.Clob; public interface TokenManagementView { diff --git a/src/main/java/com/iconplus/smartproc/repository/BidangRepository.java b/src/main/java/com/iconplus/smartproc/repository/BidangRepository.java index 4c6f278..66bb769 100644 --- a/src/main/java/com/iconplus/smartproc/repository/BidangRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/BidangRepository.java @@ -8,7 +8,6 @@ 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 @@ -28,4 +27,6 @@ public interface BidangRepository extends JpaRepository getListBidang(String search, Pageable pageable); Optional findByIdAndIsDeleteFalse(Long id); + + Optional findByBidangAndIsDeleteFalse(String bidang); } diff --git a/src/main/java/com/iconplus/smartproc/repository/RolesRepository.java b/src/main/java/com/iconplus/smartproc/repository/RolesRepository.java index 5cf54e5..1260c04 100644 --- a/src/main/java/com/iconplus/smartproc/repository/RolesRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/RolesRepository.java @@ -9,7 +9,6 @@ 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 diff --git a/src/main/java/com/iconplus/smartproc/service/CommonService.java b/src/main/java/com/iconplus/smartproc/service/CommonService.java index 2746885..1d3d8e9 100644 --- a/src/main/java/com/iconplus/smartproc/service/CommonService.java +++ b/src/main/java/com/iconplus/smartproc/service/CommonService.java @@ -4,7 +4,11 @@ import com.iconplus.smartproc.exception.BusinessException; import com.iconplus.smartproc.model.entity.TokenManagement; import com.iconplus.smartproc.model.request.UsersRequest; import com.iconplus.smartproc.repository.*; +import com.iconplus.smartproc.util.Constants; +import com.iconplus.smartproc.util.EncryptDecryptUtils; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import java.sql.Timestamp; @@ -13,18 +17,18 @@ import java.time.Instant; @Service public class CommonService { - private UsersRepository usersRepository; + @Value("${config.password.privateKey}") + private String privateKey; + private RolesRepository rolesRepository; private BidangRepository bidangRepository; private InstansiRepository instansiRepository; private TokenManagementRepository tokenManagementRepository; - public CommonService(UsersRepository usersRepository, - RolesRepository rolesRepository, - BidangRepository bidangRepository, - InstansiRepository instansiRepository, - TokenManagementRepository tokenManagementRepository) { - this.usersRepository = usersRepository; + public CommonService(RolesRepository rolesRepository, + BidangRepository bidangRepository, + InstansiRepository instansiRepository, + TokenManagementRepository tokenManagementRepository) { this.rolesRepository = rolesRepository; this.bidangRepository = bidangRepository; this.instansiRepository = instansiRepository; @@ -35,17 +39,26 @@ public class CommonService { var roles= rolesRepository.findByIdAndIsDeleteFalse(input.getRoleId()); if (roles.isEmpty()) { - throw new BusinessException("err", "err", "err"); + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Role", input.getId())); } var bidang= bidangRepository.findByIdAndIsDeleteFalse(input.getBidangId()); if (bidang.isEmpty()) { - throw new BusinessException("err", "err", "err"); + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Bidang", input.getId())); } var instansi= instansiRepository.findByIdAndIsDeleteFalse(input.getInstansiId()); if (instansi.isEmpty()) { - throw new BusinessException("err", "err", "err"); + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Instansi", input.getId())); } } @@ -81,4 +94,15 @@ public class CommonService { .build()); } } + + public String getPassword(String password) { + try { + return EncryptDecryptUtils.decrypt(password, privateKey); + } catch (Exception ex) { + throw new BusinessException(Constants.ERR_CODE_10010, + Constants.ERR_TTL_10010, + Constants.ERR_MSG_10010); + } + + } } diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/ForgotPasswordService.java b/src/main/java/com/iconplus/smartproc/service/authentication/ForgotPasswordService.java index 070de1f..a4b6d8a 100644 --- a/src/main/java/com/iconplus/smartproc/service/authentication/ForgotPasswordService.java +++ b/src/main/java/com/iconplus/smartproc/service/authentication/ForgotPasswordService.java @@ -6,7 +6,11 @@ import com.iconplus.smartproc.helper.model.EmptyResponse; import com.iconplus.smartproc.helper.service.BaseService; import com.iconplus.smartproc.model.request.ForgotPasswordRequest; import com.iconplus.smartproc.repository.UsersRepository; +import com.iconplus.smartproc.service.CommonService; +import com.iconplus.smartproc.util.Constants; import org.apache.commons.lang3.StringUtils; +import org.springframework.http.HttpStatus; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; @Service @@ -14,25 +18,47 @@ public class ForgotPasswordService implements BaseService new BusinessException("err", "err", "err")); + var users = usersRepository.findByIdAndIsDeleteFalse(id) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "User", id))); - if (!StringUtils.equalsIgnoreCase(input.getCurrentPassword(), users.getPassword()) || - StringUtils.equalsIgnoreCase(input.getNewPassword(), users.getPassword()) || - !StringUtils.equalsIgnoreCase(input.getConfirmationPassword(), input.getNewPassword())) { - throw new BusinessException("err", "err", "err"); + String password = commonService.getPassword(input.getCurrentPassword()); + BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder(); + boolean isValidCurrentPassword = bCryptPasswordEncoder.matches(password, users.getPassword()); + + if (!isValidCurrentPassword) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10009, + Constants.ERR_TTL_10009, + Constants.ERR_MSG_10009); } - users.setPassword(input.getNewPassword()); + String newPassword = commonService.getPassword(input.getNewPassword()); + String confirmationPassword = commonService.getPassword(input.getNewPassword()); + + + if (!StringUtils.equalsIgnoreCase(newPassword, confirmationPassword)) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10007, + Constants.ERR_TTL_10007, + Constants.ERR_MSG_10007); + } + + users.setPassword(bCryptPasswordEncoder.encode(newPassword)); usersRepository.save(users); return new EmptyResponse(); diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java b/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java index ba447df..3052f47 100644 --- a/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java +++ b/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java @@ -14,6 +14,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -54,7 +55,11 @@ public class LoginService implements BaseService { Constants.ERR_TTL_10003, String.format(Constants.ERR_MSG_10003, input.getEmail()))); - if (!StringUtils.equalsIgnoreCase(input.getPassword(), userRoleView.getPassword())) { + String password = commonService.getPassword(input.getPassword()); + BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder(); + boolean isValidPassword = bCryptPasswordEncoder.matches(password, userRoleView.getPassword()); + + if (!isValidPassword) { throw new BusinessException(HttpStatus.CONFLICT, Constants.ERR_CODE_10004, Constants.ERR_TTL_10004, @@ -84,7 +89,9 @@ public class LoginService implements BaseService { if (StringUtils.isBlank(accessToken) || StringUtils.isBlank(refreshToken)) { log.error("token null"); - throw new BusinessException("err", "err", "err"); + throw new BusinessException(Constants.ERR_CODE_10008, + Constants.ERR_TTL_10008, + Constants.ERR_MSG_10008); } commonService.saveUserToken(TokenManagement.builder() @@ -93,7 +100,6 @@ public class LoginService implements BaseService { .refreshToken(refreshToken) .build(), accessTokenExp); - return LoginResponse.builder() .accessToken(accessToken) .validity(accessTokenExp * 60) diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/LogoutService.java b/src/main/java/com/iconplus/smartproc/service/authentication/LogoutService.java index 823b5a5..d062620 100644 --- a/src/main/java/com/iconplus/smartproc/service/authentication/LogoutService.java +++ b/src/main/java/com/iconplus/smartproc/service/authentication/LogoutService.java @@ -7,18 +7,17 @@ import com.iconplus.smartproc.helper.model.EmptyResponse; import com.iconplus.smartproc.helper.service.BaseService; import com.iconplus.smartproc.model.entity.TokenManagement; import com.iconplus.smartproc.repository.TokenManagementRepository; -import com.iconplus.smartproc.repository.UsersRepository; -import org.springframework.beans.factory.annotation.Autowired; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; -import java.util.List; - @Service public class LogoutService implements BaseService { private ApiContext apiContext; private TokenManagementRepository tokenManagementRepository; - private LogoutService(ApiContext apiContext, + + public LogoutService(ApiContext apiContext, TokenManagementRepository tokenManagementRepository) { this.apiContext = apiContext; this.tokenManagementRepository = tokenManagementRepository; @@ -35,10 +34,10 @@ public class LogoutService implements BaseService { } private TokenManagement getTokenManagement(String accessToken) { - var tokenManagement = tokenManagementRepository.findByAccessTokenAndIsDeleteFalse(accessToken); - if (tokenManagement.isEmpty()) { - throw new BusinessException("err", "err", "err"); - } - return tokenManagement.get(); + return tokenManagementRepository.findByAccessTokenAndIsDeleteFalse(accessToken) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_40038, + Constants.ERR_TITLE_40038, + Constants.ERR_MESSAGE_40038)); } } diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/PostCheckAccessTokenService.java b/src/main/java/com/iconplus/smartproc/service/authentication/PostCheckAccessTokenService.java index 85c9d5e..5ccad2e 100644 --- a/src/main/java/com/iconplus/smartproc/service/authentication/PostCheckAccessTokenService.java +++ b/src/main/java/com/iconplus/smartproc/service/authentication/PostCheckAccessTokenService.java @@ -6,7 +6,6 @@ import com.iconplus.smartproc.model.projection.TokenManagementView; import com.iconplus.smartproc.model.request.PostAccessTokenRequest; import com.iconplus.smartproc.model.response.PostAccessTokenResponse; import com.iconplus.smartproc.repository.TokenManagementRepository; -import com.iconplus.smartproc.util.CommonUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/TokenManagementService.java b/src/main/java/com/iconplus/smartproc/service/authentication/TokenManagementService.java index 1518953..32d5ab3 100644 --- a/src/main/java/com/iconplus/smartproc/service/authentication/TokenManagementService.java +++ b/src/main/java/com/iconplus/smartproc/service/authentication/TokenManagementService.java @@ -11,7 +11,9 @@ import com.iconplus.smartproc.model.token.TokenContent; import com.iconplus.smartproc.repository.TokenManagementRepository; import com.iconplus.smartproc.repository.UsersRepository; import com.iconplus.smartproc.service.CommonService; +import com.iconplus.smartproc.util.Constants; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; @@ -49,21 +51,24 @@ public class TokenManagementService implements BaseService verifyRefreshToken(c, userId)) .orElseThrow(() -> { log.error("failed validate token to existing db"); return new BusinessException( - HttpStatus.UNAUTHORIZED, "err", "err", - "err"); + HttpStatus.UNAUTHORIZED, + Constants.ERR_CODE_80007, + Constants.TITLE_INVALID_NEXT_STEP, + Constants.REFRESH_TOKEN_NOT_VALID); }); var userRoleView = usersRepository.getUserByIdAndDeletedFase(userId).orElseThrow(() -> new BusinessException("err", "err", "err")); @@ -83,6 +88,14 @@ public class TokenManagementService implements BaseService new BusinessException("err", "err", "err")); + var bidang = bidangRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Bidang", input.getId()))); bidang.setIsDelete(true); bidangRepository.save(bidang); diff --git a/src/main/java/com/iconplus/smartproc/service/bidang/GetBidangService.java b/src/main/java/com/iconplus/smartproc/service/bidang/GetBidangService.java index 26ce5c0..5af72d6 100644 --- a/src/main/java/com/iconplus/smartproc/service/bidang/GetBidangService.java +++ b/src/main/java/com/iconplus/smartproc/service/bidang/GetBidangService.java @@ -5,6 +5,7 @@ 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 com.iconplus.smartproc.util.Constants; import org.springframework.stereotype.Service; @Service @@ -19,7 +20,11 @@ public class GetBidangService implements BaseService new BusinessException("err", "err", "err")); + var bidang = bidangRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Bidang", input.getId()))); + return BidangResponse.builder() .id(bidang.getId()) .instansiId(bidang.getInstansiId()) diff --git a/src/main/java/com/iconplus/smartproc/service/bidang/GetListBidangService.java b/src/main/java/com/iconplus/smartproc/service/bidang/GetListBidangService.java index 57135b8..e6bfa26 100644 --- a/src/main/java/com/iconplus/smartproc/service/bidang/GetListBidangService.java +++ b/src/main/java/com/iconplus/smartproc/service/bidang/GetListBidangService.java @@ -4,7 +4,6 @@ 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; diff --git a/src/main/java/com/iconplus/smartproc/service/bidang/PostCreateBidangService.java b/src/main/java/com/iconplus/smartproc/service/bidang/PostCreateBidangService.java index b68b4ee..a4a7409 100644 --- a/src/main/java/com/iconplus/smartproc/service/bidang/PostCreateBidangService.java +++ b/src/main/java/com/iconplus/smartproc/service/bidang/PostCreateBidangService.java @@ -1,10 +1,13 @@ package com.iconplus.smartproc.service.bidang; +import com.iconplus.smartproc.exception.BusinessException; 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 com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; @Service @@ -18,7 +21,16 @@ public class PostCreateBidangService implements BaseService new BusinessException("err", "err", "err")); + var bidang = bidangRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Bidang", input.getId()))); + bidang.setInstansiId(input.getInstansiId()); bidang.setBidang(input.getBidang()); bidang.setKeterangan(input.getKeterangan()); diff --git a/src/main/java/com/iconplus/smartproc/service/instansi/DeleteInstansiService.java b/src/main/java/com/iconplus/smartproc/service/instansi/DeleteInstansiService.java index 4ddb038..d88373a 100644 --- a/src/main/java/com/iconplus/smartproc/service/instansi/DeleteInstansiService.java +++ b/src/main/java/com/iconplus/smartproc/service/instansi/DeleteInstansiService.java @@ -5,6 +5,7 @@ import com.iconplus.smartproc.helper.model.EmptyResponse; import com.iconplus.smartproc.helper.service.BaseService; import com.iconplus.smartproc.model.request.InstansiRequest; import com.iconplus.smartproc.repository.InstansiRepository; +import com.iconplus.smartproc.util.Constants; import org.springframework.stereotype.Service; @Service @@ -20,7 +21,9 @@ public class DeleteInstansiService implements BaseService new BusinessException("err", "err", "err")); + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "instansi", input.getId()))); instansi.setIsDelete(true); instansiRepository.save(instansi); diff --git a/src/main/java/com/iconplus/smartproc/service/instansi/GetInstansiByIdService.java b/src/main/java/com/iconplus/smartproc/service/instansi/GetInstansiByIdService.java index d98dc2a..33631ce 100644 --- a/src/main/java/com/iconplus/smartproc/service/instansi/GetInstansiByIdService.java +++ b/src/main/java/com/iconplus/smartproc/service/instansi/GetInstansiByIdService.java @@ -5,6 +5,7 @@ import com.iconplus.smartproc.helper.service.BaseService; import com.iconplus.smartproc.model.request.InstansiRequest; import com.iconplus.smartproc.model.response.InstansiResponse; import com.iconplus.smartproc.repository.InstansiRepository; +import com.iconplus.smartproc.util.Constants; import org.springframework.stereotype.Service; @Service @@ -20,7 +21,9 @@ public class GetInstansiByIdService implements BaseService new BusinessException("err", "err", "err")); + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "instansi", input.getId()))); return InstansiResponse.builder() .id(instansi.getId()) diff --git a/src/main/java/com/iconplus/smartproc/service/instansi/GetListInstansiService.java b/src/main/java/com/iconplus/smartproc/service/instansi/GetListInstansiService.java index 93f0c8b..0cdf8c3 100644 --- a/src/main/java/com/iconplus/smartproc/service/instansi/GetListInstansiService.java +++ b/src/main/java/com/iconplus/smartproc/service/instansi/GetListInstansiService.java @@ -4,7 +4,6 @@ import com.iconplus.smartproc.helper.model.Pagination; import com.iconplus.smartproc.helper.service.BaseService; import com.iconplus.smartproc.model.projection.InstansiView; import com.iconplus.smartproc.model.request.InstansiRequest; -import com.iconplus.smartproc.model.request.UsersRequest; import com.iconplus.smartproc.model.response.GetListInstansiResponse; import com.iconplus.smartproc.model.response.InstansiResponse; import com.iconplus.smartproc.repository.InstansiRepository; diff --git a/src/main/java/com/iconplus/smartproc/service/instansi/PostCreateInstansiService.java b/src/main/java/com/iconplus/smartproc/service/instansi/PostCreateInstansiService.java index d5c22d2..a91d8d2 100644 --- a/src/main/java/com/iconplus/smartproc/service/instansi/PostCreateInstansiService.java +++ b/src/main/java/com/iconplus/smartproc/service/instansi/PostCreateInstansiService.java @@ -6,6 +6,8 @@ import com.iconplus.smartproc.model.entity.Instansi; import com.iconplus.smartproc.model.request.InstansiRequest; import com.iconplus.smartproc.model.response.InstansiResponse; import com.iconplus.smartproc.repository.InstansiRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; @Service @@ -22,7 +24,10 @@ public class PostCreateInstansiService implements BaseService new BusinessException("err", "err", "err")); + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "instansi", input.getId()))); instansi.setInstansi(input.getInstansi()); instansi.setAlamat(input.getAlamat()); diff --git a/src/main/java/com/iconplus/smartproc/service/jabatan/DeleteJabatanService.java b/src/main/java/com/iconplus/smartproc/service/jabatan/DeleteJabatanService.java index 29d34ef..4e375b5 100644 --- a/src/main/java/com/iconplus/smartproc/service/jabatan/DeleteJabatanService.java +++ b/src/main/java/com/iconplus/smartproc/service/jabatan/DeleteJabatanService.java @@ -5,6 +5,7 @@ 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 com.iconplus.smartproc.util.Constants; import org.springframework.stereotype.Service; @Service @@ -17,7 +18,10 @@ public class DeleteJabatanService implements BaseService new BusinessException("err", "err", "err")); + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Jabatan", input.getId()))); + jabatan.setIsDelete(true); jabatanRepository.save(jabatan); return new EmptyResponse(); diff --git a/src/main/java/com/iconplus/smartproc/service/jabatan/GetJabatanService.java b/src/main/java/com/iconplus/smartproc/service/jabatan/GetJabatanService.java index cb36032..0871fc9 100644 --- a/src/main/java/com/iconplus/smartproc/service/jabatan/GetJabatanService.java +++ b/src/main/java/com/iconplus/smartproc/service/jabatan/GetJabatanService.java @@ -5,6 +5,7 @@ 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 com.iconplus.smartproc.util.Constants; import org.springframework.stereotype.Service; @Service @@ -19,7 +20,9 @@ public class GetJabatanService implements BaseService new BusinessException("err", "err", "err")); + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Jabatan", input.getId()))); return JabatanResponse.builder() .id(jabatan.getId()) diff --git a/src/main/java/com/iconplus/smartproc/service/jabatan/GetListJabatanService.java b/src/main/java/com/iconplus/smartproc/service/jabatan/GetListJabatanService.java index 504d564..1e7c072 100644 --- a/src/main/java/com/iconplus/smartproc/service/jabatan/GetListJabatanService.java +++ b/src/main/java/com/iconplus/smartproc/service/jabatan/GetListJabatanService.java @@ -2,10 +2,8 @@ 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; diff --git a/src/main/java/com/iconplus/smartproc/service/jabatan/PostCreateJabatanService.java b/src/main/java/com/iconplus/smartproc/service/jabatan/PostCreateJabatanService.java index 42c438f..cef7bb7 100644 --- a/src/main/java/com/iconplus/smartproc/service/jabatan/PostCreateJabatanService.java +++ b/src/main/java/com/iconplus/smartproc/service/jabatan/PostCreateJabatanService.java @@ -6,6 +6,8 @@ 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 com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; @Service @@ -21,7 +23,10 @@ public class PostCreateJabatanService implements BaseService new BusinessException("err", "err", "err")); + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Jabatan", input.getId()))); jabatan.setJabatan(input.getJabatan()); jabatan.setKeterangan(input.getKeterangan()); diff --git a/src/main/java/com/iconplus/smartproc/service/jenisanggaran/DeleteJenisAnggaranService.java b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/DeleteJenisAnggaranService.java index 3a13142..39de6a3 100644 --- a/src/main/java/com/iconplus/smartproc/service/jenisanggaran/DeleteJenisAnggaranService.java +++ b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/DeleteJenisAnggaranService.java @@ -28,7 +28,7 @@ public class DeleteJenisAnggaranService implements BaseService new BusinessException(HttpStatus.CONFLICT, Constants.ERR_CODE_10001, Constants.ERR_TTL_10001, - String.format(Constants.ERR_MSG_10001, input.getId()))); + String.format(Constants.ERR_MSG_10001, "Jenis Anggaran", input.getId()))); jenisAnggaran.setIsDelete(true); jenisAnggaranRepository.save(jenisAnggaran); diff --git a/src/main/java/com/iconplus/smartproc/service/jenisanggaran/GetJenisAnggaranByIdService.java b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/GetJenisAnggaranByIdService.java index 25a5125..daf3c7f 100644 --- a/src/main/java/com/iconplus/smartproc/service/jenisanggaran/GetJenisAnggaranByIdService.java +++ b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/GetJenisAnggaranByIdService.java @@ -26,7 +26,7 @@ public class GetJenisAnggaranByIdService implements BaseService { @@ -31,7 +29,7 @@ public class PostCreateJenisAnggaranService implements BaseService new BusinessException(HttpStatus.CONFLICT, Constants.ERR_CODE_10001, Constants.ERR_TTL_10001, - String.format(Constants.ERR_MSG_10001, input.getId()))); + String.format(Constants.ERR_MSG_10001, "Jenis Anggaran", input.getId()))); jenisAnggaran.setJenisAnggaran(input.getJenisAnggaran()); jenisAnggaran.setKeterangan(input.getKeterangan()); diff --git a/src/main/java/com/iconplus/smartproc/service/jeniskontrak/DeleteJenisKontrakService.java b/src/main/java/com/iconplus/smartproc/service/jeniskontrak/DeleteJenisKontrakService.java index ed98e81..da4a80e 100644 --- a/src/main/java/com/iconplus/smartproc/service/jeniskontrak/DeleteJenisKontrakService.java +++ b/src/main/java/com/iconplus/smartproc/service/jeniskontrak/DeleteJenisKontrakService.java @@ -28,7 +28,7 @@ public class DeleteJenisKontrakService implements BaseService new BusinessException(HttpStatus.CONFLICT, Constants.ERR_CODE_10001, Constants.ERR_TTL_10001, - String.format(Constants.ERR_MSG_10001, input.getId()))); + String.format(Constants.ERR_MSG_10001, "Jenis Kontrak", input.getId()))); jenisKontrak.setIsDelete(true); jenisKontrakRepository.save(jenisKontrak); diff --git a/src/main/java/com/iconplus/smartproc/service/jeniskontrak/GetJenisKontrakByIdService.java b/src/main/java/com/iconplus/smartproc/service/jeniskontrak/GetJenisKontrakByIdService.java index e9b3ac6..c514c89 100644 --- a/src/main/java/com/iconplus/smartproc/service/jeniskontrak/GetJenisKontrakByIdService.java +++ b/src/main/java/com/iconplus/smartproc/service/jeniskontrak/GetJenisKontrakByIdService.java @@ -26,7 +26,7 @@ public class GetJenisKontrakByIdService implements BaseService new BusinessException(HttpStatus.CONFLICT, Constants.ERR_CODE_10001, Constants.ERR_TTL_10001, - String.format(Constants.ERR_MSG_10001, input.getId()))); + String.format(Constants.ERR_MSG_10001, "Jenis Kontrak", input.getId()))); jenisKontrak.setJenisKontrak(input.getJenisKontrak()); jenisKontrak.setKeterangan(input.getKeterangan()); diff --git a/src/main/java/com/iconplus/smartproc/service/jenispengadaan/DeleteJenisPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/jenispengadaan/DeleteJenisPengadaanService.java index db71fe9..09b224b 100644 --- a/src/main/java/com/iconplus/smartproc/service/jenispengadaan/DeleteJenisPengadaanService.java +++ b/src/main/java/com/iconplus/smartproc/service/jenispengadaan/DeleteJenisPengadaanService.java @@ -5,6 +5,8 @@ import com.iconplus.smartproc.helper.model.EmptyResponse; import com.iconplus.smartproc.helper.service.BaseService; import com.iconplus.smartproc.model.request.JenisPengadaanRequest; import com.iconplus.smartproc.repository.JenisPengadaanRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; @Service @@ -18,7 +20,10 @@ public class DeleteJenisPengadaanService implements BaseService new BusinessException("err", "err", "err")); + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Jenis Pengadaan", input.getId()))); jenisPengadaan.setIsDelete(true); jenisPengadaanRepository.save(jenisPengadaan); return new EmptyResponse(); diff --git a/src/main/java/com/iconplus/smartproc/service/jenispengadaan/GetJenisPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/jenispengadaan/GetJenisPengadaanService.java index 8e13017..489b1a8 100644 --- a/src/main/java/com/iconplus/smartproc/service/jenispengadaan/GetJenisPengadaanService.java +++ b/src/main/java/com/iconplus/smartproc/service/jenispengadaan/GetJenisPengadaanService.java @@ -5,6 +5,8 @@ import com.iconplus.smartproc.helper.service.BaseService; import com.iconplus.smartproc.model.request.JenisPengadaanRequest; import com.iconplus.smartproc.model.response.JenisPengadaanResponse; import com.iconplus.smartproc.repository.JenisPengadaanRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; @Service @@ -19,7 +21,10 @@ public class GetJenisPengadaanService implements BaseService new BusinessException("err", "err", "err")); + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Jenis Pengadaan", input.getId()))); return JenisPengadaanResponse.builder() .id(jenisPengadaan.getId()) diff --git a/src/main/java/com/iconplus/smartproc/service/jenispengadaan/PostCreateJenisPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/jenispengadaan/PostCreateJenisPengadaanService.java index 20b272e..ac89700 100644 --- a/src/main/java/com/iconplus/smartproc/service/jenispengadaan/PostCreateJenisPengadaanService.java +++ b/src/main/java/com/iconplus/smartproc/service/jenispengadaan/PostCreateJenisPengadaanService.java @@ -6,6 +6,8 @@ import com.iconplus.smartproc.model.entity.JenisPengadaan; import com.iconplus.smartproc.model.request.JenisPengadaanRequest; import com.iconplus.smartproc.model.response.JenisPengadaanResponse; import com.iconplus.smartproc.repository.JenisPengadaanRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; @Service @@ -20,7 +22,10 @@ public class PostCreateJenisPengadaanService implements BaseService new BusinessException("err", "err", "err")); + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Jenis Pengadaan", input.getId()))); jenisPengadaan.setJenisPengadaan(input.getJenisPengadaan()); jenisPengadaan.setKeterangan(input.getKeterangan()); jenisPengadaan.setIsActive(input.getIsActive()); diff --git a/src/main/java/com/iconplus/smartproc/service/lokasi/DeleteLokasiService.java b/src/main/java/com/iconplus/smartproc/service/lokasi/DeleteLokasiService.java index 5d5d64d..00ae541 100644 --- a/src/main/java/com/iconplus/smartproc/service/lokasi/DeleteLokasiService.java +++ b/src/main/java/com/iconplus/smartproc/service/lokasi/DeleteLokasiService.java @@ -28,7 +28,7 @@ public class DeleteLokasiService implements BaseService new BusinessException(HttpStatus.CONFLICT, Constants.ERR_CODE_10001, Constants.ERR_TTL_10001, - String.format(Constants.ERR_MSG_10001, input.getId()))); + String.format(Constants.ERR_MSG_10001, "Lokasi", input.getId()))); lokasi.setIsDelete(true); lokasiRepository.save(lokasi); diff --git a/src/main/java/com/iconplus/smartproc/service/lokasi/GetLokasiByIdService.java b/src/main/java/com/iconplus/smartproc/service/lokasi/GetLokasiByIdService.java index 8a83ef4..f9266bc 100644 --- a/src/main/java/com/iconplus/smartproc/service/lokasi/GetLokasiByIdService.java +++ b/src/main/java/com/iconplus/smartproc/service/lokasi/GetLokasiByIdService.java @@ -26,7 +26,7 @@ public class GetLokasiByIdService implements BaseService new BusinessException(HttpStatus.CONFLICT, Constants.ERR_CODE_10001, Constants.ERR_TTL_10001, - String.format(Constants.ERR_MSG_10001, input.getId()))); + String.format(Constants.ERR_MSG_10001, "Lokasi", input.getId()))); lokasi.setLokasi(input.getLokasi()); lokasi.setKeterangan(input.getKeterangan()); diff --git a/src/main/java/com/iconplus/smartproc/service/manajemenuser/DeleteUserService.java b/src/main/java/com/iconplus/smartproc/service/manajemenuser/DeleteUserService.java index 9c2d58b..9b5b02f 100644 --- a/src/main/java/com/iconplus/smartproc/service/manajemenuser/DeleteUserService.java +++ b/src/main/java/com/iconplus/smartproc/service/manajemenuser/DeleteUserService.java @@ -5,6 +5,8 @@ import com.iconplus.smartproc.helper.model.EmptyResponse; import com.iconplus.smartproc.helper.service.BaseService; import com.iconplus.smartproc.model.request.UsersRequest; import com.iconplus.smartproc.repository.UsersRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; @Service @@ -20,7 +22,10 @@ public class DeleteUserService implements BaseService new BusinessException("err", "err", "err")); + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "User", input.getId()))); users.setIsDelete(true); usersRepository.save(users); diff --git a/src/main/java/com/iconplus/smartproc/service/manajemenuser/GetUserByIdService.java b/src/main/java/com/iconplus/smartproc/service/manajemenuser/GetUserByIdService.java index 0bc229b..a5375a7 100644 --- a/src/main/java/com/iconplus/smartproc/service/manajemenuser/GetUserByIdService.java +++ b/src/main/java/com/iconplus/smartproc/service/manajemenuser/GetUserByIdService.java @@ -5,6 +5,8 @@ import com.iconplus.smartproc.helper.service.BaseService; import com.iconplus.smartproc.model.request.UsersRequest; import com.iconplus.smartproc.model.response.UsersResponse; import com.iconplus.smartproc.repository.UsersRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; @Service @@ -20,7 +22,10 @@ public class GetUserByIdService implements BaseService new BusinessException("err", "err", "err")); + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "User", input.getId()))); return UsersResponse.builder() .id(userRoleView.getId()) diff --git a/src/main/java/com/iconplus/smartproc/service/manajemenuser/PostCreateUserService.java b/src/main/java/com/iconplus/smartproc/service/manajemenuser/PostCreateUserService.java index fcfa668..8bc8239 100644 --- a/src/main/java/com/iconplus/smartproc/service/manajemenuser/PostCreateUserService.java +++ b/src/main/java/com/iconplus/smartproc/service/manajemenuser/PostCreateUserService.java @@ -8,6 +8,10 @@ import com.iconplus.smartproc.model.request.UsersRequest; import com.iconplus.smartproc.model.response.UsersResponse; import com.iconplus.smartproc.repository.UsersRepository; import com.iconplus.smartproc.service.CommonService; +import com.iconplus.smartproc.util.Constants; +import com.iconplus.smartproc.util.EncryptDecryptUtils; +import org.springframework.http.HttpStatus; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; @Service @@ -27,10 +31,20 @@ public class PostCreateUserService implements BaseService new BusinessException("err", "err", "err")); + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "User", input.getId()))); commonService.validateUserRequst(input); diff --git a/src/main/java/com/iconplus/smartproc/service/metodepengadaan/DeleteMetodePengadaanService.java b/src/main/java/com/iconplus/smartproc/service/metodepengadaan/DeleteMetodePengadaanService.java index 41c6f1d..5e18d43 100644 --- a/src/main/java/com/iconplus/smartproc/service/metodepengadaan/DeleteMetodePengadaanService.java +++ b/src/main/java/com/iconplus/smartproc/service/metodepengadaan/DeleteMetodePengadaanService.java @@ -28,7 +28,7 @@ public class DeleteMetodePengadaanService implements BaseService new BusinessException(HttpStatus.CONFLICT, Constants.ERR_CODE_10001, Constants.ERR_TTL_10001, - String.format(Constants.ERR_MSG_10001, input.getId()))); + String.format(Constants.ERR_MSG_10001, "Metode Pengadaan", input.getId()))); metodePengadaan.setIsDelete(true); metodePengadaanRepository.save(metodePengadaan); diff --git a/src/main/java/com/iconplus/smartproc/service/metodepengadaan/GetMetodePengadaanByIdService.java b/src/main/java/com/iconplus/smartproc/service/metodepengadaan/GetMetodePengadaanByIdService.java index 6977d75..4213983 100644 --- a/src/main/java/com/iconplus/smartproc/service/metodepengadaan/GetMetodePengadaanByIdService.java +++ b/src/main/java/com/iconplus/smartproc/service/metodepengadaan/GetMetodePengadaanByIdService.java @@ -26,7 +26,7 @@ public class GetMetodePengadaanByIdService implements BaseService { @@ -30,7 +27,7 @@ public class PutUpdateMetodePengadaanService implements BaseService new BusinessException(HttpStatus.CONFLICT, Constants.ERR_CODE_10001, Constants.ERR_TTL_10001, - String.format(Constants.ERR_MSG_10001, input.getId()))); + String.format(Constants.ERR_MSG_10001, "Metode Pengadaan", input.getId()))); metodePengadaan.setMetodePengadaan(input.getMetodePengadaan()); metodePengadaan.setKeterangan(input.getKeterangan()); diff --git a/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/DeleteMetodePenyampaianService.java b/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/DeleteMetodePenyampaianService.java index b615274..6c7ff06 100644 --- a/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/DeleteMetodePenyampaianService.java +++ b/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/DeleteMetodePenyampaianService.java @@ -28,7 +28,7 @@ public class DeleteMetodePenyampaianService implements BaseService new BusinessException(HttpStatus.CONFLICT, Constants.ERR_CODE_10001, Constants.ERR_TTL_10001, - String.format(Constants.ERR_MSG_10001, input.getId()))); + String.format(Constants.ERR_MSG_10001, "Metode Penyampaian", input.getId()))); metodePenyampaian.setIsDelete(true); metodePenyampaianRepository.save(metodePenyampaian); diff --git a/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/GetMetodePenyampaianByIdService.java b/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/GetMetodePenyampaianByIdService.java index 694afdb..2612420 100644 --- a/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/GetMetodePenyampaianByIdService.java +++ b/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/GetMetodePenyampaianByIdService.java @@ -25,7 +25,7 @@ public class GetMetodePenyampaianByIdService implements BaseService { @@ -30,7 +27,7 @@ public class PutUpdateMetodePenyampaianService implements BaseService new BusinessException(HttpStatus.CONFLICT, Constants.ERR_CODE_10001, Constants.ERR_TTL_10001, - String.format(Constants.ERR_MSG_10001, input.getId()))); + String.format(Constants.ERR_MSG_10001, "Metode Penyampaian", input.getId()))); metodePenyampaian.setMetodePenyampaian(input.getMetodePenyampaian()); metodePenyampaian.setKeterangan(input.getKeterangan()); diff --git a/src/main/java/com/iconplus/smartproc/service/strategipengadaan/DeleteStrategiPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/strategipengadaan/DeleteStrategiPengadaanService.java index c117292..d3ecff0 100644 --- a/src/main/java/com/iconplus/smartproc/service/strategipengadaan/DeleteStrategiPengadaanService.java +++ b/src/main/java/com/iconplus/smartproc/service/strategipengadaan/DeleteStrategiPengadaanService.java @@ -28,7 +28,7 @@ public class DeleteStrategiPengadaanService implements BaseService new BusinessException(HttpStatus.CONFLICT, Constants.ERR_CODE_10001, Constants.ERR_TTL_10001, - String.format(Constants.ERR_MSG_10001, input.getId()))); + String.format(Constants.ERR_MSG_10001, "Strategi Pengadaan", input.getId()))); strategiPengadaan.setIsDelete(true); strategiPengadaanRepository.save(strategiPengadaan); diff --git a/src/main/java/com/iconplus/smartproc/service/strategipengadaan/GetStrategiPengadaanByIdService.java b/src/main/java/com/iconplus/smartproc/service/strategipengadaan/GetStrategiPengadaanByIdService.java index 05fcba0..ad5401b 100644 --- a/src/main/java/com/iconplus/smartproc/service/strategipengadaan/GetStrategiPengadaanByIdService.java +++ b/src/main/java/com/iconplus/smartproc/service/strategipengadaan/GetStrategiPengadaanByIdService.java @@ -25,7 +25,7 @@ public class GetStrategiPengadaanByIdService implements BaseService { @@ -30,7 +27,7 @@ public class PutUpdateStrategiPengadaanService implements BaseService new BusinessException(HttpStatus.CONFLICT, Constants.ERR_CODE_10001, Constants.ERR_TTL_10001, - String.format(Constants.ERR_MSG_10001, input.getId()))); + String.format(Constants.ERR_MSG_10001, "Strategi Pengadaan", input.getId()))); strategiPengadaan.setStrategiPengadaan(input.getStrategiPengadaan()); strategiPengadaan.setKeterangan(input.getKeterangan()); diff --git a/src/main/java/com/iconplus/smartproc/service/sumberdana/DeleteSumberDanaService.java b/src/main/java/com/iconplus/smartproc/service/sumberdana/DeleteSumberDanaService.java index 2707b3c..32f23a2 100644 --- a/src/main/java/com/iconplus/smartproc/service/sumberdana/DeleteSumberDanaService.java +++ b/src/main/java/com/iconplus/smartproc/service/sumberdana/DeleteSumberDanaService.java @@ -5,6 +5,8 @@ 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 com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; @Service @@ -18,7 +20,11 @@ public class DeleteSumberDanaService implements BaseService new BusinessException("err", "err", "err")); + var sumberDana = sumberDanaRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Sumber Dana", input.getId()))); sumberDana.setIsDelete(true); sumberDanaRepository.save(sumberDana); return new EmptyResponse(); diff --git a/src/main/java/com/iconplus/smartproc/service/sumberdana/GetListSumberDanaService.java b/src/main/java/com/iconplus/smartproc/service/sumberdana/GetListSumberDanaService.java index c9afe2c..d920456 100644 --- a/src/main/java/com/iconplus/smartproc/service/sumberdana/GetListSumberDanaService.java +++ b/src/main/java/com/iconplus/smartproc/service/sumberdana/GetListSumberDanaService.java @@ -3,7 +3,6 @@ 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.RolesRequest; import com.iconplus.smartproc.model.request.SumberDanaRequest; import com.iconplus.smartproc.model.response.GetListSumberDanaResponse; import com.iconplus.smartproc.model.response.SumberDanaResponse; diff --git a/src/main/java/com/iconplus/smartproc/service/sumberdana/GetSumberDanaService.java b/src/main/java/com/iconplus/smartproc/service/sumberdana/GetSumberDanaService.java index 6c30c19..b7d6fde 100644 --- a/src/main/java/com/iconplus/smartproc/service/sumberdana/GetSumberDanaService.java +++ b/src/main/java/com/iconplus/smartproc/service/sumberdana/GetSumberDanaService.java @@ -5,6 +5,8 @@ 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 com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; @Service @@ -19,7 +21,11 @@ public class GetSumberDanaService implements BaseService new BusinessException("err", "err", "err")); + var sumberDana = sumberDanaRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Sumber Dana", input.getId()))); return SumberDanaResponse.builder() .id(sumberDana.getId()) .sumberDana(sumberDana.getSumberDana()) diff --git a/src/main/java/com/iconplus/smartproc/service/sumberdana/PostCreateSumberDanaService.java b/src/main/java/com/iconplus/smartproc/service/sumberdana/PostCreateSumberDanaService.java index d898f90..b6dccb0 100644 --- a/src/main/java/com/iconplus/smartproc/service/sumberdana/PostCreateSumberDanaService.java +++ b/src/main/java/com/iconplus/smartproc/service/sumberdana/PostCreateSumberDanaService.java @@ -6,6 +6,8 @@ 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 com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; @Service @@ -22,7 +24,10 @@ public class PostCreateSumberDanaService implements BaseService new BusinessException("err", "err", "err")); + var sumberDana = sumberDanaRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Sumber Dana", input.getId()))); sumberDana.setSumberDana(input.getSumberDana()); sumberDana.setKeterangan(input.getKeterangan()); sumberDana.setIsActive(input.getIsActive()); diff --git a/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/DeleteSupplyPositioningMatrixService.java b/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/DeleteSupplyPositioningMatrixService.java index b6f8df8..d6fc391 100644 --- a/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/DeleteSupplyPositioningMatrixService.java +++ b/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/DeleteSupplyPositioningMatrixService.java @@ -28,7 +28,7 @@ public class DeleteSupplyPositioningMatrixService implements BaseService new BusinessException(HttpStatus.CONFLICT, Constants.ERR_CODE_10001, Constants.ERR_TTL_10001, - String.format(Constants.ERR_MSG_10001, input.getId()))); + String.format(Constants.ERR_MSG_10001, "Supply Posotioning Matrix", input.getId()))); supplyPositioningMatrix.setIsDelete(true); supplyPositioningMatrixRepository.save(supplyPositioningMatrix); diff --git a/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/GetSupplyPositioningMatrixByIdService.java b/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/GetSupplyPositioningMatrixByIdService.java index 65a8982..722c23a 100644 --- a/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/GetSupplyPositioningMatrixByIdService.java +++ b/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/GetSupplyPositioningMatrixByIdService.java @@ -25,7 +25,7 @@ public class GetSupplyPositioningMatrixByIdService implements BaseService { @@ -30,7 +27,7 @@ public class PutUpdateSupplyPositioningMatrixService implements BaseService new BusinessException(HttpStatus.CONFLICT, Constants.ERR_CODE_10001, Constants.ERR_TTL_10001, - String.format(Constants.ERR_MSG_10001, input.getId()))); + String.format(Constants.ERR_MSG_10001, "Supply Positioning Matrix", input.getId()))); supplyPositioningMatrix.setSupplyPositioningMatrix(input.getSupplyPositioningMatrix()); supplyPositioningMatrix.setKeterangan(input.getKeterangan()); diff --git a/src/main/java/com/iconplus/smartproc/service/unitinisiator/DeleteUnitInisiatorService.java b/src/main/java/com/iconplus/smartproc/service/unitinisiator/DeleteUnitInisiatorService.java index 2e7ca43..a82fe85 100644 --- a/src/main/java/com/iconplus/smartproc/service/unitinisiator/DeleteUnitInisiatorService.java +++ b/src/main/java/com/iconplus/smartproc/service/unitinisiator/DeleteUnitInisiatorService.java @@ -5,6 +5,8 @@ import com.iconplus.smartproc.helper.model.EmptyResponse; import com.iconplus.smartproc.helper.service.BaseService; import com.iconplus.smartproc.model.request.UnitInisiatorRequest; import com.iconplus.smartproc.repository.UnitInisiatorRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; @Service @@ -19,7 +21,11 @@ public class DeleteUnitInisiatorService implements BaseService new BusinessException("err", "err", "err")); + var unitInisiator = unitInisiatorRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Unit Inisiator", input.getId()))); unitInisiator.setIsDelete(true); unitInisiatorRepository.save(unitInisiator); return new EmptyResponse(); diff --git a/src/main/java/com/iconplus/smartproc/service/unitinisiator/GetUnitInisiatorService.java b/src/main/java/com/iconplus/smartproc/service/unitinisiator/GetUnitInisiatorService.java index 6259640..33083a5 100644 --- a/src/main/java/com/iconplus/smartproc/service/unitinisiator/GetUnitInisiatorService.java +++ b/src/main/java/com/iconplus/smartproc/service/unitinisiator/GetUnitInisiatorService.java @@ -5,6 +5,8 @@ import com.iconplus.smartproc.helper.service.BaseService; import com.iconplus.smartproc.model.request.UnitInisiatorRequest; import com.iconplus.smartproc.model.response.UnitInisiatorResponse; import com.iconplus.smartproc.repository.UnitInisiatorRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; @Service @@ -19,7 +21,11 @@ public class GetUnitInisiatorService implements BaseService new BusinessException("err", "err", "err")); + var unitInisiator = unitInisiatorRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Unit Inisiator", input.getId()))); return UnitInisiatorResponse.builder() .id(unitInisiator.getId()) .unitInisiator(unitInisiator.getUnitInisiator()) diff --git a/src/main/java/com/iconplus/smartproc/service/unitinisiator/PostCreateUnitInisiatorService.java b/src/main/java/com/iconplus/smartproc/service/unitinisiator/PostCreateUnitInisiatorService.java index 3ef252e..9acc3b0 100644 --- a/src/main/java/com/iconplus/smartproc/service/unitinisiator/PostCreateUnitInisiatorService.java +++ b/src/main/java/com/iconplus/smartproc/service/unitinisiator/PostCreateUnitInisiatorService.java @@ -6,6 +6,8 @@ import com.iconplus.smartproc.model.entity.UnitInisiator; import com.iconplus.smartproc.model.request.UnitInisiatorRequest; import com.iconplus.smartproc.model.response.UnitInisiatorResponse; import com.iconplus.smartproc.repository.UnitInisiatorRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; @Service @@ -21,7 +23,10 @@ public class PostCreateUnitInisiatorService implements BaseService new BusinessException("err", "err", "err")); + var unitInisiator = unitInisiatorRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Unit Inisiator", input.getId()))); unitInisiator.setUnitInisiator(input.getUnitInisiator()); unitInisiator.setKeterangan(input.getKeterangan()); unitInisiator.setIsActive(input.getIsActive()); diff --git a/src/main/java/com/iconplus/smartproc/util/Constants.java b/src/main/java/com/iconplus/smartproc/util/Constants.java index e013a2f..8852b23 100644 --- a/src/main/java/com/iconplus/smartproc/util/Constants.java +++ b/src/main/java/com/iconplus/smartproc/util/Constants.java @@ -6,11 +6,11 @@ public class Constants { public static final String ERR_CODE_10001 = "10001"; public static final String ERR_TTL_10001 = "Data tidak ditemukan"; - public static final String ERR_MSG_10001 = "Jenis Anggaran dengan id : %s tidak ditemukan"; + public static final String ERR_MSG_10001 = "%s dengan id : %s tidak ditemukan"; public static final String ERR_CODE_10002 = "10002"; public static final String ERR_TTL_10002 = "Data tersedia"; - public static final String ERR_MSG_10002 = "Jenis Anggaran : %s sudah tersedia"; + public static final String ERR_MSG_10002 = "%s : %s sudah tersedia"; public static final String ERR_CODE_10003 = "10003"; public static final String ERR_TTL_10003 = "Data tidak tersedia"; @@ -28,6 +28,22 @@ public class Constants { public static final String ERR_TTL_10006 = "Data tersedia"; public static final String ERR_MSG_10006 = "Role : %s sudah tersedia"; + public static final String ERR_CODE_10007 = "10007"; + public static final String ERR_TTL_10007 = "Proses Gagal"; + public static final String ERR_MSG_10007 = "Silahkan periksa kembali password baru yg anda input"; + + public static final String ERR_CODE_10008 = "10008"; + public static final String ERR_TTL_10008 = "Proses Gagal"; + public static final String ERR_MSG_10008 = "Gagal generate token"; + + public static final String ERR_CODE_10009 = "10009"; + public static final String ERR_TTL_10009 = "Proses Gagal"; + 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_CODE_40041 = "40041"; public static final String ERR_TTL_40041 = "Terjadi Gangguan"; public static final String ERR_MSG_40041 = "Masalah Koneksi System"; @@ -35,6 +51,22 @@ public class Constants { public static final String ERR_CODE_40051 = "40051"; public static final String ERR_CODE_80007 = "80007"; public static final String TITLE_INVALID_NEXT_STEP = "Proses tidak dapat dilanjutkan"; + public static final String REFRESH_TOKEN_EXPIRED = "Refresh token expired"; + public static final String REFRESH_TOKEN_NOT_VALID = "Refresh token tidak valid"; + public static final String ERR_CODE_40042 = "40042"; + public static final String ERR_TTL_40042 = "Terjadi gangguan"; + public static final String ERR_MSG_40042 = "Proses generate token gagal dengan response: null"; + + public static final String ERR_CODE_40038 = "40038"; + public static final String ERR_TITLE_40038 = "Data Sedang Tidak Tersedia"; + public static final String ERR_MESSAGE_40038 = "Data User Tidak Ditemukan."; + + public static final String ERR_CODE_80000 = "80000"; + public static final String N0_SUCH_ALGORITHM_EXCEPTION = "NoSuchAlgorithmException : "; + public static final String N0_SUCH_PADDING_EXCEPTION = "NoSuchPaddingException : "; + public static final String INVALID_KEY_EXCEPTION = "InvalidKeyException : "; + public static final String ILEGAL_BLOCK_SIZE_EXCEPTION = "IllegalBlockSizeException : "; + public static final String BAD_PADDING_EXCEPTION = "BadPaddingException : "; } diff --git a/src/main/java/com/iconplus/smartproc/util/EncryptDecryptUtils.java b/src/main/java/com/iconplus/smartproc/util/EncryptDecryptUtils.java new file mode 100644 index 0000000..182e137 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/util/EncryptDecryptUtils.java @@ -0,0 +1,52 @@ +package com.iconplus.smartproc.util; + +import com.iconplus.smartproc.exception.TechnicalException; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import javax.crypto.BadPaddingException; +import javax.crypto.Cipher; +import javax.crypto.IllegalBlockSizeException; +import javax.crypto.NoSuchPaddingException; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.security.PrivateKey; +import java.util.Base64; + +public class EncryptDecryptUtils { + + private static final Logger log = LogManager.getLogger(EncryptDecryptUtils.class); + + private EncryptDecryptUtils() { + } + + public static String decrypt(String data, String base64PrivateKey) { + return decryptChipper(Base64.getDecoder().decode(data.getBytes()), RSAUtil.getPrivateKey(base64PrivateKey)); + } + + private static String decryptChipper(byte[] data, PrivateKey privateKey) { + var result = ""; + try { + var cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding"); + cipher.init(2, privateKey); + result = new String(cipher.doFinal(data)); + } catch (NoSuchAlgorithmException var3) { + log.error("NoSuchAlgorithmException : {}", var3.getMessage()); + throw new TechnicalException(Constants.ERR_CODE_80000, Constants.N0_SUCH_ALGORITHM_EXCEPTION + var3.getMessage()); + } catch (NoSuchPaddingException var4) { + log.error("NoSuchPaddingException : {}", var4.getMessage()); + throw new TechnicalException(Constants.ERR_CODE_80000, Constants.N0_SUCH_PADDING_EXCEPTION + var4.getMessage()); + } catch (InvalidKeyException var5) { + log.error("InvalidKeyException : {}", var5.getMessage()); + throw new TechnicalException(Constants.ERR_CODE_80000, Constants.INVALID_KEY_EXCEPTION + var5.getMessage()); + } catch (IllegalBlockSizeException var6) { + log.error("IllegalBlockSizeException : {}", var6.getMessage()); + throw new TechnicalException(Constants.ERR_CODE_80000, Constants.ILEGAL_BLOCK_SIZE_EXCEPTION + var6.getMessage()); + } catch (BadPaddingException var7) { + log.error("BadPaddingException : {}", var7.getMessage()); + throw new TechnicalException(Constants.ERR_CODE_80000, Constants.BAD_PADDING_EXCEPTION + var7.getMessage()); + } + return result; + } + +} diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index 69e2bf7..d5893e8 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -6,6 +6,10 @@ jwt: access-token: 480 refresh-token: 720 +config: + password: + privateKey: MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCRyUePQWkg+IH5dAvQ/+YlVR1htFdhL2+NJtWWXNW15mBUOEr+yvJsOYAzY9KfxmVqRRr1uQEAaaKjNpxwNEnHkMn8LzSEhRxCd4Mqpa5jquCdPfMqGO3cwdkrQjZVfm3tCBYd2HkOeL8PTwlbBORucf6qHPxZvjGVXQeiRAHTlgHTR1647T1+vlDDcaOBJIrwcD566hqOCKMxtE+5F4DieSYEuHJMyvJf/WH2+LxbP2t4Z6IV0tksQKtwyZstEXd3yIL8chKoFh2p3KO8aFfMa7X0aiDVC3z+o2Hh8+YHQt7cSl+NGRxasuqLbY3twZEC9qAIkkDOpBUp7lLZ9NVHAgMBAAECggEACd0GXGjehf6KPKhfTEqj9Y6mqD+dUdP1xiUEemHZi68EgW41lLuCX1Qcml18mJbBscjvJATaTn7XJBfDycuf2kKvh8Jh2T1wRgbz9uSywceD3t+cHhMFtNPgr46RQoOFSG4toONOfW4p7w034tKX6ekIg9XmNOQrUqGyrIXRYdFADB68HaLxlgS0zKrkhp14+wH/krihfS3H7Z+wBVozWSgyHCVbov68l764w3UWZYEEe2mFl31HqhD5KEo8QXODWuemUTROaXKF/iOsPEMC8Qz4Jdqme+iAlV4b2LNaSTEP/NG/kFIE443RlyFo9YfVNw7/osgAksXAPdOZd8qt8QKBgQDYHLX2HVaGj9zvAlqSKjf6VuuxgdRUYW4rqQjm97YmAJNp4udjKLUgD7yDuImYh/E/IWjDxf1Hf3fTjcc98iPMsvP3lkXxdOxMLLlnMv0Ewxof8gATQndU/w+/XuuAZ9cy3vtheo59i4rFpik8XFAH6kPk/gWI9DAE/IbXuOSNUwKBgQCssaxMwfrB9nwQ9eDXv2z+Ce4sZbtZEJYD3a29OGshLw8AH//z/BxPzZRTFy63IfmmIyYSGaC7ZdkrakLhlBXrhi/P0wafp7xEsONb8uNYWDDWoDewH75GX/SPhx7bX0GSeiX6X5XAUg97j0xlfYllIieMLCw4rLU+97ge5xalvQKBgQDXJjYtEGYczsqYFBLRI0DZdIFvFZ6qZtkElGMtdf0b9kTMDL5pZJR1l9UImcY6WVRekkc3aDvQW2GS9rodvJvRZXMm0K9PRCUfbQMjb4qfnBC9LvLOOcSNlOQ7lCcGjdqbZYyELjv/VtXQEa1Jz2lJh/sR1abzAo9v12vzBbpbywKBgQCkdEZKimeLknivhhbqHgdjHH3NlcuFk3/oipBLI5ERdsjoK5EI/crQTEu1nNwF1brx9YLptbIVA3Z+G6E5RFZjhdO+K42hOJDXMUQyaekKVmGb4dNmS7RdPD+e9uPxsJK3NM850RDApuTLm7j65UOUJaRXnjE2f3HSVwDlnNc6WQKBgQCccgyIJx5HnxdkYYFJBnuwo1aDNo2TOqiy9wPXHzxuR8TsvqmbbYoxT0kJkqOjkbQII08nLyHJ3KL7XK3dCEGmdRArHjo0PCLMzKqBZdhtfxN413HxmwXIF5zM6mhS4g8XrDyNW7EhLp/putnpmE6XI9VnEFx/LxAd8nJ9tUd39A== + spring: datasource: driver-class-name: org.postgresql.Driver From 718ad3391e92a2e7a2a080045ca8f3c3bf766338 Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Sun, 28 May 2023 17:40:09 +0700 Subject: [PATCH 27/63] fix decrypt password --- .../java/com/iconplus/smartproc/service/CommonService.java | 2 +- src/main/resources/application-local.yml | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/iconplus/smartproc/service/CommonService.java b/src/main/java/com/iconplus/smartproc/service/CommonService.java index 1d3d8e9..9bc81ff 100644 --- a/src/main/java/com/iconplus/smartproc/service/CommonService.java +++ b/src/main/java/com/iconplus/smartproc/service/CommonService.java @@ -17,7 +17,7 @@ import java.time.Instant; @Service public class CommonService { - @Value("${config.password.privateKey}") + @Value("${config.password.private-key}") private String privateKey; private RolesRepository rolesRepository; diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index d5893e8..a7db672 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -8,7 +8,8 @@ jwt: config: password: - privateKey: MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCRyUePQWkg+IH5dAvQ/+YlVR1htFdhL2+NJtWWXNW15mBUOEr+yvJsOYAzY9KfxmVqRRr1uQEAaaKjNpxwNEnHkMn8LzSEhRxCd4Mqpa5jquCdPfMqGO3cwdkrQjZVfm3tCBYd2HkOeL8PTwlbBORucf6qHPxZvjGVXQeiRAHTlgHTR1647T1+vlDDcaOBJIrwcD566hqOCKMxtE+5F4DieSYEuHJMyvJf/WH2+LxbP2t4Z6IV0tksQKtwyZstEXd3yIL8chKoFh2p3KO8aFfMa7X0aiDVC3z+o2Hh8+YHQt7cSl+NGRxasuqLbY3twZEC9qAIkkDOpBUp7lLZ9NVHAgMBAAECggEACd0GXGjehf6KPKhfTEqj9Y6mqD+dUdP1xiUEemHZi68EgW41lLuCX1Qcml18mJbBscjvJATaTn7XJBfDycuf2kKvh8Jh2T1wRgbz9uSywceD3t+cHhMFtNPgr46RQoOFSG4toONOfW4p7w034tKX6ekIg9XmNOQrUqGyrIXRYdFADB68HaLxlgS0zKrkhp14+wH/krihfS3H7Z+wBVozWSgyHCVbov68l764w3UWZYEEe2mFl31HqhD5KEo8QXODWuemUTROaXKF/iOsPEMC8Qz4Jdqme+iAlV4b2LNaSTEP/NG/kFIE443RlyFo9YfVNw7/osgAksXAPdOZd8qt8QKBgQDYHLX2HVaGj9zvAlqSKjf6VuuxgdRUYW4rqQjm97YmAJNp4udjKLUgD7yDuImYh/E/IWjDxf1Hf3fTjcc98iPMsvP3lkXxdOxMLLlnMv0Ewxof8gATQndU/w+/XuuAZ9cy3vtheo59i4rFpik8XFAH6kPk/gWI9DAE/IbXuOSNUwKBgQCssaxMwfrB9nwQ9eDXv2z+Ce4sZbtZEJYD3a29OGshLw8AH//z/BxPzZRTFy63IfmmIyYSGaC7ZdkrakLhlBXrhi/P0wafp7xEsONb8uNYWDDWoDewH75GX/SPhx7bX0GSeiX6X5XAUg97j0xlfYllIieMLCw4rLU+97ge5xalvQKBgQDXJjYtEGYczsqYFBLRI0DZdIFvFZ6qZtkElGMtdf0b9kTMDL5pZJR1l9UImcY6WVRekkc3aDvQW2GS9rodvJvRZXMm0K9PRCUfbQMjb4qfnBC9LvLOOcSNlOQ7lCcGjdqbZYyELjv/VtXQEa1Jz2lJh/sR1abzAo9v12vzBbpbywKBgQCkdEZKimeLknivhhbqHgdjHH3NlcuFk3/oipBLI5ERdsjoK5EI/crQTEu1nNwF1brx9YLptbIVA3Z+G6E5RFZjhdO+K42hOJDXMUQyaekKVmGb4dNmS7RdPD+e9uPxsJK3NM850RDApuTLm7j65UOUJaRXnjE2f3HSVwDlnNc6WQKBgQCccgyIJx5HnxdkYYFJBnuwo1aDNo2TOqiy9wPXHzxuR8TsvqmbbYoxT0kJkqOjkbQII08nLyHJ3KL7XK3dCEGmdRArHjo0PCLMzKqBZdhtfxN413HxmwXIF5zM6mhS4g8XrDyNW7EhLp/putnpmE6XI9VnEFx/LxAd8nJ9tUd39A== + private-key: MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCRyUePQWkg+IH5dAvQ/+YlVR1htFdhL2+NJtWWXNW15mBUOEr+yvJsOYAzY9KfxmVqRRr1uQEAaaKjNpxwNEnHkMn8LzSEhRxCd4Mqpa5jquCdPfMqGO3cwdkrQjZVfm3tCBYd2HkOeL8PTwlbBORucf6qHPxZvjGVXQeiRAHTlgHTR1647T1+vlDDcaOBJIrwcD566hqOCKMxtE+5F4DieSYEuHJMyvJf/WH2+LxbP2t4Z6IV0tksQKtwyZstEXd3yIL8chKoFh2p3KO8aFfMa7X0aiDVC3z+o2Hh8+YHQt7cSl+NGRxasuqLbY3twZEC9qAIkkDOpBUp7lLZ9NVHAgMBAAECggEACd0GXGjehf6KPKhfTEqj9Y6mqD+dUdP1xiUEemHZi68EgW41lLuCX1Qcml18mJbBscjvJATaTn7XJBfDycuf2kKvh8Jh2T1wRgbz9uSywceD3t+cHhMFtNPgr46RQoOFSG4toONOfW4p7w034tKX6ekIg9XmNOQrUqGyrIXRYdFADB68HaLxlgS0zKrkhp14+wH/krihfS3H7Z+wBVozWSgyHCVbov68l764w3UWZYEEe2mFl31HqhD5KEo8QXODWuemUTROaXKF/iOsPEMC8Qz4Jdqme+iAlV4b2LNaSTEP/NG/kFIE443RlyFo9YfVNw7/osgAksXAPdOZd8qt8QKBgQDYHLX2HVaGj9zvAlqSKjf6VuuxgdRUYW4rqQjm97YmAJNp4udjKLUgD7yDuImYh/E/IWjDxf1Hf3fTjcc98iPMsvP3lkXxdOxMLLlnMv0Ewxof8gATQndU/w+/XuuAZ9cy3vtheo59i4rFpik8XFAH6kPk/gWI9DAE/IbXuOSNUwKBgQCssaxMwfrB9nwQ9eDXv2z+Ce4sZbtZEJYD3a29OGshLw8AH//z/BxPzZRTFy63IfmmIyYSGaC7ZdkrakLhlBXrhi/P0wafp7xEsONb8uNYWDDWoDewH75GX/SPhx7bX0GSeiX6X5XAUg97j0xlfYllIieMLCw4rLU+97ge5xalvQKBgQDXJjYtEGYczsqYFBLRI0DZdIFvFZ6qZtkElGMtdf0b9kTMDL5pZJR1l9UImcY6WVRekkc3aDvQW2GS9rodvJvRZXMm0K9PRCUfbQMjb4qfnBC9LvLOOcSNlOQ7lCcGjdqbZYyELjv/VtXQEa1Jz2lJh/sR1abzAo9v12vzBbpbywKBgQCkdEZKimeLknivhhbqHgdjHH3NlcuFk3/oipBLI5ERdsjoK5EI/crQTEu1nNwF1brx9YLptbIVA3Z+G6E5RFZjhdO+K42hOJDXMUQyaekKVmGb4dNmS7RdPD+e9uPxsJK3NM850RDApuTLm7j65UOUJaRXnjE2f3HSVwDlnNc6WQKBgQCccgyIJx5HnxdkYYFJBnuwo1aDNo2TOqiy9wPXHzxuR8TsvqmbbYoxT0kJkqOjkbQII08nLyHJ3KL7XK3dCEGmdRArHjo0PCLMzKqBZdhtfxN413HxmwXIF5zM6mhS4g8XrDyNW7EhLp/putnpmE6XI9VnEFx/LxAd8nJ9tUd39A== + public-key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkclHj0FpIPiB+XQL0P/mJVUdYbRXYS9vjSbVllzVteZgVDhK/srybDmAM2PSn8ZlakUa9bkBAGmiozaccDRJx5DJ/C80hIUcQneDKqWuY6rgnT3zKhjt3MHZK0I2VX5t7QgWHdh5Dni/D08JWwTkbnH+qhz8Wb4xlV0HokQB05YB00deuO09fr5Qw3GjgSSK8HA+euoajgijMbRPuReA4nkmBLhyTMryX/1h9vi8Wz9reGeiFdLZLECrcMmbLRF3d8iC/HISqBYdqdyjvGhXzGu19Gog1Qt8/qNh4fPmB0Le3EpfjRkcWrLqi22N7cGRAvagCJJAzqQVKe5S2fTVRwIDAQAB spring: datasource: From a32d5a499f96f2769876e0b820683acf01c895e8 Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Sun, 28 May 2023 17:48:37 +0700 Subject: [PATCH 28/63] change password --- .../controller/AuthenticationController.java | 16 ++++++++-------- ...rdRequest.java => ChangePasswordRequest.java} | 2 +- ...rdService.java => ChangePasswordService.java} | 10 +++++----- 3 files changed, 14 insertions(+), 14 deletions(-) rename src/main/java/com/iconplus/smartproc/model/request/{ForgotPasswordRequest.java => ChangePasswordRequest.java} (86%) rename src/main/java/com/iconplus/smartproc/service/authentication/{ForgotPasswordService.java => ChangePasswordService.java} (89%) diff --git a/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java b/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java index b642974..d7a4920 100644 --- a/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java +++ b/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java @@ -2,12 +2,12 @@ package com.iconplus.smartproc.controller; import com.iconplus.smartproc.helper.model.EmptyRequest; import com.iconplus.smartproc.helper.model.EmptyResponse; -import com.iconplus.smartproc.model.request.ForgotPasswordRequest; +import com.iconplus.smartproc.model.request.ChangePasswordRequest; 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.RefreshTokenResponse; -import com.iconplus.smartproc.service.authentication.ForgotPasswordService; +import com.iconplus.smartproc.service.authentication.ChangePasswordService; import com.iconplus.smartproc.service.authentication.LoginService; import com.iconplus.smartproc.service.authentication.LogoutService; import com.iconplus.smartproc.service.authentication.TokenManagementService; @@ -21,16 +21,16 @@ public class AuthenticationController { private LoginService loginService; private TokenManagementService tokenManagementService; private LogoutService logoutService; - private ForgotPasswordService forgotPasswordService; + private ChangePasswordService changePasswordService; public AuthenticationController(LoginService loginService, TokenManagementService tokenManagementService, LogoutService logoutService, - ForgotPasswordService forgotPasswordService) { + ChangePasswordService changePasswordService) { this.loginService = loginService; this.tokenManagementService = tokenManagementService; this.logoutService = logoutService; - this.forgotPasswordService = forgotPasswordService; + this.changePasswordService = changePasswordService; } @PostMapping("/login") @@ -49,9 +49,9 @@ public class AuthenticationController { } - @PostMapping("/forgot-password") - public EmptyResponse forgotPassword(@RequestBody ForgotPasswordRequest forgotPasswordRequest) { - return forgotPasswordService.execute(forgotPasswordRequest); + @PostMapping("/change-password") + public EmptyResponse changePassword(@RequestBody ChangePasswordRequest changePasswordRequest) { + return changePasswordService.execute(changePasswordRequest); } } diff --git a/src/main/java/com/iconplus/smartproc/model/request/ForgotPasswordRequest.java b/src/main/java/com/iconplus/smartproc/model/request/ChangePasswordRequest.java similarity index 86% rename from src/main/java/com/iconplus/smartproc/model/request/ForgotPasswordRequest.java rename to src/main/java/com/iconplus/smartproc/model/request/ChangePasswordRequest.java index 7c29ff4..041ffb5 100644 --- a/src/main/java/com/iconplus/smartproc/model/request/ForgotPasswordRequest.java +++ b/src/main/java/com/iconplus/smartproc/model/request/ChangePasswordRequest.java @@ -10,7 +10,7 @@ import lombok.NoArgsConstructor; @Builder @AllArgsConstructor @NoArgsConstructor -public class ForgotPasswordRequest extends BaseRequest { +public class ChangePasswordRequest extends BaseRequest { private String currentPassword; private String newPassword; private String confirmationPassword; diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/ForgotPasswordService.java b/src/main/java/com/iconplus/smartproc/service/authentication/ChangePasswordService.java similarity index 89% rename from src/main/java/com/iconplus/smartproc/service/authentication/ForgotPasswordService.java rename to src/main/java/com/iconplus/smartproc/service/authentication/ChangePasswordService.java index a4b6d8a..baf76a7 100644 --- a/src/main/java/com/iconplus/smartproc/service/authentication/ForgotPasswordService.java +++ b/src/main/java/com/iconplus/smartproc/service/authentication/ChangePasswordService.java @@ -4,7 +4,7 @@ import com.iconplus.smartproc.exception.BusinessException; import com.iconplus.smartproc.helper.context.ApiContext; import com.iconplus.smartproc.helper.model.EmptyResponse; import com.iconplus.smartproc.helper.service.BaseService; -import com.iconplus.smartproc.model.request.ForgotPasswordRequest; +import com.iconplus.smartproc.model.request.ChangePasswordRequest; import com.iconplus.smartproc.repository.UsersRepository; import com.iconplus.smartproc.service.CommonService; import com.iconplus.smartproc.util.Constants; @@ -14,12 +14,12 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; @Service -public class ForgotPasswordService implements BaseService { +public class ChangePasswordService implements BaseService { private ApiContext apiContext; private UsersRepository usersRepository; private CommonService commonService; - public ForgotPasswordService(UsersRepository usersRepository, + public ChangePasswordService(UsersRepository usersRepository, ApiContext apiContext, CommonService commonService) { this.usersRepository = usersRepository; @@ -28,7 +28,7 @@ public class ForgotPasswordService implements BaseService Date: Sun, 28 May 2023 18:08:10 +0700 Subject: [PATCH 29/63] fix forgot password --- .../configuration/JwtRequestFilter.java | 3 +- .../controller/AuthenticationController.java | 24 +++++---- .../model/request/ForgotPasswordRequest.java | 17 +++++++ .../authentication/ForgotPasswordService.java | 51 +++++++++++++++++++ 4 files changed, 85 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/iconplus/smartproc/model/request/ForgotPasswordRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/service/authentication/ForgotPasswordService.java diff --git a/src/main/java/com/iconplus/smartproc/configuration/JwtRequestFilter.java b/src/main/java/com/iconplus/smartproc/configuration/JwtRequestFilter.java index 2b976b7..ade2f23 100644 --- a/src/main/java/com/iconplus/smartproc/configuration/JwtRequestFilter.java +++ b/src/main/java/com/iconplus/smartproc/configuration/JwtRequestFilter.java @@ -55,7 +55,8 @@ public class JwtRequestFilter extends OncePerRequestFilter { private void isValidToken(HttpServletRequest request, String jwtToken) { String requestUrl = request.getRequestURI(); String refreshTokenUrl = "/api/authentication/refresh-token"; - if (!refreshTokenUrl.equals(requestUrl)) { + String forgotPasswordUrl = "/api/authentication/forgot-password"; + if (!org.apache.commons.lang3.StringUtils.equalsAnyIgnoreCase(requestUrl, refreshTokenUrl, forgotPasswordUrl)) { var isValid = isValidAuthenticateToken(jwtToken); if (!isValid) { throw new BusinessException(HttpStatus.UNAUTHORIZED, "Invalid Access Token"); diff --git a/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java b/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java index d7a4920..7d63524 100644 --- a/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java +++ b/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java @@ -3,14 +3,12 @@ package com.iconplus.smartproc.controller; 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.RefreshTokenResponse; -import com.iconplus.smartproc.service.authentication.ChangePasswordService; -import com.iconplus.smartproc.service.authentication.LoginService; -import com.iconplus.smartproc.service.authentication.LogoutService; -import com.iconplus.smartproc.service.authentication.TokenManagementService; +import com.iconplus.smartproc.service.authentication.*; import org.springframework.web.bind.annotation.*; @CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true") @@ -18,19 +16,22 @@ import org.springframework.web.bind.annotation.*; @RequestMapping("/api/authentication") public class AuthenticationController { - private LoginService loginService; - private TokenManagementService tokenManagementService; - private LogoutService logoutService; - private ChangePasswordService changePasswordService; + private final LoginService loginService; + private final TokenManagementService tokenManagementService; + private final LogoutService logoutService; + private final ChangePasswordService changePasswordService; + private final ForgotPasswordService forgotPasswordService; public AuthenticationController(LoginService loginService, TokenManagementService tokenManagementService, LogoutService logoutService, - ChangePasswordService changePasswordService) { + ChangePasswordService changePasswordService, + ForgotPasswordService forgotPasswordService) { this.loginService = loginService; this.tokenManagementService = tokenManagementService; this.logoutService = logoutService; this.changePasswordService = changePasswordService; + this.forgotPasswordService = forgotPasswordService; } @PostMapping("/login") @@ -54,4 +55,9 @@ public class AuthenticationController { return changePasswordService.execute(changePasswordRequest); } + @PostMapping("/forgot-password") + public EmptyResponse forgotPassword(@RequestBody ForgotPasswordRequest forgotPasswordRequest) { + return forgotPasswordService.execute(forgotPasswordRequest); + } + } diff --git a/src/main/java/com/iconplus/smartproc/model/request/ForgotPasswordRequest.java b/src/main/java/com/iconplus/smartproc/model/request/ForgotPasswordRequest.java new file mode 100644 index 0000000..16cb94c --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/ForgotPasswordRequest.java @@ -0,0 +1,17 @@ +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 ForgotPasswordRequest extends BaseRequest { + private String email; + private String newPassword; + private String confirmationPassword; +} diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/ForgotPasswordService.java b/src/main/java/com/iconplus/smartproc/service/authentication/ForgotPasswordService.java new file mode 100644 index 0000000..35dd3cd --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/authentication/ForgotPasswordService.java @@ -0,0 +1,51 @@ +package com.iconplus.smartproc.service.authentication; + +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.ForgotPasswordRequest; +import com.iconplus.smartproc.repository.UsersRepository; +import com.iconplus.smartproc.service.CommonService; +import com.iconplus.smartproc.util.Constants; +import org.apache.commons.lang3.StringUtils; +import org.springframework.http.HttpStatus; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.stereotype.Service; + +@Service +public class ForgotPasswordService implements BaseService { + + private UsersRepository usersRepository; + private CommonService commonService; + public ForgotPasswordService(UsersRepository usersRepository, + CommonService commonService) { + this.usersRepository = usersRepository; + this.commonService = commonService; + } + + @Override + public EmptyResponse execute(ForgotPasswordRequest input) { + + var users = usersRepository.findByEmailAndIsDeleteFalse(input.getEmail()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "User", input.getEmail()))); + + String newPassword = commonService.getPassword(input.getNewPassword()); + String confirmationPassword = commonService.getPassword(input.getConfirmationPassword()); + + + if (!StringUtils.equalsIgnoreCase(newPassword, confirmationPassword)) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10007, + Constants.ERR_TTL_10007, + Constants.ERR_MSG_10007); + } + + BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder(); + users.setPassword(bCryptPasswordEncoder.encode(newPassword)); + usersRepository.save(users); + + return new EmptyResponse(); + } +} From 908702743cc1e0ae01ab3d88fbc8f30e7f19c474 Mon Sep 17 00:00:00 2001 From: Titan Hadiyan Date: Sun, 28 May 2023 22:01:19 +0700 Subject: [PATCH 30/63] Update frontend server address --- .../smartproc/controller/AuthenticationController.java | 2 +- .../com/iconplus/smartproc/controller/BidangController.java | 2 +- .../com/iconplus/smartproc/controller/InstansiController.java | 2 +- .../com/iconplus/smartproc/controller/JabatanController.java | 2 +- .../iconplus/smartproc/controller/JenisAnggaranController.java | 2 +- .../iconplus/smartproc/controller/JenisKontrakController.java | 2 +- .../smartproc/controller/JenisPengadaanController.java | 2 +- .../com/iconplus/smartproc/controller/LokasiController.java | 2 +- .../smartproc/controller/MetodePengadaanController.java | 2 +- .../smartproc/controller/MetodePenyampaianController.java | 2 +- .../iconplus/smartproc/controller/PermissionController.java | 2 +- .../com/iconplus/smartproc/controller/RolesController.java | 2 +- .../smartproc/controller/StrategiPengadaanController.java | 2 +- .../iconplus/smartproc/controller/SumberDanaController.java | 2 +- .../controller/SupplyPositioningMatrixController.java | 2 +- .../iconplus/smartproc/controller/UnitInisiatorController.java | 2 +- .../com/iconplus/smartproc/controller/UsersController.java | 2 +- src/main/resources/application-local.yml | 3 +++ 18 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java b/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java index 7d63524..5ae9603 100644 --- a/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java +++ b/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java @@ -11,7 +11,7 @@ import com.iconplus.smartproc.model.response.RefreshTokenResponse; import com.iconplus.smartproc.service.authentication.*; import org.springframework.web.bind.annotation.*; -@CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true") +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") @RestController @RequestMapping("/api/authentication") public class AuthenticationController { diff --git a/src/main/java/com/iconplus/smartproc/controller/BidangController.java b/src/main/java/com/iconplus/smartproc/controller/BidangController.java index 9090a81..286143f 100644 --- a/src/main/java/com/iconplus/smartproc/controller/BidangController.java +++ b/src/main/java/com/iconplus/smartproc/controller/BidangController.java @@ -9,7 +9,7 @@ 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") +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") @RestController @RequestMapping("/api/bidang") public class BidangController { diff --git a/src/main/java/com/iconplus/smartproc/controller/InstansiController.java b/src/main/java/com/iconplus/smartproc/controller/InstansiController.java index bd1455c..b094a85 100644 --- a/src/main/java/com/iconplus/smartproc/controller/InstansiController.java +++ b/src/main/java/com/iconplus/smartproc/controller/InstansiController.java @@ -9,7 +9,7 @@ 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") +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") @RestController @RequestMapping("/api/instansi") public class InstansiController { diff --git a/src/main/java/com/iconplus/smartproc/controller/JabatanController.java b/src/main/java/com/iconplus/smartproc/controller/JabatanController.java index 667f9e9..3a051ce 100644 --- a/src/main/java/com/iconplus/smartproc/controller/JabatanController.java +++ b/src/main/java/com/iconplus/smartproc/controller/JabatanController.java @@ -9,7 +9,7 @@ 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") +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") @RestController @RequestMapping("/api/jabatan") public class JabatanController { diff --git a/src/main/java/com/iconplus/smartproc/controller/JenisAnggaranController.java b/src/main/java/com/iconplus/smartproc/controller/JenisAnggaranController.java index cb61b31..82e34d0 100644 --- a/src/main/java/com/iconplus/smartproc/controller/JenisAnggaranController.java +++ b/src/main/java/com/iconplus/smartproc/controller/JenisAnggaranController.java @@ -10,7 +10,7 @@ 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") +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") @RestController @RequestMapping("/api/jenisanggaran") public class JenisAnggaranController { diff --git a/src/main/java/com/iconplus/smartproc/controller/JenisKontrakController.java b/src/main/java/com/iconplus/smartproc/controller/JenisKontrakController.java index d0d65c2..54e9637 100644 --- a/src/main/java/com/iconplus/smartproc/controller/JenisKontrakController.java +++ b/src/main/java/com/iconplus/smartproc/controller/JenisKontrakController.java @@ -10,7 +10,7 @@ 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") +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") @RestController @RequestMapping("/api/jeniskontrak") public class JenisKontrakController { diff --git a/src/main/java/com/iconplus/smartproc/controller/JenisPengadaanController.java b/src/main/java/com/iconplus/smartproc/controller/JenisPengadaanController.java index ed8559c..11454f7 100644 --- a/src/main/java/com/iconplus/smartproc/controller/JenisPengadaanController.java +++ b/src/main/java/com/iconplus/smartproc/controller/JenisPengadaanController.java @@ -9,7 +9,7 @@ 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") +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") @RestController @RequestMapping("/api/jenispengadaan") public class JenisPengadaanController { diff --git a/src/main/java/com/iconplus/smartproc/controller/LokasiController.java b/src/main/java/com/iconplus/smartproc/controller/LokasiController.java index 9579ced..2c8250b 100644 --- a/src/main/java/com/iconplus/smartproc/controller/LokasiController.java +++ b/src/main/java/com/iconplus/smartproc/controller/LokasiController.java @@ -10,7 +10,7 @@ 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") +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") @RestController @RequestMapping("/api/lokasi") public class LokasiController { diff --git a/src/main/java/com/iconplus/smartproc/controller/MetodePengadaanController.java b/src/main/java/com/iconplus/smartproc/controller/MetodePengadaanController.java index 8be516a..06bcf44 100644 --- a/src/main/java/com/iconplus/smartproc/controller/MetodePengadaanController.java +++ b/src/main/java/com/iconplus/smartproc/controller/MetodePengadaanController.java @@ -10,7 +10,7 @@ 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") +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") @RestController @RequestMapping("/api/metodepengadaan") public class MetodePengadaanController { diff --git a/src/main/java/com/iconplus/smartproc/controller/MetodePenyampaianController.java b/src/main/java/com/iconplus/smartproc/controller/MetodePenyampaianController.java index 0615825..3e1fe1f 100644 --- a/src/main/java/com/iconplus/smartproc/controller/MetodePenyampaianController.java +++ b/src/main/java/com/iconplus/smartproc/controller/MetodePenyampaianController.java @@ -12,7 +12,7 @@ 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") +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") @RestController @RequestMapping("/api/metodepenyampaian") public class MetodePenyampaianController { diff --git a/src/main/java/com/iconplus/smartproc/controller/PermissionController.java b/src/main/java/com/iconplus/smartproc/controller/PermissionController.java index caca5b5..9d7a536 100644 --- a/src/main/java/com/iconplus/smartproc/controller/PermissionController.java +++ b/src/main/java/com/iconplus/smartproc/controller/PermissionController.java @@ -6,7 +6,7 @@ import com.iconplus.smartproc.repository.PermissionRepository; import com.iconplus.smartproc.service.permission.PutUpdatePermissionService; import org.springframework.web.bind.annotation.*; -@CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true") +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") @RestController @RequestMapping("/api/permission") public class PermissionController { diff --git a/src/main/java/com/iconplus/smartproc/controller/RolesController.java b/src/main/java/com/iconplus/smartproc/controller/RolesController.java index 13eafa2..0a4c4f5 100644 --- a/src/main/java/com/iconplus/smartproc/controller/RolesController.java +++ b/src/main/java/com/iconplus/smartproc/controller/RolesController.java @@ -9,7 +9,7 @@ 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") +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") @RestController @RequestMapping("/api/roles") public class RolesController { diff --git a/src/main/java/com/iconplus/smartproc/controller/StrategiPengadaanController.java b/src/main/java/com/iconplus/smartproc/controller/StrategiPengadaanController.java index 7575d5e..ce0e0bf 100644 --- a/src/main/java/com/iconplus/smartproc/controller/StrategiPengadaanController.java +++ b/src/main/java/com/iconplus/smartproc/controller/StrategiPengadaanController.java @@ -9,7 +9,7 @@ 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") +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") @RestController @RequestMapping("/api/strategipengadaan") public class StrategiPengadaanController { diff --git a/src/main/java/com/iconplus/smartproc/controller/SumberDanaController.java b/src/main/java/com/iconplus/smartproc/controller/SumberDanaController.java index 5670f07..0c1ccab 100644 --- a/src/main/java/com/iconplus/smartproc/controller/SumberDanaController.java +++ b/src/main/java/com/iconplus/smartproc/controller/SumberDanaController.java @@ -9,7 +9,7 @@ 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") +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") @RestController @RequestMapping("/api/sumberdana") public class SumberDanaController { diff --git a/src/main/java/com/iconplus/smartproc/controller/SupplyPositioningMatrixController.java b/src/main/java/com/iconplus/smartproc/controller/SupplyPositioningMatrixController.java index 79a3791..978a6df 100644 --- a/src/main/java/com/iconplus/smartproc/controller/SupplyPositioningMatrixController.java +++ b/src/main/java/com/iconplus/smartproc/controller/SupplyPositioningMatrixController.java @@ -12,7 +12,7 @@ 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") +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") @RestController @RequestMapping("/api/supplypositioningmatrix") public class SupplyPositioningMatrixController { diff --git a/src/main/java/com/iconplus/smartproc/controller/UnitInisiatorController.java b/src/main/java/com/iconplus/smartproc/controller/UnitInisiatorController.java index 74461ed..3e7213c 100644 --- a/src/main/java/com/iconplus/smartproc/controller/UnitInisiatorController.java +++ b/src/main/java/com/iconplus/smartproc/controller/UnitInisiatorController.java @@ -9,7 +9,7 @@ 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") +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") @RestController @RequestMapping("/api/unitinisiator") public class UnitInisiatorController { diff --git a/src/main/java/com/iconplus/smartproc/controller/UsersController.java b/src/main/java/com/iconplus/smartproc/controller/UsersController.java index adb8bf4..db2c09a 100644 --- a/src/main/java/com/iconplus/smartproc/controller/UsersController.java +++ b/src/main/java/com/iconplus/smartproc/controller/UsersController.java @@ -9,7 +9,7 @@ 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") +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") @RestController @RequestMapping("/api/users") public class UsersController { diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index a7db672..70f8947 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -24,3 +24,6 @@ spring: ddl-auto: update database-platform: org.hibernate.dialect.PostgreSQLDialect show-sql: true + +fe: + server: http://localhost:8080 \ No newline at end of file From c459dba989aac28581cf9ab10547d413abc29eca Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Sun, 28 May 2023 22:25:42 +0700 Subject: [PATCH 31/63] init drp --- .../smartproc/controller/DrpController.java | 11 ++++ .../iconplus/smartproc/model/entity/Drp.java | 44 +++++++++++++++ .../smartproc/model/projection/DrpView.java | 24 +++++++++ .../smartproc/model/request/DrpRequest.java | 23 ++++++++ .../smartproc/model/response/DrpResponse.java | 22 ++++++++ .../model/response/GetListDrpResponse.java | 19 +++++++ .../smartproc/repository/DrpRepository.java | 32 +++++++++++ .../smartproc/service/drp/GetDrpService.java | 36 +++++++++++++ .../service/drp/GetListDrpService.java | 54 +++++++++++++++++++ 9 files changed, 265 insertions(+) create mode 100644 src/main/java/com/iconplus/smartproc/controller/DrpController.java create mode 100644 src/main/java/com/iconplus/smartproc/model/entity/Drp.java create mode 100644 src/main/java/com/iconplus/smartproc/model/projection/DrpView.java create mode 100644 src/main/java/com/iconplus/smartproc/model/request/DrpRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/DrpResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/GetListDrpResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/repository/DrpRepository.java create mode 100644 src/main/java/com/iconplus/smartproc/service/drp/GetDrpService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/drp/GetListDrpService.java 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(); + } +} From f0d2c3d82cf350fcdafb3cc5b21fb1b1ea7f34fd Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Mon, 29 May 2023 00:49:00 +0700 Subject: [PATCH 32/63] init drp --- .../controller/AuthenticationController.java | 19 ++++- .../smartproc/controller/DrpController.java | 56 +++++++++++++-- .../smartproc/model/entity/DrpDokumen.java | 47 ++++++++++++ .../model/request/DrpDokumenRequest.java | 20 ++++++ .../smartproc/model/request/DrpRequest.java | 5 ++ .../model/response/DrpDokumenResponse.java | 23 ++++++ .../smartproc/model/response/DrpResponse.java | 3 + .../model/response/GlobalResponse.java | 19 +++++ .../repository/DrpDokumenRepository.java | 13 ++++ .../smartproc/repository/DrpRepository.java | 6 +- .../smartproc/service/drp/GetDrpService.java | 25 ++++++- .../service/drp/PostCreateDrpService.java | 72 +++++++++++++++++++ .../iconplus/smartproc/util/Constants.java | 8 ++- 13 files changed, 304 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/iconplus/smartproc/model/entity/DrpDokumen.java create mode 100644 src/main/java/com/iconplus/smartproc/model/request/DrpDokumenRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/DrpDokumenResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/GlobalResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/repository/DrpDokumenRepository.java create mode 100644 src/main/java/com/iconplus/smartproc/service/drp/PostCreateDrpService.java 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"; From e2265a8aea4ccbd815282a7740f1de8b4129ace0 Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Mon, 29 May 2023 00:50:54 +0700 Subject: [PATCH 33/63] init drp --- .../java/com/iconplus/smartproc/controller/DrpController.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/com/iconplus/smartproc/controller/DrpController.java b/src/main/java/com/iconplus/smartproc/controller/DrpController.java index e7da740..e2e32fd 100644 --- a/src/main/java/com/iconplus/smartproc/controller/DrpController.java +++ b/src/main/java/com/iconplus/smartproc/controller/DrpController.java @@ -1,17 +1,14 @@ package com.iconplus.smartproc.controller; 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 = "${fe.server}", allowCredentials = "true") @RestController From e09222e163dd13e879909da699bdc9529a72a2f3 Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Mon, 29 May 2023 02:56:37 +0700 Subject: [PATCH 34/63] fix api post drp --- .../smartproc/controller/DrpController.java | 18 +++- .../smartproc/model/entity/DrpPengadaan.java | 82 +++++++++++++++++++ .../model/entity/DrpPengadaanDokumen.java | 48 +++++++++++ .../request/DrpPengadaanDokumenRequest.java | 25 ++++++ .../model/request/DrpPengadaanRequest.java | 49 +++++++++++ .../smartproc/model/request/DrpRequest.java | 4 +- .../model/response/DrpPengadaanResponse.java | 37 +++++++++ .../DrpPengadaanDokumenRepository.java | 9 ++ .../repository/DrpPengadaanRepository.java | 9 ++ .../drp/PostCreateDrpPengadaanService.java | 77 +++++++++++++++++ .../service/drp/PostCreateDrpService.java | 29 ++++++- 11 files changed, 382 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/iconplus/smartproc/model/entity/DrpPengadaan.java create mode 100644 src/main/java/com/iconplus/smartproc/model/entity/DrpPengadaanDokumen.java create mode 100644 src/main/java/com/iconplus/smartproc/model/request/DrpPengadaanDokumenRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/model/request/DrpPengadaanRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/DrpPengadaanResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/repository/DrpPengadaanDokumenRepository.java create mode 100644 src/main/java/com/iconplus/smartproc/repository/DrpPengadaanRepository.java create mode 100644 src/main/java/com/iconplus/smartproc/service/drp/PostCreateDrpPengadaanService.java diff --git a/src/main/java/com/iconplus/smartproc/controller/DrpController.java b/src/main/java/com/iconplus/smartproc/controller/DrpController.java index e2e32fd..f3eb35d 100644 --- a/src/main/java/com/iconplus/smartproc/controller/DrpController.java +++ b/src/main/java/com/iconplus/smartproc/controller/DrpController.java @@ -1,10 +1,13 @@ package com.iconplus.smartproc.controller; +import com.iconplus.smartproc.model.request.DrpPengadaanRequest; import com.iconplus.smartproc.model.request.DrpRequest; +import com.iconplus.smartproc.model.response.DrpPengadaanResponse; import com.iconplus.smartproc.model.response.DrpResponse; import com.iconplus.smartproc.model.response.GetListDrpResponse; import com.iconplus.smartproc.service.drp.GetDrpService; import com.iconplus.smartproc.service.drp.GetListDrpService; +import com.iconplus.smartproc.service.drp.PostCreateDrpPengadaanService; import com.iconplus.smartproc.service.drp.PostCreateDrpService; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; @@ -18,13 +21,16 @@ public class DrpController { private final GetDrpService getDrpService; private final GetListDrpService getListDrpService; private final PostCreateDrpService postCreateDrpService; + private final PostCreateDrpPengadaanService postCreateDrpPengadaanService; public DrpController(GetDrpService getDrpService, GetListDrpService getListDrpService, - PostCreateDrpService postCreateDrpService) { + PostCreateDrpService postCreateDrpService, + PostCreateDrpPengadaanService postCreateDrpPengadaanService) { this.getDrpService = getDrpService; this.getListDrpService = getListDrpService; this.postCreateDrpService = postCreateDrpService; + this.postCreateDrpPengadaanService = postCreateDrpPengadaanService; } @GetMapping @@ -53,4 +59,14 @@ public class DrpController { return postCreateDrpService.execute(drpRequest); } + @PostMapping("/pengadaan") + public DrpPengadaanResponse createDrpPengadaan(@RequestBody DrpPengadaanRequest drpPengadaanRequest) { + return postCreateDrpPengadaanService.execute(drpPengadaanRequest); + } + + @GetMapping("/pengadaan") + public DrpPengadaanResponse getDrpPengadaan(@RequestBody DrpPengadaanRequest drpPengadaanRequest) { + return null; + } + } diff --git a/src/main/java/com/iconplus/smartproc/model/entity/DrpPengadaan.java b/src/main/java/com/iconplus/smartproc/model/entity/DrpPengadaan.java new file mode 100644 index 0000000..192f20b --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/DrpPengadaan.java @@ -0,0 +1,82 @@ +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.math.BigDecimal; +import java.sql.Timestamp; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "drp_pengadaan") +public class DrpPengadaan extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "drp_id") + private Long drpId; + + @Column(name = "nomor") + private String nomor; + + @Column(name = "nama_pengadaan") + private String namaPengadaan; + + @Column(name = "lokasi_id") + private Long lokasiId; + + @Column(name = "jenis_pengadaan_id") + private Long jenisPengadaanId; + + @Column(name = "unit_inisiator_id") + private Long unitInisiatorId; + + @Column(name = "pagu") + private BigDecimal pagu; + + @Column(name = "sumber_dana_id") + private Long sumberDanaId; + + @Column(name = "supply_positioning_matrix_id") + private Long supplyPositioningMatrixId; + + @Column(name = "metode_pengadaan_id") + private Long metodePengadaanId; + + @Column(name = "metode_penyampaian_id") + private Long metodePenyampaianId; + + @Column(name = "jenis_kontrak_id") + private Long jenisKontrakId; + + @Column(name = "strategi_pengadaan_id") + private Long strategiPengadaanId; + + @Column(name = "rencana_tanggal") + private Timestamp rencanaTanggal; + + @Column(name = "target_tanggal") + private Timestamp targetTanggal; + + @Column(name = "hpe") + private BigDecimal hpe; + + @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/entity/DrpPengadaanDokumen.java b/src/main/java/com/iconplus/smartproc/model/entity/DrpPengadaanDokumen.java new file mode 100644 index 0000000..6a42483 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/DrpPengadaanDokumen.java @@ -0,0 +1,48 @@ +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_pengadaan_dokumen") +public class DrpPengadaanDokumen 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 = "file") + private byte[] file; + + @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; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/DrpPengadaanDokumenRequest.java b/src/main/java/com/iconplus/smartproc/model/request/DrpPengadaanDokumenRequest.java new file mode 100644 index 0000000..41d293f --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/DrpPengadaanDokumenRequest.java @@ -0,0 +1,25 @@ +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 javax.persistence.Entity; +import javax.persistence.Table; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class DrpPengadaanDokumenRequest extends BaseRequest { + + private Long id; + private Long drpId; + 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/DrpPengadaanRequest.java b/src/main/java/com/iconplus/smartproc/model/request/DrpPengadaanRequest.java new file mode 100644 index 0000000..453b309 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/DrpPengadaanRequest.java @@ -0,0 +1,49 @@ +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.hibernate.annotations.Type; +import org.springframework.data.domain.Pageable; + +import javax.persistence.Column; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import java.math.BigDecimal; +import java.sql.Timestamp; +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class DrpPengadaanRequest extends BaseRequest { + + private Long id; + private Long drpId; + private String nomor; + private String namaPengadaan; + private Long lokasiId; + private Long jenisPengadaanId; + private Long unitInisiatorId; + private BigDecimal pagu; + private Long sumberDanaId; + private Long supplyPositioningMatrixId; + private Long metodePengadaanId; + private Long metodePenyampaianId; + private Long jenisKontrakId; + private Long strategiPengadaanId; + private Timestamp rencanaTanggal; + private Timestamp targetTanggal; + private BigDecimal hpe; + private Boolean isActive; + private Boolean isDelete; + + private List dataDrpPengadaanDokumen; + + private transient Pageable pageable; + +} 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 53bbdee..8f50e6e 100644 --- a/src/main/java/com/iconplus/smartproc/model/request/DrpRequest.java +++ b/src/main/java/com/iconplus/smartproc/model/request/DrpRequest.java @@ -21,7 +21,9 @@ public class DrpRequest extends BaseRequest { private Timestamp approveDate; private Boolean isActive; - private List data; + private List dataDrpDokumen; + + private List dataDrpPengadaanDokumen; private String search; private transient Pageable pageable; diff --git a/src/main/java/com/iconplus/smartproc/model/response/DrpPengadaanResponse.java b/src/main/java/com/iconplus/smartproc/model/response/DrpPengadaanResponse.java new file mode 100644 index 0000000..8a12fef --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/DrpPengadaanResponse.java @@ -0,0 +1,37 @@ +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.math.BigDecimal; +import java.sql.Timestamp; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class DrpPengadaanResponse extends BaseResponse { + + private Long id; + private Long drpId; + private String nomor; + private String namaPengadaan; + private Long lokasiId; + private Long jenisPengadaanId; + private Long unitInisiatorId; + private BigDecimal pagu; + private Long sumberDanaId; + private Long supplyPositioningMatrixId; + private Long metodePengadaanId; + private Long metodePenyampaianId; + private Long jenisKontrakId; + private Long strategiPengadaanId; + private Timestamp rencanaTanggal; + private Timestamp targetTanggal; + private BigDecimal hpe; + private Boolean isActive; + private Boolean isDelete; +} diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanDokumenRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanDokumenRepository.java new file mode 100644 index 0000000..22a8185 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanDokumenRepository.java @@ -0,0 +1,9 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.DrpPengadaanDokumen; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface DrpPengadaanDokumenRepository extends JpaRepository { +} diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanRepository.java new file mode 100644 index 0000000..65d585c --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanRepository.java @@ -0,0 +1,9 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.DrpPengadaan; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface DrpPengadaanRepository extends JpaRepository { +} diff --git a/src/main/java/com/iconplus/smartproc/service/drp/PostCreateDrpPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/drp/PostCreateDrpPengadaanService.java new file mode 100644 index 0000000..5fb3611 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/drp/PostCreateDrpPengadaanService.java @@ -0,0 +1,77 @@ +package com.iconplus.smartproc.service.drp; + +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.DrpPengadaan; +import com.iconplus.smartproc.model.entity.DrpPengadaanDokumen; +import com.iconplus.smartproc.model.request.DrpPengadaanDokumenRequest; +import com.iconplus.smartproc.model.request.DrpPengadaanRequest; +import com.iconplus.smartproc.model.response.DrpPengadaanResponse; +import com.iconplus.smartproc.repository.DrpPengadaanDokumenRepository; +import com.iconplus.smartproc.repository.DrpPengadaanRepository; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class PostCreateDrpPengadaanService implements BaseService { + + private final DrpPengadaanRepository drpPengadaanRepository; + private final DrpPengadaanDokumenRepository drpPengadaanDokumenRepository; + + public PostCreateDrpPengadaanService(DrpPengadaanRepository drpPengadaanRepository, + DrpPengadaanDokumenRepository drpPengadaanDokumenRepository) { + this.drpPengadaanRepository = drpPengadaanRepository; + this.drpPengadaanDokumenRepository = drpPengadaanDokumenRepository; + } + + @Override + public DrpPengadaanResponse execute(DrpPengadaanRequest input) { + + DrpPengadaan drpPengadaan = DrpPengadaan.builder() + .drpId(input.getDrpId()) + .nomor(input.getNomor()) + .namaPengadaan(input.getNamaPengadaan()) + .lokasiId(input.getLokasiId()) + .jenisPengadaanId(input.getJenisPengadaanId()) + .unitInisiatorId(input.getUnitInisiatorId()) + .pagu(input.getPagu()) + .sumberDanaId(input.getSumberDanaId()) + .supplyPositioningMatrixId(input.getSupplyPositioningMatrixId()) + .metodePengadaanId(input.getMetodePengadaanId()) + .metodePenyampaianId(input.getMetodePenyampaianId()) + .jenisKontrakId(input.getJenisKontrakId()) + .strategiPengadaanId(input.getStrategiPengadaanId()) + .rencanaTanggal(input.getRencanaTanggal()) + .targetTanggal(input.getTargetTanggal()) + .hpe(input.getHpe()) + .isActive(input.getIsActive()) + .isDelete(false) + .build(); + + List drpPengadaanDokumenList = new ArrayList<>(); + if (ObjectUtils.isNotEmpty(input.getDataDrpPengadaanDokumen())) { + for (DrpPengadaanDokumenRequest drpPengadaanDokumenRequest : input.getDataDrpPengadaanDokumen()) { + DrpPengadaanDokumen drpPengadaanDokumen = DrpPengadaanDokumen.builder() + .drpId(input.getDrpId()) + .jenisDokumenId(drpPengadaanDokumenRequest.getJenisDokumenId()) + .filename(drpPengadaanDokumenRequest.getFilename()) + .file(drpPengadaanDokumenRequest.getFile()) + .keterangan(drpPengadaanDokumenRequest.getKeterangan()) + .isDelete(false) + .build(); + drpPengadaanDokumenList.add(drpPengadaanDokumen); + } + } + + var result = drpPengadaanRepository.save(drpPengadaan); + drpPengadaanDokumenRepository.saveAll(drpPengadaanDokumenList); + + return DrpPengadaanResponse.builder() + .id(result.getId()) + .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 index fc40f3b..b256976 100644 --- a/src/main/java/com/iconplus/smartproc/service/drp/PostCreateDrpService.java +++ b/src/main/java/com/iconplus/smartproc/service/drp/PostCreateDrpService.java @@ -4,10 +4,13 @@ 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.entity.DrpPengadaanDokumen; import com.iconplus.smartproc.model.request.DrpDokumenRequest; +import com.iconplus.smartproc.model.request.DrpPengadaanDokumenRequest; 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.DrpPengadaanDokumenRepository; import com.iconplus.smartproc.repository.DrpRepository; import com.iconplus.smartproc.util.Constants; import org.apache.commons.lang3.ObjectUtils; @@ -22,11 +25,14 @@ public class PostCreateDrpService implements BaseService drpDokumenList = new ArrayList<>(); - if (ObjectUtils.isNotEmpty(input.getData())) { - for (DrpDokumenRequest drpDokumenRequest : input.getData()) { + if (ObjectUtils.isNotEmpty(input.getDataDrpDokumen())) { + for (DrpDokumenRequest drpDokumenRequest : input.getDataDrpDokumen()) { DrpDokumen drpDokumen = DrpDokumen.builder() .drpId(drpSaved.getId()) .jenisDokumenId(drpDokumenRequest.getJenisDokumenId()) @@ -63,7 +69,24 @@ public class PostCreateDrpService implements BaseService drpPengadaanDokumenList = new ArrayList<>(); + if (ObjectUtils.isNotEmpty(input.getDataDrpPengadaanDokumen())) { + for (DrpPengadaanDokumenRequest drpPengadaanDokumenRequest : input.getDataDrpPengadaanDokumen()) { + DrpPengadaanDokumen drpPengadaanDokumen = DrpPengadaanDokumen.builder() + .drpId(drpSaved.getId()) + .jenisDokumenId(drpPengadaanDokumenRequest.getJenisDokumenId()) + .filename(drpPengadaanDokumenRequest.getFilename()) + .file(drpPengadaanDokumenRequest.getFile()) + .keterangan(drpPengadaanDokumenRequest.getKeterangan()) + .isDelete(false) + .build(); + drpPengadaanDokumenList.add(drpPengadaanDokumen); + } + } + drpDokumenRepository.saveAll(drpDokumenList); + drpPengadaanDokumenRepository.saveAll(drpPengadaanDokumenList); return DrpResponse.builder() .id(drpSaved.getId()) From 39073774927ba42bc37fb8f2f15dd136204d1f79 Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Mon, 29 May 2023 09:12:10 +0700 Subject: [PATCH 35/63] fix error message add user --- .../java/com/iconplus/smartproc/service/CommonService.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/iconplus/smartproc/service/CommonService.java b/src/main/java/com/iconplus/smartproc/service/CommonService.java index 9bc81ff..3818415 100644 --- a/src/main/java/com/iconplus/smartproc/service/CommonService.java +++ b/src/main/java/com/iconplus/smartproc/service/CommonService.java @@ -99,9 +99,9 @@ public class CommonService { try { return EncryptDecryptUtils.decrypt(password, privateKey); } catch (Exception ex) { - throw new BusinessException(Constants.ERR_CODE_10010, - Constants.ERR_TTL_10010, - Constants.ERR_MSG_10010); + throw new BusinessException(Constants.ERR_CODE_10011, + Constants.ERR_TTL_10011, + Constants.ERR_MSG_10011); } } From bab3a7a3d9f5ddcd2dc1205df744c0a40f33177a Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Mon, 29 May 2023 15:29:38 +0700 Subject: [PATCH 36/63] refactor approve status --- src/main/java/com/iconplus/smartproc/model/entity/Drp.java | 5 ++--- .../java/com/iconplus/smartproc/model/entity/DrpDokumen.java | 3 --- .../iconplus/smartproc/model/entity/DrpPengadaanDokumen.java | 3 --- .../com/iconplus/smartproc/model/projection/DrpView.java | 4 ++-- .../com/iconplus/smartproc/model/request/DrpRequest.java | 2 +- .../com/iconplus/smartproc/model/response/DrpResponse.java | 2 +- .../com/iconplus/smartproc/repository/DrpRepository.java | 2 +- .../com/iconplus/smartproc/service/drp/GetDrpService.java | 2 +- .../iconplus/smartproc/service/drp/GetListDrpService.java | 2 +- .../smartproc/service/drp/PostCreateDrpPengadaanService.java | 1 - .../iconplus/smartproc/service/drp/PostCreateDrpService.java | 4 +--- 11 files changed, 10 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/iconplus/smartproc/model/entity/Drp.java b/src/main/java/com/iconplus/smartproc/model/entity/Drp.java index 6747558..9ff9137 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/Drp.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/Drp.java @@ -27,9 +27,8 @@ public class Drp extends BaseEntity { @Column(name = "tahun") private Integer tahun; - @Column(name = "is_approve") - @Type(type = "org.hibernate.type.NumericBooleanType") - private Boolean isApprove; + @Column(name = "approve_status") + private String approveStatus; @Column(name = "approve_date") private Timestamp approveDate; diff --git a/src/main/java/com/iconplus/smartproc/model/entity/DrpDokumen.java b/src/main/java/com/iconplus/smartproc/model/entity/DrpDokumen.java index 0939e3c..430ed7d 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/DrpDokumen.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/DrpDokumen.java @@ -34,9 +34,6 @@ public class DrpDokumen extends BaseEntity { @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; diff --git a/src/main/java/com/iconplus/smartproc/model/entity/DrpPengadaanDokumen.java b/src/main/java/com/iconplus/smartproc/model/entity/DrpPengadaanDokumen.java index 6a42483..e89344d 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/DrpPengadaanDokumen.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/DrpPengadaanDokumen.java @@ -31,9 +31,6 @@ public class DrpPengadaanDokumen extends BaseEntity { @Column(name = "filename") private String filename; - @Column(name = "file") - private byte[] file; - @Column(name = "keterangan") private String keterangan; diff --git a/src/main/java/com/iconplus/smartproc/model/projection/DrpView.java b/src/main/java/com/iconplus/smartproc/model/projection/DrpView.java index 16bbaa5..fe0c8af 100644 --- a/src/main/java/com/iconplus/smartproc/model/projection/DrpView.java +++ b/src/main/java/com/iconplus/smartproc/model/projection/DrpView.java @@ -10,8 +10,8 @@ public interface DrpView { Integer getTahun(); void setTahun(Integer tahun); - Boolean getIsApprove(); - void setIsApprove(Boolean isApprove); + String getApproveStatus(); + void setApproveStatus(String isApprove); Timestamp getApproveDate(); void setApproveDate(Timestamp approveDate); 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 8f50e6e..6183365 100644 --- a/src/main/java/com/iconplus/smartproc/model/request/DrpRequest.java +++ b/src/main/java/com/iconplus/smartproc/model/request/DrpRequest.java @@ -17,7 +17,7 @@ import java.util.List; public class DrpRequest extends BaseRequest { private Long id; private Integer tahun; - private Boolean isApprove; + private String approveStatus; private Timestamp approveDate; private Boolean isActive; 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 2fd73b8..3f95e38 100644 --- a/src/main/java/com/iconplus/smartproc/model/response/DrpResponse.java +++ b/src/main/java/com/iconplus/smartproc/model/response/DrpResponse.java @@ -16,7 +16,7 @@ import java.util.List; public class DrpResponse extends BaseResponse { private Long id; private Integer tahun; - private Boolean isApprove; + private String approveStatus; private Timestamp approveDate; private Boolean isActive; private Boolean isDelete; diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java index 8efc757..3922fa9 100644 --- a/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java @@ -21,7 +21,7 @@ public interface DrpRepository extends JpaRepository { @Query(value = "SELECT d.id as id, " + "d.tahun as tahun, " + - "d.isApprove as isApprove, " + + "d.approveStatus as approveStatus, " + "d.approveDate as approveDate, " + "d.isActive as isActive, " + "d.isDelete as isDelete " + 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 fc540e0..f7976d7 100644 --- a/src/main/java/com/iconplus/smartproc/service/drp/GetDrpService.java +++ b/src/main/java/com/iconplus/smartproc/service/drp/GetDrpService.java @@ -49,7 +49,7 @@ public class GetDrpService implements BaseService { return DrpResponse.builder() .id(drp.getId()) .tahun(drp.getTahun()) - .isApprove(drp.getIsApprove()) + .approveStatus(drp.getApproveStatus()) .approveDate(drp.getApproveDate()) .isActive(drp.getIsActive()) .isDelete(drp.getIsDelete()) diff --git a/src/main/java/com/iconplus/smartproc/service/drp/GetListDrpService.java b/src/main/java/com/iconplus/smartproc/service/drp/GetListDrpService.java index 3581ffd..04e8990 100644 --- a/src/main/java/com/iconplus/smartproc/service/drp/GetListDrpService.java +++ b/src/main/java/com/iconplus/smartproc/service/drp/GetListDrpService.java @@ -31,7 +31,7 @@ public class GetListDrpService implements BaseService Date: Mon, 29 May 2023 19:19:25 +0700 Subject: [PATCH 37/63] fix telepon and init lupas --- .../controller/AuthenticationController.java | 17 +++-- .../smartproc/controller/DrpController.java | 9 +++ .../smartproc/model/entity/DrpPengadaan.java | 5 +- .../smartproc/model/entity/Users.java | 10 +++ .../model/projection/DrpPengadaanView.java | 64 +++++++++++++++++++ .../model/projection/UserRoleView.java | 2 + .../model/request/DrpDokumenRequest.java | 1 - .../request/DrpPengadaanDokumenRequest.java | 1 - .../model/request/DrpPengadaanRequest.java | 10 +-- .../model/request/ForgotPasswordRequest.java | 2 +- .../request/InitForgotPasswordRequest.java | 16 +++++ .../smartproc/model/request/UsersRequest.java | 1 + .../response/DrpPengadaanDokumenResponse.java | 23 +++++++ .../model/response/DrpPengadaanResponse.java | 5 +- .../smartproc/model/response/DrpResponse.java | 4 +- .../response/InitForgotPasswordResponse.java | 17 +++++ .../model/response/UsersResponse.java | 1 + .../DrpPengadaanDokumenRepository.java | 5 ++ .../repository/DrpPengadaanRepository.java | 4 ++ .../smartproc/repository/UsersRepository.java | 7 ++ .../smartproc/service/CommonService.java | 6 +- .../authentication/ForgotPasswordService.java | 5 +- .../InitForgotPasswordService.java | 46 +++++++++++++ .../smartproc/service/drp/GetDrpService.java | 54 ++++++++++++---- .../drp/GetListDrpPengadaanService.java | 23 +++++++ .../service/drp/PostCreateDrpService.java | 16 +++-- .../manajemenuser/GetListUserService.java | 1 + .../manajemenuser/GetUserByIdService.java | 1 + .../manajemenuser/PostCreateUserService.java | 14 +++- .../manajemenuser/PutUpdateUserService.java | 1 + .../iconplus/smartproc/util/Constants.java | 2 +- src/main/resources/application-local.yml | 2 + 32 files changed, 328 insertions(+), 47 deletions(-) create mode 100644 src/main/java/com/iconplus/smartproc/model/projection/DrpPengadaanView.java create mode 100644 src/main/java/com/iconplus/smartproc/model/request/InitForgotPasswordRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/DrpPengadaanDokumenResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/InitForgotPasswordResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/service/authentication/InitForgotPasswordService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/drp/GetListDrpPengadaanService.java diff --git a/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java b/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java index 42ff38a..491fa80 100644 --- a/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java +++ b/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java @@ -3,11 +3,9 @@ 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.request.*; import com.iconplus.smartproc.model.response.GlobalResponse; +import com.iconplus.smartproc.model.response.InitForgotPasswordResponse; import com.iconplus.smartproc.model.response.RefreshTokenResponse; import com.iconplus.smartproc.service.authentication.*; import org.springframework.web.bind.annotation.*; @@ -22,17 +20,20 @@ public class AuthenticationController { private final LogoutService logoutService; private final ChangePasswordService changePasswordService; private final ForgotPasswordService forgotPasswordService; + private final InitForgotPasswordService initForgotPasswordService; public AuthenticationController(LoginService loginService, TokenManagementService tokenManagementService, LogoutService logoutService, ChangePasswordService changePasswordService, - ForgotPasswordService forgotPasswordService) { + ForgotPasswordService forgotPasswordService, + InitForgotPasswordService initForgotPasswordService) { this.loginService = loginService; this.tokenManagementService = tokenManagementService; this.logoutService = logoutService; this.changePasswordService = changePasswordService; this.forgotPasswordService = forgotPasswordService; + this.initForgotPasswordService = initForgotPasswordService; } @PostMapping("/login") @@ -73,4 +74,10 @@ public class AuthenticationController { return forgotPasswordService.execute(forgotPasswordRequest); } + + @PostMapping("/init/forgot-password") + public InitForgotPasswordResponse initForgotPassword(@RequestBody InitForgotPasswordRequest initForgotPasswordRequest) { + return initForgotPasswordService.execute(initForgotPasswordRequest); + } + } diff --git a/src/main/java/com/iconplus/smartproc/controller/DrpController.java b/src/main/java/com/iconplus/smartproc/controller/DrpController.java index f3eb35d..88d4b47 100644 --- a/src/main/java/com/iconplus/smartproc/controller/DrpController.java +++ b/src/main/java/com/iconplus/smartproc/controller/DrpController.java @@ -1,5 +1,6 @@ package com.iconplus.smartproc.controller; +import com.iconplus.smartproc.helper.model.EmptyResponse; import com.iconplus.smartproc.model.request.DrpPengadaanRequest; import com.iconplus.smartproc.model.request.DrpRequest; import com.iconplus.smartproc.model.response.DrpPengadaanResponse; @@ -54,6 +55,14 @@ public class DrpController { .build()); } + @GetMapping("/tahun/{id}") + public EmptyResponse getExistDrp(@PathVariable(name = "id") Integer tahun) { + postCreateDrpService.validateTahunDrp(DrpRequest.builder() + .tahun(tahun) + .build()); + return new EmptyResponse(); + } + @PostMapping public DrpResponse createDrp(@RequestBody DrpRequest drpRequest) { return postCreateDrpService.execute(drpRequest); diff --git a/src/main/java/com/iconplus/smartproc/model/entity/DrpPengadaan.java b/src/main/java/com/iconplus/smartproc/model/entity/DrpPengadaan.java index 192f20b..9f5808b 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/DrpPengadaan.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/DrpPengadaan.java @@ -9,6 +9,7 @@ import org.hibernate.annotations.Type; import javax.persistence.*; import java.math.BigDecimal; +import java.sql.Date; import java.sql.Timestamp; @Data @@ -63,10 +64,10 @@ public class DrpPengadaan extends BaseEntity { private Long strategiPengadaanId; @Column(name = "rencana_tanggal") - private Timestamp rencanaTanggal; + private Date rencanaTanggal; @Column(name = "target_tanggal") - private Timestamp targetTanggal; + private Date targetTanggal; @Column(name = "hpe") private BigDecimal hpe; diff --git a/src/main/java/com/iconplus/smartproc/model/entity/Users.java b/src/main/java/com/iconplus/smartproc/model/entity/Users.java index 06c169f..f464a50 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/Users.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/Users.java @@ -8,6 +8,7 @@ import lombok.NoArgsConstructor; import org.hibernate.annotations.Type; import javax.persistence.*; +import java.sql.Timestamp; @Data @Builder @@ -30,6 +31,9 @@ public class Users extends BaseEntity { @Column(name = "email") private String email; + @Column(name = "telepon") + private String telepon; + @Column(name = "password") private String password; @@ -45,6 +49,12 @@ public class Users extends BaseEntity { @Column(name = "role_id") private Long roleId; + @Column(name = "remember_id") + private String rememberId; + + @Column(name = "expired_time") + private Timestamp expiredTime; + @Column(name = "is_active") @Type(type = "org.hibernate.type.NumericBooleanType") private Boolean isActive; diff --git a/src/main/java/com/iconplus/smartproc/model/projection/DrpPengadaanView.java b/src/main/java/com/iconplus/smartproc/model/projection/DrpPengadaanView.java new file mode 100644 index 0000000..d0c8b52 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/DrpPengadaanView.java @@ -0,0 +1,64 @@ +package com.iconplus.smartproc.model.projection; + +import java.math.BigDecimal; +import java.sql.Date; + +public interface DrpPengadaanView { + + Long getId(); + void setId(Long id); + + Long getDrpId(); + void setDrpId(Long drpId); + + String getNomor(); + void setNomor(String nomor); + + String getNamaPengadaan(); + void setNamaPengadaan(String namaPengadaan); + + Long getLokasiId(); + void setLokasiId(Long lokasiId); + + Long getJenisPengadaanId(); + void setJenisPengadaanId(Long jenisPengadaanId); + + Long getUnitInisiatorId(); + void setUnitInisiatorId(Long unitInisiatorId); + + BigDecimal getHpe(); + void setHpe(BigDecimal hpe); + + BigDecimal getPagu(); + void setPagu(BigDecimal pagu); + + Long getSumberDanaId(); + void setSumberDanaId(Long sumberDanaId); + + Long getMetodePengadaanId(); + void setMetodePengadaanId(Long metodePengadaanId); + + Long getSupplyPositioningMatrix(); + void setSupplyPositioningMatrix(Long supplyPositioningMatrix); + + Long getMetodePenyampaianId(); + void setMetodePenyampaianId(Long metodePenyampaianId); + + Long getJenisKontrakId(); + void setJenisKontrakId(Long jenisKontrakId); + + Long getStrategiPengadaanId(); + void setStrategiPengadaanId(Long strategiPengadaanId); + + Date getRencanaTanggal(); + void setRencanaTanggal(Date rencanaTanggal); + + Date getTargetTanggal(); + void setTargetTanggal(Date targetTanggal); + + Boolean getIsActive(); + void setIsActive(Boolean isActive); + + Boolean getIsDelete(); + void setIsDelete(Boolean isDelete); +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/UserRoleView.java b/src/main/java/com/iconplus/smartproc/model/projection/UserRoleView.java index c8f0759..95ef7fe 100644 --- a/src/main/java/com/iconplus/smartproc/model/projection/UserRoleView.java +++ b/src/main/java/com/iconplus/smartproc/model/projection/UserRoleView.java @@ -17,6 +17,7 @@ public interface UserRoleView { Long getRoleId(); String getRole(); Boolean getIsDelete(); + String getTelepon(); void setId(Long id); void setUsername(String username); @@ -33,5 +34,6 @@ public interface UserRoleView { void setRoleId(Long roleId); void setRole(String role); void setIsDelete(Boolean isDelete); + void setTelepon(String telepon); } diff --git a/src/main/java/com/iconplus/smartproc/model/request/DrpDokumenRequest.java b/src/main/java/com/iconplus/smartproc/model/request/DrpDokumenRequest.java index 21917be..a42a55d 100644 --- a/src/main/java/com/iconplus/smartproc/model/request/DrpDokumenRequest.java +++ b/src/main/java/com/iconplus/smartproc/model/request/DrpDokumenRequest.java @@ -14,7 +14,6 @@ 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/DrpPengadaanDokumenRequest.java b/src/main/java/com/iconplus/smartproc/model/request/DrpPengadaanDokumenRequest.java index 41d293f..b1819d1 100644 --- a/src/main/java/com/iconplus/smartproc/model/request/DrpPengadaanDokumenRequest.java +++ b/src/main/java/com/iconplus/smartproc/model/request/DrpPengadaanDokumenRequest.java @@ -19,7 +19,6 @@ public class DrpPengadaanDokumenRequest extends BaseRequest { private Long drpId; 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/DrpPengadaanRequest.java b/src/main/java/com/iconplus/smartproc/model/request/DrpPengadaanRequest.java index 453b309..7b80947 100644 --- a/src/main/java/com/iconplus/smartproc/model/request/DrpPengadaanRequest.java +++ b/src/main/java/com/iconplus/smartproc/model/request/DrpPengadaanRequest.java @@ -5,14 +5,10 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import org.hibernate.annotations.Type; import org.springframework.data.domain.Pageable; -import javax.persistence.Column; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; import java.math.BigDecimal; +import java.sql.Date; import java.sql.Timestamp; import java.util.List; @@ -36,8 +32,8 @@ public class DrpPengadaanRequest extends BaseRequest { private Long metodePenyampaianId; private Long jenisKontrakId; private Long strategiPengadaanId; - private Timestamp rencanaTanggal; - private Timestamp targetTanggal; + private Date rencanaTanggal; + private Date targetTanggal; private BigDecimal hpe; private Boolean isActive; private Boolean isDelete; diff --git a/src/main/java/com/iconplus/smartproc/model/request/ForgotPasswordRequest.java b/src/main/java/com/iconplus/smartproc/model/request/ForgotPasswordRequest.java index 16cb94c..7de7671 100644 --- a/src/main/java/com/iconplus/smartproc/model/request/ForgotPasswordRequest.java +++ b/src/main/java/com/iconplus/smartproc/model/request/ForgotPasswordRequest.java @@ -11,7 +11,7 @@ import lombok.NoArgsConstructor; @AllArgsConstructor @NoArgsConstructor public class ForgotPasswordRequest extends BaseRequest { - private String email; + private String rememberId; private String newPassword; private String confirmationPassword; } diff --git a/src/main/java/com/iconplus/smartproc/model/request/InitForgotPasswordRequest.java b/src/main/java/com/iconplus/smartproc/model/request/InitForgotPasswordRequest.java new file mode 100644 index 0000000..7f54c0e --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/InitForgotPasswordRequest.java @@ -0,0 +1,16 @@ +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 InitForgotPasswordRequest extends BaseRequest { + + private String email; +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/UsersRequest.java b/src/main/java/com/iconplus/smartproc/model/request/UsersRequest.java index 77244bd..be46f3d 100644 --- a/src/main/java/com/iconplus/smartproc/model/request/UsersRequest.java +++ b/src/main/java/com/iconplus/smartproc/model/request/UsersRequest.java @@ -26,6 +26,7 @@ public class UsersRequest extends BaseRequest { private Long roleId; private String role; private String email; + private String telepon; private Boolean isActive; private String search; private transient Pageable pageable; diff --git a/src/main/java/com/iconplus/smartproc/model/response/DrpPengadaanDokumenResponse.java b/src/main/java/com/iconplus/smartproc/model/response/DrpPengadaanDokumenResponse.java new file mode 100644 index 0000000..e518ff8 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/DrpPengadaanDokumenResponse.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; + + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class DrpPengadaanDokumenResponse extends BaseResponse { + + private Long id; + private Long drpId; + private Long jenisDokumenId; + private String filename; + private String keterangan; + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/DrpPengadaanResponse.java b/src/main/java/com/iconplus/smartproc/model/response/DrpPengadaanResponse.java index 8a12fef..bbf336d 100644 --- a/src/main/java/com/iconplus/smartproc/model/response/DrpPengadaanResponse.java +++ b/src/main/java/com/iconplus/smartproc/model/response/DrpPengadaanResponse.java @@ -7,6 +7,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import java.math.BigDecimal; +import java.sql.Date; import java.sql.Timestamp; @Data @@ -29,8 +30,8 @@ public class DrpPengadaanResponse extends BaseResponse { private Long metodePenyampaianId; private Long jenisKontrakId; private Long strategiPengadaanId; - private Timestamp rencanaTanggal; - private Timestamp targetTanggal; + private Date rencanaTanggal; + private Date targetTanggal; private BigDecimal hpe; private Boolean isActive; private Boolean isDelete; 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 3f95e38..efb60dd 100644 --- a/src/main/java/com/iconplus/smartproc/model/response/DrpResponse.java +++ b/src/main/java/com/iconplus/smartproc/model/response/DrpResponse.java @@ -21,5 +21,7 @@ public class DrpResponse extends BaseResponse { private Boolean isActive; private Boolean isDelete; - private List data; + private List dataDrpDokumen; + + private List dataDrpPengadaanDokumen; } diff --git a/src/main/java/com/iconplus/smartproc/model/response/InitForgotPasswordResponse.java b/src/main/java/com/iconplus/smartproc/model/response/InitForgotPasswordResponse.java new file mode 100644 index 0000000..b005be0 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/InitForgotPasswordResponse.java @@ -0,0 +1,17 @@ +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 InitForgotPasswordResponse extends BaseResponse { + + private String rememberId; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/UsersResponse.java b/src/main/java/com/iconplus/smartproc/model/response/UsersResponse.java index b001a4a..7bbfd57 100644 --- a/src/main/java/com/iconplus/smartproc/model/response/UsersResponse.java +++ b/src/main/java/com/iconplus/smartproc/model/response/UsersResponse.java @@ -28,6 +28,7 @@ public class UsersResponse extends BaseResponse { private String role; private String email; + private String telepon; private Boolean isActive; private Boolean isDelete; } diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanDokumenRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanDokumenRepository.java index 22a8185..a3ccf03 100644 --- a/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanDokumenRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanDokumenRepository.java @@ -4,6 +4,11 @@ import com.iconplus.smartproc.model.entity.DrpPengadaanDokumen; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository public interface DrpPengadaanDokumenRepository extends JpaRepository { + + List findByDrpIdAndIsDeleteFalse(Long drpId); + } diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanRepository.java index 65d585c..d9857d1 100644 --- a/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanRepository.java @@ -1,9 +1,13 @@ package com.iconplus.smartproc.repository; import com.iconplus.smartproc.model.entity.DrpPengadaan; +import org.springframework.data.domain.Page; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; @Repository public interface DrpPengadaanRepository extends JpaRepository { + + } diff --git a/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java b/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java index 28c7327..04fb221 100644 --- a/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java @@ -25,6 +25,7 @@ public interface UsersRepository extends JpaRepository { "u.instansiId as instansiId, " + "i.instansi as instansi, " + "u.email as email, " + + "u.telepon as telepon, " + "u.isActive as isActive, " + "u.isDelete as isDelete " + "FROM Users u " + @@ -94,5 +95,11 @@ public interface UsersRepository extends JpaRepository { "Where u.isDelete = false " + "AND u.id = :id") Optional getUserByIdAndDeletedFase(Long id); + + @Query(value = "SELECT * FROM users " + + "WHERE remember_id = :rememberId " + + "AND is_delete = 0 " + + "AND expired_time >= CURRENT_TIMESTAMP", nativeQuery = true) + Optional getUsersByEmailAndExpiredTime(String rememberId); } diff --git a/src/main/java/com/iconplus/smartproc/service/CommonService.java b/src/main/java/com/iconplus/smartproc/service/CommonService.java index 3818415..bf2d274 100644 --- a/src/main/java/com/iconplus/smartproc/service/CommonService.java +++ b/src/main/java/com/iconplus/smartproc/service/CommonService.java @@ -42,7 +42,7 @@ public class CommonService { throw new BusinessException(HttpStatus.CONFLICT, Constants.ERR_CODE_10001, Constants.ERR_TTL_10001, - String.format(Constants.ERR_MSG_10001, "Role", input.getId())); + String.format(Constants.ERR_MSG_10001, "Role", input.getRoleId())); } var bidang= bidangRepository.findByIdAndIsDeleteFalse(input.getBidangId()); @@ -50,7 +50,7 @@ public class CommonService { throw new BusinessException(HttpStatus.CONFLICT, Constants.ERR_CODE_10001, Constants.ERR_TTL_10001, - String.format(Constants.ERR_MSG_10001, "Bidang", input.getId())); + String.format(Constants.ERR_MSG_10001, "Bidang", input.getBidangId())); } var instansi= instansiRepository.findByIdAndIsDeleteFalse(input.getInstansiId()); @@ -58,7 +58,7 @@ public class CommonService { throw new BusinessException(HttpStatus.CONFLICT, Constants.ERR_CODE_10001, Constants.ERR_TTL_10001, - String.format(Constants.ERR_MSG_10001, "Instansi", input.getId())); + String.format(Constants.ERR_MSG_10001, "Instansi", input.getInstansiId())); } } diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/ForgotPasswordService.java b/src/main/java/com/iconplus/smartproc/service/authentication/ForgotPasswordService.java index 35dd3cd..b76dbd0 100644 --- a/src/main/java/com/iconplus/smartproc/service/authentication/ForgotPasswordService.java +++ b/src/main/java/com/iconplus/smartproc/service/authentication/ForgotPasswordService.java @@ -26,15 +26,14 @@ public class ForgotPasswordService implements BaseService new BusinessException(Constants.ERR_CODE_10001, Constants.ERR_TTL_10001, - String.format(Constants.ERR_MSG_10001, "User", input.getEmail()))); + String.format(Constants.ERR_MSG_10001, "Remember-id", input.getRememberId()))); String newPassword = commonService.getPassword(input.getNewPassword()); String confirmationPassword = commonService.getPassword(input.getConfirmationPassword()); - if (!StringUtils.equalsIgnoreCase(newPassword, confirmationPassword)) { throw new BusinessException(HttpStatus.CONFLICT, Constants.ERR_CODE_10007, diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/InitForgotPasswordService.java b/src/main/java/com/iconplus/smartproc/service/authentication/InitForgotPasswordService.java new file mode 100644 index 0000000..1b9d168 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/authentication/InitForgotPasswordService.java @@ -0,0 +1,46 @@ +package com.iconplus.smartproc.service.authentication; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.InitForgotPasswordRequest; +import com.iconplus.smartproc.model.response.InitForgotPasswordResponse; +import com.iconplus.smartproc.repository.UsersRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.sql.Timestamp; +import java.time.Instant; +import java.util.UUID; + +@Service +public class InitForgotPasswordService implements BaseService { + + @Value("${config.forgot-password.expired-time:1440}") + private Integer expiredTime; + + private final UsersRepository usersRepository; + + public InitForgotPasswordService(UsersRepository usersRepository) { + this.usersRepository = usersRepository; + } + + @Override + public InitForgotPasswordResponse execute(InitForgotPasswordRequest input) { + + var users = usersRepository.findByEmailAndIsDeleteFalse(input.getEmail()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "User", input.getEmail()))); + + var expirationTime = Timestamp.from(Instant.now().plusMillis(expiredTime * (long) 60000)); + + users.setRememberId(UUID.randomUUID().toString()); + users.setExpiredTime(expirationTime); + usersRepository.save(users); + + return InitForgotPasswordResponse.builder() + .rememberId(users.getRememberId()) + .build(); + } +} 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 f7976d7..92bea46 100644 --- a/src/main/java/com/iconplus/smartproc/service/drp/GetDrpService.java +++ b/src/main/java/com/iconplus/smartproc/service/drp/GetDrpService.java @@ -3,10 +3,14 @@ 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.entity.DrpPengadaanDokumen; import com.iconplus.smartproc.model.request.DrpRequest; import com.iconplus.smartproc.model.response.DrpDokumenResponse; +import com.iconplus.smartproc.model.response.DrpPengadaanDokumenResponse; +import com.iconplus.smartproc.model.response.DrpPengadaanResponse; import com.iconplus.smartproc.model.response.DrpResponse; import com.iconplus.smartproc.repository.DrpDokumenRepository; +import com.iconplus.smartproc.repository.DrpPengadaanDokumenRepository; import com.iconplus.smartproc.repository.DrpRepository; import com.iconplus.smartproc.util.Constants; import org.springframework.stereotype.Service; @@ -19,11 +23,14 @@ public class GetDrpService implements BaseService { private final DrpRepository drpRepository; private final DrpDokumenRepository drpDokumenRepository; + private final DrpPengadaanDokumenRepository drpPengadaanDokumenRepository; public GetDrpService(DrpRepository drpRepository, - DrpDokumenRepository drpDokumenRepository) { + DrpDokumenRepository drpDokumenRepository, + DrpPengadaanDokumenRepository drpPengadaanDokumenRepository) { this.drpRepository = drpRepository; this.drpDokumenRepository = drpDokumenRepository; + this.drpPengadaanDokumenRepository = drpPengadaanDokumenRepository; } @Override @@ -33,8 +40,41 @@ 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<>(); + setDrpDokumen(input, drpDokumenResponseList); + + List drpPengadaanDokumenResponseList = new ArrayList<>(); + setDrpPengadaanDokumen(input, drpPengadaanDokumenResponseList); + + + return DrpResponse.builder() + .id(drp.getId()) + .tahun(drp.getTahun()) + .approveStatus(drp.getApproveStatus()) + .approveDate(drp.getApproveDate()) + .isActive(drp.getIsActive()) + .isDelete(drp.getIsDelete()) + .dataDrpDokumen(drpDokumenResponseList) + .dataDrpPengadaanDokumen(drpPengadaanDokumenResponseList) + .build(); + } + + private void setDrpPengadaanDokumen(DrpRequest input, List drpPengadaanDokumenResponseList) { + var drpPengadaanDokumenList = drpPengadaanDokumenRepository.findByDrpIdAndIsDeleteFalse(input.getId()); + + for (DrpPengadaanDokumen drpPengadaanDokumen : drpPengadaanDokumenList) { + DrpPengadaanDokumenResponse drpPengadaanDokumenResponse = DrpPengadaanDokumenResponse.builder() + .id(drpPengadaanDokumen.getId()) + .drpId(drpPengadaanDokumen.getDrpId()) + .jenisDokumenId(drpPengadaanDokumen.getJenisDokumenId()) + .filename(drpPengadaanDokumen.getFilename()) + .build(); + drpPengadaanDokumenResponseList.add(drpPengadaanDokumenResponse); + } + } + + private void setDrpDokumen(DrpRequest input, List drpDokumenResponseList) { + var drpDokumenList = drpDokumenRepository.findByDrpIdAndIsDeleteFalse(input.getId()); for (DrpDokumen drpDokumen : drpDokumenList) { DrpDokumenResponse drpDokumenResponse = DrpDokumenResponse.builder() @@ -45,15 +85,5 @@ public class GetDrpService implements BaseService { .build(); drpDokumenResponseList.add(drpDokumenResponse); } - - return DrpResponse.builder() - .id(drp.getId()) - .tahun(drp.getTahun()) - .approveStatus(drp.getApproveStatus()) - .approveDate(drp.getApproveDate()) - .isActive(drp.getIsActive()) - .isDelete(drp.getIsDelete()) - .data(drpDokumenResponseList) - .build(); } } diff --git a/src/main/java/com/iconplus/smartproc/service/drp/GetListDrpPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/drp/GetListDrpPengadaanService.java new file mode 100644 index 0000000..f074027 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/drp/GetListDrpPengadaanService.java @@ -0,0 +1,23 @@ +package com.iconplus.smartproc.service.drp; + +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.DrpPengadaanRequest; +import com.iconplus.smartproc.model.response.DrpPengadaanResponse; +import com.iconplus.smartproc.repository.DrpPengadaanRepository; +import org.springframework.stereotype.Service; + +@Service +public class GetListDrpPengadaanService implements BaseService { + + private final DrpPengadaanRepository drpPengadaanRepository; + + public GetListDrpPengadaanService(DrpPengadaanRepository drpPengadaanRepository) { + this.drpPengadaanRepository = drpPengadaanRepository; + } + + @Override + public DrpPengadaanResponse execute(DrpPengadaanRequest input) { + + return null; + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/drp/PostCreateDrpService.java b/src/main/java/com/iconplus/smartproc/service/drp/PostCreateDrpService.java index cf64a50..c1851dd 100644 --- a/src/main/java/com/iconplus/smartproc/service/drp/PostCreateDrpService.java +++ b/src/main/java/com/iconplus/smartproc/service/drp/PostCreateDrpService.java @@ -38,12 +38,7 @@ public class PostCreateDrpService implements BaseService drpOptional = drpRepository.findByTahunAndIsDeleteFalse(input.getTahun()); - if (drpOptional.isPresent()) { - throw new BusinessException(Constants.ERR_CODE_10010, - Constants.ERR_TTL_10010, - Constants.ERR_MSG_10010); - } + validateTahunDrp(input); Drp drp = Drp.builder() .tahun(input.getTahun()) @@ -90,4 +85,13 @@ public class PostCreateDrpService implements BaseService drpOptional = drpRepository.findByTahunAndIsDeleteFalse(input.getTahun()); + if (drpOptional.isPresent()) { + throw new BusinessException(Constants.ERR_CODE_10010, + Constants.ERR_TTL_10010, + Constants.ERR_MSG_10010); + } + } } diff --git a/src/main/java/com/iconplus/smartproc/service/manajemenuser/GetListUserService.java b/src/main/java/com/iconplus/smartproc/service/manajemenuser/GetListUserService.java index 51cd721..de3aa5e 100644 --- a/src/main/java/com/iconplus/smartproc/service/manajemenuser/GetListUserService.java +++ b/src/main/java/com/iconplus/smartproc/service/manajemenuser/GetListUserService.java @@ -44,6 +44,7 @@ public class GetListUserService implements BaseService { + @Value("${config.default-password:plgg123}") + private String defaultPassword; + private UsersRepository usersRepository; private CommonService commonService; @@ -39,7 +43,12 @@ public class PostCreateUserService implements BaseService Date: Mon, 29 May 2023 22:00:14 +0700 Subject: [PATCH 38/63] fix menus --- .../model/projection/MenusPermissionView.java | 38 ++++++++++++++ .../model/response/LoginResponse.java | 5 +- .../response/MenusPermissionResponse.java | 27 ++++++++++ .../repository/PermissionRepository.java | 19 +++++++ .../service/authentication/LoginService.java | 52 ++++++++++++++++--- 5 files changed, 133 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/iconplus/smartproc/model/projection/MenusPermissionView.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/MenusPermissionResponse.java diff --git a/src/main/java/com/iconplus/smartproc/model/projection/MenusPermissionView.java b/src/main/java/com/iconplus/smartproc/model/projection/MenusPermissionView.java new file mode 100644 index 0000000..02a3d7a --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/MenusPermissionView.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.model.projection; + +public interface MenusPermissionView { + + Long getId(); + void setId(Long id); + + String getNama(); + void setNama(String nama); + + Long getParentId(); + void setParentId(Long parentId); + + Long getUrutan(); + void setUrutan(Long urutan); + + String getIcon(); + void setIcon(String icon); + + String getLink(); + void setLink(String link); + + Boolean getCanView(); + void setCanView(Boolean canView); + + Boolean getCanRead(); + void setCanRead(Boolean canRead); + + Boolean getCanCreate(); + void setCanCreate(Boolean canCreate); + + Boolean getCanUpdate(); + void setCanUpdate(Boolean canUpdate); + + Boolean getCanDelete(); + void setCanDelete(Boolean canDelete); + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/LoginResponse.java b/src/main/java/com/iconplus/smartproc/model/response/LoginResponse.java index 10c2b58..4fa985c 100644 --- a/src/main/java/com/iconplus/smartproc/model/response/LoginResponse.java +++ b/src/main/java/com/iconplus/smartproc/model/response/LoginResponse.java @@ -6,7 +6,7 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.util.Set; +import java.util.List; @Data @Builder @@ -14,6 +14,7 @@ import java.util.Set; @NoArgsConstructor public class LoginResponse extends BaseResponse { + private Long userId; private String accessToken; private Integer validity; private String refreshToken; @@ -21,6 +22,6 @@ public class LoginResponse extends BaseResponse { private String email; private Long roleId; private String role; - Set accessMenu; + private List menus; } diff --git a/src/main/java/com/iconplus/smartproc/model/response/MenusPermissionResponse.java b/src/main/java/com/iconplus/smartproc/model/response/MenusPermissionResponse.java new file mode 100644 index 0000000..d378edb --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/MenusPermissionResponse.java @@ -0,0 +1,27 @@ +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 MenusPermissionResponse extends BaseResponse { + + private Long id; + private String nama; + private Long parentId; + private Long urutan; + private String icon; + private String link; + private Boolean canView; + private Boolean canRead; + private Boolean canCreate; + private Boolean canDelete; + private Boolean canUpdate; + +} diff --git a/src/main/java/com/iconplus/smartproc/repository/PermissionRepository.java b/src/main/java/com/iconplus/smartproc/repository/PermissionRepository.java index 68813b4..2aa8a42 100644 --- a/src/main/java/com/iconplus/smartproc/repository/PermissionRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/PermissionRepository.java @@ -1,6 +1,7 @@ package com.iconplus.smartproc.repository; import com.iconplus.smartproc.model.entity.Permission; +import com.iconplus.smartproc.model.projection.MenusPermissionView; import com.iconplus.smartproc.model.projection.PermissionView; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; @@ -28,4 +29,22 @@ public interface PermissionRepository extends JpaRepository { List getAllPermissionsByRoleId(Long roleId); Optional findByRoleIdAndMenuIdAndIsDeleteFalse(Long roleId, Long menuId); + + @Query(value = "SELECT m.id as id, " + + "m.nama as nama, " + + "m.parentId as parentId, " + + "m.urutan as urutan, " + + "m.icon as icon, " + + "m.link as link, " + + "p.canView as canView, " + + "p.canRead as canRead, " + + "p.canCreate as canCreate, " + + "p.canUpdate as canUpdate, " + + "p.canDelete as canDelete " + + "FROM Permission p " + + "JOIN Menus m ON m.id = p.menuId " + + "WHERE m.isDelete = false " + + "AND p.isDelete = false " + + "AND p.roleId = :roleId") + List getListMenusPermission(Long roleId); } diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java b/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java index 3052f47..f24965b 100644 --- a/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java +++ b/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java @@ -4,13 +4,18 @@ import com.iconplus.smartproc.configuration.JwtTokenUtil; import com.iconplus.smartproc.exception.BusinessException; import com.iconplus.smartproc.helper.service.BaseService; import com.iconplus.smartproc.model.entity.TokenManagement; +import com.iconplus.smartproc.model.projection.MenusPermissionView; import com.iconplus.smartproc.model.request.LoginRequest; import com.iconplus.smartproc.model.response.LoginResponse; +import com.iconplus.smartproc.model.response.MenusPermissionResponse; import com.iconplus.smartproc.model.token.TokenContent; +import com.iconplus.smartproc.repository.MenusRepository; +import com.iconplus.smartproc.repository.PermissionRepository; import com.iconplus.smartproc.repository.UsersRepository; import com.iconplus.smartproc.service.CommonService; import com.iconplus.smartproc.util.Constants; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; @@ -18,9 +23,7 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; +import java.util.*; @Service @Slf4j @@ -34,14 +37,19 @@ public class LoginService implements BaseService { private final UsersRepository usersRepository; private final JwtTokenUtil jwtTokenUtil; private final CommonService commonService; - + private final MenusRepository menusRepository; + private final PermissionRepository permissionRepository; public LoginService(UsersRepository userRepository, JwtTokenUtil jwtTokenUtil, - CommonService commonService) { + CommonService commonService, + MenusRepository menusRepository, + PermissionRepository permissionRepository) { this.usersRepository = userRepository; this.jwtTokenUtil = jwtTokenUtil; this.commonService = commonService; + this.menusRepository = menusRepository; + this.permissionRepository = permissionRepository; } @@ -65,6 +73,35 @@ public class LoginService implements BaseService { Constants.ERR_TTL_10004, Constants.ERR_MSG_10004); } + Set accessMenu = new HashSet<>(); + List menusPermissionResponseList = new ArrayList<>(); + var listMenusPermission = permissionRepository.getListMenusPermission(userRoleView.getRoleId()); + for (MenusPermissionView menusPermissionView : listMenusPermission) { + if (BooleanUtils.isTrue(menusPermissionView.getCanView()) || + BooleanUtils.isTrue(menusPermissionView.getCanCreate()) || + BooleanUtils.isTrue(menusPermissionView.getCanUpdate()) || + BooleanUtils.isTrue(menusPermissionView.getCanDelete()) || + BooleanUtils.isTrue(menusPermissionView.getCanRead())) { + accessMenu.add(menusPermissionView.getNama()); + } + + MenusPermissionResponse menusPermissionResponse = MenusPermissionResponse.builder() + .id(menusPermissionView.getId()) + .nama(menusPermissionView.getNama()) + .parentId(menusPermissionView.getParentId()) + .urutan(menusPermissionView.getUrutan()) + .icon(menusPermissionView.getIcon()) + .link(menusPermissionView.getLink()) + .canView(menusPermissionView.getCanView()) + .canRead(menusPermissionView.getCanRead()) + .canCreate(menusPermissionView.getCanCreate()) + .canUpdate(menusPermissionView.getCanUpdate()) + .canDelete(menusPermissionView.getCanDelete()) + .build(); + + menusPermissionResponseList.add(menusPermissionResponse); + + } var tokenContent = TokenContent.builder() .userId(userRoleView.getId()) @@ -78,7 +115,7 @@ public class LoginService implements BaseService { .bidang(userRoleView.getBidang()) .jabatanId(userRoleView.getJabatanId()) .jabatan(userRoleView.getJabatan()) - .accessMenu(new HashSet<>()) + .accessMenu(accessMenu) .build(); Map claims = new HashMap<>(); @@ -104,9 +141,12 @@ public class LoginService implements BaseService { .accessToken(accessToken) .validity(accessTokenExp * 60) .refreshToken(refreshToken) + .userId(userRoleView.getId()) .username(userRoleView.getUsername()) .email(userRoleView.getEmail()) + .roleId(userRoleView.getRoleId()) .role(userRoleView.getRole()) + .menus(menusPermissionResponseList) .build(); } } From 746d7ec4ae8a0cdced4fc9d93d2590dcf5349207 Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Mon, 29 May 2023 22:01:41 +0700 Subject: [PATCH 39/63] fix global variabel default password --- .../smartproc/service/manajemenuser/PostCreateUserService.java | 2 +- src/main/resources/application-local.yml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/iconplus/smartproc/service/manajemenuser/PostCreateUserService.java b/src/main/java/com/iconplus/smartproc/service/manajemenuser/PostCreateUserService.java index 255c32a..dd5212b 100644 --- a/src/main/java/com/iconplus/smartproc/service/manajemenuser/PostCreateUserService.java +++ b/src/main/java/com/iconplus/smartproc/service/manajemenuser/PostCreateUserService.java @@ -18,7 +18,7 @@ import org.springframework.stereotype.Service; @Service public class PostCreateUserService implements BaseService { - @Value("${config.default-password:plgg123}") + @Value("${config.password.default-password:plgg123}") private String defaultPassword; private UsersRepository usersRepository; diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index 7e95586..67f715a 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -8,6 +8,7 @@ jwt: config: password: + default-password : plgg123 private-key: MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCRyUePQWkg+IH5dAvQ/+YlVR1htFdhL2+NJtWWXNW15mBUOEr+yvJsOYAzY9KfxmVqRRr1uQEAaaKjNpxwNEnHkMn8LzSEhRxCd4Mqpa5jquCdPfMqGO3cwdkrQjZVfm3tCBYd2HkOeL8PTwlbBORucf6qHPxZvjGVXQeiRAHTlgHTR1647T1+vlDDcaOBJIrwcD566hqOCKMxtE+5F4DieSYEuHJMyvJf/WH2+LxbP2t4Z6IV0tksQKtwyZstEXd3yIL8chKoFh2p3KO8aFfMa7X0aiDVC3z+o2Hh8+YHQt7cSl+NGRxasuqLbY3twZEC9qAIkkDOpBUp7lLZ9NVHAgMBAAECggEACd0GXGjehf6KPKhfTEqj9Y6mqD+dUdP1xiUEemHZi68EgW41lLuCX1Qcml18mJbBscjvJATaTn7XJBfDycuf2kKvh8Jh2T1wRgbz9uSywceD3t+cHhMFtNPgr46RQoOFSG4toONOfW4p7w034tKX6ekIg9XmNOQrUqGyrIXRYdFADB68HaLxlgS0zKrkhp14+wH/krihfS3H7Z+wBVozWSgyHCVbov68l764w3UWZYEEe2mFl31HqhD5KEo8QXODWuemUTROaXKF/iOsPEMC8Qz4Jdqme+iAlV4b2LNaSTEP/NG/kFIE443RlyFo9YfVNw7/osgAksXAPdOZd8qt8QKBgQDYHLX2HVaGj9zvAlqSKjf6VuuxgdRUYW4rqQjm97YmAJNp4udjKLUgD7yDuImYh/E/IWjDxf1Hf3fTjcc98iPMsvP3lkXxdOxMLLlnMv0Ewxof8gATQndU/w+/XuuAZ9cy3vtheo59i4rFpik8XFAH6kPk/gWI9DAE/IbXuOSNUwKBgQCssaxMwfrB9nwQ9eDXv2z+Ce4sZbtZEJYD3a29OGshLw8AH//z/BxPzZRTFy63IfmmIyYSGaC7ZdkrakLhlBXrhi/P0wafp7xEsONb8uNYWDDWoDewH75GX/SPhx7bX0GSeiX6X5XAUg97j0xlfYllIieMLCw4rLU+97ge5xalvQKBgQDXJjYtEGYczsqYFBLRI0DZdIFvFZ6qZtkElGMtdf0b9kTMDL5pZJR1l9UImcY6WVRekkc3aDvQW2GS9rodvJvRZXMm0K9PRCUfbQMjb4qfnBC9LvLOOcSNlOQ7lCcGjdqbZYyELjv/VtXQEa1Jz2lJh/sR1abzAo9v12vzBbpbywKBgQCkdEZKimeLknivhhbqHgdjHH3NlcuFk3/oipBLI5ERdsjoK5EI/crQTEu1nNwF1brx9YLptbIVA3Z+G6E5RFZjhdO+K42hOJDXMUQyaekKVmGb4dNmS7RdPD+e9uPxsJK3NM850RDApuTLm7j65UOUJaRXnjE2f3HSVwDlnNc6WQKBgQCccgyIJx5HnxdkYYFJBnuwo1aDNo2TOqiy9wPXHzxuR8TsvqmbbYoxT0kJkqOjkbQII08nLyHJ3KL7XK3dCEGmdRArHjo0PCLMzKqBZdhtfxN413HxmwXIF5zM6mhS4g8XrDyNW7EhLp/putnpmE6XI9VnEFx/LxAd8nJ9tUd39A== public-key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkclHj0FpIPiB+XQL0P/mJVUdYbRXYS9vjSbVllzVteZgVDhK/srybDmAM2PSn8ZlakUa9bkBAGmiozaccDRJx5DJ/C80hIUcQneDKqWuY6rgnT3zKhjt3MHZK0I2VX5t7QgWHdh5Dni/D08JWwTkbnH+qhz8Wb4xlV0HokQB05YB00deuO09fr5Qw3GjgSSK8HA+euoajgijMbRPuReA4nkmBLhyTMryX/1h9vi8Wz9reGeiFdLZLECrcMmbLRF3d8iC/HISqBYdqdyjvGhXzGu19Gog1Qt8/qNh4fPmB0Le3EpfjRkcWrLqi22N7cGRAvagCJJAzqQVKe5S2fTVRwIDAQAB forgot-password: From 06058d279e0cef454c511f96e75baacd0c67e927 Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Tue, 30 May 2023 11:12:25 +0700 Subject: [PATCH 40/63] upload dokumen --- .../smartproc/controller/DrpController.java | 78 ++++++++++++++----- .../smartproc/helper/service/BaseService.java | 5 +- .../model/projection/DrpPengadaanView.java | 31 +++++++- .../model/request/DrpDokumenRequest.java | 3 + .../model/response/DrpPengadaanResponse.java | 25 +++++- .../response/GetListDrpPengadaanResponse.java | 19 +++++ .../repository/DrpPengadaanRepository.java | 42 ++++++++++ .../drp/GetListDrpPengadaanService.java | 58 +++++++++++++- .../service/drp/PostCreateDrpService.java | 22 ++---- .../drp/PostCreateTahunDrpService.java | 45 +++++++++++ .../PostDrpUploadDokumenPendukungService.java | 47 +++++++++++ .../drp/PostDrpUploadDokumenRKAPService.java | 46 +++++++++++ .../manajemenuser/PostCreateUserService.java | 2 +- src/main/resources/application-local.yml | 5 +- 14 files changed, 381 insertions(+), 47 deletions(-) create mode 100644 src/main/java/com/iconplus/smartproc/model/response/GetListDrpPengadaanResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/service/drp/PostCreateTahunDrpService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/drp/PostDrpUploadDokumenPendukungService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/drp/PostDrpUploadDokumenRKAPService.java diff --git a/src/main/java/com/iconplus/smartproc/controller/DrpController.java b/src/main/java/com/iconplus/smartproc/controller/DrpController.java index 88d4b47..46274e7 100644 --- a/src/main/java/com/iconplus/smartproc/controller/DrpController.java +++ b/src/main/java/com/iconplus/smartproc/controller/DrpController.java @@ -1,18 +1,17 @@ package com.iconplus.smartproc.controller; import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.DrpDokumenRequest; import com.iconplus.smartproc.model.request.DrpPengadaanRequest; import com.iconplus.smartproc.model.request.DrpRequest; -import com.iconplus.smartproc.model.response.DrpPengadaanResponse; -import com.iconplus.smartproc.model.response.DrpResponse; -import com.iconplus.smartproc.model.response.GetListDrpResponse; -import com.iconplus.smartproc.service.drp.GetDrpService; -import com.iconplus.smartproc.service.drp.GetListDrpService; -import com.iconplus.smartproc.service.drp.PostCreateDrpPengadaanService; -import com.iconplus.smartproc.service.drp.PostCreateDrpService; +import com.iconplus.smartproc.model.response.*; +import com.iconplus.smartproc.service.drp.*; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; @CrossOrigin(origins = "${fe.server}", allowCredentials = "true") @RestController @@ -23,15 +22,27 @@ public class DrpController { private final GetListDrpService getListDrpService; private final PostCreateDrpService postCreateDrpService; private final PostCreateDrpPengadaanService postCreateDrpPengadaanService; + private final GetListDrpPengadaanService getListDrpPengadaanService; + private final PostDrpUploadDokumenRKAPService postDrpUploadDokumenRKAPService; + private final PostDrpUploadDokumenPendukungService postDrpUploadDokumenPendukungService; + private final PostCreateTahunDrpService postCreateTahunDrpService; public DrpController(GetDrpService getDrpService, GetListDrpService getListDrpService, PostCreateDrpService postCreateDrpService, - PostCreateDrpPengadaanService postCreateDrpPengadaanService) { + PostCreateDrpPengadaanService postCreateDrpPengadaanService, + GetListDrpPengadaanService getListDrpPengadaanService, + PostDrpUploadDokumenRKAPService postDrpUploadDokumenRKAPService, + PostCreateTahunDrpService postCreateTahunDrpService, + PostDrpUploadDokumenPendukungService postDrpUploadDokumenPendukungService) { this.getDrpService = getDrpService; this.getListDrpService = getListDrpService; this.postCreateDrpService = postCreateDrpService; this.postCreateDrpPengadaanService = postCreateDrpPengadaanService; + this.getListDrpPengadaanService = getListDrpPengadaanService; + this.postDrpUploadDokumenRKAPService = postDrpUploadDokumenRKAPService; + this.postDrpUploadDokumenPendukungService = postDrpUploadDokumenPendukungService; + this.postCreateTahunDrpService = postCreateTahunDrpService; } @GetMapping @@ -48,19 +59,33 @@ public class DrpController { return getListDrpService.execute(drpRequest); } - @GetMapping("/{id}") - public DrpResponse getDrp(@PathVariable Long id) { - return getDrpService.execute(DrpRequest.builder() - .id(id) + + @PostMapping("/tahun") + public DrpResponse createTahunDrp(@RequestBody DrpRequest drpRequest) { + return postCreateTahunDrpService.execute(drpRequest); + } + + + @PostMapping("/upload/rkap") + public DrpDokumenResponse uploadDokumenRkap(@RequestParam(name = "jenisDokumenId") Long jenisDokumenId, + @RequestParam(name = "keterangan") String keterangan, + @RequestParam(name = "file") MultipartFile file) throws IOException { + return postDrpUploadDokumenRKAPService.execute(DrpDokumenRequest.builder() + .jenisDokumenId(jenisDokumenId) + .keterangan(keterangan) + .file(file) .build()); } - @GetMapping("/tahun/{id}") - public EmptyResponse getExistDrp(@PathVariable(name = "id") Integer tahun) { - postCreateDrpService.validateTahunDrp(DrpRequest.builder() - .tahun(tahun) - .build()); - return new EmptyResponse(); + @PostMapping("/upload/pendukung") + public DrpDokumenResponse uploadDokumenPendukung(@RequestParam(name = "jenisDokumenId") Long jenisDokumenId, + @RequestParam(name = "keterangan") String keterangan, + @RequestParam(name = "file") MultipartFile file) throws IOException { + return postDrpUploadDokumenPendukungService.execute(DrpDokumenRequest.builder() + .jenisDokumenId(jenisDokumenId) + .keterangan(keterangan) + .file(file) + .build()); } @PostMapping @@ -68,14 +93,27 @@ public class DrpController { return postCreateDrpService.execute(drpRequest); } + @GetMapping("/{id}") + public DrpResponse getDrp(@PathVariable Long id) { + return getDrpService.execute(DrpRequest.builder() + .id(id) + .build()); + } + @PostMapping("/pengadaan") public DrpPengadaanResponse createDrpPengadaan(@RequestBody DrpPengadaanRequest drpPengadaanRequest) { return postCreateDrpPengadaanService.execute(drpPengadaanRequest); } @GetMapping("/pengadaan") - public DrpPengadaanResponse getDrpPengadaan(@RequestBody DrpPengadaanRequest drpPengadaanRequest) { - return null; + public GetListDrpPengadaanResponse getDrpPengadaan(@RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size){ + + Pageable pageable = PageRequest.of((page - 1), size); + DrpPengadaanRequest drpPengadaanRequest = DrpPengadaanRequest.builder() + .pageable(pageable) + .build(); + return getListDrpPengadaanService.execute(drpPengadaanRequest); } } diff --git a/src/main/java/com/iconplus/smartproc/helper/service/BaseService.java b/src/main/java/com/iconplus/smartproc/helper/service/BaseService.java index ffe5715..58f5b62 100644 --- a/src/main/java/com/iconplus/smartproc/helper/service/BaseService.java +++ b/src/main/java/com/iconplus/smartproc/helper/service/BaseService.java @@ -4,6 +4,9 @@ package com.iconplus.smartproc.helper.service; import com.iconplus.smartproc.helper.base.BaseRequest; import com.iconplus.smartproc.helper.base.BaseResponse; +import java.io.FileNotFoundException; +import java.io.IOException; + public interface BaseService { - V execute(T input); + V execute(T input) throws IOException; } diff --git a/src/main/java/com/iconplus/smartproc/model/projection/DrpPengadaanView.java b/src/main/java/com/iconplus/smartproc/model/projection/DrpPengadaanView.java index d0c8b52..4719259 100644 --- a/src/main/java/com/iconplus/smartproc/model/projection/DrpPengadaanView.java +++ b/src/main/java/com/iconplus/smartproc/model/projection/DrpPengadaanView.java @@ -20,12 +20,21 @@ public interface DrpPengadaanView { Long getLokasiId(); void setLokasiId(Long lokasiId); + String getLokasi(); + void setLokasi(String lokasi); + Long getJenisPengadaanId(); void setJenisPengadaanId(Long jenisPengadaanId); + String getJenisPengadaan(); + void setJenisPengadaan(String jenisPengadaan); + Long getUnitInisiatorId(); void setUnitInisiatorId(Long unitInisiatorId); + String getUnitInisiator(); + void setUnitInisiator(String unitInisiator); + BigDecimal getHpe(); void setHpe(BigDecimal hpe); @@ -35,21 +44,39 @@ public interface DrpPengadaanView { Long getSumberDanaId(); void setSumberDanaId(Long sumberDanaId); + String getSumberDana(); + void setSumberDana(String sumberDana); + Long getMetodePengadaanId(); void setMetodePengadaanId(Long metodePengadaanId); - Long getSupplyPositioningMatrix(); - void setSupplyPositioningMatrix(Long supplyPositioningMatrix); + String getMetodePengadaan(); + void setMetodePengadaan(String metodePengadaan); + + Long getSupplyPositioningMatrixId(); + void setSupplyPositioningMatrixId(Long supplyPositioningMatrixId); + + String getSupplyPositioningMatrix(); + void setSupplyPositioningMatrix(String supplyPositioningMatrix); Long getMetodePenyampaianId(); void setMetodePenyampaianId(Long metodePenyampaianId); + String getMetodePenyampaian(); + void setMetodePenyampaian(String metodePenyampaian); + Long getJenisKontrakId(); void setJenisKontrakId(Long jenisKontrakId); + String getJenisKontrak(); + void setJenisKontrak(String jenisKontrak); + Long getStrategiPengadaanId(); void setStrategiPengadaanId(Long strategiPengadaanId); + String getStrategiPengadaan(); + void setStrategiPengadaan(String strategiPengadaan); + Date getRencanaTanggal(); void setRencanaTanggal(Date rencanaTanggal); diff --git a/src/main/java/com/iconplus/smartproc/model/request/DrpDokumenRequest.java b/src/main/java/com/iconplus/smartproc/model/request/DrpDokumenRequest.java index a42a55d..122e316 100644 --- a/src/main/java/com/iconplus/smartproc/model/request/DrpDokumenRequest.java +++ b/src/main/java/com/iconplus/smartproc/model/request/DrpDokumenRequest.java @@ -5,6 +5,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import org.springframework.web.multipart.MultipartFile; @Data @Builder @@ -12,8 +13,10 @@ import lombok.NoArgsConstructor; @NoArgsConstructor public class DrpDokumenRequest extends BaseRequest { + private Long drpId; private Long jenisDokumenId; private String filename; private String keterangan; + private MultipartFile file; private Boolean isDelete; } diff --git a/src/main/java/com/iconplus/smartproc/model/response/DrpPengadaanResponse.java b/src/main/java/com/iconplus/smartproc/model/response/DrpPengadaanResponse.java index bbf336d..98472e0 100644 --- a/src/main/java/com/iconplus/smartproc/model/response/DrpPengadaanResponse.java +++ b/src/main/java/com/iconplus/smartproc/model/response/DrpPengadaanResponse.java @@ -20,16 +20,35 @@ public class DrpPengadaanResponse extends BaseResponse { private Long drpId; private String nomor; private String namaPengadaan; - private Long lokasiId; - private Long jenisPengadaanId; - private Long unitInisiatorId; private BigDecimal pagu; + + private Long lokasiId; + private String lokasi; + + private Long jenisPengadaanId; + private String jenisPengadaan; + + private Long unitInisiatorId; + private String unitInisiator; + private Long sumberDanaId; + private String sumberDana; + private Long supplyPositioningMatrixId; + private String supplyPositioningMatrix; + private Long metodePengadaanId; + private String metodePengadaan; + private Long metodePenyampaianId; + private String metodePenyampaian; + private Long jenisKontrakId; + private String jenisKontrak; + private Long strategiPengadaanId; + private String strategiPengadaan; + private Date rencanaTanggal; private Date targetTanggal; private BigDecimal hpe; diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListDrpPengadaanResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListDrpPengadaanResponse.java new file mode 100644 index 0000000..500132e --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListDrpPengadaanResponse.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 GetListDrpPengadaanResponse extends BaseResponse { + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanRepository.java index d9857d1..70bb641 100644 --- a/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanRepository.java @@ -1,7 +1,9 @@ package com.iconplus.smartproc.repository; import com.iconplus.smartproc.model.entity.DrpPengadaan; +import com.iconplus.smartproc.model.projection.DrpPengadaanView; 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; @@ -9,5 +11,45 @@ import org.springframework.stereotype.Repository; @Repository public interface DrpPengadaanRepository extends JpaRepository { + @Query(value = "SELECT dp.id as id, " + + "dp.nomor as nomor, " + + "dp.drpId as drpId, " + + "dp.namaPengadaan as namaPengadaan, " + + "dp.hpe as hpe, " + + "dp.pagu as pagu, " + + "dp.isActive as isActive, " + + "dp.rencanaTanggal as rencanaTanggal, " + + "dp.targetTanggal as targetTanggal, " + + "dp.jenisKontrakId as jenisKontrakId, " + + "jk.jenisKontrak as jenisKontrak, " + + "dp.jenisPengadaanId as jenisPengadaanId, " + + "jp.jenisPengadaan as jenisPengadaan, " + + "dp.lokasiId as lokasiId, " + + "l.lokasi as lokasi, " + + "dp.metodePengadaanId as metodePengadaanId, " + + "mp.metodePengadaan as metodePengadaan, " + + "dp.metodePenyampaianId as metodePenyampaianId, " + + "mpi.metodePenyampaian as metodePenyampaian, " + + "dp.strategiPengadaanId as strategiPengadaanId, " + + "sp.strategiPengadaan as strategiPengadaan, " + + "dp.sumberDanaId as sumberDanaId, " + + "sd.sumberDana as sumberDana, " + + "dp.supplyPositioningMatrixId as supplyPositioningMatrixId, " + + "spm.supplyPositioningMatrix as supplyPositioningMatrix, " + + "dp.unitInisiatorId as unitInisiatorId, " + + "ui.unitInisiator as unitInisiator " + + "FROM DrpPengadaan dp " + + "JOIN JenisKontrak jk ON jk.id = dp.jenisKontrakId " + + "JOIN JenisPengadaan jp ON jp.id = dp.jenisPengadaanId " + + "JOIN Lokasi l ON l.id = dp.lokasiId " + + "JOIN MetodePengadaan mp ON mp.id = dp.metodePengadaanId " + + "JOIN MetodePenyampaian mpi ON mpi.id = dp.metodePenyampaianId " + + "JOIN StrategiPengadaan sp ON sp.id = dp.strategiPengadaanId " + + "JOIN SumberDana sd ON sd.id = dp.sumberDanaId " + + "JOIN SupplyPositioningMatrix spm ON spm.id = dp.supplyPositioningMatrixId " + + "JOIN UnitInisiator ui ON ui.id = dp.unitInisiatorId " + + "WHERE dp.isDelete = false") + Page getListDrpPengadaan(Pageable pageable); + } diff --git a/src/main/java/com/iconplus/smartproc/service/drp/GetListDrpPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/drp/GetListDrpPengadaanService.java index f074027..7b24ba2 100644 --- a/src/main/java/com/iconplus/smartproc/service/drp/GetListDrpPengadaanService.java +++ b/src/main/java/com/iconplus/smartproc/service/drp/GetListDrpPengadaanService.java @@ -1,13 +1,19 @@ 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.DrpPengadaanView; import com.iconplus.smartproc.model.request.DrpPengadaanRequest; import com.iconplus.smartproc.model.response.DrpPengadaanResponse; +import com.iconplus.smartproc.model.response.GetListDrpPengadaanResponse; import com.iconplus.smartproc.repository.DrpPengadaanRepository; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.List; + @Service -public class GetListDrpPengadaanService implements BaseService { +public class GetListDrpPengadaanService implements BaseService { private final DrpPengadaanRepository drpPengadaanRepository; @@ -16,8 +22,54 @@ public class GetListDrpPengadaanService implements BaseService drpPengadaanResponseList = new ArrayList<>(); + + var drpPengadaanViews = drpPengadaanRepository.getListDrpPengadaan(input.getPageable()); + for (DrpPengadaanView drpPengadaanView : drpPengadaanViews) { + DrpPengadaanResponse drpPengadaanResponse = DrpPengadaanResponse.builder() + .id(drpPengadaanView.getId()) + .drpId(drpPengadaanView.getDrpId()) + .namaPengadaan(drpPengadaanView.getNamaPengadaan()) + .nomor(drpPengadaanView.getNomor()) + .hpe(drpPengadaanView.getHpe()) + .isActive(drpPengadaanView.getIsActive()) + .pagu(drpPengadaanView.getPagu()) + .rencanaTanggal(drpPengadaanView.getRencanaTanggal()) + .targetTanggal(drpPengadaanView.getTargetTanggal()) + .jenisPengadaanId(drpPengadaanView.getJenisPengadaanId()) + .jenisPengadaan(drpPengadaanView.getJenisPengadaan()) + .jenisKontrakId(drpPengadaanView.getJenisKontrakId()) + .jenisKontrak(drpPengadaanView.getJenisKontrak()) + .metodePengadaanId(drpPengadaanView.getMetodePengadaanId()) + .metodePengadaan(drpPengadaanView.getMetodePengadaan()) + .lokasiId(drpPengadaanView.getLokasiId()) + .lokasi(drpPengadaanView.getLokasi()) + .metodePenyampaianId(drpPengadaanView.getMetodePenyampaianId()) + .metodePenyampaian(drpPengadaanView.getMetodePenyampaian()) + .unitInisiatorId(drpPengadaanView.getUnitInisiatorId()) + .unitInisiator(drpPengadaanView.getUnitInisiator()) + .strategiPengadaanId(drpPengadaanView.getStrategiPengadaanId()) + .strategiPengadaan(drpPengadaanView.getStrategiPengadaan()) + .supplyPositioningMatrixId(drpPengadaanView.getSupplyPositioningMatrixId()) + .supplyPositioningMatrix(drpPengadaanView.getSupplyPositioningMatrix()) + .sumberDanaId(drpPengadaanView.getSumberDanaId()) + .sumberDana(drpPengadaanView.getSumberDana()) + .build(); + drpPengadaanResponseList.add(drpPengadaanResponse); + } + + return GetListDrpPengadaanResponse.builder() + .data(drpPengadaanResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(drpPengadaanViews.getTotalPages()) + .totalRecords(drpPengadaanViews.getTotalElements()) + .isFirstPage(drpPengadaanViews.isFirst()) + .isLastPage(drpPengadaanViews.isLast()) + .build()) + .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 index c1851dd..9eeeda3 100644 --- a/src/main/java/com/iconplus/smartproc/service/drp/PostCreateDrpService.java +++ b/src/main/java/com/iconplus/smartproc/service/drp/PostCreateDrpService.java @@ -38,14 +38,13 @@ public class PostCreateDrpService implements BaseService new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "DRP", input.getId()))); - Drp drp = Drp.builder() - .tahun(input.getTahun()) - .approveStatus(input.getApproveStatus()) - .isActive(input.getIsActive()) - .isDelete(false) - .build(); + drp.setApproveStatus(input.getApproveStatus()); + drp.setIsActive(input.getIsActive()); var drpSaved = drpRepository.save(drp); @@ -85,13 +84,4 @@ public class PostCreateDrpService implements BaseService drpOptional = drpRepository.findByTahunAndIsDeleteFalse(input.getTahun()); - if (drpOptional.isPresent()) { - throw new BusinessException(Constants.ERR_CODE_10010, - Constants.ERR_TTL_10010, - Constants.ERR_MSG_10010); - } - } } diff --git a/src/main/java/com/iconplus/smartproc/service/drp/PostCreateTahunDrpService.java b/src/main/java/com/iconplus/smartproc/service/drp/PostCreateTahunDrpService.java new file mode 100644 index 0000000..1cd0ce4 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/drp/PostCreateTahunDrpService.java @@ -0,0 +1,45 @@ +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.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; + +import java.util.Optional; + +@Service +public class PostCreateTahunDrpService implements BaseService { + + private DrpRepository drpRepository; + public PostCreateTahunDrpService(DrpRepository drpRepository) { + this.drpRepository = drpRepository; + } + + @Override + public DrpResponse execute(DrpRequest input) { + validateTahunDrp(input); + + Drp drp = Drp.builder() + .tahun(input.getTahun()) + .isDelete(false) + .build(); + + var result = drpRepository.save(drp); + return DrpResponse.builder() + .id(result.getId()) + .build(); + } + + private void validateTahunDrp(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); + } + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/drp/PostDrpUploadDokumenPendukungService.java b/src/main/java/com/iconplus/smartproc/service/drp/PostDrpUploadDokumenPendukungService.java new file mode 100644 index 0000000..276a462 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/drp/PostDrpUploadDokumenPendukungService.java @@ -0,0 +1,47 @@ +package com.iconplus.smartproc.service.drp; + +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.DrpDokumen; +import com.iconplus.smartproc.model.request.DrpDokumenRequest; +import com.iconplus.smartproc.model.response.DrpDokumenResponse; +import com.iconplus.smartproc.repository.DrpDokumenRepository; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; + +@Service +public class PostDrpUploadDokumenPendukungService implements BaseService { + + @Value("${config.file-upload.pendukung}") + private String pathFileUploadPendukung; + + private final DrpDokumenRepository drpDokumenRepository; + public PostDrpUploadDokumenPendukungService(DrpDokumenRepository drpDokumenRepository) { + this.drpDokumenRepository = drpDokumenRepository; + } + + @Override + public DrpDokumenResponse execute(DrpDokumenRequest input) throws IOException { + + MultipartFile file = input.getFile(); + String fileName = file.getOriginalFilename(); + + File path = new File(pathFileUploadPendukung + fileName); + + path.createNewFile(); + FileOutputStream output = new FileOutputStream(path); + output.write(file.getBytes()); + output.close(); + + return DrpDokumenResponse.builder() + .jenisDokumenId(input.getJenisDokumenId()) + .filename(fileName) + .keterangan(input.getKeterangan()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/drp/PostDrpUploadDokumenRKAPService.java b/src/main/java/com/iconplus/smartproc/service/drp/PostDrpUploadDokumenRKAPService.java new file mode 100644 index 0000000..86aa82b --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/drp/PostDrpUploadDokumenRKAPService.java @@ -0,0 +1,46 @@ +package com.iconplus.smartproc.service.drp; + +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.DrpDokumen; +import com.iconplus.smartproc.model.request.DrpDokumenRequest; +import com.iconplus.smartproc.model.response.DrpDokumenResponse; +import com.iconplus.smartproc.repository.DrpDokumenRepository; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; + +@Service +public class PostDrpUploadDokumenRKAPService implements BaseService { + + @Value("${config.file-upload.rkap}") + private String pathFileUploadRkap; + + private final DrpDokumenRepository drpDokumenRepository; + public PostDrpUploadDokumenRKAPService(DrpDokumenRepository drpDokumenRepository) { + this.drpDokumenRepository = drpDokumenRepository; + } + + @Override + public DrpDokumenResponse execute(DrpDokumenRequest input) throws IOException { + + MultipartFile file = input.getFile(); + String fileName = file.getOriginalFilename(); + + File path = new File(pathFileUploadRkap + fileName); + + path.createNewFile(); + FileOutputStream output = new FileOutputStream(path); + output.write(file.getBytes()); + output.close(); + + return DrpDokumenResponse.builder() + .jenisDokumenId(input.getJenisDokumenId()) + .filename(fileName) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/manajemenuser/PostCreateUserService.java b/src/main/java/com/iconplus/smartproc/service/manajemenuser/PostCreateUserService.java index dd5212b..bea21da 100644 --- a/src/main/java/com/iconplus/smartproc/service/manajemenuser/PostCreateUserService.java +++ b/src/main/java/com/iconplus/smartproc/service/manajemenuser/PostCreateUserService.java @@ -18,7 +18,7 @@ import org.springframework.stereotype.Service; @Service public class PostCreateUserService implements BaseService { - @Value("${config.password.default-password:plgg123}") + @Value("${config.password.default-password:plngg123}") private String defaultPassword; private UsersRepository usersRepository; diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index 67f715a..226916d 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -8,11 +8,14 @@ jwt: config: password: - default-password : plgg123 + default-password : plngg123 private-key: MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCRyUePQWkg+IH5dAvQ/+YlVR1htFdhL2+NJtWWXNW15mBUOEr+yvJsOYAzY9KfxmVqRRr1uQEAaaKjNpxwNEnHkMn8LzSEhRxCd4Mqpa5jquCdPfMqGO3cwdkrQjZVfm3tCBYd2HkOeL8PTwlbBORucf6qHPxZvjGVXQeiRAHTlgHTR1647T1+vlDDcaOBJIrwcD566hqOCKMxtE+5F4DieSYEuHJMyvJf/WH2+LxbP2t4Z6IV0tksQKtwyZstEXd3yIL8chKoFh2p3KO8aFfMa7X0aiDVC3z+o2Hh8+YHQt7cSl+NGRxasuqLbY3twZEC9qAIkkDOpBUp7lLZ9NVHAgMBAAECggEACd0GXGjehf6KPKhfTEqj9Y6mqD+dUdP1xiUEemHZi68EgW41lLuCX1Qcml18mJbBscjvJATaTn7XJBfDycuf2kKvh8Jh2T1wRgbz9uSywceD3t+cHhMFtNPgr46RQoOFSG4toONOfW4p7w034tKX6ekIg9XmNOQrUqGyrIXRYdFADB68HaLxlgS0zKrkhp14+wH/krihfS3H7Z+wBVozWSgyHCVbov68l764w3UWZYEEe2mFl31HqhD5KEo8QXODWuemUTROaXKF/iOsPEMC8Qz4Jdqme+iAlV4b2LNaSTEP/NG/kFIE443RlyFo9YfVNw7/osgAksXAPdOZd8qt8QKBgQDYHLX2HVaGj9zvAlqSKjf6VuuxgdRUYW4rqQjm97YmAJNp4udjKLUgD7yDuImYh/E/IWjDxf1Hf3fTjcc98iPMsvP3lkXxdOxMLLlnMv0Ewxof8gATQndU/w+/XuuAZ9cy3vtheo59i4rFpik8XFAH6kPk/gWI9DAE/IbXuOSNUwKBgQCssaxMwfrB9nwQ9eDXv2z+Ce4sZbtZEJYD3a29OGshLw8AH//z/BxPzZRTFy63IfmmIyYSGaC7ZdkrakLhlBXrhi/P0wafp7xEsONb8uNYWDDWoDewH75GX/SPhx7bX0GSeiX6X5XAUg97j0xlfYllIieMLCw4rLU+97ge5xalvQKBgQDXJjYtEGYczsqYFBLRI0DZdIFvFZ6qZtkElGMtdf0b9kTMDL5pZJR1l9UImcY6WVRekkc3aDvQW2GS9rodvJvRZXMm0K9PRCUfbQMjb4qfnBC9LvLOOcSNlOQ7lCcGjdqbZYyELjv/VtXQEa1Jz2lJh/sR1abzAo9v12vzBbpbywKBgQCkdEZKimeLknivhhbqHgdjHH3NlcuFk3/oipBLI5ERdsjoK5EI/crQTEu1nNwF1brx9YLptbIVA3Z+G6E5RFZjhdO+K42hOJDXMUQyaekKVmGb4dNmS7RdPD+e9uPxsJK3NM850RDApuTLm7j65UOUJaRXnjE2f3HSVwDlnNc6WQKBgQCccgyIJx5HnxdkYYFJBnuwo1aDNo2TOqiy9wPXHzxuR8TsvqmbbYoxT0kJkqOjkbQII08nLyHJ3KL7XK3dCEGmdRArHjo0PCLMzKqBZdhtfxN413HxmwXIF5zM6mhS4g8XrDyNW7EhLp/putnpmE6XI9VnEFx/LxAd8nJ9tUd39A== public-key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkclHj0FpIPiB+XQL0P/mJVUdYbRXYS9vjSbVllzVteZgVDhK/srybDmAM2PSn8ZlakUa9bkBAGmiozaccDRJx5DJ/C80hIUcQneDKqWuY6rgnT3zKhjt3MHZK0I2VX5t7QgWHdh5Dni/D08JWwTkbnH+qhz8Wb4xlV0HokQB05YB00deuO09fr5Qw3GjgSSK8HA+euoajgijMbRPuReA4nkmBLhyTMryX/1h9vi8Wz9reGeiFdLZLECrcMmbLRF3d8iC/HISqBYdqdyjvGhXzGu19Gog1Qt8/qNh4fPmB0Le3EpfjRkcWrLqi22N7cGRAvagCJJAzqQVKe5S2fTVRwIDAQAB forgot-password: expired-time: 1440 + file-upload: + rkap : /Users/macbook/smartproc/rkap/ + pendukung: /Users/macbook/smartproc/pendukung/ spring: datasource: From 9399ceec367135a133de8231557e53d75043c4b4 Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Tue, 30 May 2023 11:30:24 +0700 Subject: [PATCH 41/63] fix validasi filename --- .../repository/DrpDokumenRepository.java | 3 +++ .../DrpPengadaanDokumenRepository.java | 3 +++ .../PostDrpUploadDokumenPendukungService.java | 19 +++++++++++++------ .../drp/PostDrpUploadDokumenRKAPService.java | 9 +++++++++ 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpDokumenRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpDokumenRepository.java index 6f13bb5..fe3e208 100644 --- a/src/main/java/com/iconplus/smartproc/repository/DrpDokumenRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/DrpDokumenRepository.java @@ -5,9 +5,12 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import java.util.List; +import java.util.Optional; @Repository public interface DrpDokumenRepository extends JpaRepository { List findByDrpIdAndIsDeleteFalse(Long drpId); + + Optional findByFilenameAndIsDeleteFalse(String filename); } diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanDokumenRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanDokumenRepository.java index a3ccf03..2bc9b84 100644 --- a/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanDokumenRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanDokumenRepository.java @@ -5,10 +5,13 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import java.util.List; +import java.util.Optional; @Repository public interface DrpPengadaanDokumenRepository extends JpaRepository { List findByDrpIdAndIsDeleteFalse(Long drpId); + Optional findByFilenameAndIsDeleteFalse(String filename); + } diff --git a/src/main/java/com/iconplus/smartproc/service/drp/PostDrpUploadDokumenPendukungService.java b/src/main/java/com/iconplus/smartproc/service/drp/PostDrpUploadDokumenPendukungService.java index 276a462..bb50d0c 100644 --- a/src/main/java/com/iconplus/smartproc/service/drp/PostDrpUploadDokumenPendukungService.java +++ b/src/main/java/com/iconplus/smartproc/service/drp/PostDrpUploadDokumenPendukungService.java @@ -1,11 +1,11 @@ package com.iconplus.smartproc.service.drp; -import com.iconplus.smartproc.helper.model.EmptyResponse; +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.DrpDokumenRequest; import com.iconplus.smartproc.model.response.DrpDokumenResponse; -import com.iconplus.smartproc.repository.DrpDokumenRepository; +import com.iconplus.smartproc.repository.DrpPengadaanDokumenRepository; +import com.iconplus.smartproc.util.Constants; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; @@ -20,9 +20,9 @@ public class PostDrpUploadDokumenPendukungService implements BaseService Date: Tue, 30 May 2023 15:35:28 +0700 Subject: [PATCH 42/63] fix validasi directory --- .../drp/PostDrpUploadDokumenPendukungService.java | 14 ++++++++++---- .../drp/PostDrpUploadDokumenRKAPService.java | 15 +++++++++------ .../com/iconplus/smartproc/util/Constants.java | 4 ++++ 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/iconplus/smartproc/service/drp/PostDrpUploadDokumenPendukungService.java b/src/main/java/com/iconplus/smartproc/service/drp/PostDrpUploadDokumenPendukungService.java index bb50d0c..216316f 100644 --- a/src/main/java/com/iconplus/smartproc/service/drp/PostDrpUploadDokumenPendukungService.java +++ b/src/main/java/com/iconplus/smartproc/service/drp/PostDrpUploadDokumenPendukungService.java @@ -40,10 +40,16 @@ public class PostDrpUploadDokumenPendukungService implements BaseService Date: Tue, 30 May 2023 20:26:16 +0700 Subject: [PATCH 43/63] add approval user --- .../controller/ApprovalDrpController.java | 34 +++++++++++++++ .../smartproc/controller/DrpController.java | 1 - .../response/GetListUserApprovalResponse.java | 17 ++++++++ .../model/response/UserApprovalResponse.java | 19 +++++++++ .../smartproc/repository/UsersRepository.java | 12 ++++++ .../GetListUserDirekturKomiteService.java | 42 +++++++++++++++++++ .../approval/GetListUserVpService.java | 41 ++++++++++++++++++ .../smartproc/service/drp/GetDrpService.java | 1 - .../iconplus/smartproc/util/Constants.java | 2 + 9 files changed, 167 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/iconplus/smartproc/controller/ApprovalDrpController.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/GetListUserApprovalResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/UserApprovalResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/service/approval/GetListUserDirekturKomiteService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/approval/GetListUserVpService.java diff --git a/src/main/java/com/iconplus/smartproc/controller/ApprovalDrpController.java b/src/main/java/com/iconplus/smartproc/controller/ApprovalDrpController.java new file mode 100644 index 0000000..adc9276 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/controller/ApprovalDrpController.java @@ -0,0 +1,34 @@ +package com.iconplus.smartproc.controller; + +import com.iconplus.smartproc.helper.model.EmptyRequest; +import com.iconplus.smartproc.model.response.GetListUserApprovalResponse; +import com.iconplus.smartproc.service.approval.GetListUserDirekturKomiteService; +import com.iconplus.smartproc.service.approval.GetListUserVpService; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") +@RestController +@RequestMapping("/api/drp/approval") +public class ApprovalDrpController { + + private GetListUserVpService getListUserVpService; + private GetListUserDirekturKomiteService getListUserDirekturKomiteService; + public ApprovalDrpController(GetListUserVpService getListUserVpService, + GetListUserDirekturKomiteService getListUserDirekturKomiteService) { + this.getListUserVpService = getListUserVpService; + this.getListUserDirekturKomiteService = getListUserDirekturKomiteService; + } + + @GetMapping("/vp") + public GetListUserApprovalResponse getUserVp(EmptyRequest emptyRequest) { + return getListUserVpService.execute(emptyRequest); + } + + @GetMapping("direktur-komite") + public GetListUserApprovalResponse getUserDirekturKomite(EmptyRequest emptyRequest) { + return getListUserDirekturKomiteService.execute(emptyRequest); + } +} diff --git a/src/main/java/com/iconplus/smartproc/controller/DrpController.java b/src/main/java/com/iconplus/smartproc/controller/DrpController.java index 46274e7..3b1c957 100644 --- a/src/main/java/com/iconplus/smartproc/controller/DrpController.java +++ b/src/main/java/com/iconplus/smartproc/controller/DrpController.java @@ -1,6 +1,5 @@ package com.iconplus.smartproc.controller; -import com.iconplus.smartproc.helper.model.EmptyResponse; import com.iconplus.smartproc.model.request.DrpDokumenRequest; import com.iconplus.smartproc.model.request.DrpPengadaanRequest; import com.iconplus.smartproc.model.request.DrpRequest; diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListUserApprovalResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListUserApprovalResponse.java new file mode 100644 index 0000000..0664315 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListUserApprovalResponse.java @@ -0,0 +1,17 @@ +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.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class GetListUserApprovalResponse extends BaseResponse { + private List data; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/UserApprovalResponse.java b/src/main/java/com/iconplus/smartproc/model/response/UserApprovalResponse.java new file mode 100644 index 0000000..4265461 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/UserApprovalResponse.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; + +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class UserApprovalResponse extends BaseResponse { + + private Long id; + private String nama; +} diff --git a/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java b/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java index 04fb221..37683ad 100644 --- a/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java @@ -8,6 +8,7 @@ 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 @@ -101,5 +102,16 @@ public interface UsersRepository extends JpaRepository { "AND is_delete = 0 " + "AND expired_time >= CURRENT_TIMESTAMP", nativeQuery = true) Optional getUsersByEmailAndExpiredTime(String rememberId); + + @Query(value = "SELECT u.id as id, " + + "u.nama as nama, " + + "u.jabatanId as jabatanId, " + + "j.jabatan as jabatan " + + "FROM Users u " + + "JOIN Jabatan j ON j.id = u.jabatanId " + + "WHERE u.isDelete = false " + + "AND j.jabatan like :jabatan " + + "ORDER BY u.id") + List getListUserJabatan(String jabatan); } diff --git a/src/main/java/com/iconplus/smartproc/service/approval/GetListUserDirekturKomiteService.java b/src/main/java/com/iconplus/smartproc/service/approval/GetListUserDirekturKomiteService.java new file mode 100644 index 0000000..61890d6 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/approval/GetListUserDirekturKomiteService.java @@ -0,0 +1,42 @@ +package com.iconplus.smartproc.service.approval; + +import com.iconplus.smartproc.helper.model.EmptyRequest; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.UserRoleView; +import com.iconplus.smartproc.model.response.GetListUserApprovalResponse; +import com.iconplus.smartproc.model.response.UserApprovalResponse; +import com.iconplus.smartproc.repository.UsersRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListUserDirekturKomiteService implements BaseService { + + private UsersRepository usersRepository; + public GetListUserDirekturKomiteService(UsersRepository usersRepository) { + this.usersRepository = usersRepository; + } + + @Override + public GetListUserApprovalResponse execute(EmptyRequest input) { + + List userApprovalResponseList = new ArrayList<>(); + + var userRoleViews = usersRepository.getListUserJabatan(Constants.JABATAN_DIREKTUR_KOMITE); + for (UserRoleView userRoleView : userRoleViews) { + UserApprovalResponse userApprovalResponse = UserApprovalResponse.builder() + .id(userRoleView.getId()) + .nama(userRoleView.getNama() + "-" + userRoleView.getJabatan()) + .build(); + userApprovalResponseList.add(userApprovalResponse); + } + + return GetListUserApprovalResponse.builder() + .data(userApprovalResponseList) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/approval/GetListUserVpService.java b/src/main/java/com/iconplus/smartproc/service/approval/GetListUserVpService.java new file mode 100644 index 0000000..a046877 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/approval/GetListUserVpService.java @@ -0,0 +1,41 @@ +package com.iconplus.smartproc.service.approval; + +import com.iconplus.smartproc.helper.model.EmptyRequest; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.UserRoleView; +import com.iconplus.smartproc.model.response.GetListUserApprovalResponse; +import com.iconplus.smartproc.model.response.UserApprovalResponse; +import com.iconplus.smartproc.repository.UsersRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListUserVpService implements BaseService { + + private UsersRepository usersRepository; + public GetListUserVpService(UsersRepository usersRepository) { + this.usersRepository = usersRepository; + } + + @Override + public GetListUserApprovalResponse execute(EmptyRequest input) { + + List userApprovalResponseList = new ArrayList<>(); + + var userRoleViews = usersRepository.getListUserJabatan(Constants.JABATAN_VP); + for (UserRoleView userRoleView : userRoleViews) { + UserApprovalResponse userApprovalResponse = UserApprovalResponse.builder() + .id(userRoleView.getId()) + .nama(userRoleView.getNama() + "-" + userRoleView.getJabatan()) + .build(); + userApprovalResponseList.add(userApprovalResponse); + } + + return GetListUserApprovalResponse.builder() + .data(userApprovalResponseList) + .build(); + } +} 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 92bea46..4ab2f0c 100644 --- a/src/main/java/com/iconplus/smartproc/service/drp/GetDrpService.java +++ b/src/main/java/com/iconplus/smartproc/service/drp/GetDrpService.java @@ -7,7 +7,6 @@ import com.iconplus.smartproc.model.entity.DrpPengadaanDokumen; import com.iconplus.smartproc.model.request.DrpRequest; import com.iconplus.smartproc.model.response.DrpDokumenResponse; import com.iconplus.smartproc.model.response.DrpPengadaanDokumenResponse; -import com.iconplus.smartproc.model.response.DrpPengadaanResponse; import com.iconplus.smartproc.model.response.DrpResponse; import com.iconplus.smartproc.repository.DrpDokumenRepository; import com.iconplus.smartproc.repository.DrpPengadaanDokumenRepository; diff --git a/src/main/java/com/iconplus/smartproc/util/Constants.java b/src/main/java/com/iconplus/smartproc/util/Constants.java index 791ee7b..fc47db4 100644 --- a/src/main/java/com/iconplus/smartproc/util/Constants.java +++ b/src/main/java/com/iconplus/smartproc/util/Constants.java @@ -76,5 +76,7 @@ public class Constants { public static final String INVALID_KEY_EXCEPTION = "InvalidKeyException : "; public static final String ILEGAL_BLOCK_SIZE_EXCEPTION = "IllegalBlockSizeException : "; public static final String BAD_PADDING_EXCEPTION = "BadPaddingException : "; + public static final String JABATAN_VP = "%VP%"; + public static final String JABATAN_DIREKTUR_KOMITE = "%DIR%"; } From 2c82319b1602a1a14b33c3718e3ac72d6f3e8a51 Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Wed, 31 May 2023 00:29:40 +0700 Subject: [PATCH 44/63] add api delete dokumen --- .../smartproc/controller/DrpController.java | 28 ++++++++++- .../repository/DrpPengadaanRepository.java | 4 ++ .../GetListUserDirekturKomiteService.java | 1 - .../drp/DeleteDokumenPendukungService.java | 46 +++++++++++++++++ .../drp/DeleteDokumenUploadService.java | 49 +++++++++++++++++++ .../drp/DeleteDrpPengadaanService.java | 32 ++++++++++++ 6 files changed, 158 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/iconplus/smartproc/service/drp/DeleteDokumenPendukungService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/drp/DeleteDokumenUploadService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/drp/DeleteDrpPengadaanService.java diff --git a/src/main/java/com/iconplus/smartproc/controller/DrpController.java b/src/main/java/com/iconplus/smartproc/controller/DrpController.java index 3b1c957..82210bd 100644 --- a/src/main/java/com/iconplus/smartproc/controller/DrpController.java +++ b/src/main/java/com/iconplus/smartproc/controller/DrpController.java @@ -1,6 +1,8 @@ package com.iconplus.smartproc.controller; +import com.iconplus.smartproc.helper.model.EmptyResponse; import com.iconplus.smartproc.model.request.DrpDokumenRequest; +import com.iconplus.smartproc.model.request.DrpPengadaanDokumenRequest; import com.iconplus.smartproc.model.request.DrpPengadaanRequest; import com.iconplus.smartproc.model.request.DrpRequest; import com.iconplus.smartproc.model.response.*; @@ -25,6 +27,9 @@ public class DrpController { private final PostDrpUploadDokumenRKAPService postDrpUploadDokumenRKAPService; private final PostDrpUploadDokumenPendukungService postDrpUploadDokumenPendukungService; private final PostCreateTahunDrpService postCreateTahunDrpService; + private final DeleteDrpPengadaanService deleteDrpPengadaanService; + private final DeleteDokumenUploadService deleteDokumenUploadService; + private final DeleteDokumenPendukungService deleteDokumenPendukungService; public DrpController(GetDrpService getDrpService, GetListDrpService getListDrpService, @@ -33,7 +38,10 @@ public class DrpController { GetListDrpPengadaanService getListDrpPengadaanService, PostDrpUploadDokumenRKAPService postDrpUploadDokumenRKAPService, PostCreateTahunDrpService postCreateTahunDrpService, - PostDrpUploadDokumenPendukungService postDrpUploadDokumenPendukungService) { + PostDrpUploadDokumenPendukungService postDrpUploadDokumenPendukungService, + DeleteDrpPengadaanService deleteDrpPengadaanService, + DeleteDokumenUploadService deleteDokumenUploadService, + DeleteDokumenPendukungService deleteDokumenPendukungService) { this.getDrpService = getDrpService; this.getListDrpService = getListDrpService; this.postCreateDrpService = postCreateDrpService; @@ -42,6 +50,9 @@ public class DrpController { this.postDrpUploadDokumenRKAPService = postDrpUploadDokumenRKAPService; this.postDrpUploadDokumenPendukungService = postDrpUploadDokumenPendukungService; this.postCreateTahunDrpService = postCreateTahunDrpService; + this.deleteDrpPengadaanService = deleteDrpPengadaanService; + this.deleteDokumenUploadService = deleteDokumenUploadService; + this.deleteDokumenPendukungService = deleteDokumenPendukungService; } @GetMapping @@ -115,4 +126,19 @@ public class DrpController { return getListDrpPengadaanService.execute(drpPengadaanRequest); } + @DeleteMapping("/{id}") + public EmptyResponse deleteDrpPengadaan(@RequestBody DrpPengadaanRequest drpPengadaanRequest) { + return deleteDrpPengadaanService.execute(drpPengadaanRequest); + } + + @DeleteMapping("/upload/rkap") + public EmptyResponse deleteDokumenRkap(@RequestBody DrpDokumenRequest drpDokumenRequest) { + return deleteDokumenUploadService.execute(drpDokumenRequest); + } + + @DeleteMapping("/upload/pendukung") + public EmptyResponse deleteDokumenPendukung(@RequestBody DrpPengadaanDokumenRequest drpPengadaanDokumenRequest) { + return deleteDokumenPendukungService.execute(drpPengadaanDokumenRequest); + } + } diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanRepository.java index 70bb641..7c2f25e 100644 --- a/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanRepository.java @@ -8,6 +8,8 @@ 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 DrpPengadaanRepository extends JpaRepository { @@ -51,5 +53,7 @@ public interface DrpPengadaanRepository extends JpaRepository getListDrpPengadaan(Pageable pageable); + Optional findByIdAndIsDeleteFalse(Long id); + } diff --git a/src/main/java/com/iconplus/smartproc/service/approval/GetListUserDirekturKomiteService.java b/src/main/java/com/iconplus/smartproc/service/approval/GetListUserDirekturKomiteService.java index 61890d6..97581d7 100644 --- a/src/main/java/com/iconplus/smartproc/service/approval/GetListUserDirekturKomiteService.java +++ b/src/main/java/com/iconplus/smartproc/service/approval/GetListUserDirekturKomiteService.java @@ -9,7 +9,6 @@ import com.iconplus.smartproc.repository.UsersRepository; import com.iconplus.smartproc.util.Constants; import org.springframework.stereotype.Service; -import java.io.IOException; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/iconplus/smartproc/service/drp/DeleteDokumenPendukungService.java b/src/main/java/com/iconplus/smartproc/service/drp/DeleteDokumenPendukungService.java new file mode 100644 index 0000000..108bbd9 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/drp/DeleteDokumenPendukungService.java @@ -0,0 +1,46 @@ +package com.iconplus.smartproc.service.drp; + +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.DrpPengadaanDokumenRequest; +import com.iconplus.smartproc.repository.DrpPengadaanDokumenRepository; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +@Service +@Slf4j +public class DeleteDokumenPendukungService implements BaseService { + + @Value("${config.file-upload.pendukung}") + private String pathFileUploadPendukung; + + private final DrpPengadaanDokumenRepository drpPengadaanDokumenRepository; + public DeleteDokumenPendukungService(DrpPengadaanDokumenRepository drpPengadaanDokumenRepository) { + this.drpPengadaanDokumenRepository = drpPengadaanDokumenRepository; + } + @Override + public EmptyResponse execute(DrpPengadaanDokumenRequest input) { + + var drpPengadaanDokumenOptional= drpPengadaanDokumenRepository.findByFilenameAndIsDeleteFalse(input.getFilename()); + if (drpPengadaanDokumenOptional.isPresent()) { + drpPengadaanDokumenOptional.get().setIsDelete(true); + drpPengadaanDokumenRepository.save(drpPengadaanDokumenOptional.get()); + } + + Path path = Paths.get(pathFileUploadPendukung + input.getFilename()); + + try { + Files.delete(path); + } catch (IOException e) { + log.info("no file found"); + } + + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/drp/DeleteDokumenUploadService.java b/src/main/java/com/iconplus/smartproc/service/drp/DeleteDokumenUploadService.java new file mode 100644 index 0000000..0f62c49 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/drp/DeleteDokumenUploadService.java @@ -0,0 +1,49 @@ +package com.iconplus.smartproc.service.drp; + +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.DrpDokumenRequest; +import com.iconplus.smartproc.repository.DrpDokumenRepository; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +@Service +@Slf4j +public class DeleteDokumenUploadService implements BaseService { + + @Value("${config.file-upload.rkap}") + private String pathFileUploadRkap; + + private final DrpDokumenRepository drpDokumenRepository; + + public DeleteDokumenUploadService(DrpDokumenRepository drpDokumenRepository) { + this.drpDokumenRepository = drpDokumenRepository; + } + + @Override + public EmptyResponse execute(DrpDokumenRequest input) { + + var drpDokumenOptional = drpDokumenRepository.findByFilenameAndIsDeleteFalse(input.getFilename()); + if (drpDokumenOptional.isPresent()) { + drpDokumenOptional.get().setIsDelete(true); + drpDokumenRepository.save(drpDokumenOptional.get()); + } + + Path path = Paths.get(pathFileUploadRkap + input.getFilename()); + + try { + Files.delete(path); + } catch (IOException e) { + log.info("no file found"); + } + + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/drp/DeleteDrpPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/drp/DeleteDrpPengadaanService.java new file mode 100644 index 0000000..fdd3066 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/drp/DeleteDrpPengadaanService.java @@ -0,0 +1,32 @@ +package com.iconplus.smartproc.service.drp; + +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.DrpPengadaanRequest; +import com.iconplus.smartproc.repository.DrpPengadaanRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + + +@Service +public class DeleteDrpPengadaanService implements BaseService { + + private DrpPengadaanRepository drpPengadaanRepository; + public DeleteDrpPengadaanService(DrpPengadaanRepository drpPengadaanRepository) { + this.drpPengadaanRepository = drpPengadaanRepository; + } + + @Override + public EmptyResponse execute(DrpPengadaanRequest input) { + + var drpPengadaan = drpPengadaanRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "DRP", input.getId()))); + + drpPengadaan.setIsDelete(true); + drpPengadaanRepository.save(drpPengadaan); + return new EmptyResponse(); + } +} From 6deddb3f153a17d820fb06ed1cabb70c0a897726 Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Wed, 31 May 2023 14:00:28 +0700 Subject: [PATCH 45/63] refactor --- .../controller/ApprovalDrpController.java | 18 ++- .../smartproc/controller/DrpController.java | 103 ++++++------------ .../controller/DrpPengadaanController.java | 101 +++++++++++++++++ .../smartproc/model/entity/DrpApproval.java | 73 +++++++++++++ .../model/request/DrpApprovalRequest.java | 22 ++++ .../request/DrpPengadaanDokumenRequest.java | 2 + .../model/response/DrpApprovalResponse.java | 16 +++ .../repository/DrpApprovalRepository.java | 10 ++ .../PostCreateDrpApprovalService.java | 51 +++++++++ .../drp/EditUploadDokumenDrpService.java | 76 +++++++++++++ .../service/drp/PostCreateDrpService.java | 25 +---- .../DeleteDokumenPendukungService.java | 2 +- .../DeleteDrpPengadaanService.java | 2 +- .../EditUploadDrpPengadaanService.java | 72 ++++++++++++ .../GetListDrpPengadaanService.java | 2 +- .../PostCreateDrpPengadaanService.java | 2 +- .../PostDrpUploadDokumenPendukungService.java | 12 +- 17 files changed, 479 insertions(+), 110 deletions(-) create mode 100644 src/main/java/com/iconplus/smartproc/controller/DrpPengadaanController.java create mode 100644 src/main/java/com/iconplus/smartproc/model/entity/DrpApproval.java create mode 100644 src/main/java/com/iconplus/smartproc/model/request/DrpApprovalRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/DrpApprovalResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/repository/DrpApprovalRepository.java create mode 100644 src/main/java/com/iconplus/smartproc/service/approval/PostCreateDrpApprovalService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/drp/EditUploadDokumenDrpService.java rename src/main/java/com/iconplus/smartproc/service/{drp => drppengadaan}/DeleteDokumenPendukungService.java (96%) rename src/main/java/com/iconplus/smartproc/service/{drp => drppengadaan}/DeleteDrpPengadaanService.java (95%) create mode 100644 src/main/java/com/iconplus/smartproc/service/drppengadaan/EditUploadDrpPengadaanService.java rename src/main/java/com/iconplus/smartproc/service/{drp => drppengadaan}/GetListDrpPengadaanService.java (98%) rename src/main/java/com/iconplus/smartproc/service/{drp => drppengadaan}/PostCreateDrpPengadaanService.java (98%) rename src/main/java/com/iconplus/smartproc/service/{drp => drppengadaan}/PostDrpUploadDokumenPendukungService.java (82%) diff --git a/src/main/java/com/iconplus/smartproc/controller/ApprovalDrpController.java b/src/main/java/com/iconplus/smartproc/controller/ApprovalDrpController.java index adc9276..5f7186f 100644 --- a/src/main/java/com/iconplus/smartproc/controller/ApprovalDrpController.java +++ b/src/main/java/com/iconplus/smartproc/controller/ApprovalDrpController.java @@ -1,13 +1,13 @@ package com.iconplus.smartproc.controller; import com.iconplus.smartproc.helper.model.EmptyRequest; +import com.iconplus.smartproc.model.request.DrpApprovalRequest; +import com.iconplus.smartproc.model.response.DrpApprovalResponse; import com.iconplus.smartproc.model.response.GetListUserApprovalResponse; import com.iconplus.smartproc.service.approval.GetListUserDirekturKomiteService; import com.iconplus.smartproc.service.approval.GetListUserVpService; -import org.springframework.web.bind.annotation.CrossOrigin; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import com.iconplus.smartproc.service.approval.PostCreateDrpApprovalService; +import org.springframework.web.bind.annotation.*; @CrossOrigin(origins = "${fe.server}", allowCredentials = "true") @RestController @@ -16,10 +16,13 @@ public class ApprovalDrpController { private GetListUserVpService getListUserVpService; private GetListUserDirekturKomiteService getListUserDirekturKomiteService; + private PostCreateDrpApprovalService postCreateDrpApprovalService; public ApprovalDrpController(GetListUserVpService getListUserVpService, - GetListUserDirekturKomiteService getListUserDirekturKomiteService) { + GetListUserDirekturKomiteService getListUserDirekturKomiteService, + PostCreateDrpApprovalService postCreateDrpApprovalService) { this.getListUserVpService = getListUserVpService; this.getListUserDirekturKomiteService = getListUserDirekturKomiteService; + this.postCreateDrpApprovalService = postCreateDrpApprovalService; } @GetMapping("/vp") @@ -31,4 +34,9 @@ public class ApprovalDrpController { public GetListUserApprovalResponse getUserDirekturKomite(EmptyRequest emptyRequest) { return getListUserDirekturKomiteService.execute(emptyRequest); } + + @PostMapping + public DrpApprovalResponse createDrpApproval(@RequestBody DrpApprovalRequest drpApprovalRequest) { + return postCreateDrpApprovalService.execute(drpApprovalRequest); + } } diff --git a/src/main/java/com/iconplus/smartproc/controller/DrpController.java b/src/main/java/com/iconplus/smartproc/controller/DrpController.java index 82210bd..d92ab8b 100644 --- a/src/main/java/com/iconplus/smartproc/controller/DrpController.java +++ b/src/main/java/com/iconplus/smartproc/controller/DrpController.java @@ -2,8 +2,6 @@ package com.iconplus.smartproc.controller; import com.iconplus.smartproc.helper.model.EmptyResponse; import com.iconplus.smartproc.model.request.DrpDokumenRequest; -import com.iconplus.smartproc.model.request.DrpPengadaanDokumenRequest; -import com.iconplus.smartproc.model.request.DrpPengadaanRequest; import com.iconplus.smartproc.model.request.DrpRequest; import com.iconplus.smartproc.model.response.*; import com.iconplus.smartproc.service.drp.*; @@ -21,44 +19,32 @@ public class DrpController { private final GetDrpService getDrpService; private final GetListDrpService getListDrpService; - private final PostCreateDrpService postCreateDrpService; - private final PostCreateDrpPengadaanService postCreateDrpPengadaanService; - private final GetListDrpPengadaanService getListDrpPengadaanService; private final PostDrpUploadDokumenRKAPService postDrpUploadDokumenRKAPService; - private final PostDrpUploadDokumenPendukungService postDrpUploadDokumenPendukungService; private final PostCreateTahunDrpService postCreateTahunDrpService; - private final DeleteDrpPengadaanService deleteDrpPengadaanService; private final DeleteDokumenUploadService deleteDokumenUploadService; - private final DeleteDokumenPendukungService deleteDokumenPendukungService; + private final PostCreateDrpService postCreateDrpService; + private final EditUploadDokumenDrpService editUploadDokumenDrpService; public DrpController(GetDrpService getDrpService, GetListDrpService getListDrpService, - PostCreateDrpService postCreateDrpService, - PostCreateDrpPengadaanService postCreateDrpPengadaanService, - GetListDrpPengadaanService getListDrpPengadaanService, PostDrpUploadDokumenRKAPService postDrpUploadDokumenRKAPService, PostCreateTahunDrpService postCreateTahunDrpService, - PostDrpUploadDokumenPendukungService postDrpUploadDokumenPendukungService, - DeleteDrpPengadaanService deleteDrpPengadaanService, DeleteDokumenUploadService deleteDokumenUploadService, - DeleteDokumenPendukungService deleteDokumenPendukungService) { + PostCreateDrpService postCreateDrpService, + EditUploadDokumenDrpService editUploadDokumenDrpService) { this.getDrpService = getDrpService; this.getListDrpService = getListDrpService; - this.postCreateDrpService = postCreateDrpService; - this.postCreateDrpPengadaanService = postCreateDrpPengadaanService; - this.getListDrpPengadaanService = getListDrpPengadaanService; this.postDrpUploadDokumenRKAPService = postDrpUploadDokumenRKAPService; - this.postDrpUploadDokumenPendukungService = postDrpUploadDokumenPendukungService; this.postCreateTahunDrpService = postCreateTahunDrpService; - this.deleteDrpPengadaanService = deleteDrpPengadaanService; this.deleteDokumenUploadService = deleteDokumenUploadService; - this.deleteDokumenPendukungService = deleteDokumenPendukungService; + this.postCreateDrpService = postCreateDrpService; + this.editUploadDokumenDrpService = editUploadDokumenDrpService; } @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){ + @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() @@ -69,14 +55,25 @@ public class DrpController { return getListDrpService.execute(drpRequest); } + @GetMapping("/{id}") + public DrpResponse getDrp(@PathVariable Long id) { + return getDrpService.execute(DrpRequest.builder() + .id(id) + .build()); + } @PostMapping("/tahun") public DrpResponse createTahunDrp(@RequestBody DrpRequest drpRequest) { return postCreateTahunDrpService.execute(drpRequest); } + @PostMapping + public DrpResponse createDrp(@RequestBody DrpRequest drpRequest) { + return postCreateDrpService.execute(drpRequest); + } - @PostMapping("/upload/rkap") + + @PostMapping("/upload/dokumen") public DrpDokumenResponse uploadDokumenRkap(@RequestParam(name = "jenisDokumenId") Long jenisDokumenId, @RequestParam(name = "keterangan") String keterangan, @RequestParam(name = "file") MultipartFile file) throws IOException { @@ -87,58 +84,22 @@ public class DrpController { .build()); } - @PostMapping("/upload/pendukung") - public DrpDokumenResponse uploadDokumenPendukung(@RequestParam(name = "jenisDokumenId") Long jenisDokumenId, - @RequestParam(name = "keterangan") String keterangan, - @RequestParam(name = "file") MultipartFile file) throws IOException { - return postDrpUploadDokumenPendukungService.execute(DrpDokumenRequest.builder() + @DeleteMapping("/upload/dokumen") + public EmptyResponse deleteDokumenRkap(@RequestBody DrpDokumenRequest drpDokumenRequest) { + return deleteDokumenUploadService.execute(drpDokumenRequest); + } + + @PutMapping("/upload/dokumen") + public DrpDokumenResponse editUploadDrpDokumen(@RequestParam(name = "filename") String filename, + @RequestParam(name = "jenisDokumenId") Long jenisDokumenId, + @RequestParam(name = "keterangan") String keterangan, + @RequestParam(name = "file") MultipartFile file) { + return editUploadDokumenDrpService.execute(DrpDokumenRequest.builder() + .filename(filename) .jenisDokumenId(jenisDokumenId) .keterangan(keterangan) .file(file) .build()); } - @PostMapping - public DrpResponse createDrp(@RequestBody DrpRequest drpRequest) { - return postCreateDrpService.execute(drpRequest); - } - - @GetMapping("/{id}") - public DrpResponse getDrp(@PathVariable Long id) { - return getDrpService.execute(DrpRequest.builder() - .id(id) - .build()); - } - - @PostMapping("/pengadaan") - public DrpPengadaanResponse createDrpPengadaan(@RequestBody DrpPengadaanRequest drpPengadaanRequest) { - return postCreateDrpPengadaanService.execute(drpPengadaanRequest); - } - - @GetMapping("/pengadaan") - public GetListDrpPengadaanResponse getDrpPengadaan(@RequestParam(name = "page", defaultValue = "1") Integer page, - @RequestParam(name = "size", defaultValue = "5") Integer size){ - - Pageable pageable = PageRequest.of((page - 1), size); - DrpPengadaanRequest drpPengadaanRequest = DrpPengadaanRequest.builder() - .pageable(pageable) - .build(); - return getListDrpPengadaanService.execute(drpPengadaanRequest); - } - - @DeleteMapping("/{id}") - public EmptyResponse deleteDrpPengadaan(@RequestBody DrpPengadaanRequest drpPengadaanRequest) { - return deleteDrpPengadaanService.execute(drpPengadaanRequest); - } - - @DeleteMapping("/upload/rkap") - public EmptyResponse deleteDokumenRkap(@RequestBody DrpDokumenRequest drpDokumenRequest) { - return deleteDokumenUploadService.execute(drpDokumenRequest); - } - - @DeleteMapping("/upload/pendukung") - public EmptyResponse deleteDokumenPendukung(@RequestBody DrpPengadaanDokumenRequest drpPengadaanDokumenRequest) { - return deleteDokumenPendukungService.execute(drpPengadaanDokumenRequest); - } - } diff --git a/src/main/java/com/iconplus/smartproc/controller/DrpPengadaanController.java b/src/main/java/com/iconplus/smartproc/controller/DrpPengadaanController.java new file mode 100644 index 0000000..9c9fe33 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/controller/DrpPengadaanController.java @@ -0,0 +1,101 @@ +package com.iconplus.smartproc.controller; + +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.DrpPengadaanDokumenRequest; +import com.iconplus.smartproc.model.request.DrpPengadaanRequest; +import com.iconplus.smartproc.model.response.*; +import com.iconplus.smartproc.service.drppengadaan.*; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; + +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") +@RestController +@RequestMapping("/api/drp/pengadaan") +public class DrpPengadaanController { + + private final PostCreateDrpPengadaanService postCreateDrpPengadaanService; + private final GetListDrpPengadaanService getListDrpPengadaanService; + private final PostDrpUploadDokumenPendukungService postDrpUploadDokumenPendukungService; + private final DeleteDrpPengadaanService deleteDrpPengadaanService; + private final DeleteDokumenPendukungService deleteDokumenPendukungService; + private final EditUploadDrpPengadaanService editUploadDrpPengadaanService; + + public DrpPengadaanController(PostCreateDrpPengadaanService postCreateDrpPengadaanService, + GetListDrpPengadaanService getListDrpPengadaanService, + PostDrpUploadDokumenPendukungService postDrpUploadDokumenPendukungService, + DeleteDrpPengadaanService deleteDrpPengadaanService, + DeleteDokumenPendukungService deleteDokumenPendukungService, + EditUploadDrpPengadaanService editUploadDrpPengadaanService) { + this.postCreateDrpPengadaanService = postCreateDrpPengadaanService; + this.getListDrpPengadaanService = getListDrpPengadaanService; + this.postDrpUploadDokumenPendukungService = postDrpUploadDokumenPendukungService; + this.deleteDrpPengadaanService = deleteDrpPengadaanService; + this.deleteDokumenPendukungService = deleteDokumenPendukungService; + this.editUploadDrpPengadaanService = editUploadDrpPengadaanService; + } + + @GetMapping + public GetListDrpPengadaanResponse getDrpPengadaan(@RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size){ + + Pageable pageable = PageRequest.of((page - 1), size); + DrpPengadaanRequest drpPengadaanRequest = DrpPengadaanRequest.builder() + .pageable(pageable) + .build(); + return getListDrpPengadaanService.execute(drpPengadaanRequest); + } + + @PostMapping + public DrpPengadaanResponse createDrpPengadaan(@RequestBody DrpPengadaanRequest drpPengadaanRequest) { + return postCreateDrpPengadaanService.execute(drpPengadaanRequest); + } + + @GetMapping("/{id}") + public DrpPengadaanResponse getDrpPengadaanById(@PathVariable Long id) { + return null; + } + + @PutMapping("/{id}") + public DrpPengadaanResponse updateDrpPengadaan(@PathVariable Long id) { + return null; + } + + @DeleteMapping("/{id}") + public EmptyResponse deleteDrpPengadaan(@RequestBody DrpPengadaanRequest drpPengadaanRequest) { + return deleteDrpPengadaanService.execute(drpPengadaanRequest); + } + + @PostMapping("/upload/dokumen") + public DrpPengadaanDokumenResponse uploadDokumenPendukung(@RequestParam(name = "jenisDokumenId") Long jenisDokumenId, + @RequestParam(name = "keterangan") String keterangan, + @RequestParam(name = "file") MultipartFile file) throws IOException { + return postDrpUploadDokumenPendukungService.execute(DrpPengadaanDokumenRequest.builder() + .jenisDokumenId(jenisDokumenId) + .keterangan(keterangan) + .file(file) + .build()); + } + + @PutMapping("/upload/dokumen") + public DrpPengadaanDokumenResponse editUploadDrpDokumen(@RequestParam(name = "filename") String filename, + @RequestParam(name = "jenisDokumenId") Long jenisDokumenId, + @RequestParam(name = "keterangan") String keterangan, + @RequestParam(name = "file") MultipartFile file) { + return editUploadDrpPengadaanService.execute(DrpPengadaanDokumenRequest.builder() + .filename(filename) + .jenisDokumenId(jenisDokumenId) + .keterangan(keterangan) + .file(file) + .build()); + } + + @DeleteMapping("/upload/dokumen") + public EmptyResponse deleteDokumenPendukung(@RequestBody DrpPengadaanDokumenRequest drpPengadaanDokumenRequest) { + return deleteDokumenPendukungService.execute(drpPengadaanDokumenRequest); + } + +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/DrpApproval.java b/src/main/java/com/iconplus/smartproc/model/entity/DrpApproval.java new file mode 100644 index 0000000..bbf23cd --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/DrpApproval.java @@ -0,0 +1,73 @@ +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.Date; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "drp_approval") +public class DrpApproval extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "drp_id") + private Long drpId; + + @Column(name = "approver_vp_id") + private Long approverVpId; + + @Column(name = "approver_vp_date") + private Date approverVpDate; + + @Column(name = "approver_komite1_id") + private Long approverKomite1Id; + + @Column(name = "approver_komite1_date") + private Date approverKomite1Date; + + @Column(name = "approver_komite2_id") + private Long approverKomite2Id; + + @Column(name = "approver_komite2_date") + private Date approverKomite2Date; + + @Column(name = "approver_komite3_id") + private Long approverKomite3Id; + + @Column(name = "approver_komite3_date") + private Date approverKomite3Date; + + @Column(name = "approver_komite4_id") + private Long approverKomite4Id; + + @Column(name = "approver_komite4_date") + private Date approverKomite4Date; + + @Column(name = "approver_direktur_id") + private Long approverDirekturId; + + @Column(name = "approver_direktur_date") + private Date approverDirekturDate; + + @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/DrpApprovalRequest.java b/src/main/java/com/iconplus/smartproc/model/request/DrpApprovalRequest.java new file mode 100644 index 0000000..820bc70 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/DrpApprovalRequest.java @@ -0,0 +1,22 @@ +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 DrpApprovalRequest extends BaseRequest { + + private Long drpId; + private Long approverVpId; + private Long approverKomite1Id; + private Long approverKomite2Id; + private Long approverKomite3Id; + private Long approverKomite4Id; + private Long approverDirekturId; +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/DrpPengadaanDokumenRequest.java b/src/main/java/com/iconplus/smartproc/model/request/DrpPengadaanDokumenRequest.java index b1819d1..8510e9b 100644 --- a/src/main/java/com/iconplus/smartproc/model/request/DrpPengadaanDokumenRequest.java +++ b/src/main/java/com/iconplus/smartproc/model/request/DrpPengadaanDokumenRequest.java @@ -5,6 +5,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import org.springframework.web.multipart.MultipartFile; import javax.persistence.Entity; import javax.persistence.Table; @@ -19,6 +20,7 @@ public class DrpPengadaanDokumenRequest extends BaseRequest { private Long drpId; private Long jenisDokumenId; private String filename; + private MultipartFile file; private String keterangan; private Boolean isDelete; } diff --git a/src/main/java/com/iconplus/smartproc/model/response/DrpApprovalResponse.java b/src/main/java/com/iconplus/smartproc/model/response/DrpApprovalResponse.java new file mode 100644 index 0000000..6b0c43a --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/DrpApprovalResponse.java @@ -0,0 +1,16 @@ +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 DrpApprovalResponse extends BaseResponse { + + private Long id; +} diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpApprovalRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpApprovalRepository.java new file mode 100644 index 0000000..1320983 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/DrpApprovalRepository.java @@ -0,0 +1,10 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.DrpApproval; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface DrpApprovalRepository extends JpaRepository { + +} diff --git a/src/main/java/com/iconplus/smartproc/service/approval/PostCreateDrpApprovalService.java b/src/main/java/com/iconplus/smartproc/service/approval/PostCreateDrpApprovalService.java new file mode 100644 index 0000000..4500c26 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/approval/PostCreateDrpApprovalService.java @@ -0,0 +1,51 @@ +package com.iconplus.smartproc.service.approval; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.DrpApproval; +import com.iconplus.smartproc.model.request.DrpApprovalRequest; +import com.iconplus.smartproc.model.response.DrpApprovalResponse; +import com.iconplus.smartproc.repository.DrpApprovalRepository; +import com.iconplus.smartproc.repository.DrpRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + +import java.io.IOException; + +@Service +public class PostCreateDrpApprovalService implements BaseService { + + private final DrpApprovalRepository drpApprovalRepository; + private final DrpRepository drpRepository; + public PostCreateDrpApprovalService(DrpApprovalRepository drpApprovalRepository, + DrpRepository drpRepository) { + this.drpApprovalRepository = drpApprovalRepository; + this.drpRepository = drpRepository; + } + + @Override + public DrpApprovalResponse execute(DrpApprovalRequest input) { + + var drpOptional = drpRepository.findByIdAndIsDeleteFalse(input.getDrpId()); + if (drpOptional.isEmpty()) { + throw new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "DRP", input.getDrpId())); + } + + DrpApproval drpApproval = DrpApproval.builder() + .drpId(input.getDrpId()) + .approverKomite1Id(input.getApproverKomite1Id()) + .approverKomite2Id(input.getApproverKomite2Id()) + .approverKomite3Id(input.getApproverKomite3Id()) + .approverKomite4Id(input.getApproverKomite4Id()) + .approverDirekturId(input.getApproverDirekturId()) + .build(); + + var result = drpApprovalRepository.save(drpApproval); + + return DrpApprovalResponse.builder() + .id(result.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/drp/EditUploadDokumenDrpService.java b/src/main/java/com/iconplus/smartproc/service/drp/EditUploadDokumenDrpService.java new file mode 100644 index 0000000..917d525 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/drp/EditUploadDokumenDrpService.java @@ -0,0 +1,76 @@ +package com.iconplus.smartproc.service.drp; + +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.DrpDokumenRequest; +import com.iconplus.smartproc.model.request.DrpRequest; +import com.iconplus.smartproc.model.response.DrpDokumenResponse; +import com.iconplus.smartproc.repository.DrpDokumenRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +@Service +@Slf4j +public class EditUploadDokumenDrpService implements BaseService { + + @Value("${config.file-upload.rkap}") + private String pathFileUploadRkap; + + private final DrpDokumenRepository drpDokumenRepository; + + public EditUploadDokumenDrpService(DrpDokumenRepository drpDokumenRepository) { + this.drpDokumenRepository = drpDokumenRepository; + } + + @Override + public DrpDokumenResponse execute(DrpDokumenRequest input) { + + MultipartFile file = input.getFile(); + String newFilename = file.getOriginalFilename(); + + var drpDokumenOptional = drpDokumenRepository.findByFilenameAndIsDeleteFalse(input.getFilename()); + if (drpDokumenOptional.isPresent()) { + drpDokumenOptional.get().setDrpId(input.getDrpId()); + drpDokumenOptional.get().setJenisDokumenId(input.getJenisDokumenId()); + drpDokumenOptional.get().setFilename(newFilename); + drpDokumenOptional.get().setKeterangan(input.getKeterangan()); + drpDokumenRepository.save(drpDokumenOptional.get()); + } + + Path oldFile = Paths.get(pathFileUploadRkap + input.getFilename()); + try { + Files.delete(oldFile); + } catch (IOException e) { + log.info("no file found"); + } + + File path = new File(pathFileUploadRkap + newFilename); + + try { + FileOutputStream output = new FileOutputStream(path); + output.write(file.getBytes()); + output.close(); + } catch (Exception ex) { + throw new BusinessException(Constants.ERR_CODE_10012, + Constants.ERR_TTL_10012, + String.format(Constants.ERR_MSG_10012, pathFileUploadRkap)); + } + + return DrpDokumenResponse.builder() + .jenisDokumenId(input.getJenisDokumenId()) + .filename(newFilename) + .keterangan(input.getKeterangan()) + .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 index 9eeeda3..8210d44 100644 --- a/src/main/java/com/iconplus/smartproc/service/drp/PostCreateDrpService.java +++ b/src/main/java/com/iconplus/smartproc/service/drp/PostCreateDrpService.java @@ -2,15 +2,11 @@ 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.entity.DrpPengadaanDokumen; import com.iconplus.smartproc.model.request.DrpDokumenRequest; -import com.iconplus.smartproc.model.request.DrpPengadaanDokumenRequest; 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.DrpPengadaanDokumenRepository; import com.iconplus.smartproc.repository.DrpRepository; import com.iconplus.smartproc.util.Constants; import org.apache.commons.lang3.ObjectUtils; @@ -18,21 +14,17 @@ 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; - private final DrpPengadaanDokumenRepository drpPengadaanDokumenRepository; public PostCreateDrpService (DrpRepository drpRepository, - DrpDokumenRepository drpDokumenRepository, - DrpPengadaanDokumenRepository drpPengadaanDokumenRepository) { + DrpDokumenRepository drpDokumenRepository) { this.drpRepository = drpRepository; this.drpDokumenRepository = drpDokumenRepository; - this.drpPengadaanDokumenRepository = drpPengadaanDokumenRepository; } @Override @@ -63,22 +55,7 @@ public class PostCreateDrpService implements BaseService drpPengadaanDokumenList = new ArrayList<>(); - if (ObjectUtils.isNotEmpty(input.getDataDrpPengadaanDokumen())) { - for (DrpPengadaanDokumenRequest drpPengadaanDokumenRequest : input.getDataDrpPengadaanDokumen()) { - DrpPengadaanDokumen drpPengadaanDokumen = DrpPengadaanDokumen.builder() - .drpId(drpSaved.getId()) - .jenisDokumenId(drpPengadaanDokumenRequest.getJenisDokumenId()) - .filename(drpPengadaanDokumenRequest.getFilename()) - .keterangan(drpPengadaanDokumenRequest.getKeterangan()) - .isDelete(false) - .build(); - drpPengadaanDokumenList.add(drpPengadaanDokumen); - } - } - drpDokumenRepository.saveAll(drpDokumenList); - drpPengadaanDokumenRepository.saveAll(drpPengadaanDokumenList); return DrpResponse.builder() .id(drpSaved.getId()) diff --git a/src/main/java/com/iconplus/smartproc/service/drp/DeleteDokumenPendukungService.java b/src/main/java/com/iconplus/smartproc/service/drppengadaan/DeleteDokumenPendukungService.java similarity index 96% rename from src/main/java/com/iconplus/smartproc/service/drp/DeleteDokumenPendukungService.java rename to src/main/java/com/iconplus/smartproc/service/drppengadaan/DeleteDokumenPendukungService.java index 108bbd9..5449295 100644 --- a/src/main/java/com/iconplus/smartproc/service/drp/DeleteDokumenPendukungService.java +++ b/src/main/java/com/iconplus/smartproc/service/drppengadaan/DeleteDokumenPendukungService.java @@ -1,4 +1,4 @@ -package com.iconplus.smartproc.service.drp; +package com.iconplus.smartproc.service.drppengadaan; import com.iconplus.smartproc.helper.model.EmptyResponse; import com.iconplus.smartproc.helper.service.BaseService; diff --git a/src/main/java/com/iconplus/smartproc/service/drp/DeleteDrpPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/drppengadaan/DeleteDrpPengadaanService.java similarity index 95% rename from src/main/java/com/iconplus/smartproc/service/drp/DeleteDrpPengadaanService.java rename to src/main/java/com/iconplus/smartproc/service/drppengadaan/DeleteDrpPengadaanService.java index fdd3066..d379d84 100644 --- a/src/main/java/com/iconplus/smartproc/service/drp/DeleteDrpPengadaanService.java +++ b/src/main/java/com/iconplus/smartproc/service/drppengadaan/DeleteDrpPengadaanService.java @@ -1,4 +1,4 @@ -package com.iconplus.smartproc.service.drp; +package com.iconplus.smartproc.service.drppengadaan; import com.iconplus.smartproc.exception.BusinessException; import com.iconplus.smartproc.helper.model.EmptyResponse; diff --git a/src/main/java/com/iconplus/smartproc/service/drppengadaan/EditUploadDrpPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/drppengadaan/EditUploadDrpPengadaanService.java new file mode 100644 index 0000000..baa3cd9 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/drppengadaan/EditUploadDrpPengadaanService.java @@ -0,0 +1,72 @@ +package com.iconplus.smartproc.service.drppengadaan; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.DrpPengadaanDokumenRequest; +import com.iconplus.smartproc.model.response.DrpPengadaanDokumenResponse; +import com.iconplus.smartproc.repository.DrpPengadaanDokumenRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +@Service +@Slf4j +public class EditUploadDrpPengadaanService implements BaseService { + + @Value("${config.file-upload.pendukung}") + private String pathFileUploadPendukung; + + private final DrpPengadaanDokumenRepository drpPengadaanDokumenRepository; + public EditUploadDrpPengadaanService(DrpPengadaanDokumenRepository drpPengadaanDokumenRepository) { + this.drpPengadaanDokumenRepository = drpPengadaanDokumenRepository; + } + + @Override + public DrpPengadaanDokumenResponse execute(DrpPengadaanDokumenRequest input) { + MultipartFile file = input.getFile(); + String newFilename = file.getOriginalFilename(); + + var drpDokumenOptional = drpPengadaanDokumenRepository.findByFilenameAndIsDeleteFalse(input.getFilename()); + if (drpDokumenOptional.isPresent()) { + drpDokumenOptional.get().setDrpId(input.getDrpId()); + drpDokumenOptional.get().setJenisDokumenId(input.getJenisDokumenId()); + drpDokumenOptional.get().setFilename(newFilename); + drpDokumenOptional.get().setKeterangan(input.getKeterangan()); + drpPengadaanDokumenRepository.save(drpDokumenOptional.get()); + } + + Path oldFile = Paths.get(pathFileUploadPendukung + input.getFilename()); + try { + Files.delete(oldFile); + } catch (IOException e) { + log.info("no file found"); + } + + File path = new File(pathFileUploadPendukung + newFilename); + + try { + FileOutputStream output = new FileOutputStream(path); + output.write(file.getBytes()); + output.close(); + } catch (Exception ex) { + throw new BusinessException(Constants.ERR_CODE_10012, + Constants.ERR_TTL_10012, + String.format(Constants.ERR_MSG_10012, pathFileUploadPendukung)); + } + + return DrpPengadaanDokumenResponse.builder() + .jenisDokumenId(input.getJenisDokumenId()) + .filename(newFilename) + .keterangan(input.getKeterangan()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/drp/GetListDrpPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/drppengadaan/GetListDrpPengadaanService.java similarity index 98% rename from src/main/java/com/iconplus/smartproc/service/drp/GetListDrpPengadaanService.java rename to src/main/java/com/iconplus/smartproc/service/drppengadaan/GetListDrpPengadaanService.java index 7b24ba2..82fb79f 100644 --- a/src/main/java/com/iconplus/smartproc/service/drp/GetListDrpPengadaanService.java +++ b/src/main/java/com/iconplus/smartproc/service/drppengadaan/GetListDrpPengadaanService.java @@ -1,4 +1,4 @@ -package com.iconplus.smartproc.service.drp; +package com.iconplus.smartproc.service.drppengadaan; import com.iconplus.smartproc.helper.model.Pagination; import com.iconplus.smartproc.helper.service.BaseService; diff --git a/src/main/java/com/iconplus/smartproc/service/drp/PostCreateDrpPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/drppengadaan/PostCreateDrpPengadaanService.java similarity index 98% rename from src/main/java/com/iconplus/smartproc/service/drp/PostCreateDrpPengadaanService.java rename to src/main/java/com/iconplus/smartproc/service/drppengadaan/PostCreateDrpPengadaanService.java index 24d2d5c..fcd17d4 100644 --- a/src/main/java/com/iconplus/smartproc/service/drp/PostCreateDrpPengadaanService.java +++ b/src/main/java/com/iconplus/smartproc/service/drppengadaan/PostCreateDrpPengadaanService.java @@ -1,4 +1,4 @@ -package com.iconplus.smartproc.service.drp; +package com.iconplus.smartproc.service.drppengadaan; import com.iconplus.smartproc.helper.service.BaseService; import com.iconplus.smartproc.model.entity.DrpPengadaan; diff --git a/src/main/java/com/iconplus/smartproc/service/drp/PostDrpUploadDokumenPendukungService.java b/src/main/java/com/iconplus/smartproc/service/drppengadaan/PostDrpUploadDokumenPendukungService.java similarity index 82% rename from src/main/java/com/iconplus/smartproc/service/drp/PostDrpUploadDokumenPendukungService.java rename to src/main/java/com/iconplus/smartproc/service/drppengadaan/PostDrpUploadDokumenPendukungService.java index 216316f..de28b1a 100644 --- a/src/main/java/com/iconplus/smartproc/service/drp/PostDrpUploadDokumenPendukungService.java +++ b/src/main/java/com/iconplus/smartproc/service/drppengadaan/PostDrpUploadDokumenPendukungService.java @@ -1,9 +1,9 @@ -package com.iconplus.smartproc.service.drp; +package com.iconplus.smartproc.service.drppengadaan; import com.iconplus.smartproc.exception.BusinessException; import com.iconplus.smartproc.helper.service.BaseService; -import com.iconplus.smartproc.model.request.DrpDokumenRequest; -import com.iconplus.smartproc.model.response.DrpDokumenResponse; +import com.iconplus.smartproc.model.request.DrpPengadaanDokumenRequest; +import com.iconplus.smartproc.model.response.DrpPengadaanDokumenResponse; import com.iconplus.smartproc.repository.DrpPengadaanDokumenRepository; import com.iconplus.smartproc.util.Constants; import org.springframework.beans.factory.annotation.Value; @@ -15,7 +15,7 @@ import java.io.FileOutputStream; import java.io.IOException; @Service -public class PostDrpUploadDokumenPendukungService implements BaseService { +public class PostDrpUploadDokumenPendukungService implements BaseService { @Value("${config.file-upload.pendukung}") private String pathFileUploadPendukung; @@ -26,7 +26,7 @@ public class PostDrpUploadDokumenPendukungService implements BaseService Date: Wed, 31 May 2023 15:40:38 +0700 Subject: [PATCH 46/63] add get pengadaan by id --- .../controller/DrpPengadaanController.java | 9 +- .../model/entity/DrpPengadaanDokumen.java | 3 + .../model/response/DrpPengadaanResponse.java | 4 + .../smartproc/model/response/DrpResponse.java | 2 +- .../DrpPengadaanDokumenRepository.java | 2 + .../repository/DrpPengadaanRepository.java | 44 +++++++++- .../smartproc/service/drp/GetDrpService.java | 51 +++++------ .../drp/PostDrpUploadDokumenRKAPService.java | 1 + .../drppengadaan/GetDrpPengadaanService.java | 85 +++++++++++++++++++ .../PostCreateDrpPengadaanService.java | 4 +- .../drppengadaan/PutDrpPengadaanService.java | 62 ++++++++++++++ 11 files changed, 233 insertions(+), 34 deletions(-) create mode 100644 src/main/java/com/iconplus/smartproc/service/drppengadaan/GetDrpPengadaanService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/drppengadaan/PutDrpPengadaanService.java diff --git a/src/main/java/com/iconplus/smartproc/controller/DrpPengadaanController.java b/src/main/java/com/iconplus/smartproc/controller/DrpPengadaanController.java index 9c9fe33..33d8864 100644 --- a/src/main/java/com/iconplus/smartproc/controller/DrpPengadaanController.java +++ b/src/main/java/com/iconplus/smartproc/controller/DrpPengadaanController.java @@ -23,19 +23,22 @@ public class DrpPengadaanController { private final DeleteDrpPengadaanService deleteDrpPengadaanService; private final DeleteDokumenPendukungService deleteDokumenPendukungService; private final EditUploadDrpPengadaanService editUploadDrpPengadaanService; + private final GetDrpPengadaanService getDrpPengadaanService; public DrpPengadaanController(PostCreateDrpPengadaanService postCreateDrpPengadaanService, GetListDrpPengadaanService getListDrpPengadaanService, PostDrpUploadDokumenPendukungService postDrpUploadDokumenPendukungService, DeleteDrpPengadaanService deleteDrpPengadaanService, DeleteDokumenPendukungService deleteDokumenPendukungService, - EditUploadDrpPengadaanService editUploadDrpPengadaanService) { + EditUploadDrpPengadaanService editUploadDrpPengadaanService, + GetDrpPengadaanService getDrpPengadaanService) { this.postCreateDrpPengadaanService = postCreateDrpPengadaanService; this.getListDrpPengadaanService = getListDrpPengadaanService; this.postDrpUploadDokumenPendukungService = postDrpUploadDokumenPendukungService; this.deleteDrpPengadaanService = deleteDrpPengadaanService; this.deleteDokumenPendukungService = deleteDokumenPendukungService; this.editUploadDrpPengadaanService = editUploadDrpPengadaanService; + this.getDrpPengadaanService = getDrpPengadaanService; } @GetMapping @@ -56,7 +59,9 @@ public class DrpPengadaanController { @GetMapping("/{id}") public DrpPengadaanResponse getDrpPengadaanById(@PathVariable Long id) { - return null; + return getDrpPengadaanService.execute(DrpPengadaanRequest.builder() + .id(id) + .build()); } @PutMapping("/{id}") diff --git a/src/main/java/com/iconplus/smartproc/model/entity/DrpPengadaanDokumen.java b/src/main/java/com/iconplus/smartproc/model/entity/DrpPengadaanDokumen.java index e89344d..fad33d7 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/DrpPengadaanDokumen.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/DrpPengadaanDokumen.java @@ -22,6 +22,9 @@ public class DrpPengadaanDokumen extends BaseEntity { @Column(name = "id") private Long id; + @Column(name = "drp_pengadaan_id") + private Long drpPengadaanId; + @Column(name = "drp_id") private Long drpId; diff --git a/src/main/java/com/iconplus/smartproc/model/response/DrpPengadaanResponse.java b/src/main/java/com/iconplus/smartproc/model/response/DrpPengadaanResponse.java index 98472e0..b69277c 100644 --- a/src/main/java/com/iconplus/smartproc/model/response/DrpPengadaanResponse.java +++ b/src/main/java/com/iconplus/smartproc/model/response/DrpPengadaanResponse.java @@ -1,6 +1,7 @@ package com.iconplus.smartproc.model.response; import com.iconplus.smartproc.helper.base.BaseResponse; +import com.iconplus.smartproc.model.request.DrpPengadaanDokumenRequest; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -9,6 +10,7 @@ import lombok.NoArgsConstructor; import java.math.BigDecimal; import java.sql.Date; import java.sql.Timestamp; +import java.util.List; @Data @Builder @@ -54,4 +56,6 @@ public class DrpPengadaanResponse extends BaseResponse { private BigDecimal hpe; private Boolean isActive; private Boolean isDelete; + + private List dataDrpPengadaanDokumen; } 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 efb60dd..392264f 100644 --- a/src/main/java/com/iconplus/smartproc/model/response/DrpResponse.java +++ b/src/main/java/com/iconplus/smartproc/model/response/DrpResponse.java @@ -23,5 +23,5 @@ public class DrpResponse extends BaseResponse { private List dataDrpDokumen; - private List dataDrpPengadaanDokumen; + private List dataDrpDokumenPendukung; } diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanDokumenRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanDokumenRepository.java index 2bc9b84..bcf8b99 100644 --- a/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanDokumenRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanDokumenRepository.java @@ -14,4 +14,6 @@ public interface DrpPengadaanDokumenRepository extends JpaRepository findByFilenameAndIsDeleteFalse(String filename); + List findByDrpPengadaanIdAndIsDeleteFalse(Long id); + } diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanRepository.java index 7c2f25e..2434219 100644 --- a/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanRepository.java @@ -50,9 +50,51 @@ public interface DrpPengadaanRepository extends JpaRepository getListDrpPengadaan(Pageable pageable); + @Query(value = "SELECT dp.id as id, " + + "dp.nomor as nomor, " + + "dp.drpId as drpId, " + + "dp.namaPengadaan as namaPengadaan, " + + "dp.hpe as hpe, " + + "dp.pagu as pagu, " + + "dp.isActive as isActive, " + + "dp.rencanaTanggal as rencanaTanggal, " + + "dp.targetTanggal as targetTanggal, " + + "dp.jenisKontrakId as jenisKontrakId, " + + "jk.jenisKontrak as jenisKontrak, " + + "dp.jenisPengadaanId as jenisPengadaanId, " + + "jp.jenisPengadaan as jenisPengadaan, " + + "dp.lokasiId as lokasiId, " + + "l.lokasi as lokasi, " + + "dp.metodePengadaanId as metodePengadaanId, " + + "mp.metodePengadaan as metodePengadaan, " + + "dp.metodePenyampaianId as metodePenyampaianId, " + + "mpi.metodePenyampaian as metodePenyampaian, " + + "dp.strategiPengadaanId as strategiPengadaanId, " + + "sp.strategiPengadaan as strategiPengadaan, " + + "dp.sumberDanaId as sumberDanaId, " + + "sd.sumberDana as sumberDana, " + + "dp.supplyPositioningMatrixId as supplyPositioningMatrixId, " + + "spm.supplyPositioningMatrix as supplyPositioningMatrix, " + + "dp.unitInisiatorId as unitInisiatorId, " + + "ui.unitInisiator as unitInisiator " + + "FROM DrpPengadaan dp " + + "JOIN JenisKontrak jk ON jk.id = dp.jenisKontrakId " + + "JOIN JenisPengadaan jp ON jp.id = dp.jenisPengadaanId " + + "JOIN Lokasi l ON l.id = dp.lokasiId " + + "JOIN MetodePengadaan mp ON mp.id = dp.metodePengadaanId " + + "JOIN MetodePenyampaian mpi ON mpi.id = dp.metodePenyampaianId " + + "JOIN StrategiPengadaan sp ON sp.id = dp.strategiPengadaanId " + + "JOIN SumberDana sd ON sd.id = dp.sumberDanaId " + + "JOIN SupplyPositioningMatrix spm ON spm.id = dp.supplyPositioningMatrixId " + + "JOIN UnitInisiator ui ON ui.id = dp.unitInisiatorId " + + "WHERE dp.isDelete = false " + + "AND dp.id = :id") + Optional getDrpPengadaanById(Long id); + Optional findByIdAndIsDeleteFalse(Long id); 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 4ab2f0c..9045888 100644 --- a/src/main/java/com/iconplus/smartproc/service/drp/GetDrpService.java +++ b/src/main/java/com/iconplus/smartproc/service/drp/GetDrpService.java @@ -3,10 +3,8 @@ 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.entity.DrpPengadaanDokumen; import com.iconplus.smartproc.model.request.DrpRequest; import com.iconplus.smartproc.model.response.DrpDokumenResponse; -import com.iconplus.smartproc.model.response.DrpPengadaanDokumenResponse; import com.iconplus.smartproc.model.response.DrpResponse; import com.iconplus.smartproc.repository.DrpDokumenRepository; import com.iconplus.smartproc.repository.DrpPengadaanDokumenRepository; @@ -40,10 +38,8 @@ public class GetDrpService implements BaseService { String.format(Constants.ERR_MSG_10001, "DRP", input.getId()))); List drpDokumenResponseList = new ArrayList<>(); - setDrpDokumen(input, drpDokumenResponseList); - - List drpPengadaanDokumenResponseList = new ArrayList<>(); - setDrpPengadaanDokumen(input, drpPengadaanDokumenResponseList); + List drpPengadaanDokumenPendukungList = new ArrayList<>(); + setDrpDokumen(input, drpDokumenResponseList, drpPengadaanDokumenPendukungList); return DrpResponse.builder() @@ -54,35 +50,32 @@ public class GetDrpService implements BaseService { .isActive(drp.getIsActive()) .isDelete(drp.getIsDelete()) .dataDrpDokumen(drpDokumenResponseList) - .dataDrpPengadaanDokumen(drpPengadaanDokumenResponseList) + .dataDrpDokumenPendukung(drpPengadaanDokumenPendukungList) .build(); } - private void setDrpPengadaanDokumen(DrpRequest input, List drpPengadaanDokumenResponseList) { - var drpPengadaanDokumenList = drpPengadaanDokumenRepository.findByDrpIdAndIsDeleteFalse(input.getId()); - - for (DrpPengadaanDokumen drpPengadaanDokumen : drpPengadaanDokumenList) { - DrpPengadaanDokumenResponse drpPengadaanDokumenResponse = DrpPengadaanDokumenResponse.builder() - .id(drpPengadaanDokumen.getId()) - .drpId(drpPengadaanDokumen.getDrpId()) - .jenisDokumenId(drpPengadaanDokumen.getJenisDokumenId()) - .filename(drpPengadaanDokumen.getFilename()) - .build(); - drpPengadaanDokumenResponseList.add(drpPengadaanDokumenResponse); - } - } - - private void setDrpDokumen(DrpRequest input, List drpDokumenResponseList) { + private void setDrpDokumen(DrpRequest input, List drpDokumenResponseList, List drpDokumenPendukungList) { var drpDokumenList = drpDokumenRepository.findByDrpIdAndIsDeleteFalse(input.getId()); for (DrpDokumen drpDokumen : drpDokumenList) { - DrpDokumenResponse drpDokumenResponse = DrpDokumenResponse.builder() - .id(drpDokumen.getId()) - .drpId(drpDokumen.getDrpId()) - .jenisDokumenId(drpDokumen.getJenisDokumenId()) - .filename(drpDokumen.getFilename()) - .build(); - drpDokumenResponseList.add(drpDokumenResponse); + + if (drpDokumen.getJenisDokumenId() == 1) { + DrpDokumenResponse drpDokumenResponse = DrpDokumenResponse.builder() + .id(drpDokumen.getId()) + .drpId(drpDokumen.getDrpId()) + .jenisDokumenId(drpDokumen.getJenisDokumenId()) + .filename(drpDokumen.getFilename()) + .build(); + drpDokumenResponseList.add(drpDokumenResponse); + } else { + DrpDokumenResponse drpDokumenResponse = DrpDokumenResponse.builder() + .id(drpDokumen.getId()) + .drpId(drpDokumen.getDrpId()) + .jenisDokumenId(drpDokumen.getJenisDokumenId()) + .filename(drpDokumen.getFilename()) + .build(); + drpDokumenPendukungList.add(drpDokumenResponse); + } } } } diff --git a/src/main/java/com/iconplus/smartproc/service/drp/PostDrpUploadDokumenRKAPService.java b/src/main/java/com/iconplus/smartproc/service/drp/PostDrpUploadDokumenRKAPService.java index ac3589d..ce70460 100644 --- a/src/main/java/com/iconplus/smartproc/service/drp/PostDrpUploadDokumenRKAPService.java +++ b/src/main/java/com/iconplus/smartproc/service/drp/PostDrpUploadDokumenRKAPService.java @@ -53,6 +53,7 @@ public class PostDrpUploadDokumenRKAPService implements BaseService { + + private final DrpPengadaanRepository drpPengadaanRepository; + private final DrpPengadaanDokumenRepository drpPengadaanDokumenRepository; + + public GetDrpPengadaanService(DrpPengadaanRepository drpPengadaanRepository, + DrpPengadaanDokumenRepository drpPengadaanDokumenRepository) { + this.drpPengadaanRepository = drpPengadaanRepository; + this.drpPengadaanDokumenRepository = drpPengadaanDokumenRepository; + } + + @Override + public DrpPengadaanResponse execute(DrpPengadaanRequest input) { + + var drpPengadaan = drpPengadaanRepository.getDrpPengadaanById(input.getId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "DRP Pengadaan", input.getId()))); + + List drpPengadaanDokumenResponseList = new ArrayList<>(); + var drpPengadaanDokumenList = drpPengadaanDokumenRepository.findByDrpPengadaanIdAndIsDeleteFalse(drpPengadaan.getId()); + for (DrpPengadaanDokumen drpPengadaanDokumen : drpPengadaanDokumenList) { + DrpPengadaanDokumenResponse drpPengadaanDokumenResponse = DrpPengadaanDokumenResponse.builder() + .id(drpPengadaanDokumen.getId()) + .drpId(drpPengadaanDokumen.getDrpId()) + .jenisDokumenId(drpPengadaanDokumen.getJenisDokumenId()) + .filename(drpPengadaanDokumen.getFilename()) + .keterangan(drpPengadaanDokumen.getKeterangan()) + .build(); + drpPengadaanDokumenResponseList.add(drpPengadaanDokumenResponse); + } + + + return DrpPengadaanResponse.builder() + .id(drpPengadaan.getId()) + .drpId(drpPengadaan.getDrpId()) + .nomor(drpPengadaan.getNomor()) + .namaPengadaan(drpPengadaan.getNamaPengadaan()) + .lokasiId(drpPengadaan.getLokasiId()) + .lokasi(drpPengadaan.getLokasi()) + .jenisPengadaanId(drpPengadaan.getJenisPengadaanId()) + .jenisPengadaan(drpPengadaan.getJenisPengadaan()) + .unitInisiatorId(drpPengadaan.getUnitInisiatorId()) + .unitInisiator(drpPengadaan.getUnitInisiator()) + .hpe(drpPengadaan.getHpe()) + .pagu(drpPengadaan.getPagu()) + .sumberDanaId(drpPengadaan.getSumberDanaId()) + .sumberDana(drpPengadaan.getSumberDana()) + .metodePengadaanId(drpPengadaan.getMetodePengadaanId()) + .metodePengadaan(drpPengadaan.getMetodePengadaan()) + .supplyPositioningMatrixId(drpPengadaan.getSupplyPositioningMatrixId()) + .supplyPositioningMatrix(drpPengadaan.getSupplyPositioningMatrix()) + .metodePenyampaianId(drpPengadaan.getMetodePenyampaianId()) + .metodePenyampaian(drpPengadaan.getMetodePenyampaian()) + .jenisKontrakId(drpPengadaan.getJenisKontrakId()) + .jenisKontrak(drpPengadaan.getJenisKontrak()) + .strategiPengadaanId(drpPengadaan.getStrategiPengadaanId()) + .strategiPengadaan(drpPengadaan.getStrategiPengadaan()) + .rencanaTanggal(drpPengadaan.getRencanaTanggal()) + .targetTanggal(drpPengadaan.getTargetTanggal()) + .isActive(drpPengadaan.getIsActive()) + .dataDrpPengadaanDokumen(drpPengadaanDokumenResponseList) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/drppengadaan/PostCreateDrpPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/drppengadaan/PostCreateDrpPengadaanService.java index fcd17d4..7b78807 100644 --- a/src/main/java/com/iconplus/smartproc/service/drppengadaan/PostCreateDrpPengadaanService.java +++ b/src/main/java/com/iconplus/smartproc/service/drppengadaan/PostCreateDrpPengadaanService.java @@ -50,10 +50,13 @@ public class PostCreateDrpPengadaanService implements BaseService drpPengadaanDokumenList = new ArrayList<>(); if (ObjectUtils.isNotEmpty(input.getDataDrpPengadaanDokumen())) { for (DrpPengadaanDokumenRequest drpPengadaanDokumenRequest : input.getDataDrpPengadaanDokumen()) { DrpPengadaanDokumen drpPengadaanDokumen = DrpPengadaanDokumen.builder() + .drpPengadaanId(result.getId()) .drpId(input.getDrpId()) .jenisDokumenId(drpPengadaanDokumenRequest.getJenisDokumenId()) .filename(drpPengadaanDokumenRequest.getFilename()) @@ -64,7 +67,6 @@ public class PostCreateDrpPengadaanService implements BaseService { + + private final DrpPengadaanRepository drpPengadaanRepository; + private final DrpPengadaanDokumenRepository drpPengadaanDokumenRepository; + + public PutDrpPengadaanService(DrpPengadaanRepository drpPengadaanRepository, + DrpPengadaanDokumenRepository drpPengadaanDokumenRepository) { + this.drpPengadaanRepository = drpPengadaanRepository; + this.drpPengadaanDokumenRepository = drpPengadaanDokumenRepository; + } + + @Override + public DrpPengadaanResponse execute(DrpPengadaanRequest input) throws IOException { + + var drpPengadaan = drpPengadaanRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(()-> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "DRP Pengadaan", input.getId()))); + + drpPengadaan.setDrpId(input.getDrpId()); + drpPengadaan.setNomor(input.getNomor()); + drpPengadaan.setNamaPengadaan(input.getNamaPengadaan()); + drpPengadaan.setLokasiId(input.getLokasiId()); + drpPengadaan.setJenisPengadaanId(input.getJenisPengadaanId()); + drpPengadaan.setUnitInisiatorId(input.getUnitInisiatorId()); + drpPengadaan.setPagu(input.getPagu()); + drpPengadaan.setSumberDanaId(input.getSumberDanaId()); + drpPengadaan.setSupplyPositioningMatrixId(input.getSupplyPositioningMatrixId()); + drpPengadaan.setMetodePengadaanId(input.getMetodePengadaanId()); + drpPengadaan.setMetodePengadaanId(input.getMetodePenyampaianId()); + drpPengadaan.setJenisKontrakId(input.getJenisKontrakId()); + drpPengadaan.setStrategiPengadaanId(input.getStrategiPengadaanId()); + drpPengadaan.setRencanaTanggal(input.getRencanaTanggal()); + drpPengadaan.setTargetTanggal(input.getTargetTanggal()); + drpPengadaan.setHpe(input.getHpe()); + drpPengadaan.setIsActive(input.getIsActive()); + drpPengadaan.setIsDelete(false); + + drpPengadaanRepository.save(drpPengadaan); + + var drpPengadaanDokumenList = drpPengadaanDokumenRepository.findByDrpPengadaanIdAndIsDeleteFalse(drpPengadaan.getId()); + return DrpPengadaanResponse.builder().build(); + + } +} From 3a29c636599004e8d904757fcb4e1099b13987dd Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Wed, 31 May 2023 16:32:20 +0700 Subject: [PATCH 47/63] add put api update pengadaan --- .../controller/DrpPengadaanController.java | 11 +++++-- .../drppengadaan/PutDrpPengadaanService.java | 32 ++++++++++++++++--- 2 files changed, 36 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/iconplus/smartproc/controller/DrpPengadaanController.java b/src/main/java/com/iconplus/smartproc/controller/DrpPengadaanController.java index 33d8864..2fe2b01 100644 --- a/src/main/java/com/iconplus/smartproc/controller/DrpPengadaanController.java +++ b/src/main/java/com/iconplus/smartproc/controller/DrpPengadaanController.java @@ -24,6 +24,7 @@ public class DrpPengadaanController { private final DeleteDokumenPendukungService deleteDokumenPendukungService; private final EditUploadDrpPengadaanService editUploadDrpPengadaanService; private final GetDrpPengadaanService getDrpPengadaanService; + private final PutDrpPengadaanService putDrpPengadaanService; public DrpPengadaanController(PostCreateDrpPengadaanService postCreateDrpPengadaanService, GetListDrpPengadaanService getListDrpPengadaanService, @@ -31,7 +32,8 @@ public class DrpPengadaanController { DeleteDrpPengadaanService deleteDrpPengadaanService, DeleteDokumenPendukungService deleteDokumenPendukungService, EditUploadDrpPengadaanService editUploadDrpPengadaanService, - GetDrpPengadaanService getDrpPengadaanService) { + GetDrpPengadaanService getDrpPengadaanService, + PutDrpPengadaanService putDrpPengadaanService) { this.postCreateDrpPengadaanService = postCreateDrpPengadaanService; this.getListDrpPengadaanService = getListDrpPengadaanService; this.postDrpUploadDokumenPendukungService = postDrpUploadDokumenPendukungService; @@ -39,6 +41,7 @@ public class DrpPengadaanController { this.deleteDokumenPendukungService = deleteDokumenPendukungService; this.editUploadDrpPengadaanService = editUploadDrpPengadaanService; this.getDrpPengadaanService = getDrpPengadaanService; + this.putDrpPengadaanService = putDrpPengadaanService; } @GetMapping @@ -65,8 +68,10 @@ public class DrpPengadaanController { } @PutMapping("/{id}") - public DrpPengadaanResponse updateDrpPengadaan(@PathVariable Long id) { - return null; + public DrpPengadaanResponse updateDrpPengadaan(@PathVariable Long id, + @RequestBody DrpPengadaanRequest drpPengadaanRequest) throws IOException { + drpPengadaanRequest.setId(id); + return putDrpPengadaanService.execute(drpPengadaanRequest); } @DeleteMapping("/{id}") diff --git a/src/main/java/com/iconplus/smartproc/service/drppengadaan/PutDrpPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/drppengadaan/PutDrpPengadaanService.java index b2a184f..1bdb74f 100644 --- a/src/main/java/com/iconplus/smartproc/service/drppengadaan/PutDrpPengadaanService.java +++ b/src/main/java/com/iconplus/smartproc/service/drppengadaan/PutDrpPengadaanService.java @@ -2,17 +2,19 @@ package com.iconplus.smartproc.service.drppengadaan; import com.iconplus.smartproc.exception.BusinessException; import com.iconplus.smartproc.helper.service.BaseService; -import com.iconplus.smartproc.model.entity.DrpPengadaan; import com.iconplus.smartproc.model.entity.DrpPengadaanDokumen; +import com.iconplus.smartproc.model.request.DrpPengadaanDokumenRequest; import com.iconplus.smartproc.model.request.DrpPengadaanRequest; import com.iconplus.smartproc.model.response.DrpPengadaanResponse; import com.iconplus.smartproc.repository.DrpPengadaanDokumenRepository; import com.iconplus.smartproc.repository.DrpPengadaanRepository; import com.iconplus.smartproc.util.Constants; -import org.apache.tomcat.util.bcel.Const; +import org.apache.commons.lang3.ObjectUtils; import org.springframework.stereotype.Service; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; @Service public class PutDrpPengadaanService implements BaseService { @@ -34,7 +36,6 @@ public class PutDrpPengadaanService implements BaseService drpPengadaanDokumenArrayList = new ArrayList<>(); + if (ObjectUtils.isNotEmpty(input.getDataDrpPengadaanDokumen())) { + for (DrpPengadaanDokumenRequest drpPengadaanDokumenRequest : input.getDataDrpPengadaanDokumen()) { + DrpPengadaanDokumen drpPengadaanDokumen = DrpPengadaanDokumen.builder() + .drpPengadaanId(drpPengadaan.getId()) + .drpId(drpPengadaan.getDrpId()) + .jenisDokumenId(drpPengadaanDokumenRequest.getJenisDokumenId()) + .filename(drpPengadaanDokumenRequest.getFilename()) + .keterangan(drpPengadaanDokumenRequest.getKeterangan()) + .isDelete(false) + .build(); + drpPengadaanDokumenArrayList.add(drpPengadaanDokumen); + } + drpPengadaanDokumenRepository.saveAll(drpPengadaanDokumenArrayList); + } + + return DrpPengadaanResponse.builder() + .id(drpPengadaan.getId()) + .build(); } } From d67d8b715e580bebc5ba9713bf1e39752431b7c3 Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Thu, 1 Jun 2023 14:43:33 +0700 Subject: [PATCH 48/63] enhance menu response --- .../model/projection/DrpApprovalView.java | 38 +++++++++++ .../model/request/DrpApprovalRequest.java | 2 + .../model/response/DrpApprovalResponse.java | 11 +++ .../model/response/LoginResponse.java | 2 +- .../model/response/MenusResponse.java | 23 +++++++ .../model/response/ParentMenusResponse.java | 21 ++++++ .../smartproc/repository/DrpRepository.java | 16 +++++ .../smartproc/repository/MenusRepository.java | 15 +++++ .../repository/PermissionRepository.java | 3 +- .../approval/GetListApprovalDrpServie.java | 52 ++++++++++++++ .../service/authentication/LoginService.java | 67 ++++++++++++++----- 11 files changed, 232 insertions(+), 18 deletions(-) create mode 100644 src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalView.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/MenusResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/ParentMenusResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/service/approval/GetListApprovalDrpServie.java diff --git a/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalView.java b/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalView.java new file mode 100644 index 0000000..02befb2 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalView.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.model.projection; + +import java.sql.Date; + +public interface DrpApprovalView { + + Long getId(); + void setId(Long id); + + Long getDrpId(); + void setDrpId(Long drpId); + + Integer getTahun(); + void setTahun(); + + String getApproveStatus(); + void setApproveStatus(String approveStatus); + + Date getApproverVpDate(); + void setApproveVpDate(Date approveVpDate); + + Date getApproverKomite1Date(); + void setApproveKomite1Date(Date approveKomite1Date); + + Date getApproverKomite2Date(); + void setApproveKomite2Date(Date approveKomite2Date); + + Date getApproverKomite3Date(); + void setApproveKomite3Date(Date approveKomite3Date); + + Date getApproverKomite4Date(); + void setApproveKomite4Date(Date approveKomite4Date); + + Date getApproverDirekturDate(); + void setApproveDirekturDate(Date approveDirekturDate); + + +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/DrpApprovalRequest.java b/src/main/java/com/iconplus/smartproc/model/request/DrpApprovalRequest.java index 820bc70..53df50e 100644 --- a/src/main/java/com/iconplus/smartproc/model/request/DrpApprovalRequest.java +++ b/src/main/java/com/iconplus/smartproc/model/request/DrpApprovalRequest.java @@ -5,6 +5,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import org.springframework.data.domain.Pageable; @Data @Builder @@ -19,4 +20,5 @@ public class DrpApprovalRequest extends BaseRequest { private Long approverKomite3Id; private Long approverKomite4Id; private Long approverDirekturId; + private transient Pageable pageable; } diff --git a/src/main/java/com/iconplus/smartproc/model/response/DrpApprovalResponse.java b/src/main/java/com/iconplus/smartproc/model/response/DrpApprovalResponse.java index 6b0c43a..53e2b83 100644 --- a/src/main/java/com/iconplus/smartproc/model/response/DrpApprovalResponse.java +++ b/src/main/java/com/iconplus/smartproc/model/response/DrpApprovalResponse.java @@ -6,6 +6,8 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.sql.Date; + @Data @Builder @AllArgsConstructor @@ -13,4 +15,13 @@ import lombok.NoArgsConstructor; public class DrpApprovalResponse extends BaseResponse { private Long id; + private Long drpId; + private Integer tahun; + private String approveStatus; + private Date approverVpDate; + private Date approverKomite1Date; + private Date approverKomite2Date; + private Date approverKomite3Date; + private Date approverKomite4Date; + private Date approverDirekturDate; } diff --git a/src/main/java/com/iconplus/smartproc/model/response/LoginResponse.java b/src/main/java/com/iconplus/smartproc/model/response/LoginResponse.java index 4fa985c..2f77818 100644 --- a/src/main/java/com/iconplus/smartproc/model/response/LoginResponse.java +++ b/src/main/java/com/iconplus/smartproc/model/response/LoginResponse.java @@ -22,6 +22,6 @@ public class LoginResponse extends BaseResponse { private String email; private Long roleId; private String role; - private List menus; + private List menus; } diff --git a/src/main/java/com/iconplus/smartproc/model/response/MenusResponse.java b/src/main/java/com/iconplus/smartproc/model/response/MenusResponse.java new file mode 100644 index 0000000..f804bab --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/MenusResponse.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; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class MenusResponse extends BaseResponse { + + private Long id; + private String text; + private String path; + private Boolean canView; + private Boolean canCreate; + private Boolean canRead; + private Boolean canDelete; + private Boolean canUpdate; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/ParentMenusResponse.java b/src/main/java/com/iconplus/smartproc/model/response/ParentMenusResponse.java new file mode 100644 index 0000000..b2c78cf --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/ParentMenusResponse.java @@ -0,0 +1,21 @@ +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.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ParentMenusResponse extends BaseResponse { + + private Long id; + private String text; + private String icon; + private List items; +} diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java index 3922fa9..6793686 100644 --- a/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java @@ -1,6 +1,7 @@ package com.iconplus.smartproc.repository; import com.iconplus.smartproc.model.entity.Drp; +import com.iconplus.smartproc.model.projection.DrpApprovalView; import com.iconplus.smartproc.model.projection.DrpView; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -31,4 +32,19 @@ public interface DrpRepository extends JpaRepository { "ORDER BY d.id") Page findByIsDeleteFalse(Timestamp approveDate, Pageable pageable); + + + @Query(value = "SELECT d.id as id, " + + "d.tahun as tahun, " + + "d.approveStatus as approveStatus, " + + "da.approverVpDate as approverVpDate, " + + "da.approverKomite1Date as approverKomite1Date, " + + "da.approverKomite2Date as approverKomite2Date, " + + "da.approverKomite3Date as approverKomite3Date, " + + "da.approverKomite4Date as approverKomite4Date, " + + "da.approverDirekturDate as approverDirekturDate " + + "FROM Drp d " + + "JOIN DrpApproval da ON da.drpId = d.id " + + "WHERE d.isDelete = false") + Page getListApprovalDrp(Pageable pageable); } diff --git a/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java b/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java index 6e50213..5c9b886 100644 --- a/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java @@ -2,8 +2,10 @@ package com.iconplus.smartproc.repository; import com.iconplus.smartproc.model.entity.Menus; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; +import java.awt.*; import java.util.List; import java.util.Optional; @@ -13,4 +15,17 @@ public interface MenusRepository extends JpaRepository { List findByIsDeleteFalse(); Optional findByIdAndIsDeleteFalse(Long id); + @Query(value = "SELECT m " + + "FROM Menus m " + + "WHERE m.id in (SELECT DISTINCT(s.parentId) from Menus s " + + "order by s.parentId) " + + "AND m.isDelete = false") + List findAllParentMenu(); + + + @Query(value = "SELECT m " + + "FROM Menus m " + + "ORDER BY m.parentId, m.urutan") + List findAllOrderByParentAndUrutan(); + } diff --git a/src/main/java/com/iconplus/smartproc/repository/PermissionRepository.java b/src/main/java/com/iconplus/smartproc/repository/PermissionRepository.java index 2aa8a42..814385b 100644 --- a/src/main/java/com/iconplus/smartproc/repository/PermissionRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/PermissionRepository.java @@ -45,6 +45,7 @@ public interface PermissionRepository extends JpaRepository { "JOIN Menus m ON m.id = p.menuId " + "WHERE m.isDelete = false " + "AND p.isDelete = false " + - "AND p.roleId = :roleId") + "AND p.roleId = :roleId " + + "ORDER BY m.parentId, m.urutan") List getListMenusPermission(Long roleId); } diff --git a/src/main/java/com/iconplus/smartproc/service/approval/GetListApprovalDrpServie.java b/src/main/java/com/iconplus/smartproc/service/approval/GetListApprovalDrpServie.java new file mode 100644 index 0000000..112dab2 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/approval/GetListApprovalDrpServie.java @@ -0,0 +1,52 @@ +package com.iconplus.smartproc.service.approval; + +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.DrpApprovalView; +import com.iconplus.smartproc.model.request.DrpApprovalRequest; +import com.iconplus.smartproc.model.response.DrpApprovalResponse; +import com.iconplus.smartproc.repository.DrpApprovalRepository; +import com.iconplus.smartproc.repository.DrpRepository; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +@Service +@Slf4j +public class GetListApprovalDrpServie implements BaseService { + + private final DrpRepository drpRepository; + private final DrpApprovalRepository drpApprovalRepository; + + public GetListApprovalDrpServie(DrpRepository drpRepository, + DrpApprovalRepository drpApprovalRepository) { + this.drpApprovalRepository = drpApprovalRepository; + this.drpRepository = drpRepository; + + } + + @Override + public DrpApprovalResponse execute(DrpApprovalRequest input) throws IOException { + + List drpApprovalResponseList = new ArrayList<>(); + var drpApprovalViews = drpRepository.getListApprovalDrp(input.getPageable()); + for (DrpApprovalView drpApprovalView : drpApprovalViews) { + DrpApprovalResponse drpApprovalResponse = DrpApprovalResponse.builder() + .id(drpApprovalView.getId()) + .drpId(drpApprovalView.getDrpId()) + .tahun(drpApprovalView.getTahun()) + .approverVpDate(drpApprovalView.getApproverVpDate()) + .approverKomite1Date(drpApprovalView.getApproverKomite1Date()) + .approverKomite2Date(drpApprovalView.getApproverKomite2Date()) + .approverKomite3Date(drpApprovalView.getApproverKomite3Date()) + .approverKomite4Date(drpApprovalView.getApproverKomite4Date()) + .approverDirekturDate(drpApprovalView.getApproverDirekturDate()) + .build(); + } + return null; + + + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java b/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java index f24965b..5c5cec3 100644 --- a/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java +++ b/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java @@ -3,11 +3,14 @@ package com.iconplus.smartproc.service.authentication; import com.iconplus.smartproc.configuration.JwtTokenUtil; import com.iconplus.smartproc.exception.BusinessException; import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.Menus; import com.iconplus.smartproc.model.entity.TokenManagement; import com.iconplus.smartproc.model.projection.MenusPermissionView; import com.iconplus.smartproc.model.request.LoginRequest; import com.iconplus.smartproc.model.response.LoginResponse; import com.iconplus.smartproc.model.response.MenusPermissionResponse; +import com.iconplus.smartproc.model.response.MenusResponse; +import com.iconplus.smartproc.model.response.ParentMenusResponse; import com.iconplus.smartproc.model.token.TokenContent; import com.iconplus.smartproc.repository.MenusRepository; import com.iconplus.smartproc.repository.PermissionRepository; @@ -75,6 +78,20 @@ public class LoginService implements BaseService { } Set accessMenu = new HashSet<>(); List menusPermissionResponseList = new ArrayList<>(); + + + List parentMenusResponseList = new ArrayList<>(); + var parentMenu = menusRepository.findAllParentMenu(); + for (Menus menus : parentMenu) { + ParentMenusResponse parentMenusResponse = ParentMenusResponse.builder() + .id(menus.getId()) + .text(menus.getNama()) + .icon(menus.getIcon()) + .items(new ArrayList<>()) + .build(); + parentMenusResponseList.add(parentMenusResponse); + } + var listMenusPermission = permissionRepository.getListMenusPermission(userRoleView.getRoleId()); for (MenusPermissionView menusPermissionView : listMenusPermission) { if (BooleanUtils.isTrue(menusPermissionView.getCanView()) || @@ -83,24 +100,42 @@ public class LoginService implements BaseService { BooleanUtils.isTrue(menusPermissionView.getCanDelete()) || BooleanUtils.isTrue(menusPermissionView.getCanRead())) { accessMenu.add(menusPermissionView.getNama()); + + MenusPermissionResponse menusPermissionResponse = MenusPermissionResponse.builder() + .id(menusPermissionView.getId()) + .nama(menusPermissionView.getNama()) + .parentId(menusPermissionView.getParentId()) + .urutan(menusPermissionView.getUrutan()) + .icon(menusPermissionView.getIcon()) + .link(menusPermissionView.getLink()) + .canView(menusPermissionView.getCanView()) + .canRead(menusPermissionView.getCanRead()) + .canCreate(menusPermissionView.getCanCreate()) + .canUpdate(menusPermissionView.getCanUpdate()) + .canDelete(menusPermissionView.getCanDelete()) + .build(); + + menusPermissionResponseList.add(menusPermissionResponse); } + } - MenusPermissionResponse menusPermissionResponse = MenusPermissionResponse.builder() - .id(menusPermissionView.getId()) - .nama(menusPermissionView.getNama()) - .parentId(menusPermissionView.getParentId()) - .urutan(menusPermissionView.getUrutan()) - .icon(menusPermissionView.getIcon()) - .link(menusPermissionView.getLink()) - .canView(menusPermissionView.getCanView()) - .canRead(menusPermissionView.getCanRead()) - .canCreate(menusPermissionView.getCanCreate()) - .canUpdate(menusPermissionView.getCanUpdate()) - .canDelete(menusPermissionView.getCanDelete()) - .build(); - - menusPermissionResponseList.add(menusPermissionResponse); + for (ParentMenusResponse parentMenusResponse : parentMenusResponseList) { + for (MenusPermissionResponse menusPermissionResponse : menusPermissionResponseList) { + if (parentMenusResponse.getId().equals(menusPermissionResponse.getParentId())) { + MenusResponse menusResponse = MenusResponse.builder() + .id(menusPermissionResponse.getId()) + .text(menusPermissionResponse.getNama()) + .path(menusPermissionResponse.getLink()) + .canView(menusPermissionResponse.getCanView()) + .canRead(menusPermissionResponse.getCanRead()) + .canCreate(menusPermissionResponse.getCanCreate()) + .canUpdate(menusPermissionResponse.getCanUpdate()) + .canDelete(menusPermissionResponse.getCanDelete()) + .build(); + parentMenusResponse.getItems().add(menusResponse); + } + } } var tokenContent = TokenContent.builder() @@ -146,7 +181,7 @@ public class LoginService implements BaseService { .email(userRoleView.getEmail()) .roleId(userRoleView.getRoleId()) .role(userRoleView.getRole()) - .menus(menusPermissionResponseList) + .menus(parentMenusResponseList) .build(); } } From d5ed4fe4c66939617d60ac580fe1bc6f22068811 Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Thu, 1 Jun 2023 14:48:41 +0700 Subject: [PATCH 49/63] fix init permission --- .../com/iconplus/smartproc/repository/MenusRepository.java | 6 ++++++ .../smartproc/service/roles/PostCreateRoleService.java | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java b/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java index 5c9b886..ff97917 100644 --- a/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java @@ -28,4 +28,10 @@ public interface MenusRepository extends JpaRepository { "ORDER BY m.parentId, m.urutan") List findAllOrderByParentAndUrutan(); + @Query(value = "SELECT m " + + "FROM Menus m " + + "WHERE m.isDelete = false " + + "AND m.parentId != 0") + List findAllMenus(); + } diff --git a/src/main/java/com/iconplus/smartproc/service/roles/PostCreateRoleService.java b/src/main/java/com/iconplus/smartproc/service/roles/PostCreateRoleService.java index f09f345..0cede0b 100644 --- a/src/main/java/com/iconplus/smartproc/service/roles/PostCreateRoleService.java +++ b/src/main/java/com/iconplus/smartproc/service/roles/PostCreateRoleService.java @@ -51,7 +51,7 @@ public class PostCreateRoleService implements BaseService menusList = menusRepository.findByIsDeleteFalse(); + List menusList = menusRepository.findAllMenus(); List permissions = new ArrayList<>(); for (Menus menus : menusList) { From 6203b9d8bf3f5cc7bd9986775344155dbea05bdf Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Thu, 1 Jun 2023 15:11:48 +0700 Subject: [PATCH 50/63] add constant status --- .../controller/ApprovalDrpController.java | 24 ++++++++++++++++++- .../model/request/DrpApprovalRequest.java | 2 ++ .../response/GetListDrpApprovalResponse.java | 20 ++++++++++++++++ .../approval/GetListApprovalDrpServie.java | 22 +++++++++++++---- .../service/drp/PostCreateDrpService.java | 8 ++----- .../drp/PostCreateTahunDrpService.java | 1 + .../iconplus/smartproc/util/Constants.java | 6 +++++ 7 files changed, 71 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/iconplus/smartproc/model/response/GetListDrpApprovalResponse.java diff --git a/src/main/java/com/iconplus/smartproc/controller/ApprovalDrpController.java b/src/main/java/com/iconplus/smartproc/controller/ApprovalDrpController.java index 5f7186f..1ad61c3 100644 --- a/src/main/java/com/iconplus/smartproc/controller/ApprovalDrpController.java +++ b/src/main/java/com/iconplus/smartproc/controller/ApprovalDrpController.java @@ -1,12 +1,17 @@ package com.iconplus.smartproc.controller; import com.iconplus.smartproc.helper.model.EmptyRequest; +import com.iconplus.smartproc.model.request.BidangRequest; import com.iconplus.smartproc.model.request.DrpApprovalRequest; import com.iconplus.smartproc.model.response.DrpApprovalResponse; +import com.iconplus.smartproc.model.response.GetListDrpApprovalResponse; import com.iconplus.smartproc.model.response.GetListUserApprovalResponse; +import com.iconplus.smartproc.service.approval.GetListApprovalDrpServie; import com.iconplus.smartproc.service.approval.GetListUserDirekturKomiteService; import com.iconplus.smartproc.service.approval.GetListUserVpService; import com.iconplus.smartproc.service.approval.PostCreateDrpApprovalService; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; import org.springframework.web.bind.annotation.*; @CrossOrigin(origins = "${fe.server}", allowCredentials = "true") @@ -17,12 +22,15 @@ public class ApprovalDrpController { private GetListUserVpService getListUserVpService; private GetListUserDirekturKomiteService getListUserDirekturKomiteService; private PostCreateDrpApprovalService postCreateDrpApprovalService; + private GetListApprovalDrpServie getListApprovalDrpServie; public ApprovalDrpController(GetListUserVpService getListUserVpService, GetListUserDirekturKomiteService getListUserDirekturKomiteService, - PostCreateDrpApprovalService postCreateDrpApprovalService) { + PostCreateDrpApprovalService postCreateDrpApprovalService, + GetListApprovalDrpServie getListApprovalDrpServie) { this.getListUserVpService = getListUserVpService; this.getListUserDirekturKomiteService = getListUserDirekturKomiteService; this.postCreateDrpApprovalService = postCreateDrpApprovalService; + this.getListApprovalDrpServie = getListApprovalDrpServie; } @GetMapping("/vp") @@ -39,4 +47,18 @@ public class ApprovalDrpController { public DrpApprovalResponse createDrpApproval(@RequestBody DrpApprovalRequest drpApprovalRequest) { return postCreateDrpApprovalService.execute(drpApprovalRequest); } + + @GetMapping + public GetListDrpApprovalResponse getListDrpApprovalResponse(@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); + DrpApprovalRequest drpApprovalRequest = DrpApprovalRequest.builder() + .search(search) + .pageable(pageable) + .build(); + return getListApprovalDrpServie.execute(drpApprovalRequest); + + } } diff --git a/src/main/java/com/iconplus/smartproc/model/request/DrpApprovalRequest.java b/src/main/java/com/iconplus/smartproc/model/request/DrpApprovalRequest.java index 53df50e..036c7cc 100644 --- a/src/main/java/com/iconplus/smartproc/model/request/DrpApprovalRequest.java +++ b/src/main/java/com/iconplus/smartproc/model/request/DrpApprovalRequest.java @@ -20,5 +20,7 @@ public class DrpApprovalRequest extends BaseRequest { private Long approverKomite3Id; private Long approverKomite4Id; private Long approverDirekturId; + + private String search; private transient Pageable pageable; } diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListDrpApprovalResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListDrpApprovalResponse.java new file mode 100644 index 0000000..b388ae9 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListDrpApprovalResponse.java @@ -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 GetListDrpApprovalResponse extends BaseResponse { + + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/service/approval/GetListApprovalDrpServie.java b/src/main/java/com/iconplus/smartproc/service/approval/GetListApprovalDrpServie.java index 112dab2..756e07c 100644 --- a/src/main/java/com/iconplus/smartproc/service/approval/GetListApprovalDrpServie.java +++ b/src/main/java/com/iconplus/smartproc/service/approval/GetListApprovalDrpServie.java @@ -1,21 +1,22 @@ package com.iconplus.smartproc.service.approval; +import com.iconplus.smartproc.helper.model.Pagination; import com.iconplus.smartproc.helper.service.BaseService; import com.iconplus.smartproc.model.projection.DrpApprovalView; import com.iconplus.smartproc.model.request.DrpApprovalRequest; import com.iconplus.smartproc.model.response.DrpApprovalResponse; +import com.iconplus.smartproc.model.response.GetListDrpApprovalResponse; import com.iconplus.smartproc.repository.DrpApprovalRepository; import com.iconplus.smartproc.repository.DrpRepository; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @Service @Slf4j -public class GetListApprovalDrpServie implements BaseService { +public class GetListApprovalDrpServie implements BaseService { private final DrpRepository drpRepository; private final DrpApprovalRepository drpApprovalRepository; @@ -28,7 +29,7 @@ public class GetListApprovalDrpServie implements BaseService drpApprovalResponseList = new ArrayList<>(); var drpApprovalViews = drpRepository.getListApprovalDrp(input.getPageable()); @@ -37,6 +38,7 @@ public class GetListApprovalDrpServie implements BaseService drpDokumenList = new ArrayList<>(); if (ObjectUtils.isNotEmpty(input.getDataDrpDokumen())) { for (DrpDokumenRequest drpDokumenRequest : input.getDataDrpDokumen()) { DrpDokumen drpDokumen = DrpDokumen.builder() - .drpId(drpSaved.getId()) + .drpId(drp.getId()) .jenisDokumenId(drpDokumenRequest.getJenisDokumenId()) .filename(drpDokumenRequest.getFilename()) .keterangan(drpDokumenRequest.getKeterangan()) @@ -58,7 +54,7 @@ public class PostCreateDrpService implements BaseService Date: Fri, 2 Jun 2023 12:01:30 +0700 Subject: [PATCH 51/63] approval --- .../controller/ApprovalDrpController.java | 33 ++++++--- .../iconplus/smartproc/model/entity/Drp.java | 20 +++++- .../smartproc/model/entity/DrpApproval.java | 41 ++--------- .../model/entity/DrpRekomendasi.java | 45 ++++++++++++ .../model/projection/DrpApprovalView.java | 21 ++---- .../model/projection/DrpRekomendasiView.java | 27 ++++++++ .../model/request/DrpApprovalRequest.java | 10 ++- .../model/request/DrpRekomendasiRequest.java | 24 +++++++ .../model/request/ListDrpApprovalRequest.java | 20 ++++++ .../model/response/DrpApprovalResponse.java | 5 +- .../response/DrpRekomendasiResponse.java | 25 +++++++ .../smartproc/model/response/DrpResponse.java | 4 +- .../GetListDrpRekomendasiResponse.java | 22 ++++++ .../repository/DrpApprovalRepository.java | 16 +++++ .../repository/DrpRekomendasiRepository.java | 16 +++++ .../smartproc/repository/DrpRepository.java | 11 ++- .../approval/GetListApprovalDrpServie.java | 15 ++-- .../approval/GetListRekomendasiService.java | 24 +++++++ .../PostCreateDrpApprovalService.java | 42 +++++------ .../PostDrpApprovalExecutionService.java | 69 +++++++++++++++++++ .../approval/PostDrpRekomendasiService.java | 36 ++++++++++ 21 files changed, 421 insertions(+), 105 deletions(-) create mode 100644 src/main/java/com/iconplus/smartproc/model/entity/DrpRekomendasi.java create mode 100644 src/main/java/com/iconplus/smartproc/model/projection/DrpRekomendasiView.java create mode 100644 src/main/java/com/iconplus/smartproc/model/request/DrpRekomendasiRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/model/request/ListDrpApprovalRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/DrpRekomendasiResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/GetListDrpRekomendasiResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/repository/DrpRekomendasiRepository.java create mode 100644 src/main/java/com/iconplus/smartproc/service/approval/GetListRekomendasiService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/approval/PostDrpApprovalExecutionService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/approval/PostDrpRekomendasiService.java diff --git a/src/main/java/com/iconplus/smartproc/controller/ApprovalDrpController.java b/src/main/java/com/iconplus/smartproc/controller/ApprovalDrpController.java index 1ad61c3..7cb2713 100644 --- a/src/main/java/com/iconplus/smartproc/controller/ApprovalDrpController.java +++ b/src/main/java/com/iconplus/smartproc/controller/ApprovalDrpController.java @@ -1,15 +1,14 @@ package com.iconplus.smartproc.controller; import com.iconplus.smartproc.helper.model.EmptyRequest; -import com.iconplus.smartproc.model.request.BidangRequest; +import com.iconplus.smartproc.helper.model.EmptyResponse; import com.iconplus.smartproc.model.request.DrpApprovalRequest; -import com.iconplus.smartproc.model.response.DrpApprovalResponse; +import com.iconplus.smartproc.model.request.DrpRekomendasiRequest; +import com.iconplus.smartproc.model.request.ListDrpApprovalRequest; +import com.iconplus.smartproc.model.response.DrpRekomendasiResponse; import com.iconplus.smartproc.model.response.GetListDrpApprovalResponse; import com.iconplus.smartproc.model.response.GetListUserApprovalResponse; -import com.iconplus.smartproc.service.approval.GetListApprovalDrpServie; -import com.iconplus.smartproc.service.approval.GetListUserDirekturKomiteService; -import com.iconplus.smartproc.service.approval.GetListUserVpService; -import com.iconplus.smartproc.service.approval.PostCreateDrpApprovalService; +import com.iconplus.smartproc.service.approval.*; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.web.bind.annotation.*; @@ -23,14 +22,20 @@ public class ApprovalDrpController { private GetListUserDirekturKomiteService getListUserDirekturKomiteService; private PostCreateDrpApprovalService postCreateDrpApprovalService; private GetListApprovalDrpServie getListApprovalDrpServie; + private PostDrpRekomendasiService postDrpRekomendasiService; + private PostDrpApprovalExecutionService postDrpApprovalExecutionService; public ApprovalDrpController(GetListUserVpService getListUserVpService, GetListUserDirekturKomiteService getListUserDirekturKomiteService, PostCreateDrpApprovalService postCreateDrpApprovalService, - GetListApprovalDrpServie getListApprovalDrpServie) { + GetListApprovalDrpServie getListApprovalDrpServie, + PostDrpRekomendasiService postDrpRekomendasiService, + PostDrpApprovalExecutionService postDrpApprovalExecutionService) { this.getListUserVpService = getListUserVpService; this.getListUserDirekturKomiteService = getListUserDirekturKomiteService; this.postCreateDrpApprovalService = postCreateDrpApprovalService; this.getListApprovalDrpServie = getListApprovalDrpServie; + this.postDrpRekomendasiService = postDrpRekomendasiService; + this.postDrpApprovalExecutionService = postDrpApprovalExecutionService; } @GetMapping("/vp") @@ -44,8 +49,8 @@ public class ApprovalDrpController { } @PostMapping - public DrpApprovalResponse createDrpApproval(@RequestBody DrpApprovalRequest drpApprovalRequest) { - return postCreateDrpApprovalService.execute(drpApprovalRequest); + public EmptyResponse createDrpHasApproval(@RequestBody ListDrpApprovalRequest listDrpApprovalRequest) { + return postCreateDrpApprovalService.execute(listDrpApprovalRequest); } @GetMapping @@ -61,4 +66,14 @@ public class ApprovalDrpController { return getListApprovalDrpServie.execute(drpApprovalRequest); } + + @PostMapping("/rekomendasi") + public DrpRekomendasiResponse drpRekomendasiResponse(@RequestBody DrpRekomendasiRequest drpRekomendasiRequest) { + return postDrpRekomendasiService.execute(drpRekomendasiRequest); + } + + @PostMapping("/execution") + public EmptyResponse drpApprovalExecution(@RequestBody DrpApprovalRequest drpApprovalRequest) { + return postDrpApprovalExecutionService.execute(drpApprovalRequest); + } } diff --git a/src/main/java/com/iconplus/smartproc/model/entity/Drp.java b/src/main/java/com/iconplus/smartproc/model/entity/Drp.java index 9ff9137..c97af01 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/Drp.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/Drp.java @@ -8,8 +8,7 @@ import lombok.NoArgsConstructor; import org.hibernate.annotations.Type; import javax.persistence.*; -import java.sql.Timestamp; -import java.util.Date; +import java.sql.Date; @Data @Builder @@ -31,7 +30,22 @@ public class Drp extends BaseEntity { private String approveStatus; @Column(name = "approve_date") - private Timestamp approveDate; + private Date approveDate; + + @Column(name = "vp_approve_date") + private Date vpApproveDate; + + @Column(name = "komite_approve_date") + private Date komiteApproveDate; + + @Column(name = "direktur_approve_date") + private Date direkturApproveDate; + + @Column(name = "is_print") + private Boolean isPrint; + + @Column(name = "print_date") + private Date printDate; @Column(name = "is_active") @Type(type = "org.hibernate.type.NumericBooleanType") diff --git a/src/main/java/com/iconplus/smartproc/model/entity/DrpApproval.java b/src/main/java/com/iconplus/smartproc/model/entity/DrpApproval.java index bbf23cd..60881bf 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/DrpApproval.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/DrpApproval.java @@ -8,7 +8,6 @@ import lombok.NoArgsConstructor; import org.hibernate.annotations.Type; import javax.persistence.*; -import java.sql.Date; @Data @Builder @@ -26,41 +25,15 @@ public class DrpApproval extends BaseEntity { @Column(name = "drp_id") private Long drpId; - @Column(name = "approver_vp_id") - private Long approverVpId; + @Column(name = "approver_user_id") + private Long approverUserId; - @Column(name = "approver_vp_date") - private Date approverVpDate; + @Column(name = "is_approve") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isApprove; - @Column(name = "approver_komite1_id") - private Long approverKomite1Id; - - @Column(name = "approver_komite1_date") - private Date approverKomite1Date; - - @Column(name = "approver_komite2_id") - private Long approverKomite2Id; - - @Column(name = "approver_komite2_date") - private Date approverKomite2Date; - - @Column(name = "approver_komite3_id") - private Long approverKomite3Id; - - @Column(name = "approver_komite3_date") - private Date approverKomite3Date; - - @Column(name = "approver_komite4_id") - private Long approverKomite4Id; - - @Column(name = "approver_komite4_date") - private Date approverKomite4Date; - - @Column(name = "approver_direktur_id") - private Long approverDirekturId; - - @Column(name = "approver_direktur_date") - private Date approverDirekturDate; + @Column(name = "level") + private String level; @Column(name = "is_active") @Type(type = "org.hibernate.type.NumericBooleanType") diff --git a/src/main/java/com/iconplus/smartproc/model/entity/DrpRekomendasi.java b/src/main/java/com/iconplus/smartproc/model/entity/DrpRekomendasi.java new file mode 100644 index 0000000..6d66fb1 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/DrpRekomendasi.java @@ -0,0 +1,45 @@ +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.Date; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "drp_rekomendasi") +public class DrpRekomendasi extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "jenis_pengadaan_id") + private Long jenisPengadaanId; + + @Column(name = "drp_approval_id") + private Long drpApprovalId; + + @Column(name = "rekomendasi") + private String rekomendasi; + + @Column(name = "rekomendasi_date") + private Date rekomendasiDate; + + @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/DrpApprovalView.java b/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalView.java index 02befb2..0da75aa 100644 --- a/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalView.java +++ b/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalView.java @@ -1,5 +1,6 @@ package com.iconplus.smartproc.model.projection; + import java.sql.Date; public interface DrpApprovalView { @@ -16,23 +17,15 @@ public interface DrpApprovalView { String getApproveStatus(); void setApproveStatus(String approveStatus); - Date getApproverVpDate(); - void setApproveVpDate(Date approveVpDate); + Date getVpApproveDate(); + void setVpApproveDate(Date vpApproveDate); - Date getApproverKomite1Date(); - void setApproveKomite1Date(Date approveKomite1Date); + Date getKomiteApproveDate(); + void setKomiteApproveDate(Date komiteApproveDate); - Date getApproverKomite2Date(); - void setApproveKomite2Date(Date approveKomite2Date); + Date getDirekturApproveDate(); + void setDirekturApproveDate(Date direkturApproveDate); - Date getApproverKomite3Date(); - void setApproveKomite3Date(Date approveKomite3Date); - - Date getApproverKomite4Date(); - void setApproveKomite4Date(Date approveKomite4Date); - - Date getApproverDirekturDate(); - void setApproveDirekturDate(Date approveDirekturDate); } diff --git a/src/main/java/com/iconplus/smartproc/model/projection/DrpRekomendasiView.java b/src/main/java/com/iconplus/smartproc/model/projection/DrpRekomendasiView.java new file mode 100644 index 0000000..8c508ee --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/DrpRekomendasiView.java @@ -0,0 +1,27 @@ +package com.iconplus.smartproc.model.projection; + +import java.util.Date; + +public interface DrpRekomendasiView { + + Long getId(); + void setId(Long id); + + String getNomorRkp(); + void setNomorRkp(String nomorRkp); + + + String getNamaPengadaan(); + void setNamaPengadaan(String namaPengadaan); + + String getApproval(); + void setApproval(String approval); + + Boolean getStatus(); + void setStatus(Boolean status); + + +// Date approveDate; +// Date rekomendasiDate; +// String rekomendasi; +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/DrpApprovalRequest.java b/src/main/java/com/iconplus/smartproc/model/request/DrpApprovalRequest.java index 036c7cc..ed23f8f 100644 --- a/src/main/java/com/iconplus/smartproc/model/request/DrpApprovalRequest.java +++ b/src/main/java/com/iconplus/smartproc/model/request/DrpApprovalRequest.java @@ -13,13 +13,11 @@ import org.springframework.data.domain.Pageable; @NoArgsConstructor public class DrpApprovalRequest extends BaseRequest { + private Long userId; + private Boolean isApprove; private Long drpId; - private Long approverVpId; - private Long approverKomite1Id; - private Long approverKomite2Id; - private Long approverKomite3Id; - private Long approverKomite4Id; - private Long approverDirekturId; + private Long approverUserId; + private String level; private String search; private transient Pageable pageable; diff --git a/src/main/java/com/iconplus/smartproc/model/request/DrpRekomendasiRequest.java b/src/main/java/com/iconplus/smartproc/model/request/DrpRekomendasiRequest.java new file mode 100644 index 0000000..ff25205 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/DrpRekomendasiRequest.java @@ -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 java.sql.Date; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class DrpRekomendasiRequest extends BaseRequest { + + private Long id; + private Long drpApprovalId; + private Long jenisPengadaanId; + private String rekomendasi; + private Date rekomendasiDate; + + +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/ListDrpApprovalRequest.java b/src/main/java/com/iconplus/smartproc/model/request/ListDrpApprovalRequest.java new file mode 100644 index 0000000..dcf86ac --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/ListDrpApprovalRequest.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; + +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ListDrpApprovalRequest extends BaseRequest { + + private Long id; + private Long drpId; + private List data; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/DrpApprovalResponse.java b/src/main/java/com/iconplus/smartproc/model/response/DrpApprovalResponse.java index 53e2b83..e95254e 100644 --- a/src/main/java/com/iconplus/smartproc/model/response/DrpApprovalResponse.java +++ b/src/main/java/com/iconplus/smartproc/model/response/DrpApprovalResponse.java @@ -19,9 +19,6 @@ public class DrpApprovalResponse extends BaseResponse { private Integer tahun; private String approveStatus; private Date approverVpDate; - private Date approverKomite1Date; - private Date approverKomite2Date; - private Date approverKomite3Date; - private Date approverKomite4Date; + private Date approverKomiteDate; private Date approverDirekturDate; } diff --git a/src/main/java/com/iconplus/smartproc/model/response/DrpRekomendasiResponse.java b/src/main/java/com/iconplus/smartproc/model/response/DrpRekomendasiResponse.java new file mode 100644 index 0000000..301c297 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/DrpRekomendasiResponse.java @@ -0,0 +1,25 @@ +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.util.Date; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class DrpRekomendasiResponse extends BaseResponse { + + private Long id; + private String nomorRkp; + private String namaPengadaan; + private String approval; + private String status; + private Date approveDate; + private Date rekomendasiDate; + private String rekomendasi; +} 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 392264f..8371492 100644 --- a/src/main/java/com/iconplus/smartproc/model/response/DrpResponse.java +++ b/src/main/java/com/iconplus/smartproc/model/response/DrpResponse.java @@ -6,7 +6,7 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.sql.Timestamp; +import java.util.Date; import java.util.List; @Data @@ -17,7 +17,7 @@ public class DrpResponse extends BaseResponse { private Long id; private Integer tahun; private String approveStatus; - private Timestamp approveDate; + private Date approveDate; private Boolean isActive; private Boolean isDelete; diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListDrpRekomendasiResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListDrpRekomendasiResponse.java new file mode 100644 index 0000000..c1e4378 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListDrpRekomendasiResponse.java @@ -0,0 +1,22 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.model.response.DrpRekomendasiResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class GetListDrpRekomendasiResponse extends BaseResponse { + + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpApprovalRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpApprovalRepository.java index 1320983..cd3b839 100644 --- a/src/main/java/com/iconplus/smartproc/repository/DrpApprovalRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/DrpApprovalRepository.java @@ -2,9 +2,25 @@ package com.iconplus.smartproc.repository; import com.iconplus.smartproc.model.entity.DrpApproval; 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 DrpApprovalRepository extends JpaRepository { + Optional findByDrpIdAndApproverUserIdAndIsDeleteFalse(Long drpId, Long userId); + + + @Query(value = "SELECT da " + + "FROM DrpApproval da " + + "WHERE da.isDelete = false " + + "AND da.drpId = :drpId " + + "AND UPPER(da.level) = 'KOMITE' " + + "AND da.isApprove = null") + List getListKomiteApproval(Long drpId); + + } diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpRekomendasiRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpRekomendasiRepository.java new file mode 100644 index 0000000..57e716b --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/DrpRekomendasiRepository.java @@ -0,0 +1,16 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.DrpRekomendasi; +import org.springframework.data.domain.Page; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +@Repository +public interface DrpRekomendasiRepository extends JpaRepository { + +// @Query(value = "SELECT " + +// "FROM " + +// "WHERE") +// Page<> +} diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java index 6793686..a4d4acc 100644 --- a/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java @@ -33,18 +33,15 @@ public interface DrpRepository extends JpaRepository { Page findByIsDeleteFalse(Timestamp approveDate, Pageable pageable); + Page findByIsDeleteFalse(Pageable pageable); @Query(value = "SELECT d.id as id, " + "d.tahun as tahun, " + "d.approveStatus as approveStatus, " + - "da.approverVpDate as approverVpDate, " + - "da.approverKomite1Date as approverKomite1Date, " + - "da.approverKomite2Date as approverKomite2Date, " + - "da.approverKomite3Date as approverKomite3Date, " + - "da.approverKomite4Date as approverKomite4Date, " + - "da.approverDirekturDate as approverDirekturDate " + + "d.vpApproveDate as vpApproveDate, " + + "d.komiteApproveDate as komiteApproveDate, " + + "d.direkturApproveDate as direkturApproveDate " + "FROM Drp d " + - "JOIN DrpApproval da ON da.drpId = d.id " + "WHERE d.isDelete = false") Page getListApprovalDrp(Pageable pageable); } diff --git a/src/main/java/com/iconplus/smartproc/service/approval/GetListApprovalDrpServie.java b/src/main/java/com/iconplus/smartproc/service/approval/GetListApprovalDrpServie.java index 756e07c..20464ac 100644 --- a/src/main/java/com/iconplus/smartproc/service/approval/GetListApprovalDrpServie.java +++ b/src/main/java/com/iconplus/smartproc/service/approval/GetListApprovalDrpServie.java @@ -1,16 +1,22 @@ package com.iconplus.smartproc.service.approval; +import com.iconplus.smartproc.exception.BusinessException; import com.iconplus.smartproc.helper.model.Pagination; import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.DrpApproval; import com.iconplus.smartproc.model.projection.DrpApprovalView; import com.iconplus.smartproc.model.request.DrpApprovalRequest; import com.iconplus.smartproc.model.response.DrpApprovalResponse; import com.iconplus.smartproc.model.response.GetListDrpApprovalResponse; import com.iconplus.smartproc.repository.DrpApprovalRepository; +import com.iconplus.smartproc.repository.DrpRekomendasiRepository; import com.iconplus.smartproc.repository.DrpRepository; +import com.iconplus.smartproc.util.Constants; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import java.sql.Date; import java.util.ArrayList; import java.util.List; @@ -39,12 +45,9 @@ public class GetListApprovalDrpServie implements BaseService { + + private final DrpRekomendasiRepository drpRekomendasiRepository; + + public GetListRekomendasiService(DrpRekomendasiRepository drpRekomendasiRepository) { + this.drpRekomendasiRepository = drpRekomendasiRepository; + } + + @Override + public GetListDrpRekomendasiResponse execute(DrpRekomendasiRequest input) { + return null; + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/approval/PostCreateDrpApprovalService.java b/src/main/java/com/iconplus/smartproc/service/approval/PostCreateDrpApprovalService.java index 4500c26..1f9b32c 100644 --- a/src/main/java/com/iconplus/smartproc/service/approval/PostCreateDrpApprovalService.java +++ b/src/main/java/com/iconplus/smartproc/service/approval/PostCreateDrpApprovalService.java @@ -1,30 +1,32 @@ package com.iconplus.smartproc.service.approval; 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.entity.DrpApproval; import com.iconplus.smartproc.model.request.DrpApprovalRequest; -import com.iconplus.smartproc.model.response.DrpApprovalResponse; +import com.iconplus.smartproc.model.request.ListDrpApprovalRequest; import com.iconplus.smartproc.repository.DrpApprovalRepository; import com.iconplus.smartproc.repository.DrpRepository; import com.iconplus.smartproc.util.Constants; import org.springframework.stereotype.Service; -import java.io.IOException; +import java.util.ArrayList; +import java.util.List; @Service -public class PostCreateDrpApprovalService implements BaseService { +public class PostCreateDrpApprovalService implements BaseService { - private final DrpApprovalRepository drpApprovalRepository; private final DrpRepository drpRepository; - public PostCreateDrpApprovalService(DrpApprovalRepository drpApprovalRepository, - DrpRepository drpRepository) { - this.drpApprovalRepository = drpApprovalRepository; + private final DrpApprovalRepository drpApprovalRepository; + public PostCreateDrpApprovalService(DrpRepository drpRepository, + DrpApprovalRepository drpApprovalRepository) { this.drpRepository = drpRepository; + this.drpApprovalRepository = drpApprovalRepository; } @Override - public DrpApprovalResponse execute(DrpApprovalRequest input) { + public EmptyResponse execute(ListDrpApprovalRequest input) { var drpOptional = drpRepository.findByIdAndIsDeleteFalse(input.getDrpId()); if (drpOptional.isEmpty()) { @@ -33,19 +35,19 @@ public class PostCreateDrpApprovalService implements BaseService drpApprovalList = new ArrayList<>(); + for (DrpApprovalRequest drpApprovalRequest : input.getData()) { + DrpApproval drpApproval = DrpApproval.builder() + .drpId(input.getDrpId()) + .approverUserId(drpApprovalRequest.getApproverUserId()) + .level(drpApprovalRequest.getLevel()) + .isDelete(false) + .build(); + drpApprovalList.add(drpApproval); + } - var result = drpApprovalRepository.save(drpApproval); + drpApprovalRepository.saveAll(drpApprovalList); - return DrpApprovalResponse.builder() - .id(result.getId()) - .build(); + return new EmptyResponse(); } } diff --git a/src/main/java/com/iconplus/smartproc/service/approval/PostDrpApprovalExecutionService.java b/src/main/java/com/iconplus/smartproc/service/approval/PostDrpApprovalExecutionService.java new file mode 100644 index 0000000..8b45036 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/approval/PostDrpApprovalExecutionService.java @@ -0,0 +1,69 @@ +package com.iconplus.smartproc.service.approval; + +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.DrpApprovalRequest; +import com.iconplus.smartproc.repository.DrpApprovalRepository; +import com.iconplus.smartproc.repository.DrpRepository; +import com.iconplus.smartproc.util.Constants; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.sql.Date; +import java.time.LocalDate; + +@Service +public class PostDrpApprovalExecutionService implements BaseService { + + private final DrpApprovalRepository drpApprovalRepository; + private final DrpRepository drpRepository; + + public PostDrpApprovalExecutionService(DrpApprovalRepository drpApprovalRepository, + DrpRepository drpRepository) { + this.drpApprovalRepository = drpApprovalRepository; + this.drpRepository = drpRepository; + } + + @Override + public EmptyResponse execute(DrpApprovalRequest input) { + + var drpApproval = drpApprovalRepository.findByDrpIdAndApproverUserIdAndIsDeleteFalse(input.getDrpId(), input.getUserId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "DRP", input.getDrpId()))); + + var drp = drpRepository.findByIdAndIsDeleteFalse(input.getDrpId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "DRP", input.getDrpId()))); + + + + Date dateNow = Date.valueOf(LocalDate.now()); + + if (StringUtils.equalsIgnoreCase(drpApproval.getLevel(), "VP")) { + drpApproval.setIsApprove(input.getIsApprove()); + drp.setVpApproveDate(dateNow); + drp.setApproveStatus(Constants.STATUS_APPROVAL_VP); + + } else if (StringUtils.equalsIgnoreCase(drpApproval.getLevel(), "DIREKTUR")) { + drpApproval.setIsApprove(input.getIsApprove()); + drp.setDirekturApproveDate(dateNow); + drp.setApproveStatus(Constants.STATUS_APPROVAL_DIRUT); + + } else { + var listKomiteApproval = drpApprovalRepository.getListKomiteApproval(input.getDrpId()); + if (listKomiteApproval.size() == 1) { + drp.setApproveStatus(Constants.STATUS_REKOMENDASI_KOMITE); + } + drpApproval.setIsApprove(input.getIsApprove()); + drp.setKomiteApproveDate(dateNow); + } + + drpApprovalRepository.save(drpApproval); + drpRepository.save(drp); + + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/approval/PostDrpRekomendasiService.java b/src/main/java/com/iconplus/smartproc/service/approval/PostDrpRekomendasiService.java new file mode 100644 index 0000000..d37ca43 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/approval/PostDrpRekomendasiService.java @@ -0,0 +1,36 @@ +package com.iconplus.smartproc.service.approval; + +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.DrpRekomendasi; +import com.iconplus.smartproc.model.request.DrpRekomendasiRequest; +import com.iconplus.smartproc.model.response.DrpRekomendasiResponse; +import com.iconplus.smartproc.repository.DrpRekomendasiRepository; +import org.springframework.stereotype.Service; + +@Service +public class PostDrpRekomendasiService implements BaseService { + + private DrpRekomendasiRepository drpRekomendasiRepository; + + private PostDrpRekomendasiService(DrpRekomendasiRepository drpRekomendasiRepository) { + this.drpRekomendasiRepository = drpRekomendasiRepository; + } + + @Override + public DrpRekomendasiResponse execute(DrpRekomendasiRequest input) { + + DrpRekomendasi drpRekomendasi = DrpRekomendasi.builder() + .jenisPengadaanId(input.getJenisPengadaanId()) + .drpApprovalId(input.getDrpApprovalId()) + .rekomendasi(input.getRekomendasi()) + .rekomendasiDate(input.getRekomendasiDate()) + .isDelete(false) + .build(); + + var result = drpRekomendasiRepository.save(drpRekomendasi); + + return DrpRekomendasiResponse.builder() + .id(result.getId()) + .build(); + } +} From 5be630964f9b065aa6ceec10342b261415ff1db8 Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Fri, 2 Jun 2023 14:40:12 +0700 Subject: [PATCH 52/63] pointing sindiglive --- .../controller/ApprovalDrpController.java | 13 +- .../model/entity/DrpRekomendasi.java | 6 + .../model/projection/DrpRekomendasiView.java | 24 ++-- .../model/request/DrpApprovalRequest.java | 1 + .../model/request/DrpRekomendasiRequest.java | 3 + .../model/response/DrpApprovalResponse.java | 6 + .../response/DrpRekomendasiResponse.java | 4 +- .../GetListDrpRekomendasiResponse.java | 2 - .../repository/DrpRekomendasiRepository.java | 20 +++- .../service/approval/GetApprovalService.java | 113 ++++++++++++++++++ .../PostDrpApprovalExecutionService.java | 2 - .../approval/PostDrpRekomendasiService.java | 16 ++- src/main/resources/application-local.yml | 2 +- 13 files changed, 185 insertions(+), 27 deletions(-) create mode 100644 src/main/java/com/iconplus/smartproc/service/approval/GetApprovalService.java diff --git a/src/main/java/com/iconplus/smartproc/controller/ApprovalDrpController.java b/src/main/java/com/iconplus/smartproc/controller/ApprovalDrpController.java index 7cb2713..fe98928 100644 --- a/src/main/java/com/iconplus/smartproc/controller/ApprovalDrpController.java +++ b/src/main/java/com/iconplus/smartproc/controller/ApprovalDrpController.java @@ -5,6 +5,7 @@ import com.iconplus.smartproc.helper.model.EmptyResponse; import com.iconplus.smartproc.model.request.DrpApprovalRequest; import com.iconplus.smartproc.model.request.DrpRekomendasiRequest; import com.iconplus.smartproc.model.request.ListDrpApprovalRequest; +import com.iconplus.smartproc.model.response.DrpApprovalResponse; import com.iconplus.smartproc.model.response.DrpRekomendasiResponse; import com.iconplus.smartproc.model.response.GetListDrpApprovalResponse; import com.iconplus.smartproc.model.response.GetListUserApprovalResponse; @@ -24,18 +25,21 @@ public class ApprovalDrpController { private GetListApprovalDrpServie getListApprovalDrpServie; private PostDrpRekomendasiService postDrpRekomendasiService; private PostDrpApprovalExecutionService postDrpApprovalExecutionService; + private GetApprovalService getApprovalService; public ApprovalDrpController(GetListUserVpService getListUserVpService, GetListUserDirekturKomiteService getListUserDirekturKomiteService, PostCreateDrpApprovalService postCreateDrpApprovalService, GetListApprovalDrpServie getListApprovalDrpServie, PostDrpRekomendasiService postDrpRekomendasiService, - PostDrpApprovalExecutionService postDrpApprovalExecutionService) { + PostDrpApprovalExecutionService postDrpApprovalExecutionService, + GetApprovalService getApprovalService) { this.getListUserVpService = getListUserVpService; this.getListUserDirekturKomiteService = getListUserDirekturKomiteService; this.postCreateDrpApprovalService = postCreateDrpApprovalService; this.getListApprovalDrpServie = getListApprovalDrpServie; this.postDrpRekomendasiService = postDrpRekomendasiService; this.postDrpApprovalExecutionService = postDrpApprovalExecutionService; + this.getApprovalService = getApprovalService; } @GetMapping("/vp") @@ -76,4 +80,11 @@ public class ApprovalDrpController { public EmptyResponse drpApprovalExecution(@RequestBody DrpApprovalRequest drpApprovalRequest) { return postDrpApprovalExecutionService.execute(drpApprovalRequest); } + + @GetMapping("/jenis-pengadaan/{id}") + public DrpApprovalResponse getDrpApproval(@PathVariable(name = "id") Long id) { + return getApprovalService.execute(DrpApprovalRequest.builder() + .jenisPengadaanId(id) + .build()); + } } diff --git a/src/main/java/com/iconplus/smartproc/model/entity/DrpRekomendasi.java b/src/main/java/com/iconplus/smartproc/model/entity/DrpRekomendasi.java index 6d66fb1..e0f6eda 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/DrpRekomendasi.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/DrpRekomendasi.java @@ -23,6 +23,12 @@ public class DrpRekomendasi extends BaseEntity { @Column(name = "id") private Long id; + @Column(name = "drp_id") + private Long drpId; + + @Column(name = "user_id") + private Long userId; + @Column(name = "jenis_pengadaan_id") private Long jenisPengadaanId; diff --git a/src/main/java/com/iconplus/smartproc/model/projection/DrpRekomendasiView.java b/src/main/java/com/iconplus/smartproc/model/projection/DrpRekomendasiView.java index 8c508ee..0c2ab08 100644 --- a/src/main/java/com/iconplus/smartproc/model/projection/DrpRekomendasiView.java +++ b/src/main/java/com/iconplus/smartproc/model/projection/DrpRekomendasiView.java @@ -1,27 +1,23 @@ package com.iconplus.smartproc.model.projection; -import java.util.Date; + +import java.sql.Date; public interface DrpRekomendasiView { Long getId(); void setId(Long id); - String getNomorRkp(); - void setNomorRkp(String nomorRkp); + String getJabatan(); + void setJabatan(String jabatan); + Boolean getIsApprove(); + void setIsApprove(Boolean isApprove); - String getNamaPengadaan(); - void setNamaPengadaan(String namaPengadaan); + Date getRekomendasiDate(); + void setRekomendasiDate(Date rekomendasiDate); - String getApproval(); - void setApproval(String approval); + String getRekomendasi(); + void setRekomendasiDate(String rekomendasi); - Boolean getStatus(); - void setStatus(Boolean status); - - -// Date approveDate; -// Date rekomendasiDate; -// String rekomendasi; } diff --git a/src/main/java/com/iconplus/smartproc/model/request/DrpApprovalRequest.java b/src/main/java/com/iconplus/smartproc/model/request/DrpApprovalRequest.java index ed23f8f..4d7f097 100644 --- a/src/main/java/com/iconplus/smartproc/model/request/DrpApprovalRequest.java +++ b/src/main/java/com/iconplus/smartproc/model/request/DrpApprovalRequest.java @@ -18,6 +18,7 @@ public class DrpApprovalRequest extends BaseRequest { private Long drpId; private Long approverUserId; private String level; + private Long jenisPengadaanId; private String search; private transient Pageable pageable; diff --git a/src/main/java/com/iconplus/smartproc/model/request/DrpRekomendasiRequest.java b/src/main/java/com/iconplus/smartproc/model/request/DrpRekomendasiRequest.java index ff25205..c54f5cc 100644 --- a/src/main/java/com/iconplus/smartproc/model/request/DrpRekomendasiRequest.java +++ b/src/main/java/com/iconplus/smartproc/model/request/DrpRekomendasiRequest.java @@ -16,9 +16,12 @@ public class DrpRekomendasiRequest extends BaseRequest { private Long id; private Long drpApprovalId; + private Long userId; + private Long drpId; private Long jenisPengadaanId; private String rekomendasi; private Date rekomendasiDate; + } diff --git a/src/main/java/com/iconplus/smartproc/model/response/DrpApprovalResponse.java b/src/main/java/com/iconplus/smartproc/model/response/DrpApprovalResponse.java index e95254e..0c9069e 100644 --- a/src/main/java/com/iconplus/smartproc/model/response/DrpApprovalResponse.java +++ b/src/main/java/com/iconplus/smartproc/model/response/DrpApprovalResponse.java @@ -7,6 +7,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import java.sql.Date; +import java.util.List; @Data @Builder @@ -21,4 +22,9 @@ public class DrpApprovalResponse extends BaseResponse { private Date approverVpDate; private Date approverKomiteDate; private Date approverDirekturDate; + + private DrpPengadaanResponse dataPengadaan; + private List dataPengadaanDokumen; + private List dataRekomendasi; + } diff --git a/src/main/java/com/iconplus/smartproc/model/response/DrpRekomendasiResponse.java b/src/main/java/com/iconplus/smartproc/model/response/DrpRekomendasiResponse.java index 301c297..9dc9cb2 100644 --- a/src/main/java/com/iconplus/smartproc/model/response/DrpRekomendasiResponse.java +++ b/src/main/java/com/iconplus/smartproc/model/response/DrpRekomendasiResponse.java @@ -6,7 +6,8 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.util.Date; +import java.sql.Date; + @Data @Builder @@ -22,4 +23,5 @@ public class DrpRekomendasiResponse extends BaseResponse { private Date approveDate; private Date rekomendasiDate; private String rekomendasi; + private String jabatan; } diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListDrpRekomendasiResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListDrpRekomendasiResponse.java index c1e4378..3de2915 100644 --- a/src/main/java/com/iconplus/smartproc/model/response/GetListDrpRekomendasiResponse.java +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListDrpRekomendasiResponse.java @@ -2,13 +2,11 @@ package com.iconplus.smartproc.model.response; import com.iconplus.smartproc.helper.base.BaseResponse; import com.iconplus.smartproc.helper.model.Pagination; -import com.iconplus.smartproc.model.response.DrpRekomendasiResponse; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.util.Date; import java.util.List; @Data diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpRekomendasiRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpRekomendasiRepository.java index 57e716b..896d523 100644 --- a/src/main/java/com/iconplus/smartproc/repository/DrpRekomendasiRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/DrpRekomendasiRepository.java @@ -1,16 +1,26 @@ package com.iconplus.smartproc.repository; import com.iconplus.smartproc.model.entity.DrpRekomendasi; -import org.springframework.data.domain.Page; +import com.iconplus.smartproc.model.projection.DrpRekomendasiView; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository public interface DrpRekomendasiRepository extends JpaRepository { -// @Query(value = "SELECT " + -// "FROM " + -// "WHERE") -// Page<> + @Query(value = "SELECT dr.id as id, " + + "da.isApprove as isApprove, " + + "j.jabatan as jabatan, " + + "dr.rekomendasi as rekomendasi, " + + "dr.rekomendasiDate as rekomendasiDate " + + "FROM DrpRekomendasi dr " + + "JOIN DrpApproval da ON da.id = dr.drpApprovalId " + + "JOIN Users u ON u.id = dr.userId " + + "JOIN Jabatan j ON j.id = u.jabatanId " + + "WHERE dr.isDelete = false " + + "AND dr.jenisPengadaanId = :jenisPengadaanId") + List getListDrpRekomendasi(Long jenisPengadaanId); } diff --git a/src/main/java/com/iconplus/smartproc/service/approval/GetApprovalService.java b/src/main/java/com/iconplus/smartproc/service/approval/GetApprovalService.java new file mode 100644 index 0000000..2414737 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/approval/GetApprovalService.java @@ -0,0 +1,113 @@ +package com.iconplus.smartproc.service.approval; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.DrpPengadaanDokumen; +import com.iconplus.smartproc.model.projection.DrpRekomendasiView; +import com.iconplus.smartproc.model.request.DrpApprovalRequest; +import com.iconplus.smartproc.model.response.DrpApprovalResponse; +import com.iconplus.smartproc.model.response.DrpPengadaanDokumenResponse; +import com.iconplus.smartproc.model.response.DrpPengadaanResponse; +import com.iconplus.smartproc.model.response.DrpRekomendasiResponse; +import com.iconplus.smartproc.repository.DrpPengadaanDokumenRepository; +import com.iconplus.smartproc.repository.DrpPengadaanRepository; +import com.iconplus.smartproc.repository.DrpRekomendasiRepository; +import com.iconplus.smartproc.service.drppengadaan.GetDrpPengadaanService; +import com.iconplus.smartproc.util.Constants; +import org.apache.commons.lang3.BooleanUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetApprovalService implements BaseService { + + private final DrpPengadaanRepository drpPengadaanRepository; + private final DrpPengadaanDokumenRepository drpPengadaanDokumenRepository; + private final DrpRekomendasiRepository drpRekomendasiRepository; + + public GetApprovalService(DrpPengadaanRepository drpPengadaanRepository, + DrpPengadaanDokumenRepository drpPengadaanDokumenRepository, + DrpRekomendasiRepository drpRekomendasiRepository) { + this.drpPengadaanRepository = drpPengadaanRepository; + this.drpPengadaanDokumenRepository = drpPengadaanDokumenRepository; + this.drpRekomendasiRepository = drpRekomendasiRepository; + } + + @Override + public DrpApprovalResponse execute(DrpApprovalRequest input) { + var drpPengadaan = drpPengadaanRepository.getDrpPengadaanById(input.getJenisPengadaanId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "DRP Pengadaan", input.getJenisPengadaanId()))); + + List drpPengadaanDokumenResponseList = new ArrayList<>(); + var drpPengadaanDokumenList = drpPengadaanDokumenRepository.findByDrpPengadaanIdAndIsDeleteFalse(drpPengadaan.getId()); + for (DrpPengadaanDokumen drpPengadaanDokumen : drpPengadaanDokumenList) { + DrpPengadaanDokumenResponse drpPengadaanDokumenResponse = DrpPengadaanDokumenResponse.builder() + .id(drpPengadaanDokumen.getId()) + .drpId(drpPengadaanDokumen.getDrpId()) + .jenisDokumenId(drpPengadaanDokumen.getJenisDokumenId()) + .filename(drpPengadaanDokumen.getFilename()) + .keterangan(drpPengadaanDokumen.getKeterangan()) + .build(); + drpPengadaanDokumenResponseList.add(drpPengadaanDokumenResponse); + } + + var pengadaan = DrpPengadaanResponse.builder() + .id(drpPengadaan.getId()) + .drpId(drpPengadaan.getDrpId()) + .nomor(drpPengadaan.getNomor()) + .namaPengadaan(drpPengadaan.getNamaPengadaan()) + .lokasiId(drpPengadaan.getLokasiId()) + .lokasi(drpPengadaan.getLokasi()) + .jenisPengadaanId(drpPengadaan.getJenisPengadaanId()) + .jenisPengadaan(drpPengadaan.getJenisPengadaan()) + .unitInisiatorId(drpPengadaan.getUnitInisiatorId()) + .unitInisiator(drpPengadaan.getUnitInisiator()) + .hpe(drpPengadaan.getHpe()) + .pagu(drpPengadaan.getPagu()) + .sumberDanaId(drpPengadaan.getSumberDanaId()) + .sumberDana(drpPengadaan.getSumberDana()) + .metodePengadaanId(drpPengadaan.getMetodePengadaanId()) + .metodePengadaan(drpPengadaan.getMetodePengadaan()) + .supplyPositioningMatrixId(drpPengadaan.getSupplyPositioningMatrixId()) + .supplyPositioningMatrix(drpPengadaan.getSupplyPositioningMatrix()) + .metodePenyampaianId(drpPengadaan.getMetodePenyampaianId()) + .metodePenyampaian(drpPengadaan.getMetodePenyampaian()) + .jenisKontrakId(drpPengadaan.getJenisKontrakId()) + .jenisKontrak(drpPengadaan.getJenisKontrak()) + .strategiPengadaanId(drpPengadaan.getStrategiPengadaanId()) + .strategiPengadaan(drpPengadaan.getStrategiPengadaan()) + .rencanaTanggal(drpPengadaan.getRencanaTanggal()) + .targetTanggal(drpPengadaan.getTargetTanggal()) + .isActive(drpPengadaan.getIsActive()) + .build(); + + List drpRekomendasiResponseList = new ArrayList<>(); + var listDrpRekomendasi = drpRekomendasiRepository.getListDrpRekomendasi(input.getJenisPengadaanId()); + for (DrpRekomendasiView drpRekomendasiView : listDrpRekomendasi) { + DrpRekomendasiResponse drpRekomendasiResponse = DrpRekomendasiResponse.builder() + .id(drpRekomendasiView.getId()) + .jabatan(drpRekomendasiView.getJabatan()) + .rekomendasi(drpRekomendasiView.getRekomendasi()) + .rekomendasiDate(drpRekomendasiView.getRekomendasiDate()) + .build(); + if (BooleanUtils.isTrue(drpRekomendasiView.getIsApprove())) { + drpRekomendasiResponse.setStatus("Setuju"); + } else { + drpRekomendasiResponse.setStatus("Tolak"); + } + + drpRekomendasiResponseList.add(drpRekomendasiResponse); + } + + return DrpApprovalResponse.builder() + .dataPengadaan(pengadaan) + .dataPengadaanDokumen(drpPengadaanDokumenResponseList) + .dataRekomendasi(drpRekomendasiResponseList) + .build(); + + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/approval/PostDrpApprovalExecutionService.java b/src/main/java/com/iconplus/smartproc/service/approval/PostDrpApprovalExecutionService.java index 8b45036..a76cbf7 100644 --- a/src/main/java/com/iconplus/smartproc/service/approval/PostDrpApprovalExecutionService.java +++ b/src/main/java/com/iconplus/smartproc/service/approval/PostDrpApprovalExecutionService.java @@ -38,8 +38,6 @@ public class PostDrpApprovalExecutionService implements BaseService { private DrpRekomendasiRepository drpRekomendasiRepository; + private DrpApprovalRepository drpApprovalRepository; - private PostDrpRekomendasiService(DrpRekomendasiRepository drpRekomendasiRepository) { + private PostDrpRekomendasiService(DrpRekomendasiRepository drpRekomendasiRepository, + DrpApprovalRepository drpApprovalRepository) { this.drpRekomendasiRepository = drpRekomendasiRepository; + this.drpApprovalRepository = drpApprovalRepository; } @Override public DrpRekomendasiResponse execute(DrpRekomendasiRequest input) { + if (input.getDrpApprovalId() == null) { + var drpApproval = drpApprovalRepository.findByDrpIdAndApproverUserIdAndIsDeleteFalse(input.getDrpId(), input.getUserId()); + if (drpApproval.isPresent()) { + input.setDrpApprovalId(drpApproval.get().getId()); + } + } + DrpRekomendasi drpRekomendasi = DrpRekomendasi.builder() + .drpId(input.getDrpId()) + .userId(input.getUserId()) .jenisPengadaanId(input.getJenisPengadaanId()) .drpApprovalId(input.getDrpApprovalId()) .rekomendasi(input.getRekomendasi()) diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index 226916d..1fc7e7e 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -32,4 +32,4 @@ spring: show-sql: true fe: - server: http://localhost:8080 \ No newline at end of file + server: http://internal.sindigilive.com:8080 \ No newline at end of file From d2015e669523e191263d1abcf3534b209eb00513 Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Fri, 2 Jun 2023 15:12:29 +0700 Subject: [PATCH 53/63] enhance list drp pengadaan by id drp --- .../smartproc/controller/DrpPengadaanController.java | 6 ++++-- .../smartproc/repository/DrpPengadaanRepository.java | 3 ++- .../service/drppengadaan/GetListDrpPengadaanService.java | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/iconplus/smartproc/controller/DrpPengadaanController.java b/src/main/java/com/iconplus/smartproc/controller/DrpPengadaanController.java index 2fe2b01..450cae0 100644 --- a/src/main/java/com/iconplus/smartproc/controller/DrpPengadaanController.java +++ b/src/main/java/com/iconplus/smartproc/controller/DrpPengadaanController.java @@ -44,12 +44,14 @@ public class DrpPengadaanController { this.putDrpPengadaanService = putDrpPengadaanService; } - @GetMapping - public GetListDrpPengadaanResponse getDrpPengadaan(@RequestParam(name = "page", defaultValue = "1") Integer page, + @GetMapping("/list/{id}") + public GetListDrpPengadaanResponse getDrpPengadaan(@PathVariable(name = "id") Long drpId, + @RequestParam(name = "page", defaultValue = "1") Integer page, @RequestParam(name = "size", defaultValue = "5") Integer size){ Pageable pageable = PageRequest.of((page - 1), size); DrpPengadaanRequest drpPengadaanRequest = DrpPengadaanRequest.builder() + .drpId(drpId) .pageable(pageable) .build(); return getListDrpPengadaanService.execute(drpPengadaanRequest); diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanRepository.java index 2434219..df816a1 100644 --- a/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanRepository.java @@ -51,8 +51,9 @@ public interface DrpPengadaanRepository extends JpaRepository getListDrpPengadaan(Pageable pageable); + Page getListDrpPengadaan(Long drpId, Pageable pageable); @Query(value = "SELECT dp.id as id, " + "dp.nomor as nomor, " + diff --git a/src/main/java/com/iconplus/smartproc/service/drppengadaan/GetListDrpPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/drppengadaan/GetListDrpPengadaanService.java index 82fb79f..87f13fd 100644 --- a/src/main/java/com/iconplus/smartproc/service/drppengadaan/GetListDrpPengadaanService.java +++ b/src/main/java/com/iconplus/smartproc/service/drppengadaan/GetListDrpPengadaanService.java @@ -26,7 +26,7 @@ public class GetListDrpPengadaanService implements BaseService drpPengadaanResponseList = new ArrayList<>(); - var drpPengadaanViews = drpPengadaanRepository.getListDrpPengadaan(input.getPageable()); + var drpPengadaanViews = drpPengadaanRepository.getListDrpPengadaan(input.getDrpId(), input.getPageable()); for (DrpPengadaanView drpPengadaanView : drpPengadaanViews) { DrpPengadaanResponse drpPengadaanResponse = DrpPengadaanResponse.builder() .id(drpPengadaanView.getId()) From f1f071b512b06cbd6b911a34be91f01c4bb5dbd3 Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Fri, 2 Jun 2023 18:21:29 +0700 Subject: [PATCH 54/63] add api drp list rekomendasi --- .../controller/ApprovalDrpController.java | 24 ++++-- .../smartproc/controller/DrpController.java | 19 ++++- .../smartproc/controller/PrintController.java | 37 +++++++++ .../model/projection/DrpApprovalView.java | 6 ++ .../model/projection/DrpRekomendasiView.java | 9 +++ .../smartproc/model/projection/DrpView.java | 7 ++ .../model/request/DrpRekomendasiRequest.java | 2 + .../model/request/PrintDrpRequest.java | 17 +++++ .../response/DrpRekomendasiResponse.java | 2 +- .../response/GetListPrintDrpResponse.java | 20 +++++ .../model/response/PrintDrpResponse.java | 21 ++++++ .../repository/DrpRekomendasiRepository.java | 32 ++++++++ .../smartproc/repository/DrpRepository.java | 11 +++ .../service/approval/GetApprovalService.java | 10 ++- .../approval/GetListRekomendasiService.java | 39 +++++++++- .../drp/GetListDrpRekomendasiService.java | 75 +++++++++++++++++++ .../service/print/GetListPrintDrpService.java | 57 ++++++++++++++ 17 files changed, 376 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/iconplus/smartproc/controller/PrintController.java create mode 100644 src/main/java/com/iconplus/smartproc/model/request/PrintDrpRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/GetListPrintDrpResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/PrintDrpResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/service/drp/GetListDrpRekomendasiService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/print/GetListPrintDrpService.java diff --git a/src/main/java/com/iconplus/smartproc/controller/ApprovalDrpController.java b/src/main/java/com/iconplus/smartproc/controller/ApprovalDrpController.java index fe98928..dfb7e3c 100644 --- a/src/main/java/com/iconplus/smartproc/controller/ApprovalDrpController.java +++ b/src/main/java/com/iconplus/smartproc/controller/ApprovalDrpController.java @@ -5,10 +5,7 @@ import com.iconplus.smartproc.helper.model.EmptyResponse; import com.iconplus.smartproc.model.request.DrpApprovalRequest; import com.iconplus.smartproc.model.request.DrpRekomendasiRequest; import com.iconplus.smartproc.model.request.ListDrpApprovalRequest; -import com.iconplus.smartproc.model.response.DrpApprovalResponse; -import com.iconplus.smartproc.model.response.DrpRekomendasiResponse; -import com.iconplus.smartproc.model.response.GetListDrpApprovalResponse; -import com.iconplus.smartproc.model.response.GetListUserApprovalResponse; +import com.iconplus.smartproc.model.response.*; import com.iconplus.smartproc.service.approval.*; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; @@ -26,13 +23,15 @@ public class ApprovalDrpController { private PostDrpRekomendasiService postDrpRekomendasiService; private PostDrpApprovalExecutionService postDrpApprovalExecutionService; private GetApprovalService getApprovalService; + private GetListRekomendasiService getListRekomendasiService; public ApprovalDrpController(GetListUserVpService getListUserVpService, GetListUserDirekturKomiteService getListUserDirekturKomiteService, PostCreateDrpApprovalService postCreateDrpApprovalService, GetListApprovalDrpServie getListApprovalDrpServie, PostDrpRekomendasiService postDrpRekomendasiService, PostDrpApprovalExecutionService postDrpApprovalExecutionService, - GetApprovalService getApprovalService) { + GetApprovalService getApprovalService, + GetListRekomendasiService getListRekomendasiService) { this.getListUserVpService = getListUserVpService; this.getListUserDirekturKomiteService = getListUserDirekturKomiteService; this.postCreateDrpApprovalService = postCreateDrpApprovalService; @@ -40,6 +39,7 @@ public class ApprovalDrpController { this.postDrpRekomendasiService = postDrpRekomendasiService; this.postDrpApprovalExecutionService = postDrpApprovalExecutionService; this.getApprovalService = getApprovalService; + this.getListRekomendasiService = getListRekomendasiService; } @GetMapping("/vp") @@ -87,4 +87,18 @@ public class ApprovalDrpController { .jenisPengadaanId(id) .build()); } + + @GetMapping("/rekomendasi/jenis-pengadaan/{id}") + public GetListDrpRekomendasiResponse getListRekomendasi(@PathVariable(name = "id") Long id, + @RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size) { + + Pageable pageable = PageRequest.of((page - 1), size); + DrpRekomendasiRequest drpRekomendasiRequest = DrpRekomendasiRequest.builder() + .jenisPengadaanId(id) + .pageable(pageable) + .build(); + + return getListRekomendasiService.execute(drpRekomendasiRequest); + } } diff --git a/src/main/java/com/iconplus/smartproc/controller/DrpController.java b/src/main/java/com/iconplus/smartproc/controller/DrpController.java index d92ab8b..58eaee7 100644 --- a/src/main/java/com/iconplus/smartproc/controller/DrpController.java +++ b/src/main/java/com/iconplus/smartproc/controller/DrpController.java @@ -2,6 +2,7 @@ package com.iconplus.smartproc.controller; import com.iconplus.smartproc.helper.model.EmptyResponse; import com.iconplus.smartproc.model.request.DrpDokumenRequest; +import com.iconplus.smartproc.model.request.DrpRekomendasiRequest; import com.iconplus.smartproc.model.request.DrpRequest; import com.iconplus.smartproc.model.response.*; import com.iconplus.smartproc.service.drp.*; @@ -24,6 +25,7 @@ public class DrpController { private final DeleteDokumenUploadService deleteDokumenUploadService; private final PostCreateDrpService postCreateDrpService; private final EditUploadDokumenDrpService editUploadDokumenDrpService; + private final GetListDrpRekomendasiService getListDrpRekomendasiService; public DrpController(GetDrpService getDrpService, GetListDrpService getListDrpService, @@ -31,7 +33,8 @@ public class DrpController { PostCreateTahunDrpService postCreateTahunDrpService, DeleteDokumenUploadService deleteDokumenUploadService, PostCreateDrpService postCreateDrpService, - EditUploadDokumenDrpService editUploadDokumenDrpService) { + EditUploadDokumenDrpService editUploadDokumenDrpService, + GetListDrpRekomendasiService getListDrpRekomendasiService) { this.getDrpService = getDrpService; this.getListDrpService = getListDrpService; this.postDrpUploadDokumenRKAPService = postDrpUploadDokumenRKAPService; @@ -39,6 +42,7 @@ public class DrpController { this.deleteDokumenUploadService = deleteDokumenUploadService; this.postCreateDrpService = postCreateDrpService; this.editUploadDokumenDrpService = editUploadDokumenDrpService; + this.getListDrpRekomendasiService = getListDrpRekomendasiService; } @GetMapping @@ -102,4 +106,17 @@ public class DrpController { .build()); } + @GetMapping("/{id}/rekomendasi") + public GetListDrpRekomendasiResponse getListDrpRekomendasiResponse(@PathVariable(name = "id") Long id, + @RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size) { + Pageable pageable = PageRequest.of((page - 1), size); + DrpRekomendasiRequest drpRekomendasiRequest = DrpRekomendasiRequest.builder() + .drpId(id) + .pageable(pageable) + .build(); + + return getListDrpRekomendasiService.execute(drpRekomendasiRequest); + } + } diff --git a/src/main/java/com/iconplus/smartproc/controller/PrintController.java b/src/main/java/com/iconplus/smartproc/controller/PrintController.java new file mode 100644 index 0000000..a02741a --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/controller/PrintController.java @@ -0,0 +1,37 @@ +package com.iconplus.smartproc.controller; + +import com.iconplus.smartproc.model.request.PrintDrpRequest; +import com.iconplus.smartproc.model.request.RolesRequest; +import com.iconplus.smartproc.model.response.GetListPrintDrpResponse; +import com.iconplus.smartproc.service.print.GetListPrintDrpService; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.web.bind.annotation.*; + +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") +@RestController +@RequestMapping("/api/drp/cetak") +public class PrintController { + + private final GetListPrintDrpService getListPrintDrpService; + + public PrintController(GetListPrintDrpService getListPrintDrpService) { + this.getListPrintDrpService = getListPrintDrpService; + + } + + @GetMapping + public GetListPrintDrpResponse getListPrintDrpResponse(@RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size) { + + Pageable pageable = PageRequest.of((page - 1), size); + PrintDrpRequest printDrpRequest = PrintDrpRequest.builder() + .pageable(pageable) + .build(); + + return getListPrintDrpService.execute(printDrpRequest); + + } + + +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalView.java b/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalView.java index 0da75aa..8ba5585 100644 --- a/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalView.java +++ b/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalView.java @@ -26,6 +26,12 @@ public interface DrpApprovalView { Date getDirekturApproveDate(); void setDirekturApproveDate(Date direkturApproveDate); + Boolean getIsPrint(); + void setIsPrint(Boolean isPrint); + + Date getPrintDate(); + void setPrintDate(Date printDate); + } diff --git a/src/main/java/com/iconplus/smartproc/model/projection/DrpRekomendasiView.java b/src/main/java/com/iconplus/smartproc/model/projection/DrpRekomendasiView.java index 0c2ab08..9d5738f 100644 --- a/src/main/java/com/iconplus/smartproc/model/projection/DrpRekomendasiView.java +++ b/src/main/java/com/iconplus/smartproc/model/projection/DrpRekomendasiView.java @@ -20,4 +20,13 @@ public interface DrpRekomendasiView { String getRekomendasi(); void setRekomendasiDate(String rekomendasi); + String getNomor(); + void setNomor(String nomor); + + String getNamaPengadaan(); + void setNamaPengadaan(String namaPengadaan); + + String getLevel(); + void setLevel(String level); + } diff --git a/src/main/java/com/iconplus/smartproc/model/projection/DrpView.java b/src/main/java/com/iconplus/smartproc/model/projection/DrpView.java index fe0c8af..81bfadb 100644 --- a/src/main/java/com/iconplus/smartproc/model/projection/DrpView.java +++ b/src/main/java/com/iconplus/smartproc/model/projection/DrpView.java @@ -1,5 +1,6 @@ package com.iconplus.smartproc.model.projection; +import java.sql.Date; import java.sql.Timestamp; public interface DrpView { @@ -16,6 +17,12 @@ public interface DrpView { Timestamp getApproveDate(); void setApproveDate(Timestamp approveDate); + Boolean getIsPrint(); + void setIsPrint(Boolean isPrint); + + Date getPrintDate(); + void setPrintDate(Date printDate); + Boolean getIsActive(); void setIsActive(Boolean isActive); diff --git a/src/main/java/com/iconplus/smartproc/model/request/DrpRekomendasiRequest.java b/src/main/java/com/iconplus/smartproc/model/request/DrpRekomendasiRequest.java index c54f5cc..015e9c5 100644 --- a/src/main/java/com/iconplus/smartproc/model/request/DrpRekomendasiRequest.java +++ b/src/main/java/com/iconplus/smartproc/model/request/DrpRekomendasiRequest.java @@ -5,6 +5,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import org.springframework.data.domain.Pageable; import java.sql.Date; @@ -21,6 +22,7 @@ public class DrpRekomendasiRequest extends BaseRequest { private Long jenisPengadaanId; private String rekomendasi; private Date rekomendasiDate; + private transient Pageable pageable; diff --git a/src/main/java/com/iconplus/smartproc/model/request/PrintDrpRequest.java b/src/main/java/com/iconplus/smartproc/model/request/PrintDrpRequest.java new file mode 100644 index 0000000..ff07db5 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/PrintDrpRequest.java @@ -0,0 +1,17 @@ +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 PrintDrpRequest extends BaseRequest { + + private transient Pageable pageable; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/DrpRekomendasiResponse.java b/src/main/java/com/iconplus/smartproc/model/response/DrpRekomendasiResponse.java index 9dc9cb2..1fc1eec 100644 --- a/src/main/java/com/iconplus/smartproc/model/response/DrpRekomendasiResponse.java +++ b/src/main/java/com/iconplus/smartproc/model/response/DrpRekomendasiResponse.java @@ -23,5 +23,5 @@ public class DrpRekomendasiResponse extends BaseResponse { private Date approveDate; private Date rekomendasiDate; private String rekomendasi; - private String jabatan; + private String jabatan;; } diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListPrintDrpResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListPrintDrpResponse.java new file mode 100644 index 0000000..8465992 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListPrintDrpResponse.java @@ -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 GetListPrintDrpResponse extends BaseResponse { + + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/PrintDrpResponse.java b/src/main/java/com/iconplus/smartproc/model/response/PrintDrpResponse.java new file mode 100644 index 0000000..2d3b4ee --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/PrintDrpResponse.java @@ -0,0 +1,21 @@ +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.Date; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class PrintDrpResponse extends BaseResponse { + + private Long id; + private Integer tahun; + private String status; + private Date printDate; +} diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpRekomendasiRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpRekomendasiRepository.java index 896d523..49ed28d 100644 --- a/src/main/java/com/iconplus/smartproc/repository/DrpRekomendasiRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/DrpRekomendasiRepository.java @@ -2,6 +2,8 @@ package com.iconplus.smartproc.repository; import com.iconplus.smartproc.model.entity.DrpRekomendasi; import com.iconplus.smartproc.model.projection.DrpRekomendasiView; +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; @@ -23,4 +25,34 @@ public interface DrpRekomendasiRepository extends JpaRepository getListDrpRekomendasi(Long jenisPengadaanId); + + @Query(value = "SELECT dr.id as id, " + + "da.isApprove as isApprove, " + + "j.jabatan as jabatan, " + + "dr.rekomendasi as rekomendasi, " + + "dr.rekomendasiDate as rekomendasiDate " + + "FROM DrpRekomendasi dr " + + "JOIN DrpApproval da ON da.id = dr.drpApprovalId " + + "JOIN Users u ON u.id = dr.userId " + + "JOIN Jabatan j ON j.id = u.jabatanId " + + "WHERE dr.isDelete = false " + + "AND dr.jenisPengadaanId = :jenisPengadaanId") + Page getListDrpRekomendasi(Long jenisPengadaanId, Pageable pageable); + + @Query(value = "SELECT dr.id as id, " + + "dp.nomor as nomor, " + + "dp.namaPengadaan as namaPengadaan, " + + "da.isApprove as isApprove, " + + "da.level as level, " + + "j.jabatan as jabatan, " + + "dr.rekomendasi as rekomendasi, " + + "dr.rekomendasiDate as rekomendasiDate " + + "FROM DrpRekomendasi dr " + + "JOIN DrpApproval da ON da.id = dr.drpApprovalId " + + "JOIN Users u ON u.id = dr.userId " + + "JOIN Jabatan j ON j.id = u.jabatanId " + + "JOIN DrpPengadaan dp ON dp.id = dr.jenisPengadaanId " + + "WHERE dr.isDelete = false " + + "AND dr.drpId = :drpId") + Page getListDrpRekomendasiByDrpId(Long drpId, Pageable pageable); } diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java index a4d4acc..62397a5 100644 --- a/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java @@ -44,4 +44,15 @@ public interface DrpRepository extends JpaRepository { "FROM Drp d " + "WHERE d.isDelete = false") Page getListApprovalDrp(Pageable pageable); + + + + @Query(value = "SELECT d.id as id, " + + "d.tahun as tahun, " + + "d.isPrint as isPrint, " + + "d.printDate as printDate " + + "FROM Drp d " + + "WHERE d.isDelete = false") + Page getListPrintDrp(Pageable pageable); + } diff --git a/src/main/java/com/iconplus/smartproc/service/approval/GetApprovalService.java b/src/main/java/com/iconplus/smartproc/service/approval/GetApprovalService.java index 2414737..c8e70be 100644 --- a/src/main/java/com/iconplus/smartproc/service/approval/GetApprovalService.java +++ b/src/main/java/com/iconplus/smartproc/service/approval/GetApprovalService.java @@ -94,10 +94,12 @@ public class GetApprovalService implements BaseService { @@ -19,6 +25,37 @@ public class GetListRekomendasiService implements BaseService drpRekomendasiResponseList = new ArrayList<>(); + var listDrpRekomendasi = drpRekomendasiRepository.getListDrpRekomendasi(input.getJenisPengadaanId(), input.getPageable()); + for (DrpRekomendasiView drpRekomendasiView : listDrpRekomendasi) { + DrpRekomendasiResponse drpRekomendasiResponse = DrpRekomendasiResponse.builder() + .id(drpRekomendasiView.getId()) + .jabatan(drpRekomendasiView.getJabatan()) + .rekomendasi(drpRekomendasiView.getRekomendasi()) + .rekomendasiDate(drpRekomendasiView.getRekomendasiDate()) + .build(); + if (drpRekomendasiView.getIsApprove() != null) { + if (BooleanUtils.isTrue(drpRekomendasiView.getIsApprove())) { + drpRekomendasiResponse.setStatus("Setuju"); + } else { + drpRekomendasiResponse.setStatus("Tolak"); + } + } + + drpRekomendasiResponseList.add(drpRekomendasiResponse); + } + + return GetListDrpRekomendasiResponse.builder() + .data(drpRekomendasiResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(listDrpRekomendasi.getTotalPages()) + .totalRecords(listDrpRekomendasi.getTotalElements()) + .isFirstPage(listDrpRekomendasi.isFirst()) + .isLastPage(listDrpRekomendasi.isLast()) + .build()) + .build(); } } diff --git a/src/main/java/com/iconplus/smartproc/service/drp/GetListDrpRekomendasiService.java b/src/main/java/com/iconplus/smartproc/service/drp/GetListDrpRekomendasiService.java new file mode 100644 index 0000000..b539ab0 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/drp/GetListDrpRekomendasiService.java @@ -0,0 +1,75 @@ +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.DrpRekomendasiView; +import com.iconplus.smartproc.model.request.DrpRekomendasiRequest; +import com.iconplus.smartproc.model.response.DrpRekomendasiResponse; +import com.iconplus.smartproc.model.response.GetListDrpRekomendasiResponse; +import com.iconplus.smartproc.repository.DrpRekomendasiRepository; +import com.iconplus.smartproc.util.Constants; +import org.apache.commons.lang3.BooleanUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListDrpRekomendasiService implements BaseService { + + private final DrpRekomendasiRepository drpRekomendasiRepository; + + public GetListDrpRekomendasiService(DrpRekomendasiRepository drpRekomendasiRepository) { + this.drpRekomendasiRepository = drpRekomendasiRepository; + } + + + @Override + public GetListDrpRekomendasiResponse execute(DrpRekomendasiRequest input) { + + List drpRekomendasiResponseList = new ArrayList<>(); + var listDrpRekomendasi = drpRekomendasiRepository.getListDrpRekomendasiByDrpId(input.getDrpId(), input.getPageable()); + for (DrpRekomendasiView drpRekomendasiView : listDrpRekomendasi) { + DrpRekomendasiResponse drpRekomendasiResponse = DrpRekomendasiResponse.builder() + .id(drpRekomendasiView.getId()) + .nomorRkp(drpRekomendasiView.getNomor()) + .namaPengadaan(drpRekomendasiView.getNamaPengadaan()) + .jabatan(drpRekomendasiView.getJabatan()) + .rekomendasi(drpRekomendasiView.getRekomendasi()) + .rekomendasiDate(drpRekomendasiView.getRekomendasiDate()) + .build(); + + if (drpRekomendasiView.getIsApprove() != null) { + if (BooleanUtils.isTrue(drpRekomendasiView.getIsApprove())) { + drpRekomendasiResponse.setStatus("Setuju"); + } else { + drpRekomendasiResponse.setStatus("Tolak"); + } + + if (StringUtils.equalsIgnoreCase("VP", drpRekomendasiView.getLevel())) { + drpRekomendasiResponse.setApproval(Constants.STATUS_APPROVAL_VP); + } else if (StringUtils.equalsIgnoreCase("KOMITE", drpRekomendasiView.getLevel())) { + drpRekomendasiResponse.setApproval(Constants.STATUS_REKOMENDASI_KOMITE); + } else { + drpRekomendasiResponse.setApproval(Constants.STATUS_APPROVAL_DIRUT); + } + } + + drpRekomendasiResponseList.add(drpRekomendasiResponse); + } + + return GetListDrpRekomendasiResponse.builder() + .data(drpRekomendasiResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(listDrpRekomendasi.getTotalPages()) + .totalRecords(listDrpRekomendasi.getTotalElements()) + .isFirstPage(listDrpRekomendasi.isFirst()) + .isLastPage(listDrpRekomendasi.isLast()) + .build()) + .build(); + } + +} diff --git a/src/main/java/com/iconplus/smartproc/service/print/GetListPrintDrpService.java b/src/main/java/com/iconplus/smartproc/service/print/GetListPrintDrpService.java new file mode 100644 index 0000000..d8e84d5 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/print/GetListPrintDrpService.java @@ -0,0 +1,57 @@ +package com.iconplus.smartproc.service.print; + +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.PrintDrpRequest; +import com.iconplus.smartproc.model.response.GetListPrintDrpResponse; +import com.iconplus.smartproc.model.response.PrintDrpResponse; +import com.iconplus.smartproc.repository.DrpRepository; +import org.apache.commons.lang3.BooleanUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListPrintDrpService implements BaseService { + + private DrpRepository drpRepository; + + public GetListPrintDrpService(DrpRepository drpRepository) { + this.drpRepository = drpRepository; + } + + + @Override + public GetListPrintDrpResponse execute(PrintDrpRequest input) { + + List printDrpResponseList = new ArrayList<>(); + + var drpViews = drpRepository.getListPrintDrp(input.getPageable()); + for (DrpView drpView : drpViews) { + PrintDrpResponse printDrpResponse = PrintDrpResponse.builder() + .id(drpView.getId()) + .printDate(drpView.getPrintDate()) + .build(); + if (BooleanUtils.isTrue(drpView.getIsPrint())) { + printDrpResponse.setStatus("Tercetak"); + } else { + printDrpResponse.setStatus("Belum Bisa Dicetak"); + } + printDrpResponseList.add(printDrpResponse); + } + + return GetListPrintDrpResponse.builder() + .data(printDrpResponseList) + .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(); + } +} From 37a06b00f1b7ce812814bed7951cbbc786b3d1b9 Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Fri, 2 Jun 2023 18:55:00 +0700 Subject: [PATCH 55/63] add api cetak approval --- src/main/java/com/iconplus/smartproc/model/entity/Drp.java | 1 + .../iconplus/smartproc/service/print/GetListPrintDrpService.java | 1 + 2 files changed, 2 insertions(+) diff --git a/src/main/java/com/iconplus/smartproc/model/entity/Drp.java b/src/main/java/com/iconplus/smartproc/model/entity/Drp.java index c97af01..d4472c1 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/Drp.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/Drp.java @@ -42,6 +42,7 @@ public class Drp extends BaseEntity { private Date direkturApproveDate; @Column(name = "is_print") + @Type(type = "org.hibernate.type.NumericBooleanType") private Boolean isPrint; @Column(name = "print_date") diff --git a/src/main/java/com/iconplus/smartproc/service/print/GetListPrintDrpService.java b/src/main/java/com/iconplus/smartproc/service/print/GetListPrintDrpService.java index d8e84d5..985f117 100644 --- a/src/main/java/com/iconplus/smartproc/service/print/GetListPrintDrpService.java +++ b/src/main/java/com/iconplus/smartproc/service/print/GetListPrintDrpService.java @@ -32,6 +32,7 @@ public class GetListPrintDrpService implements BaseService Date: Sat, 3 Jun 2023 18:40:21 +0700 Subject: [PATCH 56/63] add --- .../controller/ApprovalDrpController.java | 12 +++- .../smartproc/model/entity/DrpApproval.java | 3 + .../model/entity/DrpApprovalHistory.java | 43 ++++++++++++ .../projection/DrpApprovalHistoryView.java | 22 ++++++ .../model/projection/DrpApprovalView.java | 13 ++++ .../model/request/DrpApprovalRequest.java | 1 + .../response/DrpApprovalHistoryResponse.java | 25 +++++++ .../GetListDrpApprovalHistoryResponse.java | 18 +++++ .../DrpApprovalHistoryRepository.java | 27 ++++++++ .../repository/DrpApprovalRepository.java | 23 +++++++ .../approval/GetHistoryApprovalService.java | 55 +++++++++++++++ .../PostCreateDrpApprovalService.java | 25 ++++++- .../PostDrpApprovalExecutionService.java | 69 ++++++++++++++++++- .../service/print/GetListPrintDrpService.java | 17 ++++- .../iconplus/smartproc/util/Constants.java | 4 ++ 15 files changed, 351 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/iconplus/smartproc/model/entity/DrpApprovalHistory.java create mode 100644 src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalHistoryView.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/DrpApprovalHistoryResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/GetListDrpApprovalHistoryResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/repository/DrpApprovalHistoryRepository.java create mode 100644 src/main/java/com/iconplus/smartproc/service/approval/GetHistoryApprovalService.java diff --git a/src/main/java/com/iconplus/smartproc/controller/ApprovalDrpController.java b/src/main/java/com/iconplus/smartproc/controller/ApprovalDrpController.java index dfb7e3c..9953b47 100644 --- a/src/main/java/com/iconplus/smartproc/controller/ApprovalDrpController.java +++ b/src/main/java/com/iconplus/smartproc/controller/ApprovalDrpController.java @@ -24,6 +24,7 @@ public class ApprovalDrpController { private PostDrpApprovalExecutionService postDrpApprovalExecutionService; private GetApprovalService getApprovalService; private GetListRekomendasiService getListRekomendasiService; + private GetHistoryApprovalService getHistoryApprovalService; public ApprovalDrpController(GetListUserVpService getListUserVpService, GetListUserDirekturKomiteService getListUserDirekturKomiteService, PostCreateDrpApprovalService postCreateDrpApprovalService, @@ -31,7 +32,8 @@ public class ApprovalDrpController { PostDrpRekomendasiService postDrpRekomendasiService, PostDrpApprovalExecutionService postDrpApprovalExecutionService, GetApprovalService getApprovalService, - GetListRekomendasiService getListRekomendasiService) { + GetListRekomendasiService getListRekomendasiService, + GetHistoryApprovalService getHistoryApprovalService) { this.getListUserVpService = getListUserVpService; this.getListUserDirekturKomiteService = getListUserDirekturKomiteService; this.postCreateDrpApprovalService = postCreateDrpApprovalService; @@ -40,6 +42,7 @@ public class ApprovalDrpController { this.postDrpApprovalExecutionService = postDrpApprovalExecutionService; this.getApprovalService = getApprovalService; this.getListRekomendasiService = getListRekomendasiService; + this.getHistoryApprovalService = getHistoryApprovalService; } @GetMapping("/vp") @@ -101,4 +104,11 @@ public class ApprovalDrpController { return getListRekomendasiService.execute(drpRekomendasiRequest); } + + @GetMapping("/{id}/history") + public GetListDrpApprovalHistoryResponse getListDrpApprovalResponse(@PathVariable(name = "id") Long id) { + return getHistoryApprovalService.execute(DrpApprovalRequest.builder() + .drpId(id) + .build()); + } } diff --git a/src/main/java/com/iconplus/smartproc/model/entity/DrpApproval.java b/src/main/java/com/iconplus/smartproc/model/entity/DrpApproval.java index 60881bf..04d50b7 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/DrpApproval.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/DrpApproval.java @@ -35,6 +35,9 @@ public class DrpApproval extends BaseEntity { @Column(name = "level") private String level; + @Column(name = "catatan") + private String catatan; + @Column(name = "is_active") @Type(type = "org.hibernate.type.NumericBooleanType") private Boolean isActive; diff --git a/src/main/java/com/iconplus/smartproc/model/entity/DrpApprovalHistory.java b/src/main/java/com/iconplus/smartproc/model/entity/DrpApprovalHistory.java new file mode 100644 index 0000000..306a41d --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/DrpApprovalHistory.java @@ -0,0 +1,43 @@ +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.Date; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "drp_approval_history") +public class DrpApprovalHistory extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "drp_approval_id") + private Long drpApprovalId; + + @Column(name = "date") + private Date date; + + @Column(name = "status") + private String status; + + @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/DrpApprovalHistoryView.java b/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalHistoryView.java new file mode 100644 index 0000000..b10093e --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalHistoryView.java @@ -0,0 +1,22 @@ +package com.iconplus.smartproc.model.projection; + +import java.sql.Date; + +public interface DrpApprovalHistoryView { + + String getStatus(); + void setStatus(String status); + + Date getDate(); + void setDate(Date date); + + String getCatatan(); + void setCatatan(String catatan); + + String getJabatan(); + void setJabatan(String jabatan); + + String getNama(); + void setNama(String nama); + +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalView.java b/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalView.java index 8ba5585..caf7f22 100644 --- a/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalView.java +++ b/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalView.java @@ -32,6 +32,19 @@ public interface DrpApprovalView { Date getPrintDate(); void setPrintDate(Date printDate); + Boolean getIsApprove(); + void setIsApprove(Boolean isApprove); + String getCatatan(); + void setCatatan(String catatan); + + String getJabatan(); + void setJabatan(String jabatan); + + String getNama(); + void setNama(String nama); + + String getLevel(); + void setLevel(String level); } diff --git a/src/main/java/com/iconplus/smartproc/model/request/DrpApprovalRequest.java b/src/main/java/com/iconplus/smartproc/model/request/DrpApprovalRequest.java index 4d7f097..655be50 100644 --- a/src/main/java/com/iconplus/smartproc/model/request/DrpApprovalRequest.java +++ b/src/main/java/com/iconplus/smartproc/model/request/DrpApprovalRequest.java @@ -19,6 +19,7 @@ public class DrpApprovalRequest extends BaseRequest { private Long approverUserId; private String level; private Long jenisPengadaanId; + private String catatan; private String search; private transient Pageable pageable; diff --git a/src/main/java/com/iconplus/smartproc/model/response/DrpApprovalHistoryResponse.java b/src/main/java/com/iconplus/smartproc/model/response/DrpApprovalHistoryResponse.java new file mode 100644 index 0000000..96d0684 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/DrpApprovalHistoryResponse.java @@ -0,0 +1,25 @@ +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.Date; + + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DrpApprovalHistoryResponse extends BaseResponse { + + private Long drpId; + private String status; + private Date date; + private String catatan; + private String nama; + private String jabatan; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListDrpApprovalHistoryResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListDrpApprovalHistoryResponse.java new file mode 100644 index 0000000..1107abb --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListDrpApprovalHistoryResponse.java @@ -0,0 +1,18 @@ +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.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class GetListDrpApprovalHistoryResponse extends BaseResponse { + + private List data; +} diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpApprovalHistoryRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpApprovalHistoryRepository.java new file mode 100644 index 0000000..f3afa55 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/DrpApprovalHistoryRepository.java @@ -0,0 +1,27 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.DrpApprovalHistory; +import com.iconplus.smartproc.model.projection.DrpApprovalHistoryView; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface DrpApprovalHistoryRepository extends JpaRepository { + + @Query(value = "SELECT dah.status as status, " + + "dah.date as date, " + + "da.catatan as catatan, " + + "u.nama as nama, " + + "j.jabatan as jabatan " + + "FROM DrpApprovalHistory dah " + + "JOIN DrpApproval da ON da.id = dah.drpApprovalId " + + "JOIN Users u ON u.id = da.approverUserId " + + "JOIN Jabatan j ON j.id = u.jabatanId " + + "WHERE da.drpId = :drpId " + + "ORDER BY dah.timeCreated desc") + List getRiwayatApprovalByDrpId(Long drpId); + +} diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpApprovalRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpApprovalRepository.java index cd3b839..0fbb868 100644 --- a/src/main/java/com/iconplus/smartproc/repository/DrpApprovalRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/DrpApprovalRepository.java @@ -1,6 +1,7 @@ package com.iconplus.smartproc.repository; import com.iconplus.smartproc.model.entity.DrpApproval; +import com.iconplus.smartproc.model.projection.DrpApprovalView; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; @@ -23,4 +24,26 @@ public interface DrpApprovalRepository extends JpaRepository List getListKomiteApproval(Long drpId); + List findByDrpIdAndIsDeleteFalse(Long drpId); + + @Query(value = "SELECT da.drpId as drpId, " + + "da.isApprove as isApprove, " + + "da.catatan as catatan, " + + "da.approverUserId as approverUserId, " + + "u.nama as nama, " + + "j.jabatan as jabatan, " + + "da.level as level " + + "FROM DrpApproval da " + + "JOIN Users u ON u.id = da.approverUserId " + + "JOIN Jabatan j ON j.id = u.jabatanId " + + "WHERE da.isDelete = false " + + "AND da.isApprove is not null " + + "AND da.drpId = :drpId " + + "ORDER BY da.lastUpdate") + List getDrpApproval(Long drpId); + + Optional findByDrpIdAndLevelAndIsDeleteFalse(Long drpId, String level); + + + } diff --git a/src/main/java/com/iconplus/smartproc/service/approval/GetHistoryApprovalService.java b/src/main/java/com/iconplus/smartproc/service/approval/GetHistoryApprovalService.java new file mode 100644 index 0000000..d91fb1b --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/approval/GetHistoryApprovalService.java @@ -0,0 +1,55 @@ +package com.iconplus.smartproc.service.approval; + +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.DrpApproval; +import com.iconplus.smartproc.model.projection.DrpApprovalHistoryView; +import com.iconplus.smartproc.model.projection.DrpApprovalView; +import com.iconplus.smartproc.model.request.DrpApprovalRequest; +import com.iconplus.smartproc.model.response.DrpApprovalHistoryResponse; +import com.iconplus.smartproc.model.response.DrpApprovalResponse; +import com.iconplus.smartproc.model.response.GetListDrpApprovalHistoryResponse; +import com.iconplus.smartproc.model.response.GetListDrpApprovalResponse; +import com.iconplus.smartproc.repository.DrpApprovalHistoryRepository; +import com.iconplus.smartproc.repository.DrpApprovalRepository; +import org.apache.commons.lang3.BooleanUtils; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetHistoryApprovalService implements BaseService { + + private final DrpApprovalRepository drpApprovalRepository; + private final DrpApprovalHistoryRepository drpApprovalHistoryRepository; + public GetHistoryApprovalService(DrpApprovalRepository drpApprovalRepository, + DrpApprovalHistoryRepository drpApprovalHistoryRepository) { + this.drpApprovalRepository = drpApprovalRepository; + this.drpApprovalHistoryRepository = drpApprovalHistoryRepository; + + } + + + @Override + public GetListDrpApprovalHistoryResponse execute(DrpApprovalRequest input) { + + List drpApprovalHistoryResponses = new ArrayList<>(); + var drpApprovalHistoryViewList = drpApprovalHistoryRepository.getRiwayatApprovalByDrpId(input.getDrpId()); + for (DrpApprovalHistoryView drpApprovalHistoryView : drpApprovalHistoryViewList) { + DrpApprovalHistoryResponse drpApprovalHistoryResponse = DrpApprovalHistoryResponse.builder() + .nama(drpApprovalHistoryView.getNama()) + .jabatan(drpApprovalHistoryView.getJabatan()) + .status(drpApprovalHistoryView.getStatus()) + .date(drpApprovalHistoryView.getDate()) + .catatan(drpApprovalHistoryView.getCatatan()) + .build(); + drpApprovalHistoryResponses.add(drpApprovalHistoryResponse); + } + + + return GetListDrpApprovalHistoryResponse.builder() + .data(drpApprovalHistoryResponses) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/approval/PostCreateDrpApprovalService.java b/src/main/java/com/iconplus/smartproc/service/approval/PostCreateDrpApprovalService.java index 1f9b32c..425a0aa 100644 --- a/src/main/java/com/iconplus/smartproc/service/approval/PostCreateDrpApprovalService.java +++ b/src/main/java/com/iconplus/smartproc/service/approval/PostCreateDrpApprovalService.java @@ -4,13 +4,18 @@ 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.entity.DrpApproval; +import com.iconplus.smartproc.model.entity.DrpApprovalHistory; import com.iconplus.smartproc.model.request.DrpApprovalRequest; import com.iconplus.smartproc.model.request.ListDrpApprovalRequest; +import com.iconplus.smartproc.repository.DrpApprovalHistoryRepository; import com.iconplus.smartproc.repository.DrpApprovalRepository; import com.iconplus.smartproc.repository.DrpRepository; import com.iconplus.smartproc.util.Constants; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import java.sql.Date; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; @@ -19,10 +24,13 @@ public class PostCreateDrpApprovalService implements BaseService { + if (StringUtils.equalsIgnoreCase(c.getLevel(), "VP")) { + DrpApprovalHistory drpApprovalHistory = DrpApprovalHistory.builder() + .date(dateNow) + .drpApprovalId(c.getId()) + .status("Dikirim") + .isDelete(false) + .build(); + drpApprovalHistoryRepository.save(drpApprovalHistory); + } + }); return new EmptyResponse(); } diff --git a/src/main/java/com/iconplus/smartproc/service/approval/PostDrpApprovalExecutionService.java b/src/main/java/com/iconplus/smartproc/service/approval/PostDrpApprovalExecutionService.java index a76cbf7..64094f0 100644 --- a/src/main/java/com/iconplus/smartproc/service/approval/PostDrpApprovalExecutionService.java +++ b/src/main/java/com/iconplus/smartproc/service/approval/PostDrpApprovalExecutionService.java @@ -3,28 +3,40 @@ package com.iconplus.smartproc.service.approval; 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.entity.DrpApproval; +import com.iconplus.smartproc.model.entity.DrpApprovalHistory; import com.iconplus.smartproc.model.request.DrpApprovalRequest; +import com.iconplus.smartproc.repository.DrpApprovalHistoryRepository; import com.iconplus.smartproc.repository.DrpApprovalRepository; import com.iconplus.smartproc.repository.DrpRepository; import com.iconplus.smartproc.util.Constants; +import org.apache.commons.lang3.BooleanUtils; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import javax.transaction.Transactional; import java.sql.Date; import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; @Service public class PostDrpApprovalExecutionService implements BaseService { private final DrpApprovalRepository drpApprovalRepository; private final DrpRepository drpRepository; + private final DrpApprovalHistoryRepository drpApprovalHistoryRepository; public PostDrpApprovalExecutionService(DrpApprovalRepository drpApprovalRepository, - DrpRepository drpRepository) { + DrpRepository drpRepository, + DrpApprovalHistoryRepository drpApprovalHistoryRepository) { this.drpApprovalRepository = drpApprovalRepository; this.drpRepository = drpRepository; + this.drpApprovalHistoryRepository = drpApprovalHistoryRepository; } + @Transactional @Override public EmptyResponse execute(DrpApprovalRequest input) { @@ -40,27 +52,82 @@ public class PostDrpApprovalExecutionService implements BaseService drpApprovalHistoryList = new ArrayList<>(); + var listDrpApproval = drpApprovalRepository.findByDrpIdAndIsDeleteFalse(input.getDrpId()); + + DrpApprovalHistory drpApprovalHistoryExecutor = DrpApprovalHistory.builder() + .drpApprovalId(drpApproval.getId()) + .date(dateNow) + .status(BooleanUtils.isTrue(input.getIsApprove()) ? "Disetujui" : "Ditolak") + .isDelete(false) + .build(); + drpApprovalHistoryList.add(drpApprovalHistoryExecutor); + if (StringUtils.equalsIgnoreCase(drpApproval.getLevel(), "VP")) { drpApproval.setIsApprove(input.getIsApprove()); drp.setVpApproveDate(dateNow); drp.setApproveStatus(Constants.STATUS_APPROVAL_VP); + drpApproval.setCatatan(input.getCatatan()); + + for (DrpApproval drpAppr : listDrpApproval) { + if (StringUtils.equalsIgnoreCase(drpAppr.getLevel(), "KOMITE")) { + DrpApprovalHistory drpApprovalHistory = DrpApprovalHistory.builder() + .drpApprovalId(drpApproval.getId()) + .date(dateNow) + .status("Terkirim") + .isDelete(false) + .build(); + drpApprovalHistoryList.add(drpApprovalHistory); + } + } + } else if (StringUtils.equalsIgnoreCase(drpApproval.getLevel(), "DIREKTUR")) { + + if (ObjectUtils.isEmpty(drp.getKomiteApproveDate())) { + throw new BusinessException(Constants.ERR_CODE_10013, + Constants.ERR_TTL_10013, + String.format(Constants.ERR_MSG_10013, "KOMITE")); + } + drpApproval.setIsApprove(input.getIsApprove()); drp.setDirekturApproveDate(dateNow); drp.setApproveStatus(Constants.STATUS_APPROVAL_DIRUT); + drpApproval.setCatatan(input.getCatatan()); } else { + + if (ObjectUtils.isEmpty(drp.getVpApproveDate())) { + throw new BusinessException(Constants.ERR_CODE_10013, + Constants.ERR_TTL_10013, + String.format(Constants.ERR_MSG_10013, "VP")); + } + var listKomiteApproval = drpApprovalRepository.getListKomiteApproval(input.getDrpId()); if (listKomiteApproval.size() == 1) { drp.setApproveStatus(Constants.STATUS_REKOMENDASI_KOMITE); } drpApproval.setIsApprove(input.getIsApprove()); + drpApproval.setCatatan(input.getCatatan()); drp.setKomiteApproveDate(dateNow); + + for (DrpApproval drpAppr : listDrpApproval) { + if (StringUtils.equalsIgnoreCase(drpAppr.getLevel(), "DIREKTUR")) { + DrpApprovalHistory drpApprovalHistory = DrpApprovalHistory.builder() + .drpApprovalId(drpApproval.getId()) + .date(dateNow) + .status("Terkirim") + .isDelete(false) + .build(); + drpApprovalHistoryList.add(drpApprovalHistory); + } + } + } drpApprovalRepository.save(drpApproval); drpRepository.save(drp); + drpApprovalHistoryRepository.saveAll(drpApprovalHistoryList); return new EmptyResponse(); } diff --git a/src/main/java/com/iconplus/smartproc/service/print/GetListPrintDrpService.java b/src/main/java/com/iconplus/smartproc/service/print/GetListPrintDrpService.java index 985f117..e9e39fe 100644 --- a/src/main/java/com/iconplus/smartproc/service/print/GetListPrintDrpService.java +++ b/src/main/java/com/iconplus/smartproc/service/print/GetListPrintDrpService.java @@ -1,12 +1,15 @@ package com.iconplus.smartproc.service.print; +import com.iconplus.smartproc.exception.BusinessException; 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.PrintDrpRequest; import com.iconplus.smartproc.model.response.GetListPrintDrpResponse; import com.iconplus.smartproc.model.response.PrintDrpResponse; +import com.iconplus.smartproc.repository.DrpApprovalRepository; import com.iconplus.smartproc.repository.DrpRepository; +import com.iconplus.smartproc.util.Constants; import org.apache.commons.lang3.BooleanUtils; import org.springframework.stereotype.Service; @@ -17,9 +20,11 @@ import java.util.List; public class GetListPrintDrpService implements BaseService { private DrpRepository drpRepository; - - public GetListPrintDrpService(DrpRepository drpRepository) { + private DrpApprovalRepository drpApprovalRepository; + public GetListPrintDrpService(DrpRepository drpRepository, + DrpApprovalRepository drpApprovalRepository) { this.drpRepository = drpRepository; + this.drpApprovalRepository = drpApprovalRepository; } @@ -35,8 +40,16 @@ public class GetListPrintDrpService implements BaseService new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "DRP Approvel", drpView.getId()))); + if (BooleanUtils.isTrue(drpView.getIsPrint())) { printDrpResponse.setStatus("Tercetak"); + } else if (drpApprovalOptional.getIsApprove() == null) { + printDrpResponse.setStatus("Belum Dicetak"); } else { printDrpResponse.setStatus("Belum Bisa Dicetak"); } diff --git a/src/main/java/com/iconplus/smartproc/util/Constants.java b/src/main/java/com/iconplus/smartproc/util/Constants.java index 971e7c2..8526165 100644 --- a/src/main/java/com/iconplus/smartproc/util/Constants.java +++ b/src/main/java/com/iconplus/smartproc/util/Constants.java @@ -52,6 +52,10 @@ public class Constants { public static final String ERR_TTL_10012 = "Proses Gagal"; public static final String ERR_MSG_10012 = "Pastikan directori penimpanan file tersedia : %s"; + public static final String ERR_CODE_10013 = "10013"; + public static final String ERR_TTL_10013 = "Gagal Approve"; + public static final String ERR_MSG_10013 = "Silahkan menunggu appoval %s terlebih dahulu"; + public static final String ERR_CODE_40041 = "40041"; public static final String ERR_TTL_40041 = "Terjadi Gangguan"; public static final String ERR_MSG_40041 = "Masalah Koneksi System"; From abc89d32d0a45d30c219b7fa438abe9c8332862c Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Sun, 4 Jun 2023 00:06:01 +0700 Subject: [PATCH 57/63] fix --- pom.xml | 11 +++++ .../smartproc/controller/PrintController.java | 13 ++++- .../smartproc/helper/service/BaseService.java | 2 +- .../model/projection/DrpApprovalView.java | 3 ++ .../model/request/PrintDrpRequest.java | 1 + .../repository/DrpApprovalRepository.java | 15 +++--- .../smartproc/service/CommonService.java | 13 +++++ .../PostDrpApprovalExecutionService.java | 49 ++++++++++++------- .../print/DrpPrintExecutionService.java | 44 +++++++++++++++++ .../resources/template/drp-approval.jrxml | 0 10 files changed, 125 insertions(+), 26 deletions(-) create mode 100644 src/main/java/com/iconplus/smartproc/service/print/DrpPrintExecutionService.java create mode 100644 src/main/resources/template/drp-approval.jrxml diff --git a/pom.xml b/pom.xml index 0536c6e..ce75179 100644 --- a/pom.xml +++ b/pom.xml @@ -59,6 +59,17 @@ 5.3.9.RELEASE + + com.google.zxing + core + 3.3.0 + + + com.google.zxing + javase + 3.3.0 + + io.jsonwebtoken jjwt diff --git a/src/main/java/com/iconplus/smartproc/controller/PrintController.java b/src/main/java/com/iconplus/smartproc/controller/PrintController.java index a02741a..b99d658 100644 --- a/src/main/java/com/iconplus/smartproc/controller/PrintController.java +++ b/src/main/java/com/iconplus/smartproc/controller/PrintController.java @@ -1,8 +1,11 @@ package com.iconplus.smartproc.controller; +import com.iconplus.smartproc.helper.model.EmptyResponse; import com.iconplus.smartproc.model.request.PrintDrpRequest; import com.iconplus.smartproc.model.request.RolesRequest; import com.iconplus.smartproc.model.response.GetListPrintDrpResponse; +import com.iconplus.smartproc.model.response.PrintDrpResponse; +import com.iconplus.smartproc.service.print.DrpPrintExecutionService; import com.iconplus.smartproc.service.print.GetListPrintDrpService; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; @@ -14,9 +17,12 @@ import org.springframework.web.bind.annotation.*; public class PrintController { private final GetListPrintDrpService getListPrintDrpService; + private final DrpPrintExecutionService drpPrintExecutionService; - public PrintController(GetListPrintDrpService getListPrintDrpService) { + public PrintController(GetListPrintDrpService getListPrintDrpService, + DrpPrintExecutionService drpPrintExecutionService) { this.getListPrintDrpService = getListPrintDrpService; + this.drpPrintExecutionService = drpPrintExecutionService; } @@ -33,5 +39,10 @@ public class PrintController { } + @PostMapping("execution") + public EmptyResponse drpPrintExecution(@RequestBody PrintDrpRequest printDrpRequest) throws Exception { + return drpPrintExecutionService.execute(printDrpRequest); + } + } diff --git a/src/main/java/com/iconplus/smartproc/helper/service/BaseService.java b/src/main/java/com/iconplus/smartproc/helper/service/BaseService.java index 58f5b62..3dc774b 100644 --- a/src/main/java/com/iconplus/smartproc/helper/service/BaseService.java +++ b/src/main/java/com/iconplus/smartproc/helper/service/BaseService.java @@ -8,5 +8,5 @@ import java.io.FileNotFoundException; import java.io.IOException; public interface BaseService { - V execute(T input) throws IOException; + V execute(T input) throws Exception; } diff --git a/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalView.java b/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalView.java index caf7f22..53a9c23 100644 --- a/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalView.java +++ b/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalView.java @@ -47,4 +47,7 @@ public interface DrpApprovalView { String getLevel(); void setLevel(String level); + Long getApproverUserId(); + void setApproverUserId(Long approverUserId); + } diff --git a/src/main/java/com/iconplus/smartproc/model/request/PrintDrpRequest.java b/src/main/java/com/iconplus/smartproc/model/request/PrintDrpRequest.java index ff07db5..da471e8 100644 --- a/src/main/java/com/iconplus/smartproc/model/request/PrintDrpRequest.java +++ b/src/main/java/com/iconplus/smartproc/model/request/PrintDrpRequest.java @@ -13,5 +13,6 @@ import org.springframework.data.domain.Pageable; @NoArgsConstructor public class PrintDrpRequest extends BaseRequest { + private Long drpId; private transient Pageable pageable; } diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpApprovalRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpApprovalRepository.java index 0fbb868..7e28e22 100644 --- a/src/main/java/com/iconplus/smartproc/repository/DrpApprovalRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/DrpApprovalRepository.java @@ -27,23 +27,26 @@ public interface DrpApprovalRepository extends JpaRepository List findByDrpIdAndIsDeleteFalse(Long drpId); @Query(value = "SELECT da.drpId as drpId, " + - "da.isApprove as isApprove, " + - "da.catatan as catatan, " + "da.approverUserId as approverUserId, " + "u.nama as nama, " + - "j.jabatan as jabatan, " + - "da.level as level " + + "j.jabatan as jabatan " + "FROM DrpApproval da " + "JOIN Users u ON u.id = da.approverUserId " + "JOIN Jabatan j ON j.id = u.jabatanId " + "WHERE da.isDelete = false " + - "AND da.isApprove is not null " + "AND da.drpId = :drpId " + - "ORDER BY da.lastUpdate") + "AND da.isApprove = true " + + "ORDER BY da.level desc") List getDrpApproval(Long drpId); Optional findByDrpIdAndLevelAndIsDeleteFalse(Long drpId, String level); + @Query(value = "UPDATE drp_approval " + + "SET is_delete = 1 " + + "WHERE drp_id = :drpId " + + "AND is_delete = 0", nativeQuery = true) + void deleteApprovalByDrpId(Long drpId); + } diff --git a/src/main/java/com/iconplus/smartproc/service/CommonService.java b/src/main/java/com/iconplus/smartproc/service/CommonService.java index bf2d274..9e2b363 100644 --- a/src/main/java/com/iconplus/smartproc/service/CommonService.java +++ b/src/main/java/com/iconplus/smartproc/service/CommonService.java @@ -1,5 +1,9 @@ package com.iconplus.smartproc.service; +import com.google.zxing.BarcodeFormat; +import com.google.zxing.client.j2se.MatrixToImageWriter; +import com.google.zxing.common.BitMatrix; +import com.google.zxing.qrcode.QRCodeWriter; import com.iconplus.smartproc.exception.BusinessException; import com.iconplus.smartproc.model.entity.TokenManagement; import com.iconplus.smartproc.model.request.UsersRequest; @@ -11,6 +15,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; +import java.awt.image.BufferedImage; import java.sql.Timestamp; import java.time.Instant; @@ -105,4 +110,12 @@ public class CommonService { } } + + public BufferedImage generateQRCodeImage(String barcodeText) throws Exception { + QRCodeWriter barcodeWriter = new QRCodeWriter(); + BitMatrix bitMatrix = + barcodeWriter.encode(barcodeText, BarcodeFormat.QR_CODE, 200, 200); + + return MatrixToImageWriter.toBufferedImage(bitMatrix); + } } diff --git a/src/main/java/com/iconplus/smartproc/service/approval/PostDrpApprovalExecutionService.java b/src/main/java/com/iconplus/smartproc/service/approval/PostDrpApprovalExecutionService.java index 64094f0..6a25e05 100644 --- a/src/main/java/com/iconplus/smartproc/service/approval/PostDrpApprovalExecutionService.java +++ b/src/main/java/com/iconplus/smartproc/service/approval/PostDrpApprovalExecutionService.java @@ -52,6 +52,9 @@ public class PostDrpApprovalExecutionService implements BaseService drpApprovalHistoryList = new ArrayList<>(); var listDrpApproval = drpApprovalRepository.findByDrpIdAndIsDeleteFalse(input.getDrpId()); @@ -64,23 +67,28 @@ public class PostDrpApprovalExecutionService implements BaseService { + + private final CommonService commonService; + private final DrpApprovalRepository drpApprovalRepository; + public DrpPrintExecutionService(CommonService commonService, + DrpApprovalRepository drpApprovalRepository) { + this.commonService = commonService; + this.drpApprovalRepository = drpApprovalRepository; + } + + @Override + public EmptyResponse execute(PrintDrpRequest input) throws Exception { + + var drpApprovalViews = drpApprovalRepository.getDrpApproval(input.getDrpId()); + + int size = drpApprovalViews.size(); + + List bufferedImageList = new ArrayList<>(); + + for (DrpApprovalView drpApprovalView : drpApprovalViews) { + String barcodeText = drpApprovalView.getApproverUserId().toString() + " - " + drpApprovalView.getNama() + " - " + drpApprovalView.getJabatan(); + var bufferedImage = commonService.generateQRCodeImage(barcodeText); + bufferedImageList.add(bufferedImage); + } + + return new EmptyResponse(); + } +} diff --git a/src/main/resources/template/drp-approval.jrxml b/src/main/resources/template/drp-approval.jrxml new file mode 100644 index 0000000..e69de29 From 180575ce4f4c76d417dcfc36e704657481c3ddae Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Mon, 5 Jun 2023 09:36:43 +0700 Subject: [PATCH 58/63] add path --- .../smartproc/controller/RksController.java | 74 +++++++++++++++++++ .../smartproc/model/entity/RksDaftarIsi.java | 45 +++++++++++ .../smartproc/model/entity/RksIsi.java | 58 +++++++++++++++ .../smartproc/model/entity/RksTemplate.java | 47 ++++++++++++ .../model/projection/RksDaftarIsiView.java | 29 ++++++++ .../model/request/RksDaftarIsiRequest.java | 24 ++++++ .../model/request/RksIsiRequest.java | 36 +++++++++ .../model/request/RksTemplateRequest.java | 26 +++++++ .../response/ListRksDaftarIsiResponse.java | 20 +++++ .../model/response/ListRksIsiResponse.java | 20 +++++ .../response/ListRksTemplateResponse.java | 21 ++++++ .../model/response/ParentMenusResponse.java | 1 + .../model/response/RksDaftarIsiResponse.java | 22 ++++++ .../model/response/RksIsiResponse.java | 25 +++++++ .../model/response/RksTemplateResponse.java | 24 ++++++ .../repository/RksDaftarIsiRepository.java | 29 ++++++++ .../repository/RksIsiRepository.java | 13 ++++ .../repository/RksTemplateRepository.java | 14 ++++ .../service/authentication/LoginService.java | 1 + .../rks/GetListRksDaftarIsiService.java | 52 +++++++++++++ .../service/rks/GetListRksIsiService.java | 56 ++++++++++++++ .../rks/GetListRksTemplateService.java | 21 ++++++ .../rks/PostCreateRksDaftarIsiService.java | 44 +++++++++++ .../rks/PostCreateRksTemplateService.java | 45 +++++++++++ 24 files changed, 747 insertions(+) create mode 100644 src/main/java/com/iconplus/smartproc/controller/RksController.java create mode 100644 src/main/java/com/iconplus/smartproc/model/entity/RksDaftarIsi.java create mode 100644 src/main/java/com/iconplus/smartproc/model/entity/RksIsi.java create mode 100644 src/main/java/com/iconplus/smartproc/model/entity/RksTemplate.java create mode 100644 src/main/java/com/iconplus/smartproc/model/projection/RksDaftarIsiView.java create mode 100644 src/main/java/com/iconplus/smartproc/model/request/RksDaftarIsiRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/model/request/RksIsiRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/model/request/RksTemplateRequest.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/ListRksDaftarIsiResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/ListRksIsiResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/ListRksTemplateResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/RksDaftarIsiResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/RksIsiResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/model/response/RksTemplateResponse.java create mode 100644 src/main/java/com/iconplus/smartproc/repository/RksDaftarIsiRepository.java create mode 100644 src/main/java/com/iconplus/smartproc/repository/RksIsiRepository.java create mode 100644 src/main/java/com/iconplus/smartproc/repository/RksTemplateRepository.java create mode 100644 src/main/java/com/iconplus/smartproc/service/rks/GetListRksDaftarIsiService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/rks/GetListRksIsiService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/rks/GetListRksTemplateService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/rks/PostCreateRksDaftarIsiService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/rks/PostCreateRksTemplateService.java diff --git a/src/main/java/com/iconplus/smartproc/controller/RksController.java b/src/main/java/com/iconplus/smartproc/controller/RksController.java new file mode 100644 index 0000000..1dff2cf --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/controller/RksController.java @@ -0,0 +1,74 @@ +package com.iconplus.smartproc.controller; + +import com.iconplus.smartproc.model.request.RksDaftarIsiRequest; +import com.iconplus.smartproc.model.request.RksIsiRequest; +import com.iconplus.smartproc.model.request.RksTemplateRequest; +import com.iconplus.smartproc.model.response.ListRksDaftarIsiResponse; +import com.iconplus.smartproc.model.response.ListRksIsiResponse; +import com.iconplus.smartproc.model.response.RksDaftarIsiResponse; +import com.iconplus.smartproc.model.response.RksTemplateResponse; +import com.iconplus.smartproc.service.rks.GetListRksDaftarIsiService; +import com.iconplus.smartproc.service.rks.GetListRksIsiService; +import com.iconplus.smartproc.service.rks.PostCreateRksDaftarIsiService; +import com.iconplus.smartproc.service.rks.PostCreateRksTemplateService; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.web.bind.annotation.*; + +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") +@RestController +@RequestMapping("/api/rks") +public class RksController { + + private final GetListRksDaftarIsiService getListRksDaftarIsiService; + private final PostCreateRksDaftarIsiService postCreateRksDaftarIsiService; + private final GetListRksIsiService getListRksIsiService; + private final PostCreateRksTemplateService postCreateRksTemplateService; + public RksController(GetListRksDaftarIsiService getListRksDaftarIsiService, + PostCreateRksDaftarIsiService postCreateRksDaftarIsiService, + GetListRksIsiService getListRksIsiService, + PostCreateRksTemplateService postCreateRksTemplateService) { + this.getListRksDaftarIsiService = getListRksDaftarIsiService; + this.postCreateRksDaftarIsiService = postCreateRksDaftarIsiService; + this.getListRksIsiService = getListRksIsiService; + this.postCreateRksTemplateService = postCreateRksTemplateService; + } + + + @GetMapping("/daftar-isi") + public ListRksDaftarIsiResponse getAllRksDaftarIsi(@RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size){ + + Pageable pageable = PageRequest.of((page - 1), size); + RksDaftarIsiRequest rksDaftarIsiRequest = RksDaftarIsiRequest.builder() + .pageable(pageable) + .build(); + + return getListRksDaftarIsiService.execute(rksDaftarIsiRequest); + + } + + @PostMapping("/daftar-isi") + public RksDaftarIsiResponse createRksDaftarIsi(@RequestBody RksDaftarIsiRequest rksDaftarIsiRequest) { + return postCreateRksDaftarIsiService.execute(rksDaftarIsiRequest); + } + + @GetMapping("/daftar-isi/{id}/isi") + public ListRksIsiResponse getListRksIsi(@PathVariable(name = "id") Long id, + @RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size) { + + Pageable pageable = PageRequest.of((page - 1), size); + RksIsiRequest rksIsiRequest = RksIsiRequest.builder() + .rksDaftarIsiId(id) + .pageable(pageable) + .build(); + return getListRksIsiService.execute(rksIsiRequest); + } + + @PostMapping("/template") + public RksTemplateResponse createRksTemplate(@RequestBody RksTemplateRequest rksTemplateRequest) { + return postCreateRksTemplateService.execute(rksTemplateRequest); + } + +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/RksDaftarIsi.java b/src/main/java/com/iconplus/smartproc/model/entity/RksDaftarIsi.java new file mode 100644 index 0000000..8741fe1 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/RksDaftarIsi.java @@ -0,0 +1,45 @@ +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 = "rks_daftar_isi") +public class RksDaftarIsi extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "kode_template") + private String kodeTemplate; + + @Column(name = "nama_template") + private String namaTemplate; + + @Column(name = "metode_pengadaan_id") + private Long metodePengadaanId; + + @Column(name = "versi") + private String versi; + + @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/entity/RksIsi.java b/src/main/java/com/iconplus/smartproc/model/entity/RksIsi.java new file mode 100644 index 0000000..0b64b47 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/RksIsi.java @@ -0,0 +1,58 @@ +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 = "rks_isi") +public class RksIsi extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "rks_daftar_isi_id") + private Long rksDaftarIsiId; + + @Column(name = "nomor") + private String nomor; + + @Column(name = "parent_id") + private Integer parentId; + + @Column(name = "nama") + private String nama; + + @Column(name = "bab") + private String bab; + + @Column(name = "sub_bab") + private String subBab; + + @Column(name = "urutan") + private String urutan; + + @Column(name = "is_kontrak") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isKontrak; + + @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/entity/RksTemplate.java b/src/main/java/com/iconplus/smartproc/model/entity/RksTemplate.java new file mode 100644 index 0000000..ffd9031 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/RksTemplate.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 = "rks_template") +public class RksTemplate extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "kode_template") + private String kodeTemplate; + + @Column(name = "nama_template") + private String namaTemplate; + + @Column(name = "metode_pengadaan_id") + private Long metodePengadaanId; + + @Column(name = "versi") + private String versi; + + @Column(name = "rks_daftar_isi_id") + private Long rksDaftarIsiId; + + @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/RksDaftarIsiView.java b/src/main/java/com/iconplus/smartproc/model/projection/RksDaftarIsiView.java new file mode 100644 index 0000000..cdfe389 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/RksDaftarIsiView.java @@ -0,0 +1,29 @@ +package com.iconplus.smartproc.model.projection; + +public interface RksDaftarIsiView { + + Long getId(); + void setId(Long id); + + String getKodeTemplate(); + void setKodeTemplate(String kodeTemplate); + + String getNamaTemplate(); + void setNamaTemplate(String namaTemplate); + + Long getMetodePengadaanId(); + void setMetodePengadaanId(Long metodePengadaanId); + + String getMetodePengadaan(); + void setMetodePengadaan(String metodePengadaan); + + String getVersi(); + void setVersi(String versi); + + Boolean getIsActive(); + void setIsActive(Boolean isActive); + + Boolean getIsDelete(); + void setIsDelete(Boolean isDelete); + +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/RksDaftarIsiRequest.java b/src/main/java/com/iconplus/smartproc/model/request/RksDaftarIsiRequest.java new file mode 100644 index 0000000..c8b4d4a --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/RksDaftarIsiRequest.java @@ -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 RksDaftarIsiRequest extends BaseRequest { + + private Long id; + private String kodeTemplate; + private String namaTemplate; + private Long metodePengadaanId; + private String versi; + + private transient Pageable pageable; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/RksIsiRequest.java b/src/main/java/com/iconplus/smartproc/model/request/RksIsiRequest.java new file mode 100644 index 0000000..ae8cf4d --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/RksIsiRequest.java @@ -0,0 +1,36 @@ +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.hibernate.annotations.Type; +import org.springframework.data.domain.Pageable; + +import javax.persistence.Column; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class RksIsiRequest extends BaseRequest { + + private Long id; + private Long rksDaftarIsiId; + private String nomor; + private Integer parentId; + private String nama; + private String bab; + private String subBab; + private String urutan; + private Boolean isKontrak; + private Boolean isActive; + private Boolean isDelete; + + private transient Pageable pageable; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/RksTemplateRequest.java b/src/main/java/com/iconplus/smartproc/model/request/RksTemplateRequest.java new file mode 100644 index 0000000..0fdfcab --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/RksTemplateRequest.java @@ -0,0 +1,26 @@ +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 RksTemplateRequest extends BaseRequest { + + private Long id; + private String kodeTemplate; + private String namaTemplate; + private Long metodePengadaanId; + private String versi; + private Long rksDaftarIsiId; + private Boolean isActive; + private Boolean isDelete; + + private transient Pageable pageable; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/ListRksDaftarIsiResponse.java b/src/main/java/com/iconplus/smartproc/model/response/ListRksDaftarIsiResponse.java new file mode 100644 index 0000000..d41d1a0 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/ListRksDaftarIsiResponse.java @@ -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 ListRksDaftarIsiResponse extends BaseResponse { + + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/ListRksIsiResponse.java b/src/main/java/com/iconplus/smartproc/model/response/ListRksIsiResponse.java new file mode 100644 index 0000000..fbd17d3 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/ListRksIsiResponse.java @@ -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 ListRksIsiResponse extends BaseResponse { + + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/ListRksTemplateResponse.java b/src/main/java/com/iconplus/smartproc/model/response/ListRksTemplateResponse.java new file mode 100644 index 0000000..61e957c --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/ListRksTemplateResponse.java @@ -0,0 +1,21 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.model.entity.RksTemplate; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ListRksTemplateResponse extends BaseResponse { + + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/ParentMenusResponse.java b/src/main/java/com/iconplus/smartproc/model/response/ParentMenusResponse.java index b2c78cf..3245894 100644 --- a/src/main/java/com/iconplus/smartproc/model/response/ParentMenusResponse.java +++ b/src/main/java/com/iconplus/smartproc/model/response/ParentMenusResponse.java @@ -17,5 +17,6 @@ public class ParentMenusResponse extends BaseResponse { private Long id; private String text; private String icon; + private String path; private List items; } diff --git a/src/main/java/com/iconplus/smartproc/model/response/RksDaftarIsiResponse.java b/src/main/java/com/iconplus/smartproc/model/response/RksDaftarIsiResponse.java new file mode 100644 index 0000000..755a1c3 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/RksDaftarIsiResponse.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; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class RksDaftarIsiResponse extends BaseResponse { + + private Long id; + private String kodeTemplate; + private String namaTemplate; + private Long metodePengadaanId; + private String metodePengadaan; + private String versi; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/RksIsiResponse.java b/src/main/java/com/iconplus/smartproc/model/response/RksIsiResponse.java new file mode 100644 index 0000000..db72bd6 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/RksIsiResponse.java @@ -0,0 +1,25 @@ +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 RksIsiResponse extends BaseResponse { + private Long id; + private Long rksDaftarIsiId; + private String nomor; + private Integer parentId; + private String nama; + private String bab; + private String subBab; + private String urutan; + private Boolean isKontrak; + private Boolean isActive; + private Boolean isDelete; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/RksTemplateResponse.java b/src/main/java/com/iconplus/smartproc/model/response/RksTemplateResponse.java new file mode 100644 index 0000000..e9a669b --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/RksTemplateResponse.java @@ -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 RksTemplateResponse extends BaseResponse { + + private Long id; + private String kodeTemplate; + private String namaTemplate; + private Long metodePengadaanId; + private String versi; + private Long rksDaftarIsiId; + private Boolean isActive; + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/repository/RksDaftarIsiRepository.java b/src/main/java/com/iconplus/smartproc/repository/RksDaftarIsiRepository.java new file mode 100644 index 0000000..80cb02f --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/RksDaftarIsiRepository.java @@ -0,0 +1,29 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.RksDaftarIsi; +import com.iconplus.smartproc.model.projection.RksDaftarIsiView; +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 RksDaftarIsiRepository extends JpaRepository { + + @Query(value = "SELECT rki.id as id, " + + "rki.kodeTemplate as kodeTemplate, " + + "rki.namaTemplate as namaTemplate, " + + "rki.metodePengadaanId as metodePengadaanId, " + + "mp.metodePengadaan as metodePengadaan " + + "FROM RksDaftarIsi rki " + + "JOIN MetodePengadaan mp ON mp.id = rki.metodePengadaanId " + + "WHERE rki.isDelete = false " + + "ORDER BY rki.kodeTemplate") + Page getListRksDaftarIsi(Pageable pageable); + + Optional findByKodeTemplateAndIsDeleteFalse(String kodeTemplate); + +} diff --git a/src/main/java/com/iconplus/smartproc/repository/RksIsiRepository.java b/src/main/java/com/iconplus/smartproc/repository/RksIsiRepository.java new file mode 100644 index 0000000..e110686 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/RksIsiRepository.java @@ -0,0 +1,13 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.RksIsi; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface RksIsiRepository extends JpaRepository { + + Page findByRksDaftarIsiIdAndIsDeleteFalse(Long rksDaftarIsiId, Pageable pageable); +} diff --git a/src/main/java/com/iconplus/smartproc/repository/RksTemplateRepository.java b/src/main/java/com/iconplus/smartproc/repository/RksTemplateRepository.java new file mode 100644 index 0000000..a87a56d --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/RksTemplateRepository.java @@ -0,0 +1,14 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.RksTemplate; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface RksTemplateRepository extends JpaRepository { + + Optional findByKodeTemplateAndIsDeleteFalse(String kodeTemplate); + +} diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java b/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java index 5c5cec3..06e0d64 100644 --- a/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java +++ b/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java @@ -87,6 +87,7 @@ public class LoginService implements BaseService { .id(menus.getId()) .text(menus.getNama()) .icon(menus.getIcon()) + .path(menus.getLink()) .items(new ArrayList<>()) .build(); parentMenusResponseList.add(parentMenusResponse); diff --git a/src/main/java/com/iconplus/smartproc/service/rks/GetListRksDaftarIsiService.java b/src/main/java/com/iconplus/smartproc/service/rks/GetListRksDaftarIsiService.java new file mode 100644 index 0000000..18b2361 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/rks/GetListRksDaftarIsiService.java @@ -0,0 +1,52 @@ +package com.iconplus.smartproc.service.rks; + +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.RksDaftarIsiView; +import com.iconplus.smartproc.model.request.RksDaftarIsiRequest; +import com.iconplus.smartproc.model.response.ListRksDaftarIsiResponse; +import com.iconplus.smartproc.model.response.RksDaftarIsiResponse; +import com.iconplus.smartproc.repository.RksDaftarIsiRepository; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListRksDaftarIsiService implements BaseService { + + private final RksDaftarIsiRepository rksDaftarIsiRepository; + public GetListRksDaftarIsiService(RksDaftarIsiRepository rksDaftarIsiRepository) { + this.rksDaftarIsiRepository = rksDaftarIsiRepository; + } + + @Override + public ListRksDaftarIsiResponse execute(RksDaftarIsiRequest input) { + + List rksDaftarIsiResponseList = new ArrayList<>(); + var rksDaftarIsiViews= rksDaftarIsiRepository.getListRksDaftarIsi(input.getPageable()); + for (RksDaftarIsiView rksDaftarIsiView : rksDaftarIsiViews) { + RksDaftarIsiResponse rksDaftarIsiResponse = RksDaftarIsiResponse.builder() + .id(rksDaftarIsiView.getId()) + .kodeTemplate(rksDaftarIsiView.getKodeTemplate()) + .namaTemplate(rksDaftarIsiView.getNamaTemplate()) + .metodePengadaanId(rksDaftarIsiView.getMetodePengadaanId()) + .metodePengadaan(rksDaftarIsiView.getMetodePengadaan()) + .versi(rksDaftarIsiView.getVersi()) + .build(); + rksDaftarIsiResponseList.add(rksDaftarIsiResponse); + } + + return ListRksDaftarIsiResponse.builder() + .data(rksDaftarIsiResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(rksDaftarIsiViews.getTotalPages()) + .totalRecords(rksDaftarIsiViews.getTotalElements()) + .isFirstPage(rksDaftarIsiViews.isFirst()) + .isLastPage(rksDaftarIsiViews.isLast()) + .build()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/rks/GetListRksIsiService.java b/src/main/java/com/iconplus/smartproc/service/rks/GetListRksIsiService.java new file mode 100644 index 0000000..38c58d2 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/rks/GetListRksIsiService.java @@ -0,0 +1,56 @@ +package com.iconplus.smartproc.service.rks; + +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.RksIsi; +import com.iconplus.smartproc.model.request.RksIsiRequest; +import com.iconplus.smartproc.model.response.ListRksIsiResponse; +import com.iconplus.smartproc.model.response.RksIsiResponse; +import com.iconplus.smartproc.repository.RksIsiRepository; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListRksIsiService implements BaseService { + + private final RksIsiRepository rksIsiRepository; + + public GetListRksIsiService(RksIsiRepository rksIsiRepository) { + this.rksIsiRepository = rksIsiRepository; + } + + @Override + public ListRksIsiResponse execute(RksIsiRequest input) { + + List rksIsiResponseList = new ArrayList<>(); + var rksIsis = rksIsiRepository.findByRksDaftarIsiIdAndIsDeleteFalse(input.getRksDaftarIsiId(), input.getPageable()); + for (RksIsi rksIsi : rksIsis) { + RksIsiResponse rksIsiResponse = RksIsiResponse.builder() + .id(rksIsi.getId()) + .rksDaftarIsiId(rksIsi.getRksDaftarIsiId()) + .nomor(rksIsi.getNomor()) + .parentId(rksIsi.getParentId()) + .nama(rksIsi.getNama()) + .bab(rksIsi.getBab()) + .subBab(rksIsi.getSubBab()) + .urutan(rksIsi.getUrutan()) + .isKontrak(rksIsi.getIsKontrak()) + .build(); + rksIsiResponseList.add(rksIsiResponse); + } + + return ListRksIsiResponse.builder() + .data(rksIsiResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(rksIsis.getTotalPages()) + .totalRecords(rksIsis.getTotalElements()) + .isFirstPage(rksIsis.isFirst()) + .isLastPage(rksIsis.isLast()) + .build()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/rks/GetListRksTemplateService.java b/src/main/java/com/iconplus/smartproc/service/rks/GetListRksTemplateService.java new file mode 100644 index 0000000..ca8c679 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/rks/GetListRksTemplateService.java @@ -0,0 +1,21 @@ +package com.iconplus.smartproc.service.rks; + +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.RksTemplateRequest; +import com.iconplus.smartproc.model.response.ListRksTemplateResponse; +import com.iconplus.smartproc.repository.RksTemplateRepository; +import org.springframework.stereotype.Service; + +@Service +public class GetListRksTemplateService implements BaseService { + + private final RksTemplateRepository rksTemplateRepository; + public GetListRksTemplateService(RksTemplateRepository rksTemplateRepository) { + this.rksTemplateRepository = rksTemplateRepository; + } + + @Override + public ListRksTemplateResponse execute(RksTemplateRequest input) throws Exception { + return null; + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/rks/PostCreateRksDaftarIsiService.java b/src/main/java/com/iconplus/smartproc/service/rks/PostCreateRksDaftarIsiService.java new file mode 100644 index 0000000..9a9a704 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/rks/PostCreateRksDaftarIsiService.java @@ -0,0 +1,44 @@ +package com.iconplus.smartproc.service.rks; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.RksDaftarIsi; +import com.iconplus.smartproc.model.request.RksDaftarIsiRequest; +import com.iconplus.smartproc.model.response.RksDaftarIsiResponse; +import com.iconplus.smartproc.repository.RksDaftarIsiRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + +@Service +public class PostCreateRksDaftarIsiService implements BaseService { + + private final RksDaftarIsiRepository rksDaftarIsiRepository; + public PostCreateRksDaftarIsiService(RksDaftarIsiRepository rksDaftarIsiRepository) { + this.rksDaftarIsiRepository = rksDaftarIsiRepository; + } + + @Override + public RksDaftarIsiResponse execute(RksDaftarIsiRequest input) { + + var rksDaftarIsiOptional = rksDaftarIsiRepository.findByKodeTemplateAndIsDeleteFalse(input.getKodeTemplate()); + if (rksDaftarIsiOptional.isPresent()) { + throw new BusinessException(Constants.ERR_CODE_10002, + Constants.ERR_TTL_10002, + String.format(Constants.ERR_MSG_10002, "RKS Kode Template", input.getKodeTemplate())); + } + + + RksDaftarIsi rksDaftarIsi = RksDaftarIsi.builder() + .kodeTemplate(input.getKodeTemplate()) + .namaTemplate(input.getNamaTemplate()) + .metodePengadaanId(input.getMetodePengadaanId()) + .versi(input.getVersi()) + .isDelete(false) + .build(); + + var result = rksDaftarIsiRepository.save(rksDaftarIsi); + return RksDaftarIsiResponse.builder() + .id(result.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/rks/PostCreateRksTemplateService.java b/src/main/java/com/iconplus/smartproc/service/rks/PostCreateRksTemplateService.java new file mode 100644 index 0000000..ca20a00 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/rks/PostCreateRksTemplateService.java @@ -0,0 +1,45 @@ +package com.iconplus.smartproc.service.rks; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.RksTemplate; +import com.iconplus.smartproc.model.request.RksTemplateRequest; +import com.iconplus.smartproc.model.response.RksTemplateResponse; +import com.iconplus.smartproc.repository.RksTemplateRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + +@Service +public class PostCreateRksTemplateService implements BaseService { + + private final RksTemplateRepository rksTemplateRepository; + public PostCreateRksTemplateService(RksTemplateRepository rksTemplateRepository) { + this.rksTemplateRepository = rksTemplateRepository; + } + + @Override + public RksTemplateResponse execute(RksTemplateRequest input) { + + var rksTemplateOptional= rksTemplateRepository.findByKodeTemplateAndIsDeleteFalse(input.getKodeTemplate()); + if (rksTemplateOptional.isPresent()) { + throw new BusinessException(Constants.ERR_CODE_10002, + Constants.ERR_TTL_10002, + String.format(Constants.ERR_MSG_10002, "RKS Kode Template", input.getKodeTemplate())); + } + + RksTemplate rksTemplate = RksTemplate.builder() + .kodeTemplate(input.getKodeTemplate()) + .namaTemplate(input.getNamaTemplate()) + .metodePengadaanId(input.getMetodePengadaanId()) + .rksDaftarIsiId(input.getRksDaftarIsiId()) + .versi(input.getVersi()) + .isDelete(false) + .build(); + + var result = rksTemplateRepository.save(rksTemplate); + + return RksTemplateResponse.builder() + .id(result.getId()) + .build(); + } +} From 3b7e7c5dc8cde296f54aa7c338da33b570b265db Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Mon, 5 Jun 2023 11:29:59 +0700 Subject: [PATCH 59/63] remove id men --- .../smartproc/controller/RksController.java | 28 ++++++++----- .../model/projection/RksTemplateView.java | 35 +++++++++++++++++ .../response/ListRksTemplateResponse.java | 3 +- .../model/response/ParentMenusResponse.java | 5 +++ .../model/response/RksTemplateResponse.java | 2 + .../smartproc/repository/MenusRepository.java | 6 +-- .../repository/RksTemplateRepository.java | 19 +++++++++ .../service/authentication/LoginService.java | 1 - .../rks/GetListRksTemplateService.java | 39 ++++++++++++++++++- .../rks/PostCreateRksTemplateService.java | 2 + 10 files changed, 123 insertions(+), 17 deletions(-) create mode 100644 src/main/java/com/iconplus/smartproc/model/projection/RksTemplateView.java diff --git a/src/main/java/com/iconplus/smartproc/controller/RksController.java b/src/main/java/com/iconplus/smartproc/controller/RksController.java index 1dff2cf..b6bc7a9 100644 --- a/src/main/java/com/iconplus/smartproc/controller/RksController.java +++ b/src/main/java/com/iconplus/smartproc/controller/RksController.java @@ -3,14 +3,8 @@ package com.iconplus.smartproc.controller; import com.iconplus.smartproc.model.request.RksDaftarIsiRequest; import com.iconplus.smartproc.model.request.RksIsiRequest; import com.iconplus.smartproc.model.request.RksTemplateRequest; -import com.iconplus.smartproc.model.response.ListRksDaftarIsiResponse; -import com.iconplus.smartproc.model.response.ListRksIsiResponse; -import com.iconplus.smartproc.model.response.RksDaftarIsiResponse; -import com.iconplus.smartproc.model.response.RksTemplateResponse; -import com.iconplus.smartproc.service.rks.GetListRksDaftarIsiService; -import com.iconplus.smartproc.service.rks.GetListRksIsiService; -import com.iconplus.smartproc.service.rks.PostCreateRksDaftarIsiService; -import com.iconplus.smartproc.service.rks.PostCreateRksTemplateService; +import com.iconplus.smartproc.model.response.*; +import com.iconplus.smartproc.service.rks.*; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.web.bind.annotation.*; @@ -24,14 +18,17 @@ public class RksController { private final PostCreateRksDaftarIsiService postCreateRksDaftarIsiService; private final GetListRksIsiService getListRksIsiService; private final PostCreateRksTemplateService postCreateRksTemplateService; + private final GetListRksTemplateService getListRksTemplateService; public RksController(GetListRksDaftarIsiService getListRksDaftarIsiService, PostCreateRksDaftarIsiService postCreateRksDaftarIsiService, GetListRksIsiService getListRksIsiService, - PostCreateRksTemplateService postCreateRksTemplateService) { + PostCreateRksTemplateService postCreateRksTemplateService, + GetListRksTemplateService getListRksTemplateService) { this.getListRksDaftarIsiService = getListRksDaftarIsiService; this.postCreateRksDaftarIsiService = postCreateRksDaftarIsiService; this.getListRksIsiService = getListRksIsiService; this.postCreateRksTemplateService = postCreateRksTemplateService; + this.getListRksTemplateService = getListRksTemplateService; } @@ -71,4 +68,17 @@ public class RksController { return postCreateRksTemplateService.execute(rksTemplateRequest); } + @GetMapping("/template") + public ListRksTemplateResponse getListRksTemplate(@RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size) { + + Pageable pageable = PageRequest.of((page - 1), size); + RksTemplateRequest rksTemplateRequest = RksTemplateRequest.builder() + .pageable(pageable) + .build(); + + return getListRksTemplateService.execute(rksTemplateRequest); + + } + } diff --git a/src/main/java/com/iconplus/smartproc/model/projection/RksTemplateView.java b/src/main/java/com/iconplus/smartproc/model/projection/RksTemplateView.java new file mode 100644 index 0000000..ab3ce5e --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/RksTemplateView.java @@ -0,0 +1,35 @@ +package com.iconplus.smartproc.model.projection; + +public interface RksTemplateView { + + Long getId(); + void setId(Long id); + + String getKodeTemplate(); + void setKodeTemplate(String kodeTemplate); + + String getNamaTemplate(); + void setNamaTemplate(String namaTemplate); + + Long getMetodePengadaanId(); + void setMetodePengadaanId(Long metodePengadaanId); + + String getMetodePengadaan(); + void setMetodePengadaan(String metodePengadaan); + + String getVersi(); + void setVersi(String versi); + + Long getRksDaftarIsiId(); + void setRksDaftarIsiId(Long rksDaftarIsiId); + + String getDaftarIsi(); + void setDaftarIsi(String daftarIsi); + + Boolean getIsActive(); + void setIsActive(Boolean isActive); + + Boolean getIsDelete(); + void setIsDelete(Boolean isDelete); + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/ListRksTemplateResponse.java b/src/main/java/com/iconplus/smartproc/model/response/ListRksTemplateResponse.java index 61e957c..4d55ba5 100644 --- a/src/main/java/com/iconplus/smartproc/model/response/ListRksTemplateResponse.java +++ b/src/main/java/com/iconplus/smartproc/model/response/ListRksTemplateResponse.java @@ -2,7 +2,6 @@ package com.iconplus.smartproc.model.response; import com.iconplus.smartproc.helper.base.BaseResponse; import com.iconplus.smartproc.helper.model.Pagination; -import com.iconplus.smartproc.model.entity.RksTemplate; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -16,6 +15,6 @@ import java.util.List; @NoArgsConstructor public class ListRksTemplateResponse extends BaseResponse { - private List data; + private List data; private Pagination pagination; } diff --git a/src/main/java/com/iconplus/smartproc/model/response/ParentMenusResponse.java b/src/main/java/com/iconplus/smartproc/model/response/ParentMenusResponse.java index 3245894..e4adbd6 100644 --- a/src/main/java/com/iconplus/smartproc/model/response/ParentMenusResponse.java +++ b/src/main/java/com/iconplus/smartproc/model/response/ParentMenusResponse.java @@ -1,11 +1,14 @@ package com.iconplus.smartproc.model.response; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; import com.iconplus.smartproc.helper.base.BaseResponse; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import javax.persistence.Transient; import java.util.List; @Data @@ -14,7 +17,9 @@ import java.util.List; @NoArgsConstructor public class ParentMenusResponse extends BaseResponse { + @JsonIgnore private Long id; + private String text; private String icon; private String path; diff --git a/src/main/java/com/iconplus/smartproc/model/response/RksTemplateResponse.java b/src/main/java/com/iconplus/smartproc/model/response/RksTemplateResponse.java index e9a669b..3a90fd1 100644 --- a/src/main/java/com/iconplus/smartproc/model/response/RksTemplateResponse.java +++ b/src/main/java/com/iconplus/smartproc/model/response/RksTemplateResponse.java @@ -16,8 +16,10 @@ public class RksTemplateResponse extends BaseResponse { private String kodeTemplate; private String namaTemplate; private Long metodePengadaanId; + private String metodePengadaan; private String versi; private Long rksDaftarIsiId; + private String daftarIsi; private Boolean isActive; private Boolean isDelete; diff --git a/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java b/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java index ff97917..33ae8f9 100644 --- a/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java @@ -17,9 +17,9 @@ public interface MenusRepository extends JpaRepository { @Query(value = "SELECT m " + "FROM Menus m " + - "WHERE m.id in (SELECT DISTINCT(s.parentId) from Menus s " + - "order by s.parentId) " + - "AND m.isDelete = false") + "WHERE m.parentId = 0 " + + "AND m.isDelete = false " + + "ORDER BY m.urutan") List findAllParentMenu(); diff --git a/src/main/java/com/iconplus/smartproc/repository/RksTemplateRepository.java b/src/main/java/com/iconplus/smartproc/repository/RksTemplateRepository.java index a87a56d..e5f1a2f 100644 --- a/src/main/java/com/iconplus/smartproc/repository/RksTemplateRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/RksTemplateRepository.java @@ -1,7 +1,11 @@ package com.iconplus.smartproc.repository; import com.iconplus.smartproc.model.entity.RksTemplate; +import com.iconplus.smartproc.model.projection.RksTemplateView; +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; @@ -11,4 +15,19 @@ public interface RksTemplateRepository extends JpaRepository Optional findByKodeTemplateAndIsDeleteFalse(String kodeTemplate); + @Query(value = "SELECT rt.id as id, " + + "rt.kode_template as kodeTemplate, " + + "rt.namaTemplate as namaTemplate, " + + "rt.metode_pengadaan_id as metodePengadaanId, " + + "m.metode_pengadaan as metodePengadaan, " + + "rt.versi as versi, " + + "rt.rks_daftar_isi_id as rksDaftarIsiId, " + + "rdi.nama_template as daftarIsi, " + + "rt.is_active as isActive " + + "FROM rks_template as rt " + + "JOIN rks_daftar_isi rdi ON rdi.id = rt.rks_daftar_isi_id " + + "JOIN metode_pengadaan m ON m.id = rt.metode_pengadaan_id " + + "WHERE rt.is_delete = 0", nativeQuery = true) + Page getListRksTemplate(Pageable pageable); + } diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java b/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java index 06e0d64..253e99c 100644 --- a/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java +++ b/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java @@ -124,7 +124,6 @@ public class LoginService implements BaseService { for (MenusPermissionResponse menusPermissionResponse : menusPermissionResponseList) { if (parentMenusResponse.getId().equals(menusPermissionResponse.getParentId())) { MenusResponse menusResponse = MenusResponse.builder() - .id(menusPermissionResponse.getId()) .text(menusPermissionResponse.getNama()) .path(menusPermissionResponse.getLink()) .canView(menusPermissionResponse.getCanView()) diff --git a/src/main/java/com/iconplus/smartproc/service/rks/GetListRksTemplateService.java b/src/main/java/com/iconplus/smartproc/service/rks/GetListRksTemplateService.java index ca8c679..6533ab2 100644 --- a/src/main/java/com/iconplus/smartproc/service/rks/GetListRksTemplateService.java +++ b/src/main/java/com/iconplus/smartproc/service/rks/GetListRksTemplateService.java @@ -1,11 +1,17 @@ package com.iconplus.smartproc.service.rks; +import com.iconplus.smartproc.helper.model.Pagination; import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.RksTemplateView; import com.iconplus.smartproc.model.request.RksTemplateRequest; import com.iconplus.smartproc.model.response.ListRksTemplateResponse; +import com.iconplus.smartproc.model.response.RksTemplateResponse; import com.iconplus.smartproc.repository.RksTemplateRepository; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.List; + @Service public class GetListRksTemplateService implements BaseService { @@ -15,7 +21,36 @@ public class GetListRksTemplateService implements BaseService rksTemplateResponseList = new ArrayList<>(); + for (RksTemplateView rksTemplateView : rksTemplateViews) { + RksTemplateResponse rksTemplateResponse = RksTemplateResponse.builder() + .id(rksTemplateView.getId()) + .kodeTemplate(rksTemplateView.getKodeTemplate()) + .namaTemplate(rksTemplateView.getNamaTemplate()) + .metodePengadaanId(rksTemplateView.getMetodePengadaanId()) + .metodePengadaan(rksTemplateView.getMetodePengadaan()) + .versi(rksTemplateView.getVersi()) + .rksDaftarIsiId(rksTemplateView.getRksDaftarIsiId()) + .daftarIsi(rksTemplateView.getDaftarIsi()) + .isActive(rksTemplateView.getIsActive()) + .build(); + rksTemplateResponseList.add(rksTemplateResponse); + } + + return ListRksTemplateResponse.builder() + .data(rksTemplateResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(rksTemplateViews.getTotalPages()) + .totalRecords(rksTemplateViews.getTotalElements()) + .isFirstPage(rksTemplateViews.isFirst()) + .isLastPage(rksTemplateViews.isLast()) + .build()) + .build(); } } diff --git a/src/main/java/com/iconplus/smartproc/service/rks/PostCreateRksTemplateService.java b/src/main/java/com/iconplus/smartproc/service/rks/PostCreateRksTemplateService.java index ca20a00..2e5f94a 100644 --- a/src/main/java/com/iconplus/smartproc/service/rks/PostCreateRksTemplateService.java +++ b/src/main/java/com/iconplus/smartproc/service/rks/PostCreateRksTemplateService.java @@ -7,6 +7,7 @@ import com.iconplus.smartproc.model.request.RksTemplateRequest; import com.iconplus.smartproc.model.response.RksTemplateResponse; import com.iconplus.smartproc.repository.RksTemplateRepository; import com.iconplus.smartproc.util.Constants; +import org.apache.commons.lang3.BooleanUtils; import org.springframework.stereotype.Service; @Service @@ -33,6 +34,7 @@ public class PostCreateRksTemplateService implements BaseService Date: Mon, 5 Jun 2023 12:25:41 +0700 Subject: [PATCH 60/63] cek permission by role --- .../com/iconplus/smartproc/repository/MenusRepository.java | 4 +++- .../smartproc/service/authentication/LoginService.java | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java b/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java index 33ae8f9..82f63df 100644 --- a/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java @@ -17,10 +17,12 @@ public interface MenusRepository extends JpaRepository { @Query(value = "SELECT m " + "FROM Menus m " + + "JOIN Permission p ON p.menuId = m.id " + "WHERE m.parentId = 0 " + "AND m.isDelete = false " + + "AND p.roleId = :roleId " + "ORDER BY m.urutan") - List findAllParentMenu(); + List findAllParentMenu(Long roleId); @Query(value = "SELECT m " + diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java b/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java index 253e99c..d00c7bb 100644 --- a/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java +++ b/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java @@ -81,7 +81,7 @@ public class LoginService implements BaseService { List parentMenusResponseList = new ArrayList<>(); - var parentMenu = menusRepository.findAllParentMenu(); + var parentMenu = menusRepository.findAllParentMenu(userRoleView.getRoleId()); for (Menus menus : parentMenu) { ParentMenusResponse parentMenusResponse = ParentMenusResponse.builder() .id(menus.getId()) From d30a8ca6bec285fda90a691b1816d0e44a7b92b3 Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Mon, 5 Jun 2023 12:48:34 +0700 Subject: [PATCH 61/63] enhance init permission when create role --- .../com/iconplus/smartproc/repository/MenusRepository.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java b/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java index 82f63df..f8fc105 100644 --- a/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java @@ -32,8 +32,7 @@ public interface MenusRepository extends JpaRepository { @Query(value = "SELECT m " + "FROM Menus m " + - "WHERE m.isDelete = false " + - "AND m.parentId != 0") + "WHERE m.isDelete = false ") List findAllMenus(); } From b648b3d7bf5be015a751ddef0e176ee59c4913b6 Mon Sep 17 00:00:00 2001 From: dirgantarasiahaan Date: Mon, 5 Jun 2023 13:58:30 +0700 Subject: [PATCH 62/63] fix total pengadaan in response --- .../com/iconplus/smartproc/model/projection/DrpView.java | 4 ++++ .../com/iconplus/smartproc/model/response/DrpResponse.java | 1 + .../com/iconplus/smartproc/repository/DrpRepository.java | 6 ++++-- .../iconplus/smartproc/service/drp/GetListDrpService.java | 1 + 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/iconplus/smartproc/model/projection/DrpView.java b/src/main/java/com/iconplus/smartproc/model/projection/DrpView.java index 81bfadb..1984976 100644 --- a/src/main/java/com/iconplus/smartproc/model/projection/DrpView.java +++ b/src/main/java/com/iconplus/smartproc/model/projection/DrpView.java @@ -23,6 +23,10 @@ public interface DrpView { Date getPrintDate(); void setPrintDate(Date printDate); + Integer getTotalPengadaan(); + void setTotalPengadaan(Integer totalPengadaan); + + Boolean getIsActive(); void setIsActive(Boolean isActive); 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 8371492..ef90e6d 100644 --- a/src/main/java/com/iconplus/smartproc/model/response/DrpResponse.java +++ b/src/main/java/com/iconplus/smartproc/model/response/DrpResponse.java @@ -20,6 +20,7 @@ public class DrpResponse extends BaseResponse { private Date approveDate; private Boolean isActive; private Boolean isDelete; + private Integer totalPengadaan; private List dataDrpDokumen; diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java index 62397a5..fc0f1d9 100644 --- a/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java @@ -25,10 +25,12 @@ public interface DrpRepository extends JpaRepository { "d.approveStatus as approveStatus, " + "d.approveDate as approveDate, " + "d.isActive as isActive, " + - "d.isDelete as isDelete " + + "d.isDelete as isDelete, " + + "count(dp.drpId) as totalPengadaan " + "FROM Drp d " + + "LEFT JOIN DrpPengadaan dp ON dp.drpId = d.id " + "WHERE d.isDelete = false " + -// "AND (:approveDate = '' or DATE(d.approveDate) = DATE(approveDate)) " + + "GROUP BY d.id " + "ORDER BY d.id") Page findByIsDeleteFalse(Timestamp approveDate, Pageable pageable); diff --git a/src/main/java/com/iconplus/smartproc/service/drp/GetListDrpService.java b/src/main/java/com/iconplus/smartproc/service/drp/GetListDrpService.java index 04e8990..51f015c 100644 --- a/src/main/java/com/iconplus/smartproc/service/drp/GetListDrpService.java +++ b/src/main/java/com/iconplus/smartproc/service/drp/GetListDrpService.java @@ -33,6 +33,7 @@ public class GetListDrpService implements BaseService Date: Mon, 5 Jun 2023 17:15:16 +0700 Subject: [PATCH 63/63] add rks --- ...oller.java => RksDaftarIsiController.java} | 55 +++++++-------- .../controller/RksTemplateController.java | 68 +++++++++++++++++++ .../model/response/LoginResponse.java | 2 + .../repository/RksDaftarIsiRepository.java | 2 + .../repository/RksIsiRepository.java | 9 +++ .../repository/RksTemplateRepository.java | 22 +++--- .../smartproc/repository/UsersRepository.java | 2 + .../service/authentication/LoginService.java | 2 + .../DeleteRksDaftarIsiService.java | 37 ++++++++++ .../GetListRksDaftarIsiService.java | 2 +- .../GetListRksIsiService.java | 2 +- .../PostCreateRksDaftarIsiService.java | 2 +- .../PutUpdateRksDaftarIsiService.java | 38 +++++++++++ .../rkstemplate/DeleteRksTemplateService.java | 34 ++++++++++ .../GetListRksTemplateService.java | 2 +- .../PostCreateRksTemplateService.java | 2 +- .../PutUpdateRksTemplateService.java | 42 ++++++++++++ 17 files changed, 279 insertions(+), 44 deletions(-) rename src/main/java/com/iconplus/smartproc/controller/{RksController.java => RksDaftarIsiController.java} (56%) create mode 100644 src/main/java/com/iconplus/smartproc/controller/RksTemplateController.java create mode 100644 src/main/java/com/iconplus/smartproc/service/rksdaftarisi/DeleteRksDaftarIsiService.java rename src/main/java/com/iconplus/smartproc/service/{rks => rksdaftarisi}/GetListRksDaftarIsiService.java (97%) rename src/main/java/com/iconplus/smartproc/service/{rks => rksdaftarisi}/GetListRksIsiService.java (97%) rename src/main/java/com/iconplus/smartproc/service/{rks => rksdaftarisi}/PostCreateRksDaftarIsiService.java (97%) create mode 100644 src/main/java/com/iconplus/smartproc/service/rksdaftarisi/PutUpdateRksDaftarIsiService.java create mode 100644 src/main/java/com/iconplus/smartproc/service/rkstemplate/DeleteRksTemplateService.java rename src/main/java/com/iconplus/smartproc/service/{rks => rkstemplate}/GetListRksTemplateService.java (98%) rename src/main/java/com/iconplus/smartproc/service/{rks => rkstemplate}/PostCreateRksTemplateService.java (97%) create mode 100644 src/main/java/com/iconplus/smartproc/service/rkstemplate/PutUpdateRksTemplateService.java diff --git a/src/main/java/com/iconplus/smartproc/controller/RksController.java b/src/main/java/com/iconplus/smartproc/controller/RksDaftarIsiController.java similarity index 56% rename from src/main/java/com/iconplus/smartproc/controller/RksController.java rename to src/main/java/com/iconplus/smartproc/controller/RksDaftarIsiController.java index b6bc7a9..4542f74 100644 --- a/src/main/java/com/iconplus/smartproc/controller/RksController.java +++ b/src/main/java/com/iconplus/smartproc/controller/RksDaftarIsiController.java @@ -1,38 +1,38 @@ package com.iconplus.smartproc.controller; +import com.iconplus.smartproc.helper.model.EmptyResponse; import com.iconplus.smartproc.model.request.RksDaftarIsiRequest; import com.iconplus.smartproc.model.request.RksIsiRequest; -import com.iconplus.smartproc.model.request.RksTemplateRequest; import com.iconplus.smartproc.model.response.*; -import com.iconplus.smartproc.service.rks.*; +import com.iconplus.smartproc.service.rksdaftarisi.*; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.web.bind.annotation.*; @CrossOrigin(origins = "${fe.server}", allowCredentials = "true") @RestController -@RequestMapping("/api/rks") -public class RksController { +@RequestMapping("/api/rks/daftar-isi") +public class RksDaftarIsiController { private final GetListRksDaftarIsiService getListRksDaftarIsiService; private final PostCreateRksDaftarIsiService postCreateRksDaftarIsiService; private final GetListRksIsiService getListRksIsiService; - private final PostCreateRksTemplateService postCreateRksTemplateService; - private final GetListRksTemplateService getListRksTemplateService; - public RksController(GetListRksDaftarIsiService getListRksDaftarIsiService, - PostCreateRksDaftarIsiService postCreateRksDaftarIsiService, - GetListRksIsiService getListRksIsiService, - PostCreateRksTemplateService postCreateRksTemplateService, - GetListRksTemplateService getListRksTemplateService) { + private final DeleteRksDaftarIsiService deleteRksDaftarIsiService; + private final PutUpdateRksDaftarIsiService putUpdateRksDaftarIsiService; + public RksDaftarIsiController(GetListRksDaftarIsiService getListRksDaftarIsiService, + PostCreateRksDaftarIsiService postCreateRksDaftarIsiService, + GetListRksIsiService getListRksIsiService, + DeleteRksDaftarIsiService deleteRksDaftarIsiService, + PutUpdateRksDaftarIsiService putUpdateRksDaftarIsiService) { this.getListRksDaftarIsiService = getListRksDaftarIsiService; this.postCreateRksDaftarIsiService = postCreateRksDaftarIsiService; this.getListRksIsiService = getListRksIsiService; - this.postCreateRksTemplateService = postCreateRksTemplateService; - this.getListRksTemplateService = getListRksTemplateService; + this.deleteRksDaftarIsiService = deleteRksDaftarIsiService; + this.putUpdateRksDaftarIsiService = putUpdateRksDaftarIsiService; } - @GetMapping("/daftar-isi") + @GetMapping() public ListRksDaftarIsiResponse getAllRksDaftarIsi(@RequestParam(name = "page", defaultValue = "1") Integer page, @RequestParam(name = "size", defaultValue = "5") Integer size){ @@ -45,12 +45,12 @@ public class RksController { } - @PostMapping("/daftar-isi") + @PostMapping() public RksDaftarIsiResponse createRksDaftarIsi(@RequestBody RksDaftarIsiRequest rksDaftarIsiRequest) { return postCreateRksDaftarIsiService.execute(rksDaftarIsiRequest); } - @GetMapping("/daftar-isi/{id}/isi") + @GetMapping("/{id}/isi") public ListRksIsiResponse getListRksIsi(@PathVariable(name = "id") Long id, @RequestParam(name = "page", defaultValue = "1") Integer page, @RequestParam(name = "size", defaultValue = "5") Integer size) { @@ -63,21 +63,18 @@ public class RksController { return getListRksIsiService.execute(rksIsiRequest); } - @PostMapping("/template") - public RksTemplateResponse createRksTemplate(@RequestBody RksTemplateRequest rksTemplateRequest) { - return postCreateRksTemplateService.execute(rksTemplateRequest); + @PutMapping("/{id}") + public RksDaftarIsiResponse editRksDaftarIsi(@PathVariable(name = "id") Long id, + @RequestBody RksDaftarIsiRequest rksDaftarIsiRequest) { + rksDaftarIsiRequest.setId(id); + return putUpdateRksDaftarIsiService.execute(rksDaftarIsiRequest); } - @GetMapping("/template") - public ListRksTemplateResponse getListRksTemplate(@RequestParam(name = "page", defaultValue = "1") Integer page, - @RequestParam(name = "size", defaultValue = "5") Integer size) { - - Pageable pageable = PageRequest.of((page - 1), size); - RksTemplateRequest rksTemplateRequest = RksTemplateRequest.builder() - .pageable(pageable) - .build(); - - return getListRksTemplateService.execute(rksTemplateRequest); + @DeleteMapping("/{id}") + public EmptyResponse deleteRksDaftarIsi(@PathVariable(name = "id") Long id) { + return deleteRksDaftarIsiService.execute(RksDaftarIsiRequest.builder() + .id(id) + .build()); } diff --git a/src/main/java/com/iconplus/smartproc/controller/RksTemplateController.java b/src/main/java/com/iconplus/smartproc/controller/RksTemplateController.java new file mode 100644 index 0000000..71973d6 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/controller/RksTemplateController.java @@ -0,0 +1,68 @@ +package com.iconplus.smartproc.controller; + +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.RksDaftarIsiRequest; +import com.iconplus.smartproc.model.request.RksTemplateRequest; +import com.iconplus.smartproc.model.response.ListRksTemplateResponse; +import com.iconplus.smartproc.model.response.RksDaftarIsiResponse; +import com.iconplus.smartproc.model.response.RksTemplateResponse; +import com.iconplus.smartproc.service.rkstemplate.DeleteRksTemplateService; +import com.iconplus.smartproc.service.rkstemplate.GetListRksTemplateService; +import com.iconplus.smartproc.service.rkstemplate.PostCreateRksTemplateService; +import com.iconplus.smartproc.service.rkstemplate.PutUpdateRksTemplateService; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.web.bind.annotation.*; + +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") +@RestController +@RequestMapping("/api/rks/template") +public class RksTemplateController { + + private final PostCreateRksTemplateService postCreateRksTemplateService; + private final GetListRksTemplateService getListRksTemplateService; + private final PutUpdateRksTemplateService putUpdateRksTemplateService; + private final DeleteRksTemplateService deleteRksTemplateService; + public RksTemplateController(PostCreateRksTemplateService postCreateRksTemplateService, + GetListRksTemplateService getListRksTemplateService, + PutUpdateRksTemplateService putUpdateRksTemplateService, + DeleteRksTemplateService deleteRksTemplateService) { + this.postCreateRksTemplateService = postCreateRksTemplateService; + this.getListRksTemplateService = getListRksTemplateService; + this.putUpdateRksTemplateService = putUpdateRksTemplateService; + this.deleteRksTemplateService = deleteRksTemplateService; + } + + @PostMapping() + public RksTemplateResponse createRksTemplate(@RequestBody RksTemplateRequest rksTemplateRequest) { + return postCreateRksTemplateService.execute(rksTemplateRequest); + } + + @GetMapping() + public ListRksTemplateResponse getListRksTemplate(@RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size) { + + Pageable pageable = PageRequest.of((page - 1), size); + RksTemplateRequest rksTemplateRequest = RksTemplateRequest.builder() + .pageable(pageable) + .build(); + + return getListRksTemplateService.execute(rksTemplateRequest); + + } + + @PutMapping("/{id}") + public RksTemplateResponse editRksTemplate(@PathVariable(name = "id") Long id, + @RequestBody RksTemplateRequest rksTemplateRequest) { + rksTemplateRequest.setId(id); + return putUpdateRksTemplateService.execute(rksTemplateRequest); + } + + @DeleteMapping("/{id}") + public EmptyResponse deleteRksTemplate(@PathVariable(name = "id") Long id) { + return deleteRksTemplateService.execute(RksTemplateRequest.builder() + .id(id) + .build()); + + } +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/LoginResponse.java b/src/main/java/com/iconplus/smartproc/model/response/LoginResponse.java index 2f77818..4ad07b1 100644 --- a/src/main/java/com/iconplus/smartproc/model/response/LoginResponse.java +++ b/src/main/java/com/iconplus/smartproc/model/response/LoginResponse.java @@ -19,6 +19,8 @@ public class LoginResponse extends BaseResponse { private Integer validity; private String refreshToken; private String username; + private String nama; + private String telepon; private String email; private Long roleId; private String role; diff --git a/src/main/java/com/iconplus/smartproc/repository/RksDaftarIsiRepository.java b/src/main/java/com/iconplus/smartproc/repository/RksDaftarIsiRepository.java index 80cb02f..8c57c20 100644 --- a/src/main/java/com/iconplus/smartproc/repository/RksDaftarIsiRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/RksDaftarIsiRepository.java @@ -26,4 +26,6 @@ public interface RksDaftarIsiRepository extends JpaRepository findByKodeTemplateAndIsDeleteFalse(String kodeTemplate); + Optional findByIdAndIsDeleteFalse(Long id); + } diff --git a/src/main/java/com/iconplus/smartproc/repository/RksIsiRepository.java b/src/main/java/com/iconplus/smartproc/repository/RksIsiRepository.java index e110686..7e06351 100644 --- a/src/main/java/com/iconplus/smartproc/repository/RksIsiRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/RksIsiRepository.java @@ -4,10 +4,19 @@ import com.iconplus.smartproc.model.entity.RksIsi; 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.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; @Repository public interface RksIsiRepository extends JpaRepository { Page findByRksDaftarIsiIdAndIsDeleteFalse(Long rksDaftarIsiId, Pageable pageable); + + @Modifying + @Query(value = "update RksIsi ri " + + "set ri.isDelete = true " + + "where ri.rksDaftarIsiId = :rksDaftarIsiId") + void deleteRksIsi(@Param("rksDaftarIsiId") Long rksDaftarIsiId); } diff --git a/src/main/java/com/iconplus/smartproc/repository/RksTemplateRepository.java b/src/main/java/com/iconplus/smartproc/repository/RksTemplateRepository.java index e5f1a2f..41c811c 100644 --- a/src/main/java/com/iconplus/smartproc/repository/RksTemplateRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/RksTemplateRepository.java @@ -15,19 +15,21 @@ public interface RksTemplateRepository extends JpaRepository Optional findByKodeTemplateAndIsDeleteFalse(String kodeTemplate); + Optional findByIdAndIsDeleteFalse(Long id); + @Query(value = "SELECT rt.id as id, " + - "rt.kode_template as kodeTemplate, " + + "rt.kodeTemplate as kodeTemplate, " + "rt.namaTemplate as namaTemplate, " + - "rt.metode_pengadaan_id as metodePengadaanId, " + - "m.metode_pengadaan as metodePengadaan, " + + "rt.metodePengadaanId as metodePengadaanId, " + + "m.metodePengadaan as metodePengadaan, " + "rt.versi as versi, " + - "rt.rks_daftar_isi_id as rksDaftarIsiId, " + - "rdi.nama_template as daftarIsi, " + - "rt.is_active as isActive " + - "FROM rks_template as rt " + - "JOIN rks_daftar_isi rdi ON rdi.id = rt.rks_daftar_isi_id " + - "JOIN metode_pengadaan m ON m.id = rt.metode_pengadaan_id " + - "WHERE rt.is_delete = 0", nativeQuery = true) + "rt.rksDaftarIsiId as rksDaftarIsiId, " + + "rdi.namaTemplate as daftarIsi, " + + "rt.isActive as isActive " + + "FROM RksTemplate as rt " + + "JOIN RksDaftarIsi rdi ON rdi.id = rt.rksDaftarIsiId " + + "JOIN MetodePengadaan m ON m.id = rt.metodePengadaanId " + + "WHERE rt.isDelete = 0") Page getListRksTemplate(Pageable pageable); } diff --git a/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java b/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java index 37683ad..5ae8f69 100644 --- a/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java @@ -61,6 +61,7 @@ public interface UsersRepository extends JpaRepository { "u.instansiId as instansiId, " + "i.instansi as instansi, " + "u.email as email, " + + "u.telepon as telepon, " + "u.isActive as isActive, " + "u.isDelete as isDelete " + "FROM Users u " + @@ -86,6 +87,7 @@ public interface UsersRepository extends JpaRepository { "u.instansiId as instansiId, " + "i.instansi as instansi, " + "u.email as email, " + + "u.telepon as telepon, " + "u.isActive as isActive, " + "u.isDelete as isDelete " + "FROM Users u " + diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java b/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java index d00c7bb..761cac5 100644 --- a/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java +++ b/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java @@ -178,6 +178,8 @@ public class LoginService implements BaseService { .refreshToken(refreshToken) .userId(userRoleView.getId()) .username(userRoleView.getUsername()) + .nama(userRoleView.getNama()) + .telepon(userRoleView.getTelepon()) .email(userRoleView.getEmail()) .roleId(userRoleView.getRoleId()) .role(userRoleView.getRole()) diff --git a/src/main/java/com/iconplus/smartproc/service/rksdaftarisi/DeleteRksDaftarIsiService.java b/src/main/java/com/iconplus/smartproc/service/rksdaftarisi/DeleteRksDaftarIsiService.java new file mode 100644 index 0000000..73df695 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/rksdaftarisi/DeleteRksDaftarIsiService.java @@ -0,0 +1,37 @@ +package com.iconplus.smartproc.service.rksdaftarisi; + +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.RksDaftarIsiRequest; +import com.iconplus.smartproc.repository.RksDaftarIsiRepository; +import com.iconplus.smartproc.repository.RksIsiRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + +@Service +public class DeleteRksDaftarIsiService implements BaseService { + + private final RksDaftarIsiRepository rksDaftarIsiRepository; + private final RksIsiRepository rksIsiRepository; + public DeleteRksDaftarIsiService(RksDaftarIsiRepository rksDaftarIsiRepository, + RksIsiRepository rksIsiRepository) { + this.rksDaftarIsiRepository = rksDaftarIsiRepository; + this.rksIsiRepository = rksIsiRepository; + } + + @Override + public EmptyResponse execute(RksDaftarIsiRequest input) { + + var rksDaftarIsi= rksDaftarIsiRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "RKS Daftar Isi", input.getId()))); + + rksDaftarIsi.setIsDelete(true); + rksDaftarIsiRepository.save(rksDaftarIsi); + rksIsiRepository.deleteRksIsi(rksDaftarIsi.getId()); + + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/rks/GetListRksDaftarIsiService.java b/src/main/java/com/iconplus/smartproc/service/rksdaftarisi/GetListRksDaftarIsiService.java similarity index 97% rename from src/main/java/com/iconplus/smartproc/service/rks/GetListRksDaftarIsiService.java rename to src/main/java/com/iconplus/smartproc/service/rksdaftarisi/GetListRksDaftarIsiService.java index 18b2361..9373727 100644 --- a/src/main/java/com/iconplus/smartproc/service/rks/GetListRksDaftarIsiService.java +++ b/src/main/java/com/iconplus/smartproc/service/rksdaftarisi/GetListRksDaftarIsiService.java @@ -1,4 +1,4 @@ -package com.iconplus.smartproc.service.rks; +package com.iconplus.smartproc.service.rksdaftarisi; import com.iconplus.smartproc.helper.model.Pagination; import com.iconplus.smartproc.helper.service.BaseService; diff --git a/src/main/java/com/iconplus/smartproc/service/rks/GetListRksIsiService.java b/src/main/java/com/iconplus/smartproc/service/rksdaftarisi/GetListRksIsiService.java similarity index 97% rename from src/main/java/com/iconplus/smartproc/service/rks/GetListRksIsiService.java rename to src/main/java/com/iconplus/smartproc/service/rksdaftarisi/GetListRksIsiService.java index 38c58d2..7be02c0 100644 --- a/src/main/java/com/iconplus/smartproc/service/rks/GetListRksIsiService.java +++ b/src/main/java/com/iconplus/smartproc/service/rksdaftarisi/GetListRksIsiService.java @@ -1,4 +1,4 @@ -package com.iconplus.smartproc.service.rks; +package com.iconplus.smartproc.service.rksdaftarisi; import com.iconplus.smartproc.helper.model.Pagination; import com.iconplus.smartproc.helper.service.BaseService; diff --git a/src/main/java/com/iconplus/smartproc/service/rks/PostCreateRksDaftarIsiService.java b/src/main/java/com/iconplus/smartproc/service/rksdaftarisi/PostCreateRksDaftarIsiService.java similarity index 97% rename from src/main/java/com/iconplus/smartproc/service/rks/PostCreateRksDaftarIsiService.java rename to src/main/java/com/iconplus/smartproc/service/rksdaftarisi/PostCreateRksDaftarIsiService.java index 9a9a704..9ce43f1 100644 --- a/src/main/java/com/iconplus/smartproc/service/rks/PostCreateRksDaftarIsiService.java +++ b/src/main/java/com/iconplus/smartproc/service/rksdaftarisi/PostCreateRksDaftarIsiService.java @@ -1,4 +1,4 @@ -package com.iconplus.smartproc.service.rks; +package com.iconplus.smartproc.service.rksdaftarisi; import com.iconplus.smartproc.exception.BusinessException; import com.iconplus.smartproc.helper.service.BaseService; diff --git a/src/main/java/com/iconplus/smartproc/service/rksdaftarisi/PutUpdateRksDaftarIsiService.java b/src/main/java/com/iconplus/smartproc/service/rksdaftarisi/PutUpdateRksDaftarIsiService.java new file mode 100644 index 0000000..b6ed2fc --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/rksdaftarisi/PutUpdateRksDaftarIsiService.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.service.rksdaftarisi; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.RksDaftarIsiRequest; +import com.iconplus.smartproc.model.response.RksDaftarIsiResponse; +import com.iconplus.smartproc.repository.RksDaftarIsiRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + +@Service +public class PutUpdateRksDaftarIsiService implements BaseService { + + private final RksDaftarIsiRepository rksDaftarIsiRepository; + public PutUpdateRksDaftarIsiService(RksDaftarIsiRepository rksDaftarIsiRepository) { + this.rksDaftarIsiRepository = rksDaftarIsiRepository; + } + + @Override + public RksDaftarIsiResponse execute(RksDaftarIsiRequest input) { + + var rksDaftarIsi= rksDaftarIsiRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "RKS Daftar Isi", input.getId()))); + + rksDaftarIsi.setKodeTemplate(input.getKodeTemplate()); + rksDaftarIsi.setNamaTemplate(input.getNamaTemplate()); + rksDaftarIsi.setMetodePengadaanId(input.getMetodePengadaanId()); + rksDaftarIsi.setVersi(input.getVersi()); + + rksDaftarIsiRepository.save(rksDaftarIsi); + + return RksDaftarIsiResponse.builder() + .id(rksDaftarIsi.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/rkstemplate/DeleteRksTemplateService.java b/src/main/java/com/iconplus/smartproc/service/rkstemplate/DeleteRksTemplateService.java new file mode 100644 index 0000000..c203772 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/rkstemplate/DeleteRksTemplateService.java @@ -0,0 +1,34 @@ +package com.iconplus.smartproc.service.rkstemplate; + +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.RksTemplateRequest; +import com.iconplus.smartproc.repository.RksTemplateRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + +@Service +public class DeleteRksTemplateService implements BaseService { + + private final RksTemplateRepository rksTemplateRepository; + + public DeleteRksTemplateService(RksTemplateRepository rksTemplateRepository) { + this.rksTemplateRepository = rksTemplateRepository; + } + + @Override + public EmptyResponse execute(RksTemplateRequest input) { + var rksTemplate = rksTemplateRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(()-> new BusinessException( + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "RKS Template", input.getId()) + )); + + rksTemplate.setIsDelete(true); + rksTemplateRepository.save(rksTemplate); + + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/rks/GetListRksTemplateService.java b/src/main/java/com/iconplus/smartproc/service/rkstemplate/GetListRksTemplateService.java similarity index 98% rename from src/main/java/com/iconplus/smartproc/service/rks/GetListRksTemplateService.java rename to src/main/java/com/iconplus/smartproc/service/rkstemplate/GetListRksTemplateService.java index 6533ab2..ccf4b4b 100644 --- a/src/main/java/com/iconplus/smartproc/service/rks/GetListRksTemplateService.java +++ b/src/main/java/com/iconplus/smartproc/service/rkstemplate/GetListRksTemplateService.java @@ -1,4 +1,4 @@ -package com.iconplus.smartproc.service.rks; +package com.iconplus.smartproc.service.rkstemplate; import com.iconplus.smartproc.helper.model.Pagination; import com.iconplus.smartproc.helper.service.BaseService; diff --git a/src/main/java/com/iconplus/smartproc/service/rks/PostCreateRksTemplateService.java b/src/main/java/com/iconplus/smartproc/service/rkstemplate/PostCreateRksTemplateService.java similarity index 97% rename from src/main/java/com/iconplus/smartproc/service/rks/PostCreateRksTemplateService.java rename to src/main/java/com/iconplus/smartproc/service/rkstemplate/PostCreateRksTemplateService.java index 2e5f94a..69d0fcc 100644 --- a/src/main/java/com/iconplus/smartproc/service/rks/PostCreateRksTemplateService.java +++ b/src/main/java/com/iconplus/smartproc/service/rkstemplate/PostCreateRksTemplateService.java @@ -1,4 +1,4 @@ -package com.iconplus.smartproc.service.rks; +package com.iconplus.smartproc.service.rkstemplate; import com.iconplus.smartproc.exception.BusinessException; import com.iconplus.smartproc.helper.service.BaseService; diff --git a/src/main/java/com/iconplus/smartproc/service/rkstemplate/PutUpdateRksTemplateService.java b/src/main/java/com/iconplus/smartproc/service/rkstemplate/PutUpdateRksTemplateService.java new file mode 100644 index 0000000..99e9c8c --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/rkstemplate/PutUpdateRksTemplateService.java @@ -0,0 +1,42 @@ +package com.iconplus.smartproc.service.rkstemplate; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.RksTemplateRequest; +import com.iconplus.smartproc.model.response.RksTemplateResponse; +import com.iconplus.smartproc.repository.RksTemplateRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + +@Service +public class PutUpdateRksTemplateService implements BaseService { + + private final RksTemplateRepository rksTemplateRepository; + public PutUpdateRksTemplateService(RksTemplateRepository rksTemplateRepository) { + this.rksTemplateRepository = rksTemplateRepository; + } + + @Override + public RksTemplateResponse execute(RksTemplateRequest input) { + + var rksTemplate = rksTemplateRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(()-> new BusinessException( + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "RKS Template", input.getId()) + )); + + rksTemplate.setKodeTemplate(rksTemplate.getKodeTemplate()); + rksTemplate.setNamaTemplate(rksTemplate.getNamaTemplate()); + rksTemplate.setRksDaftarIsiId(rksTemplate.getRksDaftarIsiId()); + rksTemplate.setMetodePengadaanId(rksTemplate.getMetodePengadaanId()); + rksTemplate.setVersi(rksTemplate.getVersi()); + rksTemplate.setIsActive(rksTemplate.getIsActive()); + + rksTemplateRepository.save(rksTemplate); + + return RksTemplateResponse.builder() + .id(rksTemplate.getId()) + .build(); + } +}