Current section

7 Versions

Jump to

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