Current section
7 Versions
Jump to
Current section
7 Versions
Compare versions
4
files changed
+65
additions
-30
deletions
| @@ -78,4 +78,4 @@ | |
| 78 78 | {<<"optional">>,true}, |
| 79 79 | {<<"repository">>,<<"hexpm">>}, |
| 80 80 | {<<"requirement">>,<<"~> 1.7">>}]]}. |
| 81 | - {<<"version">>,<<"1.5.2">>}. |
| 81 | + {<<"version">>,<<"1.5.3">>}. |
| @@ -87,36 +87,65 @@ defmodule ExCatalog do | |
| 87 87 | |
| 88 88 | |
| 89 89 | """ |
| 90 | - def products(limit \\ 25, currency \\ :USD, deleted \\ false) do |
| 91 | - products(limit, nil, nil, currency, deleted) |
| 90 | + def products(limit \\ 25, currency \\ :USD, deleted \\ false, owner_id \\ nil) do |
| 91 | + products(limit, nil, nil, currency, deleted, owner_id) |
| 92 92 | end |
| 93 93 | |
| 94 | - def products(limit \\ 25, metadata, cursor, currency, deleted) do |
| 94 | + def products(limit \\ 25, metadata, cursor, currency, deleted, owner_id) do |
| 95 95 | import Ecto.Query |
| 96 96 | import Ecto.SoftDelete.Query |
| 97 97 | |
| 98 98 | query = |
| 99 | - case(deleted) do |
| 100 | - false -> |
| 101 | - from(ExCatalog.Product, |
| 102 | - preload: [:variations], |
| 103 | - preload: [:categories], |
| 104 | - preload: [:metas], |
| 105 | - preload: [:primary_image], |
| 106 | - preload: [:images], |
| 107 | - preload: [:videos] |
| 108 | - ) |
| 99 | + case(owner_id) do |
| 100 | + nil -> |
| 101 | + case(deleted) do |
| 102 | + false -> |
| 103 | + from(ExCatalog.Product, |
| 104 | + preload: [:variations], |
| 105 | + preload: [:categories], |
| 106 | + preload: [:metas], |
| 107 | + preload: [:primary_image], |
| 108 | + preload: [:images], |
| 109 | + preload: [:videos] |
| 110 | + ) |
| 109 111 | |
| 110 | - true -> |
| 111 | - from(ExCatalog.Product, |
| 112 | - preload: [:variations], |
| 113 | - preload: [:categories], |
| 114 | - preload: [:metas], |
| 115 | - preload: [:primary_image], |
| 116 | - preload: [:images], |
| 117 | - preload: [:videos] |
| 118 | - ) |
| 119 | - |> with_undeleted |
| 112 | + true -> |
| 113 | + from(ExCatalog.Product, |
| 114 | + preload: [:variations], |
| 115 | + preload: [:categories], |
| 116 | + preload: [:metas], |
| 117 | + preload: [:primary_image], |
| 118 | + preload: [:images], |
| 119 | + preload: [:videos] |
| 120 | + ) |
| 121 | + |> with_undeleted |
| 122 | + end |
| 123 | + |
| 124 | + _ -> |
| 125 | + case(deleted) do |
| 126 | + false -> |
| 127 | + from(ExCatalog.Product, |
| 128 | + where: [owner_id: ^owner_id], |
| 129 | + preload: [:variations], |
| 130 | + preload: [:categories], |
| 131 | + preload: [:metas], |
| 132 | + preload: [:primary_image], |
| 133 | + preload: [:images], |
| 134 | + preload: [:videos] |
| 135 | + ) |
| 136 | + |
| 137 | + true -> |
| 138 | + from(ExCatalog.Product, |
| 139 | + where: [owner_id: ^owner_id], |
| 140 | + preload: [:variations], |
| 141 | + preload: [:categories], |
| 142 | + preload: [:metas], |
| 143 | + preload: [:primary_image], |
| 144 | + preload: [:images], |
| 145 | + preload: [:videos] |
| 146 | + ) |
| 147 | + |> with_undeleted |
| 148 | + end |
| 120 149 | end |
| 121 150 | |
| 122 151 | reply = |
| @@ -221,25 +250,30 @@ defmodule ExCatalog do | |
| 221 250 | |
| 222 251 | ## Examples |
| 223 252 | |
| 224 | - iex> ExCatalog.products_by_category("test_category", "2242", :USD) |
| 253 | + iex> ExCatalog.products_by_category("test_category", "2242", :USD, false, order_by: :sku) |
| 225 254 | |
| 226 255 | |
| 227 256 | """ |
| 228 | - def products_by_category(slug, limit \\ 25, currency \\ :USD, deleted \\ false) do |
| 229 | - products_by_category(slug, limit, nil, nil, currency, deleted) |
| 257 | + def products_by_category(slug, limit \\ 25, currency \\ :USD, deleted \\ false, opts \\ []) do |
| 258 | + products_by_category(slug, limit, nil, nil, currency, deleted, opts) |
| 230 259 | end |
| 231 260 | |
| 232 | - def products_by_category(slug, limit, metadata, cursor, currency, deleted) do |
| 261 | + def products_by_category(slug, limit, metadata, cursor, currency, deleted, opts) do |
| 233 262 | category = @repo.get_by(%Category{}, slug: slug) |
| 234 263 | |
| 235 264 | import Ecto.Query |
| 236 265 | import Ecto.SoftDelete.Query |
| 237 266 | |
| 267 | + order = Keyword.get(opts, :order) || :desc |
| 268 | + by = Keyword.get(opts, :order_by) || :updated_at |
| 269 | + order_by = [{order, by}] |
| 270 | + |
| 238 271 | query = |
| 239 272 | case(deleted) do |
| 240 273 | false -> |
| 241 274 | from(ExCatalog.Product, |
| 242 275 | where: [category_id: ^category.id], |
| 276 | + order_by: ^order_by, |
| 243 277 | preload: [:variations], |
| 244 278 | preload: [:categories], |
| 245 279 | preload: [:metas], |
| @@ -11,6 +11,7 @@ defmodule ExCatalog.Product do | |
| 11 11 | field(:title, :string) |
| 12 12 | field(:sub_title, :string) |
| 13 13 | field(:description, :string) |
| 14 | + field(:owner_id, @foreign_key_type) |
| 14 15 | |
| 15 16 | belongs_to(:primary_image, ExCatalog.Image) |
| 16 17 | |
| @@ -34,7 +35,7 @@ defmodule ExCatalog.Product do | |
| 34 35 | @doc false |
| 35 36 | def changeset(schema, attrs) do |
| 36 37 | schema |
| 37 | - |> cast(attrs, [:sku, :price, :title, :sub_title, :description, :primary_image_id]) |
| 38 | + |> cast(attrs, [:sku, :price, :title, :sub_title, :description, :primary_image_id, :owner_id]) |
| 38 39 | |> validate_required([:sku, :price, :title, :sub_title, :description]) |
| 39 40 | end |
| @@ -1,7 +1,7 @@ | |
| 1 1 | defmodule ExCatalog.MixProject do |
| 2 2 | use Mix.Project |
| 3 3 | |
| 4 | - @version "1.5.2" |
| 4 | + @version "1.5.3" |
| 5 5 | @source_url "https://github.com/mithereal/ExCatalog" |
| 6 6 | |
| 7 7 | def project do |