product_variant.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package relation
  2. import (
  3. "github.com/gshopify/service-wrapper/model"
  4. "github.com/gshopify/service-wrapper/scalar"
  5. "github.com/mailru/dbr"
  6. "gshopper.com/gshopify/products/graphql/generated"
  7. "time"
  8. )
  9. type ProductVariant struct {
  10. Id string `db:"id"`
  11. ProductId string `db:"product_id"`
  12. Title string `db:"title"`
  13. Options []struct {
  14. Field0 string
  15. Field1 int32
  16. } `db:"options"`
  17. Price float64 `db:"price"`
  18. UnitPrice float64 `db:"unit_price"`
  19. CompareAtPrice float64 `db:"compare_at_price"`
  20. Barcode dbr.NullString `db:"barcode"`
  21. Sku dbr.NullString `db:"sku"`
  22. HarmonizedSystemCode dbr.NullString `db:"hs_code"`
  23. AllowBackorder bool `db:"allow_backorder"`
  24. ManageInventory bool `db:"manage_inventory"`
  25. OriginCountry dbr.NullString `db:"origin_country"`
  26. UnitPriceMeasurement struct {
  27. Field0 string
  28. Field1 string
  29. Field2 float64
  30. Field3 string
  31. Field4 int32
  32. } `db:"unit_price_measurement"`
  33. Weight dbr.NullFloat64 `db:"weight"`
  34. WeightUnit string `db:"weight_unit"`
  35. CreatedAt time.Time `db:"created_at"`
  36. UpdatedAt time.Time `db:"updated_at"`
  37. DeletedAt *time.Time `db:"deleted_at"`
  38. ShoppingProfileType dbr.NullString `db:"type"`
  39. }
  40. func (v *ProductVariant) As() *generated.ProductVariant {
  41. variant := generated.ProductVariant{
  42. AvailableForSale: false,
  43. CurrentlyNotInStock: false,
  44. QuantityAvailable: nil,
  45. Image: nil,
  46. SelectedOptions: nil,
  47. ID: model.NewId(model.GidVariant, v.Id),
  48. Title: v.Title,
  49. Product: &generated.Product{ID: model.NewId(model.GidProduct, v.ProductId)},
  50. RequiresShipping: true,
  51. Price: &generated.MoneyV2{
  52. Amount: scalar.NewDecimal(v.Price),
  53. CurrencyCode: generated.CurrencyCodeUsd,
  54. },
  55. CompareAtPrice: &generated.MoneyV2{
  56. Amount: scalar.NewDecimal(v.CompareAtPrice),
  57. CurrencyCode: generated.CurrencyCodeUsd,
  58. },
  59. UnitPrice: &generated.MoneyV2{
  60. Amount: scalar.NewDecimal(v.UnitPrice),
  61. CurrencyCode: generated.CurrencyCodeUsd,
  62. },
  63. UnitPriceMeasurement: &generated.UnitPriceMeasurement{
  64. QuantityValue: v.UnitPriceMeasurement.Field2,
  65. ReferenceValue: int(v.UnitPriceMeasurement.Field4),
  66. },
  67. WeightUnit: generated.WeightUnit(v.WeightUnit),
  68. }
  69. if enum := model.ShoppingProfileType(v.ShoppingProfileType.String); enum.IsValid() {
  70. variant.RequiresShipping = model.ShoppingProfileTypeDefault == enum
  71. }
  72. if enum := generated.UnitPriceMeasurementMeasuredType(v.UnitPriceMeasurement.Field0); enum.IsValid() {
  73. variant.UnitPriceMeasurement.MeasuredType = &enum
  74. }
  75. if enum := generated.UnitPriceMeasurementMeasuredUnit(v.UnitPriceMeasurement.Field1); enum.IsValid() {
  76. variant.UnitPriceMeasurement.QuantityUnit = &enum
  77. }
  78. if enum := generated.UnitPriceMeasurementMeasuredUnit(v.UnitPriceMeasurement.Field3); enum.IsValid() {
  79. variant.UnitPriceMeasurement.ReferenceUnit = &enum
  80. }
  81. if v.Weight.Valid {
  82. s := v.Weight.Float64
  83. variant.Weight = &s
  84. }
  85. if v.Sku.Valid {
  86. s := v.Sku.String
  87. variant.Sku = &s
  88. }
  89. if v.Barcode.Valid {
  90. s := v.Barcode.String
  91. variant.Barcode = &s
  92. }
  93. return &variant
  94. }