|
@@ -9,86 +9,68 @@ import (
|
|
|
)
|
|
|
|
|
|
type ProductVariant struct {
|
|
|
- Id string `db:"id"`
|
|
|
- ProductId string `db:"product_id"`
|
|
|
- Title string `db:"title"`
|
|
|
- Options []struct {
|
|
|
+ Id string `db:"id"`
|
|
|
+ ProductId string `db:"product_id"`
|
|
|
+ InventoryItemId string `db:"inventory_item_id"`
|
|
|
+ Price float64 `db:"price"`
|
|
|
+ CompareAtPrice float64 `db:"compare_at_price"`
|
|
|
+ Position int8 `db:"position"`
|
|
|
+ Image dbr.NullString `db:"image"`
|
|
|
+ InventoryManagement string `db:"inventory_management"`
|
|
|
+ InventoryPolicy string `db:"inventory_policy"`
|
|
|
+ Grams dbr.NullFloat64 `db:"grams"`
|
|
|
+ Weight dbr.NullFloat64 `db:"weight"`
|
|
|
+ WeightUnit string `db:"weight_unit"`
|
|
|
+ CreatedAt time.Time `db:"created_at"`
|
|
|
+ UpdatedAt time.Time `db:"updated_at"`
|
|
|
+ PublishedAt *time.Time `db:"published_at"`
|
|
|
+ DeletedAt *time.Time `db:"deleted_at"`
|
|
|
+ Options []struct {
|
|
|
Field0 string
|
|
|
Field1 int32
|
|
|
} `db:"options"`
|
|
|
- Price float64 `db:"price"`
|
|
|
- UnitPrice float64 `db:"unit_price"`
|
|
|
- CompareAtPrice float64 `db:"compare_at_price"`
|
|
|
- Barcode dbr.NullString `db:"barcode"`
|
|
|
- Sku dbr.NullString `db:"sku"`
|
|
|
- HarmonizedSystemCode dbr.NullString `db:"hs_code"`
|
|
|
- AllowBackorder bool `db:"allow_backorder"`
|
|
|
- ManageInventory bool `db:"manage_inventory"`
|
|
|
- OriginCountry dbr.NullString `db:"origin_country"`
|
|
|
- UnitPriceMeasurement struct {
|
|
|
- Field0 string
|
|
|
- Field1 string
|
|
|
- Field2 float64
|
|
|
- Field3 string
|
|
|
- Field4 int32
|
|
|
- } `db:"unit_price_measurement"`
|
|
|
- Weight dbr.NullFloat64 `db:"weight"`
|
|
|
- WeightUnit string `db:"weight_unit"`
|
|
|
- CreatedAt time.Time `db:"created_at"`
|
|
|
- UpdatedAt time.Time `db:"updated_at"`
|
|
|
- DeletedAt *time.Time `db:"deleted_at"`
|
|
|
|
|
|
- ShoppingProfileType dbr.NullString `db:"type"`
|
|
|
+ Title string `db:"title"`
|
|
|
+ Sku dbr.NullString `db:"sku"`
|
|
|
+ Barcode dbr.NullString `db:"barcode"`
|
|
|
+ RequiresShipping bool `db:"requires_shipping"`
|
|
|
+ QuantityAvailable int `db:"available"`
|
|
|
+ ForSale bool `db:"for_sale"`
|
|
|
}
|
|
|
|
|
|
func (v *ProductVariant) As() *generated.ProductVariant {
|
|
|
variant := generated.ProductVariant{
|
|
|
- AvailableForSale: false,
|
|
|
- CurrentlyNotInStock: false,
|
|
|
- QuantityAvailable: nil,
|
|
|
- Image: nil,
|
|
|
- SelectedOptions: nil,
|
|
|
+ AvailableForSale: v.ForSale,
|
|
|
+ CurrentlyNotInStock: v.QuantityAvailable <= 0,
|
|
|
|
|
|
- ID: model.NewId(model.GidVariant, v.Id),
|
|
|
- Title: v.Title,
|
|
|
- Product: &generated.Product{ID: model.NewId(model.GidProduct, v.ProductId)},
|
|
|
- RequiresShipping: true,
|
|
|
+ Image: nil,
|
|
|
+ SelectedOptions: nil,
|
|
|
+ UnitPrice: nil,
|
|
|
+ UnitPriceMeasurement: nil,
|
|
|
|
|
|
- Price: &generated.MoneyV2{
|
|
|
- Amount: scalar.NewDecimal(v.Price),
|
|
|
- CurrencyCode: generated.CurrencyCodeUsd,
|
|
|
- },
|
|
|
CompareAtPrice: &generated.MoneyV2{
|
|
|
Amount: scalar.NewDecimal(v.CompareAtPrice),
|
|
|
CurrencyCode: generated.CurrencyCodeUsd,
|
|
|
},
|
|
|
- UnitPrice: &generated.MoneyV2{
|
|
|
- Amount: scalar.NewDecimal(v.UnitPrice),
|
|
|
- CurrencyCode: generated.CurrencyCodeUsd,
|
|
|
- },
|
|
|
|
|
|
- UnitPriceMeasurement: &generated.UnitPriceMeasurement{
|
|
|
- QuantityValue: v.UnitPriceMeasurement.Field2,
|
|
|
- ReferenceValue: int(v.UnitPriceMeasurement.Field4),
|
|
|
+ ID: model.NewId(model.GidVariant, v.Id),
|
|
|
+ Price: &generated.MoneyV2{
|
|
|
+ Amount: scalar.NewDecimal(v.Price),
|
|
|
+ CurrencyCode: generated.CurrencyCodeUsd,
|
|
|
},
|
|
|
- WeightUnit: generated.WeightUnit(v.WeightUnit),
|
|
|
- }
|
|
|
-
|
|
|
- if enum := model.ShoppingProfileType(v.ShoppingProfileType.String); enum.IsValid() {
|
|
|
- variant.RequiresShipping = model.ShoppingProfileTypeDefault == enum
|
|
|
- }
|
|
|
-
|
|
|
- if enum := generated.UnitPriceMeasurementMeasuredType(v.UnitPriceMeasurement.Field0); enum.IsValid() {
|
|
|
- variant.UnitPriceMeasurement.MeasuredType = &enum
|
|
|
- }
|
|
|
-
|
|
|
- if enum := generated.UnitPriceMeasurementMeasuredUnit(v.UnitPriceMeasurement.Field1); enum.IsValid() {
|
|
|
- variant.UnitPriceMeasurement.QuantityUnit = &enum
|
|
|
+ Product: &generated.Product{ID: model.NewId(model.GidProduct, v.ProductId)},
|
|
|
+ QuantityAvailable: &v.QuantityAvailable,
|
|
|
+ RequiresShipping: v.RequiresShipping,
|
|
|
+ Title: v.Title,
|
|
|
+ WeightUnit: generated.WeightUnit(v.WeightUnit),
|
|
|
}
|
|
|
|
|
|
- if enum := generated.UnitPriceMeasurementMeasuredUnit(v.UnitPriceMeasurement.Field3); enum.IsValid() {
|
|
|
- variant.UnitPriceMeasurement.ReferenceUnit = &enum
|
|
|
- }
|
|
|
+ variant.Metafields = append(variant.Metafields, &generated.Metafield{
|
|
|
+ Namespace: model.GidVariant.String(),
|
|
|
+ Key: "position",
|
|
|
+ Type: model.MetaFieldTypeNumberInteger.String(),
|
|
|
+ Value: model.MetaFieldValue(model.MetaFieldTypeNumberInteger, v.Position),
|
|
|
+ })
|
|
|
|
|
|
if v.Weight.Valid {
|
|
|
s := v.Weight.Float64
|