|
@@ -11,107 +11,87 @@ import (
|
|
|
const defaultCurrency = "USD"
|
|
|
|
|
|
var (
|
|
|
- productKey = func(clause string, args ...any) *cache.SqlKey {
|
|
|
+ productKey = func(ln model.LanguageCode, currency generated.CurrencyCode, clause string, args ...any) *cache.SqlKey {
|
|
|
return cache.NewSQLKey(
|
|
|
"product",
|
|
|
time.Minute,
|
|
|
+ []string{
|
|
|
+ "t.id as id",
|
|
|
+ "anyLast(handle) as handle", "anyLast(type) as type", "anyLast(scope) as scope", "anyLast(tags) as tags", "anyLast(vendor) as vendor",
|
|
|
+ "anyLast(gift) as gift", "anyLast(collections) as collections", "anyLast(images) as images",
|
|
|
+ "anyLast(product_variant.inventory_management) as inventory_management",
|
|
|
+ "anyLast(product_variant.inventory_policy) as inventory_policy",
|
|
|
+ "anyLast(product_variant.options) as options",
|
|
|
+ "anyLast(inventory_item.requires_shipping) as requires_shipping",
|
|
|
+ "anyLast(inventory_item.tracked) as tracked",
|
|
|
+ "anyLast(inventory_level.available) as available",
|
|
|
+ "if(tracked, if(available > 0, true, if(inventory_policy == 'continue', true, false)), true) as for_sale",
|
|
|
+ "anyLast(created_at) as created_at", "anyLast(updated_at) as updated_at", "anyLast(published_at) as published_at", "anyLast(deleted_at) as deleted_at",
|
|
|
+ ln.SqlFieldSelection("title", "", "anyLast"),
|
|
|
+ ln.SqlFieldSelection("description", "", "anyLast"),
|
|
|
+ fmt.Sprintf("min(product_variant.price['%s']) as price_min", currency),
|
|
|
+ fmt.Sprintf("max(product_variant.price['%s']) as price_max", currency),
|
|
|
+ fmt.Sprintf("min(product_variant.compare_at_price['%s']) as compare_at_price_min", currency),
|
|
|
+ fmt.Sprintf("max(product_variant.compare_at_price['%s']) as compare_at_price_max", currency),
|
|
|
+ },
|
|
|
clause, args...)
|
|
|
}
|
|
|
- productSelection = func(ln model.LanguageCode, currency generated.CurrencyCode) []string {
|
|
|
- return append([]string{
|
|
|
- "t.id as id",
|
|
|
- "any(handle) as handle", "any(type) as type", "any(scope) as scope", "any(tags) as tags", "any(vendor) as vendor",
|
|
|
- "any(gift) as gift", "any(collections) as collections", "any(images) as images",
|
|
|
- "any(product_variant.inventory_management) as inventory_management",
|
|
|
- "any(product_variant.inventory_policy) as inventory_policy",
|
|
|
- "any(product_variant.options) as options",
|
|
|
- "any(inventory_item.requires_shipping) as requires_shipping",
|
|
|
- "any(inventory_item.tracked) as tracked",
|
|
|
- "any(inventory_level.available) as available",
|
|
|
- "if(tracked, if(available > 0, true, if(inventory_policy == 'continue', true, false)), true) as for_sale",
|
|
|
- "any(created_at) as created_at", "any(updated_at) as updated_at", "any(published_at) as published_at", "any(deleted_at) as deleted_at",
|
|
|
- },
|
|
|
- ln.SqlFieldSelection("title", "", "any"),
|
|
|
- ln.SqlFieldSelection("description", "", "any"),
|
|
|
- fmt.Sprintf("min(product_variant.price['%s']) as price_min", currency),
|
|
|
- fmt.Sprintf("max(product_variant.price['%s']) as price_max", currency),
|
|
|
- fmt.Sprintf("min(product_variant.compare_at_price['%s']) as compare_at_price_min", currency),
|
|
|
- fmt.Sprintf("max(product_variant.compare_at_price['%s']) as compare_at_price_max", currency),
|
|
|
- )
|
|
|
- }
|
|
|
- productCollectionSelection = func(ln model.LanguageCode) []string {
|
|
|
- return append([]string{
|
|
|
- "id", "handle", "scope", "sort_order", "image", "template_suffix",
|
|
|
- "created_at", "updated_at", "published_at", "deleted_at",
|
|
|
- },
|
|
|
- ln.SqlFieldSelection("title", "", ""),
|
|
|
- ln.SqlFieldSelection("description", "", ""),
|
|
|
- )
|
|
|
- }
|
|
|
- productCollectionKey = func(clause string, args ...any) *cache.SqlKey {
|
|
|
+ productCollectionKey = func(ln model.LanguageCode, clause string, args ...any) *cache.SqlKey {
|
|
|
return cache.NewSQLKey(
|
|
|
"product_collection",
|
|
|
3*time.Minute,
|
|
|
+ []string{
|
|
|
+ "id", "handle", "scope", "sort_order", "image", "template_suffix",
|
|
|
+ "created_at", "updated_at", "published_at", "deleted_at",
|
|
|
+ ln.SqlFieldSelection("title", "", ""),
|
|
|
+ ln.SqlFieldSelection("description", "", ""),
|
|
|
+ },
|
|
|
clause,
|
|
|
args...,
|
|
|
)
|
|
|
}
|
|
|
- productOptionSelection = func(ln model.LanguageCode) []string {
|
|
|
- return append([]string{"id", "position", "created_at", "updated_at", "published_at", "deleted_at"},
|
|
|
- ln.SqlFieldSelection("name", "", ""),
|
|
|
- ln.SqlArraySelection("values"),
|
|
|
- )
|
|
|
- }
|
|
|
- productOptionSelectedSelection = func(ln model.LanguageCode) []string {
|
|
|
- return append([]string{
|
|
|
- "id",
|
|
|
- "if(notEmpty(value_ln), value_ln, value_en) as value",
|
|
|
- "position", "created_at", "updated_at", "published_at", "deleted_at",
|
|
|
- },
|
|
|
- ln.SqlFieldSelection("name", "", ""),
|
|
|
- fmt.Sprintf("arrayElement(values, tupleElement(opt, 2))['%s'] as value_en", model.LanguageCodeEn),
|
|
|
- fmt.Sprintf("arrayElement(values, tupleElement(opt, 2))['%s'] as value_ln", ln),
|
|
|
- )
|
|
|
- }
|
|
|
- productOptionKey = func(clause string, args ...any) *cache.SqlKey {
|
|
|
+ productOptionKey = func(ln model.LanguageCode, clause string, args ...any) *cache.SqlKey {
|
|
|
return cache.NewSQLKey(
|
|
|
"product_option",
|
|
|
time.Minute,
|
|
|
+ []string{
|
|
|
+ "id", "position", "created_at", "updated_at", "published_at", "deleted_at",
|
|
|
+ ln.SqlFieldSelection("name", "", ""),
|
|
|
+ ln.SqlArraySelection("values"),
|
|
|
+ "values[tupleElement(opt, 2)] as value",
|
|
|
+ },
|
|
|
clause, args...)
|
|
|
}
|
|
|
- productVariantSelection = func(ln model.LanguageCode, currency generated.CurrencyCode) []string {
|
|
|
- return append([]string{
|
|
|
- "any(t.id) as id",
|
|
|
- "any(t.product_id) as product_id",
|
|
|
- "any(t.inventory_item_id) as inventory_item_id",
|
|
|
- "any(t.position) as position",
|
|
|
- "any(t.image) as image",
|
|
|
- "any(t.inventory_management) as inventory_management",
|
|
|
- "any(t.inventory_policy) as inventory_policy",
|
|
|
- "any(t.options) as options",
|
|
|
- "any(t.grams) as grams",
|
|
|
- "any(t.weight) as weight",
|
|
|
- "any(t.weight_unit) as weight_unit",
|
|
|
- "any(t.created_at) as created_at",
|
|
|
- "any(t.updated_at) as updated_at",
|
|
|
- "any(t.published_at) as published_at",
|
|
|
- "any(t.deleted_at) as deleted_at",
|
|
|
- "sum(inventory_level.available) as available",
|
|
|
- "any(inventory_item.sku) as sku",
|
|
|
- "any(inventory_item.barcode) as barcode",
|
|
|
- "any(inventory_item.requires_shipping) as requires_shipping",
|
|
|
- "any(inventory_item.tracked) as tracked",
|
|
|
- "if(tracked, if(available > 0, true, if(inventory_policy == 'continue', true, false)), true) as for_sale",
|
|
|
- },
|
|
|
- ln.SqlFieldSelection("title", "product", "any"),
|
|
|
- fmt.Sprintf("any(t.price['%s']) as price", currency),
|
|
|
- fmt.Sprintf("any(t.compare_at_price['%s']) as compare_at_price", currency),
|
|
|
- )
|
|
|
- }
|
|
|
- productVariantKey = func(clause string, args ...any) *cache.SqlKey {
|
|
|
+ productVariantKey = func(ln model.LanguageCode, currency generated.CurrencyCode, clause string, args ...any) *cache.SqlKey {
|
|
|
return cache.NewSQLKey(
|
|
|
"product_variant",
|
|
|
time.Minute,
|
|
|
+ []string{
|
|
|
+ "anyLast(t.id) as id",
|
|
|
+ "anyLast(t.product_id) as product_id",
|
|
|
+ "anyLast(t.inventory_item_id) as inventory_item_id",
|
|
|
+ "anyLast(t.position) as position",
|
|
|
+ "anyLast(t.image) as image",
|
|
|
+ "anyLast(t.inventory_management) as inventory_management",
|
|
|
+ "anyLast(t.inventory_policy) as inventory_policy",
|
|
|
+ "anyLast(t.options) as options",
|
|
|
+ "anyLast(t.grams) as grams",
|
|
|
+ "anyLast(t.weight) as weight",
|
|
|
+ "anyLast(t.weight_unit) as weight_unit",
|
|
|
+ "anyLast(t.created_at) as created_at",
|
|
|
+ "anyLast(t.updated_at) as updated_at",
|
|
|
+ "anyLast(t.published_at) as published_at",
|
|
|
+ "anyLast(t.deleted_at) as deleted_at",
|
|
|
+ "sum(inventory_level.available) as available",
|
|
|
+ "anyLast(inventory_item.sku) as sku",
|
|
|
+ "anyLast(inventory_item.barcode) as barcode",
|
|
|
+ "anyLast(inventory_item.requires_shipping) as requires_shipping",
|
|
|
+ "anyLast(inventory_item.tracked) as tracked",
|
|
|
+ "if(tracked, if(available > 0, true, if(inventory_policy == 'continue', true, false)), true) as for_sale",
|
|
|
+ ln.SqlFieldSelection("title", "product", "anyLast"),
|
|
|
+ fmt.Sprintf("any(t.price['%s']) as price", currency),
|
|
|
+ fmt.Sprintf("any(t.compare_at_price['%s']) as compare_at_price", currency),
|
|
|
+ },
|
|
|
clause, args...)
|
|
|
}
|
|
|
)
|