feat: product proto type.

This commit is contained in:
2026-05-01 09:26:41 +08:00
parent 7b43ccf42f
commit f30cc1ea46
8 changed files with 663 additions and 2 deletions
+41 -2
View File
@@ -21,6 +21,7 @@ type ProductInventoryAdminController struct {
type productInventoryPayload struct {
ProductCode string `json:"productCode"`
ProjectTypeCode string `json:"projectTypeCode"`
SuiteID *uint `json:"suiteId"`
SuiteCode string `json:"suiteCode"`
SerialNumber *string `json:"serialNumber"`
AssetName string `json:"assetName"`
@@ -88,11 +89,17 @@ func (pc *ProductInventoryAdminController) Create(c *gin.Context) {
writeError(c, http.StatusBadRequest, err.Error())
return
}
resolvedSuiteID, resolvedSuiteCode, err := pc.resolveSuite(payload.SuiteID, payload.SuiteCode)
if err != nil {
writeError(c, http.StatusBadRequest, err.Error())
return
}
record := models.ProductInventory{
ProductCode: payload.ProductCode,
ProjectTypeCode: payload.ProjectTypeCode,
SuiteCode: payload.SuiteCode,
SuiteID: resolvedSuiteID,
SuiteCode: resolvedSuiteCode,
SerialNumber: payload.SerialNumber,
AssetName: payload.AssetName,
Status: models.ProductInventoryStatus(payload.Status),
@@ -130,10 +137,16 @@ func (pc *ProductInventoryAdminController) Update(c *gin.Context) {
writeError(c, http.StatusBadRequest, err.Error())
return
}
resolvedSuiteID, resolvedSuiteCode, err := pc.resolveSuite(payload.SuiteID, payload.SuiteCode)
if err != nil {
writeError(c, http.StatusBadRequest, err.Error())
return
}
record.ProductCode = payload.ProductCode
record.ProjectTypeCode = payload.ProjectTypeCode
record.SuiteCode = payload.SuiteCode
record.SuiteID = resolvedSuiteID
record.SuiteCode = resolvedSuiteCode
record.SerialNumber = payload.SerialNumber
record.AssetName = payload.AssetName
record.Status = models.ProductInventoryStatus(payload.Status)
@@ -219,6 +232,32 @@ func (pc *ProductInventoryAdminController) validateInventoryPayload(payload prod
return nil
}
func (pc *ProductInventoryAdminController) resolveSuite(suiteID *uint, suiteCode string) (*uint, string, error) {
if suiteID != nil && *suiteID > 0 {
var suite models.ProductSuite
if err := pc.DB.First(&suite, *suiteID).Error; err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, "", errors.New("suiteId is invalid")
}
return nil, "", errors.New("failed to query product suite")
}
return &suite.ID, suite.Code, nil
}
if trimmedCode := strings.TrimSpace(suiteCode); trimmedCode != "" {
var suite models.ProductSuite
if err := pc.DB.Where("code = ?", trimmedCode).First(&suite).Error; err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, "", errors.New("suiteCode is invalid")
}
return nil, "", errors.New("failed to query product suite")
}
return &suite.ID, suite.Code, nil
}
return nil, "", nil
}
func (pc *ProductInventoryAdminController) applySoldDefaults(record *models.ProductInventory) {
if record == nil {
return