From 878a14f8050414a11de24ccb2048efe81181ac87 Mon Sep 17 00:00:00 2001 From: "MSI\\derek" Date: Fri, 14 Mar 2025 17:43:40 +0800 Subject: [PATCH] update --- src/main/java/com/ffii/fpsms/enums/Enums.kt | 4 - .../fpsms/modules/master/entity/ItemType.kt | 15 ++++ .../master/entity/ItemTypeRepository.kt | 10 +++ .../master/entity/{Product.kt => Items.kt} | 22 ++---- .../modules/master/entity/ItemsRepository.kt | 11 +++ .../fpsms/modules/master/entity/Material.kt | 71 ----------------- .../master/entity/MaterialRepository.kt | 12 --- .../master/entity/ProductMaterialType.kt | 25 ------ .../entity/ProductMaterialTypeRepository.kt | 14 ---- .../master/entity/ProductMaterialUom.kt | 24 ------ .../entity/ProductMaterialUomRepository.kt | 17 ---- .../entity/ProductMaterialWeightUnit.kt | 29 ------- .../ProductMaterialWeightUnitRepository.kt | 12 --- .../master/entity/ProductRepository.kt | 10 --- .../modules/master/service/ItemTypeService.kt | 17 ++++ .../modules/master/service/ItemsService.kt | 72 +++++++++++++++++ .../modules/master/service/MaterialService.kt | 76 ------------------ .../service/ProductMaterialTypeService.kt | 48 ------------ .../service/ProductMaterialUomService.kt | 48 ------------ .../ProductMaterialWeightUnitService.kt | 48 ------------ .../modules/master/service/ProductService.kt | 75 ------------------ .../modules/master/web/ItemsController.kt | 28 +++++++ .../modules/master/web/MaterialController.kt | 28 ------- .../modules/master/web/ProductController.kt | 28 ------- .../master/web/models/MaterialResponse.kt | 9 --- .../master/web/models/MessageResponse.kt | 3 + ...ewMaterialRequest.kt => NewItemRequest.kt} | 22 ++---- .../master/web/models/NewProductRequest.kt | 30 -------- .../master/web/models/ProductResponse.kt | 9 --- .../20250304_01_derek/01_master_tables.sql | 77 ------------------- .../01_update_master_relation_tables.sql | 10 --- .../01_update_ProdMat_type_col.sql | 6 -- .../02_update_shelfLife_prodMat.sql | 9 --- .../03_drop_consum_product.sql | 6 -- .../changes/20250312_01_derek/01_master.sql | 54 +++++++++++++ 35 files changed, 222 insertions(+), 757 deletions(-) create mode 100644 src/main/java/com/ffii/fpsms/modules/master/entity/ItemType.kt create mode 100644 src/main/java/com/ffii/fpsms/modules/master/entity/ItemTypeRepository.kt rename src/main/java/com/ffii/fpsms/modules/master/entity/{Product.kt => Items.kt} (60%) create mode 100644 src/main/java/com/ffii/fpsms/modules/master/entity/ItemsRepository.kt delete mode 100644 src/main/java/com/ffii/fpsms/modules/master/entity/Material.kt delete mode 100644 src/main/java/com/ffii/fpsms/modules/master/entity/MaterialRepository.kt delete mode 100644 src/main/java/com/ffii/fpsms/modules/master/entity/ProductMaterialType.kt delete mode 100644 src/main/java/com/ffii/fpsms/modules/master/entity/ProductMaterialTypeRepository.kt delete mode 100644 src/main/java/com/ffii/fpsms/modules/master/entity/ProductMaterialUom.kt delete mode 100644 src/main/java/com/ffii/fpsms/modules/master/entity/ProductMaterialUomRepository.kt delete mode 100644 src/main/java/com/ffii/fpsms/modules/master/entity/ProductMaterialWeightUnit.kt delete mode 100644 src/main/java/com/ffii/fpsms/modules/master/entity/ProductMaterialWeightUnitRepository.kt delete mode 100644 src/main/java/com/ffii/fpsms/modules/master/entity/ProductRepository.kt create mode 100644 src/main/java/com/ffii/fpsms/modules/master/service/ItemTypeService.kt create mode 100644 src/main/java/com/ffii/fpsms/modules/master/service/ItemsService.kt delete mode 100644 src/main/java/com/ffii/fpsms/modules/master/service/MaterialService.kt delete mode 100644 src/main/java/com/ffii/fpsms/modules/master/service/ProductMaterialTypeService.kt delete mode 100644 src/main/java/com/ffii/fpsms/modules/master/service/ProductMaterialUomService.kt delete mode 100644 src/main/java/com/ffii/fpsms/modules/master/service/ProductMaterialWeightUnitService.kt delete mode 100644 src/main/java/com/ffii/fpsms/modules/master/service/ProductService.kt create mode 100644 src/main/java/com/ffii/fpsms/modules/master/web/ItemsController.kt delete mode 100644 src/main/java/com/ffii/fpsms/modules/master/web/MaterialController.kt delete mode 100644 src/main/java/com/ffii/fpsms/modules/master/web/ProductController.kt delete mode 100644 src/main/java/com/ffii/fpsms/modules/master/web/models/MaterialResponse.kt rename src/main/java/com/ffii/fpsms/modules/master/web/models/{NewMaterialRequest.kt => NewItemRequest.kt} (59%) delete mode 100644 src/main/java/com/ffii/fpsms/modules/master/web/models/NewProductRequest.kt delete mode 100644 src/main/java/com/ffii/fpsms/modules/master/web/models/ProductResponse.kt delete mode 100644 src/main/resources/db/changelog/changes/20250304_01_derek/01_master_tables.sql delete mode 100644 src/main/resources/db/changelog/changes/20250307_01_derek/01_update_master_relation_tables.sql delete mode 100644 src/main/resources/db/changelog/changes/20250310_01_derek/01_update_ProdMat_type_col.sql delete mode 100644 src/main/resources/db/changelog/changes/20250310_01_derek/02_update_shelfLife_prodMat.sql delete mode 100644 src/main/resources/db/changelog/changes/20250310_01_derek/03_drop_consum_product.sql create mode 100644 src/main/resources/db/changelog/changes/20250312_01_derek/01_master.sql diff --git a/src/main/java/com/ffii/fpsms/enums/Enums.kt b/src/main/java/com/ffii/fpsms/enums/Enums.kt index 5452e4a..ce93a3d 100644 --- a/src/main/java/com/ffii/fpsms/enums/Enums.kt +++ b/src/main/java/com/ffii/fpsms/enums/Enums.kt @@ -3,8 +3,4 @@ package com.ffii.fpsms.enums enum class Status(val value: Int) { PENDING(1), COMPLETE(2) -} -enum class RelationColumnType(val col: String) { - MATERIAL("materialId"), - PRODUCT("productId") } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/master/entity/ItemType.kt b/src/main/java/com/ffii/fpsms/modules/master/entity/ItemType.kt new file mode 100644 index 0000000..8c0479f --- /dev/null +++ b/src/main/java/com/ffii/fpsms/modules/master/entity/ItemType.kt @@ -0,0 +1,15 @@ +package com.ffii.fpsms.modules.master.entity + +import com.fasterxml.jackson.annotation.JsonBackReference +import com.ffii.core.entity.IdEntity +import jakarta.persistence.* +import jakarta.validation.constraints.NotNull + + +@Entity +@Table(name = "item_type") +open class ItemType: IdEntity() { + @NotNull + @Column(name = "name") + open var name: String? = null +} \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/master/entity/ItemTypeRepository.kt b/src/main/java/com/ffii/fpsms/modules/master/entity/ItemTypeRepository.kt new file mode 100644 index 0000000..ae84274 --- /dev/null +++ b/src/main/java/com/ffii/fpsms/modules/master/entity/ItemTypeRepository.kt @@ -0,0 +1,10 @@ +package com.ffii.fpsms.modules.master.entity + +import com.ffii.core.support.AbstractRepository +import org.springframework.stereotype.Repository +import org.springframework.transaction.annotation.Transactional + +@Repository +interface ItemTypeRepository : AbstractRepository { + +} \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/master/entity/Product.kt b/src/main/java/com/ffii/fpsms/modules/master/entity/Items.kt similarity index 60% rename from src/main/java/com/ffii/fpsms/modules/master/entity/Product.kt rename to src/main/java/com/ffii/fpsms/modules/master/entity/Items.kt index 0ad4270..1518c61 100644 --- a/src/main/java/com/ffii/fpsms/modules/master/entity/Product.kt +++ b/src/main/java/com/ffii/fpsms/modules/master/entity/Items.kt @@ -7,8 +7,8 @@ import jakarta.persistence.* import jakarta.validation.constraints.NotNull @Entity -@Table(name = "product") -open class Product : BaseEntity() { +@Table(name = "items") +open class Items : BaseEntity() { @NotNull @Column(name = "code") open var code: String? = null @@ -23,20 +23,10 @@ open class Product : BaseEntity() { @Column(name = "remarks") open var remarks: String? = null - @OneToMany(mappedBy = "product", cascade = [CascadeType.ALL], orphanRemoval = true) - @JsonManagedReference("product-weight-unit") - @JsonInclude(JsonInclude.Include.NON_NULL) - private val weightUnit: Set = HashSet() - - @OneToMany(mappedBy = "product", cascade = [CascadeType.ALL], orphanRemoval = true) - @JsonManagedReference("product-uom") - @JsonInclude(JsonInclude.Include.NON_NULL) - private val uom: Set = HashSet() - - @OneToMany(mappedBy = "product", cascade = [CascadeType.ALL], orphanRemoval = true) - @JsonManagedReference("product-uom") - @JsonInclude(JsonInclude.Include.NON_NULL) - private val type: Set = HashSet() +// (mappedBy = "items", cascade = [CascadeType.ALL], orphanRemoval = true) + @OneToOne + @JoinColumn(name = "typeId", referencedColumnName = "id") + open var type: ItemType? = null @Column(name = "shelfLife") open var shelfLife: Double? = null diff --git a/src/main/java/com/ffii/fpsms/modules/master/entity/ItemsRepository.kt b/src/main/java/com/ffii/fpsms/modules/master/entity/ItemsRepository.kt new file mode 100644 index 0000000..0ad7914 --- /dev/null +++ b/src/main/java/com/ffii/fpsms/modules/master/entity/ItemsRepository.kt @@ -0,0 +1,11 @@ +package com.ffii.fpsms.modules.master.entity + +import com.ffii.core.support.AbstractRepository +import org.springframework.stereotype.Repository + +@Repository +interface ItemsRepository : AbstractRepository { + fun findAllByDeletedFalse(): List; + fun findByIdAndTypeIdAndDeletedFalse(id: Long, typeId: Long): Items; + fun findByCodeAndTypeIdAndDeletedFalse(code: String, typeId: Long): Items?; +} \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/master/entity/Material.kt b/src/main/java/com/ffii/fpsms/modules/master/entity/Material.kt deleted file mode 100644 index 9c7b333..0000000 --- a/src/main/java/com/ffii/fpsms/modules/master/entity/Material.kt +++ /dev/null @@ -1,71 +0,0 @@ -package com.ffii.fpsms.modules.master.entity - -import com.fasterxml.jackson.annotation.JsonInclude -import com.fasterxml.jackson.annotation.JsonManagedReference -import com.ffii.core.entity.BaseEntity -import jakarta.persistence.* -import jakarta.validation.constraints.NotNull - -@Entity -@Table(name = "material") -open class Material : BaseEntity() { - @NotNull - @Column(name = "code") - open var code: String? = null - - @NotNull - @Column(name = "name") - open var name: String? = null - - @Column(name = "description") - open var description: String? = null - - @Column(name = "remarks") - open var remarks: String? = null - - @NotNull - @Column(name = "isConsumables") - open var isConsumables: Boolean? = null - - @OneToMany(mappedBy = "material", cascade = [CascadeType.ALL], orphanRemoval = true) - @JsonManagedReference("material-weight-unit") - @JsonInclude(JsonInclude.Include.NON_NULL) - private val weightUnit: Set = HashSet() - - @OneToMany(mappedBy = "material", cascade = [CascadeType.ALL], orphanRemoval = true) - @JsonManagedReference("material-uom") - @JsonInclude(JsonInclude.Include.NON_NULL) - private val uom: Set = HashSet() - - @OneToMany(mappedBy = "material", cascade = [CascadeType.ALL], orphanRemoval = true) - @JsonManagedReference("material-type") - @JsonInclude(JsonInclude.Include.NON_NULL) - private val type: Set = HashSet() - - @Column(name = "shelfLife") - open var shelfLife: Double? = null - - @Column(name = "countryOfOrigin") - open var countryOfOrigin: String? = null - - @Column(name = "minHumid") - open var minHumid: Double? = null - - @Column(name = "maxHumid") - open var maxHumid: Double? = null - - @Column(name = "minTemp") - open var minTemp: Double? = null - - @Column(name = "maxTemp") - open var maxTemp: Double? = null - - @Column(name = "sampleRate") - open var sampleRate: Double? = null - - @Column(name = "passingRate") - open var passingRate: Double? = null - - @Column(name = "netWeight") - open var netWeight: Double? = null -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/master/entity/MaterialRepository.kt b/src/main/java/com/ffii/fpsms/modules/master/entity/MaterialRepository.kt deleted file mode 100644 index 95b0e63..0000000 --- a/src/main/java/com/ffii/fpsms/modules/master/entity/MaterialRepository.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.ffii.fpsms.modules.master.entity - -import com.ffii.core.support.AbstractRepository -import org.springframework.stereotype.Repository -import java.util.Optional - -@Repository -interface MaterialRepository : AbstractRepository { - fun findAllByDeletedFalse(): List; - fun findByIdAndDeletedFalse(id: Long): Material; - fun findByCodeAndDeletedIsFalse(code: String): Material?; -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/master/entity/ProductMaterialType.kt b/src/main/java/com/ffii/fpsms/modules/master/entity/ProductMaterialType.kt deleted file mode 100644 index 35b93c8..0000000 --- a/src/main/java/com/ffii/fpsms/modules/master/entity/ProductMaterialType.kt +++ /dev/null @@ -1,25 +0,0 @@ -package com.ffii.fpsms.modules.master.entity - -import com.fasterxml.jackson.annotation.JsonBackReference -import com.ffii.core.entity.IdEntity -import jakarta.persistence.* -import jakarta.validation.constraints.NotNull - - -@Entity -@Table(name = "product_material_type") -open class ProductMaterialType: IdEntity() { - @ManyToOne - @JoinColumn(name = "productId") - @JsonBackReference - open var product: Product? = null - - @ManyToOne - @JoinColumn(name = "materialId") - @JsonBackReference - open var material: Material? = null - - @NotNull - @Column(name = "type") - open var type: String? = null -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/master/entity/ProductMaterialTypeRepository.kt b/src/main/java/com/ffii/fpsms/modules/master/entity/ProductMaterialTypeRepository.kt deleted file mode 100644 index 5d336aa..0000000 --- a/src/main/java/com/ffii/fpsms/modules/master/entity/ProductMaterialTypeRepository.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.ffii.fpsms.modules.master.entity - -import com.ffii.core.support.AbstractRepository -import org.springframework.stereotype.Repository -import org.springframework.transaction.annotation.Transactional -import java.util.Optional - -@Repository -interface ProductMaterialTypeRepository : AbstractRepository { - @Transactional - fun deleteAllByMaterialId(id: Long) - @Transactional - fun deleteAllByProductId(id: Long) -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/master/entity/ProductMaterialUom.kt b/src/main/java/com/ffii/fpsms/modules/master/entity/ProductMaterialUom.kt deleted file mode 100644 index 645006e..0000000 --- a/src/main/java/com/ffii/fpsms/modules/master/entity/ProductMaterialUom.kt +++ /dev/null @@ -1,24 +0,0 @@ -package com.ffii.fpsms.modules.master.entity - -import com.fasterxml.jackson.annotation.JsonBackReference -import com.ffii.core.entity.IdEntity -import jakarta.persistence.* -import jakarta.validation.constraints.NotNull - -@Entity -@Table(name = "product_material_uom") -open class ProductMaterialUom: IdEntity() { - @ManyToOne - @JoinColumn(name = "productId") - @JsonBackReference - open var product: Product? = null - - @ManyToOne - @JoinColumn(name = "materialId") - @JsonBackReference - open var material: Material? = null - - @NotNull - @Column(name = "uom") - open var uom: String? = null -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/master/entity/ProductMaterialUomRepository.kt b/src/main/java/com/ffii/fpsms/modules/master/entity/ProductMaterialUomRepository.kt deleted file mode 100644 index 1d56edb..0000000 --- a/src/main/java/com/ffii/fpsms/modules/master/entity/ProductMaterialUomRepository.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.ffii.fpsms.modules.master.entity - -import com.ffii.core.support.AbstractRepository -import org.springframework.data.jpa.repository.Modifying -import org.springframework.data.jpa.repository.Query -import org.springframework.stereotype.Repository -import org.springframework.transaction.annotation.Transactional - - -@Repository -interface ProductMaterialUomRepository : AbstractRepository { - - @Transactional - fun deleteAllByMaterialId(id: Long) - @Transactional - fun deleteAllByProductId(id: Long) -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/master/entity/ProductMaterialWeightUnit.kt b/src/main/java/com/ffii/fpsms/modules/master/entity/ProductMaterialWeightUnit.kt deleted file mode 100644 index d0b181c..0000000 --- a/src/main/java/com/ffii/fpsms/modules/master/entity/ProductMaterialWeightUnit.kt +++ /dev/null @@ -1,29 +0,0 @@ -package com.ffii.fpsms.modules.master.entity - -import com.fasterxml.jackson.annotation.JsonBackReference -import com.ffii.core.entity.IdEntity -import jakarta.persistence.* -import jakarta.validation.constraints.NotNull - -@Entity -@Table(name = "product_material_weightUnit") -open class ProductMaterialWeightUnit: IdEntity() { - @ManyToOne - @JoinColumn(name = "productId") - @JsonBackReference - open var product: Product? = null - - @ManyToOne - @JoinColumn(name = "materialId") - @JsonBackReference - open var material: Material? = null - - @NotNull - @Column(name = "weightUnit") - open var weightUnit: String? = null - - @NotNull - @Column(name = "conversion") - open var conversion: Double? = null - -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/master/entity/ProductMaterialWeightUnitRepository.kt b/src/main/java/com/ffii/fpsms/modules/master/entity/ProductMaterialWeightUnitRepository.kt deleted file mode 100644 index cfb4f65..0000000 --- a/src/main/java/com/ffii/fpsms/modules/master/entity/ProductMaterialWeightUnitRepository.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.ffii.fpsms.modules.master.entity - -import com.ffii.core.support.AbstractRepository -import org.springframework.stereotype.Repository -import org.springframework.transaction.annotation.Transactional -@Repository -interface ProductMaterialWeightUnitRepository : AbstractRepository { - @Transactional - fun deleteAllByMaterialId(id: Long) - @Transactional - fun deleteAllByProductId(id: Long) -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/master/entity/ProductRepository.kt b/src/main/java/com/ffii/fpsms/modules/master/entity/ProductRepository.kt deleted file mode 100644 index 9fb9e6a..0000000 --- a/src/main/java/com/ffii/fpsms/modules/master/entity/ProductRepository.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.ffii.fpsms.modules.master.entity - -import com.ffii.core.support.AbstractRepository - -interface ProductRepository: AbstractRepository { - fun findAllByDeletedFalse(): List; - - fun findByIdAndDeletedFalse(id: Long): Product; - fun findByCodeAndDeletedIsFalse(code: String): Product?; -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/master/service/ItemTypeService.kt b/src/main/java/com/ffii/fpsms/modules/master/service/ItemTypeService.kt new file mode 100644 index 0000000..c2fde5e --- /dev/null +++ b/src/main/java/com/ffii/fpsms/modules/master/service/ItemTypeService.kt @@ -0,0 +1,17 @@ +package com.ffii.fpsms.modules.master.service + +import com.ffii.core.support.AbstractBaseEntityService +import com.ffii.core.support.AbstractIdEntityService +import com.ffii.core.support.JdbcDao +import com.ffii.fpsms.modules.master.entity.* +import com.ffii.fpsms.modules.master.web.models.MessageResponse +import org.springframework.stereotype.Service +import org.springframework.transaction.annotation.Transactional + +@Service +open class ItemTypeService( + private val jdbcDao: JdbcDao, + private val itemTypeRepository: ItemTypeRepository +): AbstractIdEntityService(jdbcDao, itemTypeRepository) { + +} \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/master/service/ItemsService.kt b/src/main/java/com/ffii/fpsms/modules/master/service/ItemsService.kt new file mode 100644 index 0000000..43be574 --- /dev/null +++ b/src/main/java/com/ffii/fpsms/modules/master/service/ItemsService.kt @@ -0,0 +1,72 @@ +package com.ffii.fpsms.modules.master.service + +import com.ffii.core.support.AbstractBaseEntityService +import com.ffii.core.support.JdbcDao +import com.ffii.fpsms.modules.master.entity.ItemTypeRepository +import com.ffii.fpsms.modules.master.entity.Items +import com.ffii.fpsms.modules.master.entity.ItemsRepository +import com.ffii.fpsms.modules.master.web.models.MessageResponse +import com.ffii.fpsms.modules.master.web.models.NewItemRequest +import org.springframework.stereotype.Service +import org.springframework.transaction.annotation.Transactional +import kotlin.jvm.optionals.getOrNull + +@Service +open class ItemsService( + private val jdbcDao: JdbcDao, + private val itemsRepository: ItemsRepository, + private val itemTypeRepository: ItemTypeRepository, +): AbstractBaseEntityService(jdbcDao, itemsRepository) { + // do mapping with projection + open fun allItems(): List { + // TODO: Replace by actual logic + val items = itemsRepository.findAll() + return items + } + open fun getItem(id: Long): Items? { + return itemsRepository.findById(id).getOrNull() + } + @Transactional + open fun saveItem(request: NewItemRequest): MessageResponse { + val type = itemTypeRepository.findById(request.typeId).get() + val duplicatedItem = itemsRepository.findByCodeAndTypeIdAndDeletedFalse(request.code, request.typeId) + if (duplicatedItem != null && duplicatedItem.id != request.id) { + return MessageResponse( + id = request.id, + code = request.code, + name = request.name, + type = type.name, + message = "The item code has already existed", + errorPosition = "code" + ) + } + val item = if (request.id != null && request.id > 0) itemsRepository.findByIdAndTypeIdAndDeletedFalse(request.id, request.typeId) + else Items() + println(request.netWeight) + item.apply { + code = request.code + name = request.name + description = request.description + remarks = request.remarks + shelfLife = request.shelfLife + countryOfOrigin = request.countryOfOrigin + minHumid = request.minHumid + maxHumid = request.maxHumid + minTemp = request.minTemp + maxTemp = request.maxTemp + sampleRate = request.sampleRate + passingRate = request.passingRate + netWeight = request.netWeight + this.type = type + } + val savedItem = itemsRepository.saveAndFlush(item) + return MessageResponse( + id = savedItem.id, + name = savedItem.name, + code = savedItem.code, + type = type.name, + message = "Item Save Success", + errorPosition = null, + ) + } +} \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/master/service/MaterialService.kt b/src/main/java/com/ffii/fpsms/modules/master/service/MaterialService.kt deleted file mode 100644 index fd912e8..0000000 --- a/src/main/java/com/ffii/fpsms/modules/master/service/MaterialService.kt +++ /dev/null @@ -1,76 +0,0 @@ -package com.ffii.fpsms.modules.master.service - -import com.ffii.core.support.AbstractBaseEntityService -import com.ffii.core.support.JdbcDao -import com.ffii.fpsms.enums.RelationColumnType -import com.ffii.fpsms.modules.master.entity.Material -import com.ffii.fpsms.modules.master.entity.MaterialRepository -import com.ffii.fpsms.modules.master.web.models.NewMaterialRequest -import com.ffii.fpsms.modules.master.web.models.NewMaterialResponse -import org.springframework.stereotype.Service -import org.springframework.transaction.annotation.Transactional -import kotlin.jvm.optionals.getOrNull - -@Service -open class MaterialService( - private val jdbcDao: JdbcDao, - private val materialRepository: MaterialRepository, - private val uomService: ProductMaterialUomService, - private val typeService: ProductMaterialTypeService, - private val weightUnitService: ProductMaterialWeightUnitService, -): AbstractBaseEntityService(jdbcDao, materialRepository) { - // do mapping with projection - open fun allMaterials(): List { - // TODO: Replace by actual logic - val materials = materialRepository.findAll() - return materials - } - open fun getMaterial(id: Long): Material? { - return materialRepository.findById(id).getOrNull() - } - @Transactional - open fun saveMaterial(request: NewMaterialRequest): NewMaterialResponse { - val duplicateMaterial = materialRepository.findByCodeAndDeletedIsFalse(request.code) - val material = - if (request.id != null && request.id > 0) materialRepository.findByIdAndDeletedFalse(request.id) - else Material() - if (duplicateMaterial != null && duplicateMaterial.id != request.id) { - return NewMaterialResponse( - id = request.id, - code = request.code, - name = request.name, - message = "The material code has already existed", - errorPosition = "code" - ) - } - material.apply { - code = request.code - name = request.name - isConsumables = request.isConsumables - description = request.description - remarks = request.remarks - shelfLife = request.shelfLife - countryOfOrigin = request.countryOfOrigin - minHumid = request.minHumid - maxHumid = request.maxHumid - minTemp = request.minTemp - maxTemp = request.maxTemp - sampleRate = request.sampleRate - passingRate = request.passingRate - netWeight = request.netWeight - } - val savedMaterial = materialRepository.saveAndFlush(material) - - val columnName = RelationColumnType.MATERIAL - if (!request.uom.isNullOrEmpty()) uomService.saveUom(savedMaterial.id!!, columnName, request.uom) - if (!request.weightUnit.isNullOrEmpty()) weightUnitService.saveWeightUnit(savedMaterial.id!!, columnName, request.weightUnit) - if (!request.type.isNullOrEmpty()) typeService.saveType(savedMaterial.id!!, columnName, request.type) - return NewMaterialResponse( - id = savedMaterial.id, - name = savedMaterial.name, - code = savedMaterial.code, - message = "Material Save Success", - errorPosition = null, - ) - } -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/master/service/ProductMaterialTypeService.kt b/src/main/java/com/ffii/fpsms/modules/master/service/ProductMaterialTypeService.kt deleted file mode 100644 index 40dde94..0000000 --- a/src/main/java/com/ffii/fpsms/modules/master/service/ProductMaterialTypeService.kt +++ /dev/null @@ -1,48 +0,0 @@ -package com.ffii.fpsms.modules.master.service - -import com.ffii.core.support.JdbcDao -import com.ffii.fpsms.enums.RelationColumnType -import com.ffii.fpsms.modules.master.entity.* -import com.ffii.fpsms.modules.master.web.models.MessageResponse -import com.ffii.fpsms.modules.master.web.models.NewTypeRequest -import com.ffii.fpsms.modules.master.web.models.NewWeightUnitRequest -import org.springframework.stereotype.Service -import org.springframework.transaction.annotation.Transactional - -@Service -open class ProductMaterialTypeService( - private val jdbcDao: JdbcDao, - private val materialRepository: MaterialRepository, - private val productRepository: ProductRepository, - private val productMaterialTypeRepository: ProductMaterialTypeRepository - ) { - @Transactional - open fun saveType(id: Long, columnType: RelationColumnType, typeList: List): MessageResponse { - var material: Material? = null - var product: Product? = null - when (columnType) { - RelationColumnType.MATERIAL -> { - productMaterialTypeRepository.deleteAllByMaterialId(id) - material = materialRepository.findByIdAndDeletedFalse(id) - } - RelationColumnType.PRODUCT -> { - productMaterialTypeRepository.deleteAllByProductId(id) - product = productRepository.findByIdAndDeletedFalse(id) - } - } - val entries = mutableListOf() - for (entry in typeList) { - entries += ProductMaterialType().apply { - this.material = material - this.product = product - type = entry.type - } - } - productMaterialTypeRepository.saveAll(entries) - return MessageResponse( - id = id, - message = "Weight unit save success", - errorPosition = null - ) - } -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/master/service/ProductMaterialUomService.kt b/src/main/java/com/ffii/fpsms/modules/master/service/ProductMaterialUomService.kt deleted file mode 100644 index 6dd0f00..0000000 --- a/src/main/java/com/ffii/fpsms/modules/master/service/ProductMaterialUomService.kt +++ /dev/null @@ -1,48 +0,0 @@ -package com.ffii.fpsms.modules.master.service - -import com.ffii.core.support.AbstractIdEntityService -import com.ffii.core.support.JdbcDao -import com.ffii.fpsms.enums.RelationColumnType -import com.ffii.fpsms.modules.master.entity.* -import com.ffii.fpsms.modules.master.web.models.MessageResponse -import com.ffii.fpsms.modules.master.web.models.NewUomRequest -import org.springframework.stereotype.Service -import org.springframework.transaction.annotation.Transactional - -@Service -open class ProductMaterialUomService( - private val jdbcDao: JdbcDao, - private val uomRepository: ProductMaterialUomRepository, - private val materialRepository: MaterialRepository, - private val productRepository: ProductRepository, - ): AbstractIdEntityService(jdbcDao, uomRepository) { - @Transactional - open fun saveUom(id: Long, columnType: RelationColumnType, uomList: List): MessageResponse { - var material: Material? = null - var product: Product? = null - when (columnType) { - RelationColumnType.MATERIAL -> { - uomRepository.deleteAllByMaterialId(id) - material = materialRepository.findByIdAndDeletedFalse(id) - } - RelationColumnType.PRODUCT -> { - uomRepository.deleteAllByProductId(id) - product = productRepository.findByIdAndDeletedFalse(id) - } - } - val entries = mutableListOf() - for (entry in uomList) { - entries += ProductMaterialUom().apply { - this.material = material - this.product = product - uom = entry.uom - } - } - uomRepository.saveAll(entries) - return MessageResponse( - id = id, - message = "Uom save success", - errorPosition = null - ) - } -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/master/service/ProductMaterialWeightUnitService.kt b/src/main/java/com/ffii/fpsms/modules/master/service/ProductMaterialWeightUnitService.kt deleted file mode 100644 index 4ddebda..0000000 --- a/src/main/java/com/ffii/fpsms/modules/master/service/ProductMaterialWeightUnitService.kt +++ /dev/null @@ -1,48 +0,0 @@ -package com.ffii.fpsms.modules.master.service - -import com.ffii.core.support.JdbcDao -import com.ffii.fpsms.enums.RelationColumnType -import com.ffii.fpsms.modules.master.entity.* -import com.ffii.fpsms.modules.master.web.models.MessageResponse -import com.ffii.fpsms.modules.master.web.models.NewWeightUnitRequest -import org.springframework.stereotype.Service -import org.springframework.transaction.annotation.Transactional - -@Service -open class ProductMaterialWeightUnitService( - private val jdbcDao: JdbcDao, - private val weightUnitRepository: ProductMaterialWeightUnitRepository, - private val materialRepository: MaterialRepository, - private val productRepository: ProductRepository, - ) { - @Transactional - open fun saveWeightUnit(id: Long, columnType: RelationColumnType, weightUnits: List): MessageResponse { - var material: Material? = null - var product: Product? = null - when (columnType) { - RelationColumnType.MATERIAL -> { - weightUnitRepository.deleteAllByMaterialId(id) - material = materialRepository.findByIdAndDeletedFalse(id) - } - RelationColumnType.PRODUCT -> { - weightUnitRepository.deleteAllByProductId(id) - product = productRepository.findByIdAndDeletedFalse(id) - } - } - val entries = mutableListOf() - for (entry in weightUnits) { - entries += ProductMaterialWeightUnit().apply { - this.material = material - this.product = product - weightUnit = entry.weightUnit - conversion = entry.conversion - } - } - weightUnitRepository.saveAll(entries) - return MessageResponse( - id = id, - message = "Weight unit save success", - errorPosition = null - ) - } -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/master/service/ProductService.kt b/src/main/java/com/ffii/fpsms/modules/master/service/ProductService.kt deleted file mode 100644 index 68f807f..0000000 --- a/src/main/java/com/ffii/fpsms/modules/master/service/ProductService.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.ffii.fpsms.modules.master.service - -import com.ffii.core.support.AbstractBaseEntityService -import com.ffii.core.support.JdbcDao -import com.ffii.fpsms.enums.RelationColumnType -import com.ffii.fpsms.modules.master.entity.Product -import com.ffii.fpsms.modules.master.entity.ProductRepository -import com.ffii.fpsms.modules.master.web.models.NewProductRequest -import com.ffii.fpsms.modules.master.web.models.NewProductResponse -import org.springframework.stereotype.Service -import org.springframework.transaction.annotation.Transactional -import kotlin.jvm.optionals.getOrNull - -@Service -open class ProductService( - private val jdbcDao: JdbcDao, - private val productRepository: ProductRepository, - private val uomService: ProductMaterialUomService, - private val typeService: ProductMaterialTypeService, - private val weightUnitService: ProductMaterialWeightUnitService, -): AbstractBaseEntityService(jdbcDao, productRepository) { - // do mapping with projection - open fun allProduct(): List { - // TODO: Replace by actual logic - val materials = productRepository.findAll() - return materials - } - open fun getProduct(id: Long): Product? { - return productRepository.findById(id).getOrNull() - } - @Transactional - open fun saveProduct(request: NewProductRequest): NewProductResponse { - val duplicateProduct = productRepository.findByCodeAndDeletedIsFalse(request.code) - val product = - if (request.id != null && request.id > 0) productRepository.findByIdAndDeletedFalse(request.id) - else Product() - if (duplicateProduct != null && duplicateProduct.id != request.id) { - return NewProductResponse( - id = request.id, - code = request.code, - name = request.name, - message = "The product code has already existed", - errorPosition = "code" - ) - } - product.apply { - code = request.code - name = request.name - description = request.description - remarks = request.remarks - shelfLife = request.shelfLife - countryOfOrigin = request.countryOfOrigin - minHumid = request.minHumid - maxHumid = request.maxHumid - minTemp = request.minTemp - maxTemp = request.maxTemp - sampleRate = request.sampleRate - passingRate = request.passingRate - netWeight = request.netWeight - } - val savedProduct = productRepository.saveAndFlush(product) - - val columnName = RelationColumnType.PRODUCT - if (!request.uom.isNullOrEmpty()) uomService.saveUom(savedProduct.id!!, columnName, request.uom) - if (!request.weightUnit.isNullOrEmpty()) weightUnitService.saveWeightUnit(savedProduct.id!!, columnName, request.weightUnit) - if (!request.type.isNullOrEmpty()) typeService.saveType(savedProduct.id!!, columnName, request.type) - return NewProductResponse( - id = savedProduct.id, - name = savedProduct.name, - code = savedProduct.code, - message = "Product Save Success", - errorPosition = null, - ) - } -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/master/web/ItemsController.kt b/src/main/java/com/ffii/fpsms/modules/master/web/ItemsController.kt new file mode 100644 index 0000000..2398452 --- /dev/null +++ b/src/main/java/com/ffii/fpsms/modules/master/web/ItemsController.kt @@ -0,0 +1,28 @@ +package com.ffii.fpsms.modules.master.web + +import com.ffii.core.exception.NotFoundException +import com.ffii.fpsms.modules.master.entity.Items +import com.ffii.fpsms.modules.master.service.ItemsService +import com.ffii.fpsms.modules.master.web.models.MessageResponse +import com.ffii.fpsms.modules.master.web.models.NewItemRequest +import jakarta.validation.Valid +import org.springframework.web.bind.annotation.* + +@RestController +@RequestMapping("/items") +class ItemsController( + private val materialService: ItemsService +) { + @GetMapping + fun allItems(): List { + return materialService.allItems() + } + @GetMapping("/details/{id}") + fun getItems(@PathVariable id: Long): Items { + return materialService.getItem(id) ?: throw NotFoundException() + } + @PostMapping("/new") + fun saveItem(@Valid @RequestBody newItem: NewItemRequest): MessageResponse { + return materialService.saveItem(newItem) + } +} \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/master/web/MaterialController.kt b/src/main/java/com/ffii/fpsms/modules/master/web/MaterialController.kt deleted file mode 100644 index 99fbdb3..0000000 --- a/src/main/java/com/ffii/fpsms/modules/master/web/MaterialController.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.ffii.fpsms.modules.master.web - -import com.ffii.core.exception.NotFoundException -import com.ffii.fpsms.modules.master.entity.Material -import com.ffii.fpsms.modules.master.service.MaterialService -import com.ffii.fpsms.modules.master.web.models.NewMaterialRequest -import com.ffii.fpsms.modules.master.web.models.NewMaterialResponse -import jakarta.validation.Valid -import org.springframework.web.bind.annotation.* - -@RestController -@RequestMapping("/material") -class MaterialController( - private val materialService: MaterialService -) { - @GetMapping - fun allMaterial(): List { - return materialService.allMaterials() - } - @GetMapping("/details/{id}") - fun getMaterial(@PathVariable id: Long): Material { - return materialService.getMaterial(id) ?: throw NotFoundException() - } - @PostMapping("/new") - fun saveMaterial(@Valid @RequestBody newMaterial: NewMaterialRequest): NewMaterialResponse { - return materialService.saveMaterial(newMaterial) - } -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/master/web/ProductController.kt b/src/main/java/com/ffii/fpsms/modules/master/web/ProductController.kt deleted file mode 100644 index 1b26969..0000000 --- a/src/main/java/com/ffii/fpsms/modules/master/web/ProductController.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.ffii.fpsms.modules.master.web - -import com.ffii.core.exception.NotFoundException -import com.ffii.fpsms.modules.master.entity.Product -import com.ffii.fpsms.modules.master.service.ProductService -import com.ffii.fpsms.modules.master.web.models.NewProductRequest -import com.ffii.fpsms.modules.master.web.models.NewProductResponse -import jakarta.validation.Valid -import org.springframework.web.bind.annotation.* - -@RestController -@RequestMapping("/product") -class ProductController( - private val productService: ProductService -) { - @GetMapping - fun allProduct(): List { - return productService.allProduct() - } - @GetMapping("/details/{id}") - fun getProduct(@PathVariable id: Long): Product { - return productService.getProduct(id) ?: throw NotFoundException() - } - @PostMapping("/new") - fun saveProduct(@Valid @RequestBody newProduct: NewProductRequest): NewProductResponse { - return productService.saveProduct(newProduct) - } -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/master/web/models/MaterialResponse.kt b/src/main/java/com/ffii/fpsms/modules/master/web/models/MaterialResponse.kt deleted file mode 100644 index cd45bf9..0000000 --- a/src/main/java/com/ffii/fpsms/modules/master/web/models/MaterialResponse.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.ffii.fpsms.modules.master.web.models - -data class NewMaterialResponse( - val id: Long?, - val name: String?, - val code: String?, - val message: String?, // e.g. duplicated code - val errorPosition: String?, //error field -) diff --git a/src/main/java/com/ffii/fpsms/modules/master/web/models/MessageResponse.kt b/src/main/java/com/ffii/fpsms/modules/master/web/models/MessageResponse.kt index aac1139..6c76d19 100644 --- a/src/main/java/com/ffii/fpsms/modules/master/web/models/MessageResponse.kt +++ b/src/main/java/com/ffii/fpsms/modules/master/web/models/MessageResponse.kt @@ -2,6 +2,9 @@ package com.ffii.fpsms.modules.master.web.models data class MessageResponse( val id: Long?, + val name: String?, + val code: String?, + val type: String?, val message: String?, val errorPosition: String?, // e.g. duplicated code ) \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/master/web/models/NewMaterialRequest.kt b/src/main/java/com/ffii/fpsms/modules/master/web/models/NewItemRequest.kt similarity index 59% rename from src/main/java/com/ffii/fpsms/modules/master/web/models/NewMaterialRequest.kt rename to src/main/java/com/ffii/fpsms/modules/master/web/models/NewItemRequest.kt index aa4e9bc..1d808ff 100644 --- a/src/main/java/com/ffii/fpsms/modules/master/web/models/NewMaterialRequest.kt +++ b/src/main/java/com/ffii/fpsms/modules/master/web/models/NewItemRequest.kt @@ -3,13 +3,13 @@ package com.ffii.fpsms.modules.master.web.models import jakarta.validation.constraints.NotBlank import jakarta.validation.constraints.NotNull -data class NewMaterialRequest( +data class NewItemRequest( @field:NotBlank(message = "material code cannot be empty") val code: String, @field:NotBlank(message = "material name cannot be empty") val name: String, - @field:NotNull(message = "isConsumables cannot be null") - val isConsumables: Boolean, + @field:NotNull(message = "typeId cannot be null") + val typeId: Long, val id: Long?, val description: String?, @@ -23,18 +23,8 @@ data class NewMaterialRequest( val sampleRate: Double?, val passingRate: Double?, val netWeight: Double?, - val type: List?, - val uom: List?, - val weightUnit: List?, +// val type: List?, +// val uom: List?, +// val weightUnit: List?, ) -data class NewUomRequest( - val uom: String -) -data class NewTypeRequest( - val type: String, -) -data class NewWeightUnitRequest( - val conversion: Double?, - val weightUnit: String, -) diff --git a/src/main/java/com/ffii/fpsms/modules/master/web/models/NewProductRequest.kt b/src/main/java/com/ffii/fpsms/modules/master/web/models/NewProductRequest.kt deleted file mode 100644 index eae457b..0000000 --- a/src/main/java/com/ffii/fpsms/modules/master/web/models/NewProductRequest.kt +++ /dev/null @@ -1,30 +0,0 @@ -package com.ffii.fpsms.modules.master.web.models - -import jakarta.validation.constraints.NotBlank -import jakarta.validation.constraints.NotNull - -data class NewProductRequest( - - @field:NotBlank(message = "product name cannot be empty") - val code: String, - @field:NotBlank(message = "product name cannot be empty") - val name: String, - @field:NotNull(message = "isConsumables cannot be empty") - val isConsumables: Boolean, - - val id: Long?, - val description: String?, - val remarks: String?, - val shelfLife: Double?, - val countryOfOrigin: String?, - val minHumid: Double?, - val maxHumid: Double?, - val minTemp: Double?, - val maxTemp: Double?, - val sampleRate: Double?, - val passingRate: Double?, - val netWeight: Double?, - val type: List?, - val uom: List?, - val weightUnit: List?, -) diff --git a/src/main/java/com/ffii/fpsms/modules/master/web/models/ProductResponse.kt b/src/main/java/com/ffii/fpsms/modules/master/web/models/ProductResponse.kt deleted file mode 100644 index adc4a3c..0000000 --- a/src/main/java/com/ffii/fpsms/modules/master/web/models/ProductResponse.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.ffii.fpsms.modules.master.web.models - -data class NewProductResponse( - val id: Long?, - val name: String?, - val code: String?, - val message: String?, - val errorPosition: String?, // e.g. duplicated code -) \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/20250304_01_derek/01_master_tables.sql b/src/main/resources/db/changelog/changes/20250304_01_derek/01_master_tables.sql deleted file mode 100644 index 7d937a1..0000000 --- a/src/main/resources/db/changelog/changes/20250304_01_derek/01_master_tables.sql +++ /dev/null @@ -1,77 +0,0 @@ --- liquibase formatted sql - --- changeset derek:material and product -CREATE TABLE material ( - id INT NOT NULL AUTO_INCREMENT, - version INT NOT NULL DEFAULT '0', - created datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - createdBy VARCHAR(30) NULL, - modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - modifiedBy VARCHAR(30) NULL, - deleted TINYINT(1) NOT NULL DEFAULT '0', - `code` VARCHAR(50) NOT NULL, - `name` VARCHAR(50) NOT NULL, - description VARCHAR(100) NULL, - remarks varchar(500) NULL, - isConsumables TINYINT(1) NOT NULL default 0, - shelfLife INT(11) NULL, - countryOfOrigin varchar(50) NULL, - minHumid DECIMAL(16,2) NULL, - maxHumid DECIMAL(16,2) NULL, - minTemp DECIMAL(16,2) NULL, - maxTemp DECIMAL(16,2) NULL, - sampleRate DECIMAL(16,2) NULL, - passingRate DECIMAL(16,2) NULL, - netWeight DECIMAL(16,2) NULL, - CONSTRAINT pk_material PRIMARY KEY (id) -); - -CREATE TABLE product ( - id INT NOT NULL AUTO_INCREMENT, - version INT NOT NULL DEFAULT '0', - created datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - createdBy VARCHAR(30) NULL, - modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - modifiedBy VARCHAR(30) NULL, - deleted TINYINT(1) NOT NULL DEFAULT '0', - `code` VARCHAR(50) NOT NULL, - `name` VARCHAR(50) NOT NULL, - description VARCHAR(100) NULL, - remarks varchar(500) NULL, - isConsumables TINYINT(1) NOT NULL default 0, - shelfLife INT(11) NULL, - countryOfOrigin varchar(50) NULL, - minHumid DECIMAL(16,2) NULL, - maxHumid DECIMAL(16,2) NULL, - minTemp DECIMAL(16,2) NULL, - maxTemp DECIMAL(16,2) NULL, - sampleRate DECIMAL(16,2) NULL, - passingRate DECIMAL(16,2) NULL, - netWeight DECIMAL(16,2) NULL, - CONSTRAINT pk_product PRIMARY KEY (id) -); - -CREATE TABLE product_material_weightUnit ( - productId INT NULL, - materialId INT NULL, - weightUnit VARCHAR(30) NOT NULL, - conversion DECIMAL(16,2) NOT NULL DEFAULT 1 - -); -CREATE TABLE product_material_uom ( - productId INT NULL, - materialId INT NULL, - uom VARCHAR(30) NOT NULL -); -CREATE TABLE product_material_type ( - productId INT NULL, - materialId INT NULL, - name VARCHAR(30) NOT NULL -); - -ALTER TABLE product_material_weightUnit ADD CONSTRAINT FK_PRODUCT_ON_WEIGHTUNIT FOREIGN KEY (productId) REFERENCES product (id); -ALTER TABLE product_material_weightUnit ADD CONSTRAINT FK_MATERIAL_ON_WEIGHTUNIT FOREIGN KEY (materialId) REFERENCES material (id); -ALTER TABLE product_material_uom ADD CONSTRAINT FK_PRODUCT_ON_UOM FOREIGN KEY (productId) REFERENCES product (id); -ALTER TABLE product_material_uom ADD CONSTRAINT FK_MATERIAL_ON_UOM FOREIGN KEY (materialId) REFERENCES material (id); -ALTER TABLE product_material_type ADD CONSTRAINT FK_PRODUCT_ON_TYPE FOREIGN KEY (productId) REFERENCES product (id); -ALTER TABLE product_material_type ADD CONSTRAINT FK_MATERIAL_ON_TYPE FOREIGN KEY (materialId) REFERENCES material (id); diff --git a/src/main/resources/db/changelog/changes/20250307_01_derek/01_update_master_relation_tables.sql b/src/main/resources/db/changelog/changes/20250307_01_derek/01_update_master_relation_tables.sql deleted file mode 100644 index 6f6399c..0000000 --- a/src/main/resources/db/changelog/changes/20250307_01_derek/01_update_master_relation_tables.sql +++ /dev/null @@ -1,10 +0,0 @@ --- liquibase formatted sql - --- changeset derek:update_master_relation_tables - -ALTER TABLE `product_material_type` -ADD COLUMN `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST; -ALTER TABLE `product_material_uom` -ADD COLUMN `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST; -ALTER TABLE `product_material_weightUnit` -ADD COLUMN `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST; \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/20250310_01_derek/01_update_ProdMat_type_col.sql b/src/main/resources/db/changelog/changes/20250310_01_derek/01_update_ProdMat_type_col.sql deleted file mode 100644 index 9f4472f..0000000 --- a/src/main/resources/db/changelog/changes/20250310_01_derek/01_update_ProdMat_type_col.sql +++ /dev/null @@ -1,6 +0,0 @@ --- liquibase formatted sql - --- changeset derek:update ProdMat type col name - -ALTER TABLE `product_material_type` -CHANGE COLUMN `name` `type` VARCHAR(30) NOT NULL; \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/20250310_01_derek/02_update_shelfLife_prodMat.sql b/src/main/resources/db/changelog/changes/20250310_01_derek/02_update_shelfLife_prodMat.sql deleted file mode 100644 index faca964..0000000 --- a/src/main/resources/db/changelog/changes/20250310_01_derek/02_update_shelfLife_prodMat.sql +++ /dev/null @@ -1,9 +0,0 @@ --- liquibase formatted sql - --- changeset derek:update ProdMat shelfLife col name - -ALTER TABLE `product` -CHANGE COLUMN `shelfLife` `shelfLife` DECIMAL(14,1) NOT NULL; - -ALTER TABLE `material` -CHANGE COLUMN `shelfLife` `shelfLife` DECIMAL(14,1) NOT NULL; \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/20250310_01_derek/03_drop_consum_product.sql b/src/main/resources/db/changelog/changes/20250310_01_derek/03_drop_consum_product.sql deleted file mode 100644 index 15fbd1c..0000000 --- a/src/main/resources/db/changelog/changes/20250310_01_derek/03_drop_consum_product.sql +++ /dev/null @@ -1,6 +0,0 @@ --- liquibase formatted sql - --- changeset derek:drop isConsumables product - -ALTER TABLE `product` -DROP COLUMN `isConsumables`; \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/20250312_01_derek/01_master.sql b/src/main/resources/db/changelog/changes/20250312_01_derek/01_master.sql new file mode 100644 index 0000000..e0d842b --- /dev/null +++ b/src/main/resources/db/changelog/changes/20250312_01_derek/01_master.sql @@ -0,0 +1,54 @@ +--liquibase formatted sql + +--changeset derek:master item table +CREATE TABLE item_type ( + id INT NOT NULL AUTO_INCREMENT, + name VARCHAR(50) NOT NULL, + CONSTRAINT pk_item_type PRIMARY KEY (id) +); +INSERT INTO item_type (name) VALUES +('material'), +('product'), +('by-product'), +('consumables'); + +CREATE TABLE items ( + id INT NOT NULL AUTO_INCREMENT, + version INT NOT NULL DEFAULT '0', + created datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + createdBy VARCHAR(30) NULL, + modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + modifiedBy VARCHAR(30) NULL, + deleted TINYINT(1) NOT NULL DEFAULT '0', + `code` VARCHAR(50) NOT NULL, + `name` VARCHAR(50) NOT NULL, + description VARCHAR(100) NULL, + remarks varchar(500) NULL, + typeId INT(11) NOT NULL, + shelfLife INT(11) NULL, + countryOfOrigin varchar(50) NULL, + minHumid DECIMAL(16,2) NULL, + maxHumid DECIMAL(16,2) NULL, + minTemp DECIMAL(16,2) NULL, + maxTemp DECIMAL(16,2) NULL, + sampleRate DECIMAL(16,2) NULL, + passingRate DECIMAL(16,2) NULL, + netWeight DECIMAL(16,2) NULL, + CONSTRAINT pk_material PRIMARY KEY (id), + CONSTRAINT fk_items FOREIGN KEY (`typeId`) REFERENCES `item_type` (`id`) +); +CREATE TABLE uom_conversion ( + id INT NOT NULL AUTO_INCREMENT, + version INT NOT NULL DEFAULT '0', + created datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + createdBy VARCHAR(30) NULL, + modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + modifiedBy VARCHAR(30) NULL, + deleted TINYINT(1) NOT NULL DEFAULT '0', + inQty DECIMAL(16,2) NOT NULL DEFAULT 1, + inUom VARCHAR(50) NOT NULL, + ratio DECIMAL(16,2) NOT NULL, + outQty DECIMAL(16,2) NOT NULL DEFAULT 1, + outUom VARCHAR(50) NOT NULL, + CONSTRAINT pk_uom_conversion PRIMARY KEY (id) +); \ No newline at end of file