Przeglądaj źródła

add qc item

create_edit_user
cyril.tsui 5 miesięcy temu
rodzic
commit
f2c88c918b
7 zmienionych plików z 164 dodań i 0 usunięć
  1. +20
    -0
      src/main/java/com/ffii/fpsms/modules/master/entity/QcItem.kt
  2. +11
    -0
      src/main/java/com/ffii/fpsms/modules/master/entity/QcItemRepository.kt
  3. +18
    -0
      src/main/java/com/ffii/fpsms/modules/master/service/QcItemService.kt
  4. +76
    -0
      src/main/java/com/ffii/fpsms/modules/master/web/QcItemController.kt
  5. +12
    -0
      src/main/java/com/ffii/fpsms/modules/master/web/models/SaveQcItemRequest.kt
  6. +9
    -0
      src/main/java/com/ffii/fpsms/modules/master/web/models/SaveQcItemResponse.kt
  7. +18
    -0
      src/main/resources/db/changelog/changes/20250310_01_cyril/01_qc_item.sql

+ 20
- 0
src/main/java/com/ffii/fpsms/modules/master/entity/QcItem.kt Wyświetl plik

@@ -0,0 +1,20 @@
package com.ffii.fpsms.modules.master.entity

import com.ffii.core.entity.BaseEntity
import jakarta.persistence.*
import jakarta.validation.constraints.NotNull

@Entity
@Table(name = "qc_item")
open class QcItem : BaseEntity<Long>() {
@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
}

+ 11
- 0
src/main/java/com/ffii/fpsms/modules/master/entity/QcItemRepository.kt Wyświetl plik

@@ -0,0 +1,11 @@
package com.ffii.fpsms.modules.master.entity

import com.ffii.core.support.AbstractRepository
import org.springframework.stereotype.Repository

@Repository
interface QcItemRepository : AbstractRepository<QcItem, Long> {
fun findAllByDeletedIsFalse(): List<QcItem>

fun findByCodeAndDeletedIsFalse(code: String): QcItem?
}

+ 18
- 0
src/main/java/com/ffii/fpsms/modules/master/service/QcItemService.kt Wyświetl plik

@@ -0,0 +1,18 @@
package com.ffii.fpsms.modules.master.service

import com.ffii.fpsms.modules.master.entity.QcItem
import com.ffii.fpsms.modules.master.entity.QcItemRepository
import org.springframework.stereotype.Service

@Service
open class QcItemService(
private val qcItemRepository: QcItemRepository
) {
open fun allQcItems(): List<QcItem> {
return qcItemRepository.findAllByDeletedIsFalse()
}

open fun findQcItemByCode(code: String): QcItem? {
return qcItemRepository.findByCodeAndDeletedIsFalse(code)
}
}

+ 76
- 0
src/main/java/com/ffii/fpsms/modules/master/web/QcItemController.kt Wyświetl plik

@@ -0,0 +1,76 @@
package com.ffii.fpsms.modules.master.web

import com.ffii.fpsms.modules.master.entity.QcItem
import com.ffii.fpsms.modules.master.entity.QcItemRepository
import com.ffii.fpsms.modules.master.service.QcItemService
import com.ffii.fpsms.modules.master.web.models.SaveQcItemRequest
import com.ffii.fpsms.modules.master.web.models.SaveQcItemResponse
import jakarta.validation.Valid
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
import kotlin.reflect.KClass
import kotlin.reflect.KProperty
import kotlin.reflect.KParameter
import kotlin.reflect.KTypeParameter
import kotlin.reflect.typeOf

@RestController
@RequestMapping("/qcItems")
class QcItemController(
private val qcItemService: QcItemService,
private val qcItemRepository: QcItemRepository,
) {
@GetMapping
fun allQcItems(): List<QcItem> {
return qcItemService.allQcItems()
}

@PostMapping("/save")
fun saveQcItem(@Valid @RequestBody request: SaveQcItemRequest): SaveQcItemResponse {

// val qcItemProperties = QcItem::class.members.filterIsInstance<KProperty<QcItem>>()
val errors = mutableMapOf<String, String>()
val id = request.id
val qcItem = if (id != null) qcItemRepository.findById(id).orElseThrow() else QcItem()

// check duplicated code
val duplicateQcItem = qcItemService.findQcItemByCode(request.code)
if (duplicateQcItem != null && duplicateQcItem.id != qcItem.id) {
errors["code"] = "Code is duplicated"
}

if (errors.isNotEmpty()) {
request.let {
SaveQcItemResponse(
id = it.id,
code = it.code,
name = it.name,
description = it.description,
errors = errors
)
}
}

// Save Qc Item
qcItem.apply {
code = request.code
name = request.name
description = request.description
}

val savedQcItem = qcItemRepository.save(qcItem)

return savedQcItem.let {
SaveQcItemResponse(
id = it.id,
code = it.code,
name = it.name,
description = it.description,
errors = null
)
}
}
}

+ 12
- 0
src/main/java/com/ffii/fpsms/modules/master/web/models/SaveQcItemRequest.kt Wyświetl plik

@@ -0,0 +1,12 @@
package com.ffii.fpsms.modules.master.web.models

import jakarta.validation.constraints.NotBlank

data class SaveQcItemRequest(
val id: Long?,
@field:NotBlank(message = "Code cannot be empty")
val code: String,
@field:NotBlank(message = "Name cannot be empty")
val name: String,
val description: String?,
)

+ 9
- 0
src/main/java/com/ffii/fpsms/modules/master/web/models/SaveQcItemResponse.kt Wyświetl plik

@@ -0,0 +1,9 @@
package com.ffii.fpsms.modules.master.web.models

data class SaveQcItemResponse(
val id: Long?,
val code: String?,
val name: String?,
val description: String?,
val errors: MutableMap<String, String>?
)

+ 18
- 0
src/main/resources/db/changelog/changes/20250310_01_cyril/01_qc_item.sql Wyświetl plik

@@ -0,0 +1,18 @@
--liquibase formatted sql

--changeset cyril:qc_item
CREATE TABLE `qc_item`
(
`id` INT NOT NULL AUTO_INCREMENT,
`created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`createdBy` VARCHAR(30) NULL DEFAULT NULL,
`version` INT NOT NULL DEFAULT '0',
`modified` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`modifiedBy` VARCHAR(30) NULL DEFAULT NULL,
`deleted` TINYINT(1) NOT NULL DEFAULT '0',
`code` VARCHAR(30) NOT NULL,
`name` VARCHAR(30) NOT NULL,
`description` VARCHAR(100) NULL,
`systemInput` TINYINT(1) NOT NULL,
PRIMARY KEY (`id`)
);

Ładowanie…
Anuluj
Zapisz