package relation import ( "github.com/gshopify/service-wrapper/model" "github.com/gshopify/service-wrapper/scalar" "github.com/mailru/dbr" "github.com/microcosm-cc/bluemonday" "gshopper.com/gshopify/products/graphql/generated" "gshopper.com/gshopify/products/graphql/helper" "time" ) type Product struct { Id string `db:"id"` Title string `db:"title"` Description dbr.NullString `db:"description"` Handle dbr.NullString `db:"handle"` CreatedAt time.Time `db:"created_at"` UpdatedAt time.Time `db:"updated_at"` PublishedAt *time.Time `db:"published_at"` DeletedAt *time.Time `db:"deleted_at"` Type dbr.NullString `db:"type"` Scope string `db:"scope"` Status string `db:"status"` Tags []string `db:"tags"` TemplateSuffix dbr.NullString `db:"template_suffix"` Vendor dbr.NullString `db:"vendor"` Gift bool `db:"gift"` Collections []string `db:"collections"` Images []string `db:"images"` Options []struct { Field0 string Field1 int32 } `db:"options"` InventoryManagement string `db:"inventory_management"` InventoryPolicy string `db:"inventory_policy"` RequiresShipping bool `db:"requires_shipping"` QuantityAvailable int `db:"available"` ForSale bool `db:"for_sale"` PriceMin float64 `db:"price_min"` PriceMax float64 `db:"price_max"` CompareAtPriceMin float64 `db:"compare_at_price_min"` CompareAtPriceMax float64 `db:"compare_at_price_max"` } func (p *Product) As() *generated.Product { description := bluemonday.StrictPolicy().Sanitize(p.Description.String) product := generated.Product{ AvailableForSale: p.ForSale, PriceRange: helper.NewPriceRange(p.PriceMin, p.PriceMax, generated.CurrencyCodeUsd), CompareAtPriceRange: helper.NewPriceRange(p.CompareAtPriceMin, p.CompareAtPriceMax, generated.CurrencyCodeUsd), RequiresSellingPlan: false, // TODO: FeaturedImage: nil, // TODO: Images: nil, // TODO: Media: nil, // TODO: OnlineStoreURL: nil, // TODO: SellingPlanGroups: nil, // TODO: ID: model.NewId(model.GidProduct, p.Id), Handle: p.Handle.String, Title: p.Title, Vendor: p.Vendor.String, Description: description, DescriptionHTML: scalar.Html(p.Description.String), ProductType: p.Type.String, IsGiftCard: p.Gift, Tags: p.Tags, Seo: &generated.Seo{ Description: &description, Title: &p.Title, }, TotalInventory: &p.QuantityAvailable, CreatedAt: scalar.NewDateTimeFrom(p.CreatedAt), UpdatedAt: scalar.NewDateTimeFrom(p.UpdatedAt), } if p.PublishedAt != nil { product.PublishedAt = scalar.NewDateTimeFrom(*p.PublishedAt) } return &product }