diff --git a/internal/database/migrations/20260414074213_change_max_vehicle_number.down.sql b/internal/database/migrations/20260414074213_change_max_vehicle_number.down.sql new file mode 100644 index 00000000..a6b1c98c --- /dev/null +++ b/internal/database/migrations/20260414074213_change_max_vehicle_number.down.sql @@ -0,0 +1,2 @@ +ALTER TABLE purchase_items + ALTER COLUMN vehicle_number TYPE VARCHAR(10) USING LEFT(vehicle_number, 10); diff --git a/internal/database/migrations/20260414074213_change_max_vehicle_number.up.sql b/internal/database/migrations/20260414074213_change_max_vehicle_number.up.sql new file mode 100644 index 00000000..3fa78c07 --- /dev/null +++ b/internal/database/migrations/20260414074213_change_max_vehicle_number.up.sql @@ -0,0 +1,2 @@ +ALTER TABLE purchase_items + ALTER COLUMN vehicle_number TYPE VARCHAR(15) USING vehicle_number; diff --git a/internal/modules/purchases/services/purchase.service.go b/internal/modules/purchases/services/purchase.service.go index 5324d60f..7497f350 100644 --- a/internal/modules/purchases/services/purchase.service.go +++ b/internal/modules/purchases/services/purchase.service.go @@ -10,6 +10,7 @@ import ( "strconv" "strings" "time" + "unicode/utf8" commonRepo "gitlab.com/mbugroup/lti-api.git/internal/common/repository" commonSvc "gitlab.com/mbugroup/lti-api.git/internal/common/service" @@ -46,7 +47,8 @@ type PurchaseService interface { } const ( - priceTolerance = 0.0001 + priceTolerance = 0.0001 + purchaseVehicleNumberMaxLength = 15 ) type purchaseService struct { @@ -1158,6 +1160,15 @@ func (s *purchaseService) ReceiveProducts(c *fiber.Ctx, id uint, req *validation if payload.VehicleNumber != nil { val := strings.TrimSpace(*payload.VehicleNumber) if val != "" { + if utf8.RuneCountInString(val) > purchaseVehicleNumberMaxLength { + return nil, utils.BadRequest( + fmt.Sprintf( + "vehicle_number for item %d must be at most %d characters", + payload.PurchaseItemID, + purchaseVehicleNumberMaxLength, + ), + ) + } vehicleNumber = &val } else { clearVehicle = true diff --git a/internal/modules/purchases/validations/purchase.validation.go b/internal/modules/purchases/validations/purchase.validation.go index b643501c..ac8ecbf4 100644 --- a/internal/modules/purchases/validations/purchase.validation.go +++ b/internal/modules/purchases/validations/purchase.validation.go @@ -45,7 +45,7 @@ type ReceivePurchaseItemRequest struct { TransportPerItem *float64 `form:"transport_per_item" json:"transport_per_item,omitempty" validate:"omitempty,gte=0"` TravelNumber *string `form:"travel_number" json:"travel_number" validate:"omitempty,max=100"` TravelDocumentPath *string `form:"travel_document_path" json:"travel_document_path" validate:"omitempty,max=1024"` - VehicleNumber *string `form:"vehicle_number" json:"vehicle_number" validate:"omitempty,max=100"` + VehicleNumber *string `form:"vehicle_number" json:"vehicle_number" validate:"omitempty,max=15"` ReceivedQty *float64 `form:"received_qty" json:"received_qty" validate:"omitempty,gte=0"` }