diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapProdukPaketToProdukDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapProdukPaketToProdukDao.java new file mode 100644 index 00000000..838764ec --- /dev/null +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapProdukPaketToProdukDao.java @@ -0,0 +1,40 @@ +package com.jasamedika.medifirst2000.dao; + +import com.jasamedika.medifirst2000.entities.MapProdukPaketToProduk; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +/** + * @author Salman + * @version 1.0.0 + * @since 7 Aug 2023 + */ +public interface MapProdukPaketToProdukDao extends JpaRepository { + /** + * @param paketId + * id produk yang dijadikan nama paket + * @return daftar mapping antara produk paket dan paketnya sebagai produk + */ + List findAllByProdukId(Integer paketId); + + /** + * @param paketId + * id produk yang dijadikan nama paket + * @param produkId + * id produk breakdown di dalam paket + * @return daftar mapping antara produk paket dan paketnya sebagai produk + */ + List findByProdukIdAndProdukPaketId(Integer paketId, Integer produkId); + + /** + * @param paketId + * id produk yang dijadikan nama paket + * @param produkId + * id produk breakdown di dalam paket + * @param id + * identifier mapping paket dan produk + * @return daftar mapping antara produk paket dan paketnya sebagai produk + */ + List findByProdukIdAndProdukPaketIdAndIdNot(Integer paketId, Integer produkId, String id); +} diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/MapProdukPaketToProdukService.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/MapProdukPaketToProdukService.java new file mode 100644 index 00000000..0944d5a8 --- /dev/null +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/MapProdukPaketToProdukService.java @@ -0,0 +1,54 @@ +package com.jasamedika.medifirst2000.service; + +import com.jasamedika.medifirst2000.dto.MapProdukPaketToProdukVO; + +import java.util.List; + +/** + * @author Salman + * @version 1.0.0 + * @since 7 Aug 2023 + */ +public interface MapProdukPaketToProdukService { + /** + * Menyimpan mapping paket dan produk yang baru + * + * @param vo + * virtual object sebagai data transfer object + */ + void save(MapProdukPaketToProdukVO vo); + + /** + * @return daftar mapping antara produk paket dan paketnya sebagai produk + */ + List get(); + + /** + * @param paketId + * id produk yang dijadikan nama paket + * @return daftar mapping antara produk paket dan paketnya sebagai produk + */ + List getByPaket(Integer paketId); + + /** + * @param id + * identifier mapping paket dan produk + * @return spesifik mapping antara produk paket dan paketnya sebagai produk + * sesuai identifier + */ + MapProdukPaketToProdukVO get(String id); + + /** + * @param id + * identifier mapping paket dan produk + * @return status data mapping sudah terhapus permanen atau belum + */ + boolean delete(String id); + + /** + * @param vo + * virtual object sebagai data transfer object + * @return status data mapping sudah tersedia di dalam database + */ + boolean exists(MapProdukPaketToProdukVO vo); +} diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/MapProdukPaketToProdukServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/MapProdukPaketToProdukServiceImpl.java new file mode 100644 index 00000000..8c9a8cfb --- /dev/null +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/MapProdukPaketToProdukServiceImpl.java @@ -0,0 +1,76 @@ +package com.jasamedika.medifirst2000.service.impl; + +import com.jasamedika.medifirst2000.converter.base.BaseVoConverter; +import com.jasamedika.medifirst2000.dao.MapProdukPaketToProdukDao; +import com.jasamedika.medifirst2000.dto.MapProdukPaketToProdukVO; +import com.jasamedika.medifirst2000.entities.MapProdukPaketToProduk; +import com.jasamedika.medifirst2000.service.MapProdukPaketToProdukService; +import com.jasamedika.medifirst2000.util.CommonUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author Salman + * @version 1.0.0 + * @since 7 Aug 2023 + */ +@Service +@Transactional +public class MapProdukPaketToProdukServiceImpl implements MapProdukPaketToProdukService { + @Autowired + private BaseVoConverter mapProdukPaketConverter; + + @Autowired + private MapProdukPaketToProdukDao mapProdukPaketToProdukDao; + + @Override + public void save(MapProdukPaketToProdukVO vo) { + MapProdukPaketToProduk model = mapProdukPaketConverter.transferVOToModel(vo, new MapProdukPaketToProduk()); + mapProdukPaketToProdukDao.save(model); + } + + @Override + public List get() { + List models = mapProdukPaketToProdukDao.findAll(); + return models.stream().map(m -> mapProdukPaketConverter.transferModelToVO(m, new MapProdukPaketToProdukVO())) + .collect(Collectors.toList()); + } + + @Override + public List getByPaket(Integer paketId) { + List models = mapProdukPaketToProdukDao.findAllByProdukId(paketId); + return models.stream().map(m -> mapProdukPaketConverter.transferModelToVO(m, new MapProdukPaketToProdukVO())) + .collect(Collectors.toList()); + } + + @Override + public MapProdukPaketToProdukVO get(String id) { + MapProdukPaketToProduk model = mapProdukPaketToProdukDao.findOne(id); + if (CommonUtil.isNullOrEmpty(model)) + return null; + return mapProdukPaketConverter.transferModelToVO(model, new MapProdukPaketToProdukVO()); + } + + @Override + public boolean delete(String id) { + mapProdukPaketToProdukDao.delete(id); + return true; + } + + @Override + public boolean exists(MapProdukPaketToProdukVO vo) { + List models; + if (CommonUtil.isNotNullOrEmpty(vo.getNoRec())) { + models = mapProdukPaketToProdukDao.findByProdukIdAndProdukPaketIdAndIdNot(vo.getProduk().getId(), + vo.getProdukPaket().getId(), vo.getNoRec()); + } else { + models = mapProdukPaketToProdukDao.findByProdukIdAndProdukPaketId(vo.getProduk().getId(), + vo.getProdukPaket().getId()); + } + return CommonUtil.isNotNullOrEmpty(models); + } +} diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/dto/MapProdukPaketToProdukVO.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/dto/MapProdukPaketToProdukVO.java new file mode 100644 index 00000000..07bf7251 --- /dev/null +++ b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/dto/MapProdukPaketToProdukVO.java @@ -0,0 +1,80 @@ +package com.jasamedika.medifirst2000.dto; + +import com.jasamedika.medifirst2000.base.vo.BaseTransactionVO; +import com.jasamedika.medifirst2000.vo.ProdukVO; + +import javax.validation.constraints.NotNull; +import java.util.Objects; + +/** + * DTO for {@link com.jasamedika.medifirst2000.entities.MapProdukPaketToProduk} + */ +public class MapProdukPaketToProdukVO extends BaseTransactionVO { + @NotNull(message = "Produk paket tidak boleh kosong") + private ProdukVO produkPaket; + + private Integer produkPaketId; + + @NotNull(message = "Produk tidak boleh kosong") + private ProdukVO produk; + + private Integer produkId; + + public ProdukVO getProdukPaket() { + return produkPaket; + } + + public void setProdukPaket(ProdukVO produkPaket) { + this.produkPaket = produkPaket; + } + + public Integer getProdukPaketId() { + return produkPaketId; + } + + public void setProdukPaketId(Integer produkPaketId) { + this.produkPaketId = produkPaketId; + } + + public ProdukVO getProduk() { + return produk; + } + + public void setProduk(ProdukVO produk) { + this.produk = produk; + } + + public Integer getProdukId() { + return produkId; + } + + public void setProdukId(Integer produkId) { + this.produkId = produkId; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + MapProdukPaketToProdukVO entity = (MapProdukPaketToProdukVO) o; + return Objects.equals(this.kdProfile, entity.kdProfile) + && Objects.equals(this.statusEnabled, entity.statusEnabled) && Objects.equals(this.noRec, entity.noRec) + && Objects.equals(this.produkPaket, entity.produkPaket) + && Objects.equals(this.produkPaketId, entity.produkPaketId) + && Objects.equals(this.produk, entity.produk) && Objects.equals(this.produkId, entity.produkId); + } + + @Override + public int hashCode() { + return Objects.hash(kdProfile, statusEnabled, noRec, produkPaket, produkPaketId, produk, produkId); + } + + @Override + public String toString() { + return getClass().getSimpleName() + "(" + "kdProfile = " + kdProfile + ", " + "statusEnabled = " + statusEnabled + + ", " + "noRec = " + noRec + ", " + "produkPaket = " + produkPaket + ", " + "produkPaketId = " + + produkPaketId + ", " + "produk = " + produk + ", " + "produkId = " + produkId + ")"; + } +} \ No newline at end of file diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/MapProdukPaketToProduk.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/MapProdukPaketToProduk.java index 7d3afa94..e996a883 100644 --- a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/MapProdukPaketToProduk.java +++ b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/MapProdukPaketToProduk.java @@ -5,6 +5,7 @@ import com.jasamedika.medifirst2000.helper.Caption; import javax.persistence.*; import javax.validation.constraints.NotNull; +import java.util.Objects; /** * @author Salman Manoe @@ -14,23 +15,83 @@ import javax.validation.constraints.NotNull; @Entity @Table(name = "mapprodukpakettoproduk_m") public class MapProdukPaketToProduk extends BaseTransaction { + private static final long serialVersionUID = 5665078811007370300L; - @ManyToOne - @JoinColumn(name = "produkpaketfk") - @NotNull(message = "Produk paket tidak boleh kosong") - @Caption(value = "Produk paket") - private Produk produkPaket; + @ManyToOne + @JoinColumn(name = "produkpaketfk") + @NotNull(message = "Produk paket tidak boleh kosong") + @Caption(value = "Produk paket") + private Produk produkPaket; - @Column(name = "produkpaketfk", insertable = false, updatable = false, nullable = false) - private Integer produkPaketId; + @Column(name = "produkpaketfk", insertable = false, updatable = false, nullable = false) + private Integer produkPaketId; - @ManyToOne - @JoinColumn(name = "produkfk") - @NotNull(message = "Produk tidak boleh kosong") - @Caption(value = "Produk") - private Produk produk; + @ManyToOne + @JoinColumn(name = "produkfk") + @NotNull(message = "Produk tidak boleh kosong") + @Caption(value = "Produk") + private Produk produk; - @Column(name = "produkfk", insertable = false, updatable = false, nullable = false) - private Integer produkId; + @Column(name = "produkfk", insertable = false, updatable = false, nullable = false) + private Integer produkId; + + public Produk getProdukPaket() { + return produkPaket; + } + + public void setProdukPaket(Produk produkPaket) { + this.produkPaket = produkPaket; + } + + public Integer getProdukPaketId() { + return produkPaketId; + } + + public void setProdukPaketId(Integer produkPaketId) { + this.produkPaketId = produkPaketId; + } + + public Produk getProduk() { + return produk; + } + + public void setProduk(Produk produk) { + this.produk = produk; + } + + public Integer getProdukId() { + return produkId; + } + + public void setProdukId(Integer produkId) { + this.produkId = produkId; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + + MapProdukPaketToProduk that = (MapProdukPaketToProduk) o; + + if (!Objects.equals(produkPaket, that.produkPaket)) + return false; + if (!Objects.equals(produkPaketId, that.produkPaketId)) + return false; + if (!Objects.equals(produk, that.produk)) + return false; + return Objects.equals(produkId, that.produkId); + } + + @Override + public int hashCode() { + int result = produkPaket != null ? produkPaket.hashCode() : 0; + result = 31 * result + (produkPaketId != null ? produkPaketId.hashCode() : 0); + result = 31 * result + (produk != null ? produk.hashCode() : 0); + result = 31 * result + (produkId != null ? produkId.hashCode() : 0); + return result; + } } diff --git a/jasamedika-pelayanan/src/main/java/com/jasamedika/medifirst2000/controller/MapProdukPaketController.java b/jasamedika-pelayanan/src/main/java/com/jasamedika/medifirst2000/controller/MapProdukPaketController.java new file mode 100644 index 00000000..0798f4f5 --- /dev/null +++ b/jasamedika-pelayanan/src/main/java/com/jasamedika/medifirst2000/controller/MapProdukPaketController.java @@ -0,0 +1,66 @@ +package com.jasamedika.medifirst2000.controller; + +import com.jasamedika.medifirst2000.controller.base.LocaleController; +import com.jasamedika.medifirst2000.dto.MapProdukPaketToProdukVO; +import com.jasamedika.medifirst2000.exception.ServiceVOException; +import com.jasamedika.medifirst2000.service.MapProdukPaketToProdukService; +import com.jasamedika.medifirst2000.util.rest.RestUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.validation.Valid; +import java.util.List; + +import static org.springframework.http.HttpStatus.CREATED; +import static org.springframework.http.HttpStatus.OK; +import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; +import static org.springframework.web.bind.annotation.RequestMethod.GET; +import static org.springframework.web.bind.annotation.RequestMethod.POST; + +/** + * @author Salman + * @version 1.0.0 + * @since 7 Aug 2023 + */ +@RestController +@RequestMapping("/paket-tindakan") +public class MapProdukPaketController extends LocaleController { + @Autowired + private MapProdukPaketToProdukService mapProdukPaketToProdukService; + + @RequestMapping(method = POST, consumes = APPLICATION_JSON_VALUE, produces = APPLICATION_JSON_VALUE) + public ResponseEntity save(@RequestBody @Valid MapProdukPaketToProdukVO vo) { + if (mapProdukPaketToProdukService.exists(vo)) + throw new ServiceVOException("Mapping sudah tersedia"); + mapProdukPaketToProdukService.save(vo); + return RestUtil.getJsonResponse(vo, CREATED, null); + } + + @RequestMapping(method = GET) + public ResponseEntity get() { + List data = mapProdukPaketToProdukService.get(); + return RestUtil.getJsonResponse(data, OK, null); + } + + @RequestMapping(value = "/{paketId}", method = GET) + public ResponseEntity get(@PathVariable Integer paketId) { + List data = mapProdukPaketToProdukService.getByPaket(paketId); + return RestUtil.getJsonResponse(data, OK, null); + } + + @RequestMapping(value = "/{id}", method = GET) + public ResponseEntity get(@PathVariable String id) { + MapProdukPaketToProdukVO data = mapProdukPaketToProdukService.get(id); + return RestUtil.getJsonResponse(data, OK, null); + } + + @RequestMapping(value = "/{id}", method = POST, consumes = APPLICATION_JSON_VALUE, produces = APPLICATION_JSON_VALUE) + public ResponseEntity delete(@PathVariable String id) { + boolean status = mapProdukPaketToProdukService.delete(id); + return RestUtil.getJsonResponse(status, OK, null); + } +}