Skip to content

Commit 34adca2

Browse files
chore: remove unnecessary code
1 parent 813175a commit 34adca2

32 files changed

Lines changed: 385 additions & 384 deletions

lib/store/accounts.ex

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ defmodule Store.Accounts do
77
alias Store.Repo
88
alias Store.Accounts.{User, UserToken, UserNotifier}
99
alias StoreWeb.Emails.AuthEmails
10-
alias Store.Mailer
1110

1211
## Database getters
1312

@@ -32,6 +31,25 @@ defmodule Store.Accounts do
3231
|> then(fn user -> user.email end)
3332
end
3433

34+
@doc """
35+
Gets a user email by id.
36+
37+
## Examples
38+
39+
iex> get_user_email(id)
40+
"foo@example.com"
41+
42+
iex> get_user_email(nil)
43+
nil
44+
45+
"""
46+
def get_user_email(nil), do: nil
47+
48+
def get_user_email(id) do
49+
Repo.get_by(User, id: id)
50+
|> then(fn user -> user.email end)
51+
end
52+
3553
@doc """
3654
Gets a user by email and password.
3755
@@ -291,7 +309,6 @@ defmodule Store.Accounts do
291309
Repo.insert!(user_token)
292310

293311
AuthEmails.confirm_account_email(confirmation_url_fun.(encoded_token), to: user.email)
294-
|> Mailer.deliver()
295312
end
296313
end
297314

lib/store/accounts/user_notifier.ex

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,18 @@ defmodule Store.Accounts.UserNotifier do
44
alias Store.Mailer
55

66
# Delivers the email using the application mailer.
7-
defp deliver(recipient, _, body) do
7+
defp deliver(recipient, subject, body) do
88
email =
99
new()
1010
|> to(recipient)
1111
|> from({"CeSIUM - Store", "noreply@store.cesium.di.uminho.pt"})
12-
|> subject("[CeSIUM - Store] Verifique a sua conta")
12+
|> subject("[CeSIUM - Store] #{subject}")
1313
|> reply_to("noreply@store.cesium.di.uminho.pt")
1414
|> text_body(body)
1515

16-
with {:ok, _metadata} <- Mailer.deliver(email) do
17-
{:ok, email}
18-
end
16+
Task.start(fn -> {:ok, _metadata} = Mailer.deliver(email) end)
17+
18+
{:ok, email}
1919
end
2020

2121
@doc """

lib/store/inventory.ex

Lines changed: 54 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,15 @@ defmodule Store.Inventory do
44
"""
55
use Store.Context
66

7-
alias StoreWeb.Accounts.User
8-
alias StoreWeb.Inventory.Product
7+
alias Store.Accounts.User
8+
alias Store.Inventory.Product
99
alias Store.Inventory.Order
10+
alias Store.Inventory.OrderHistory
1011
alias Store.Inventory.OrdersProducts
1112
alias Store.Inventory
1213

14+
# PRODUCTS
15+
1316
@doc """
1417
Returns the list of products.
1518
@@ -74,7 +77,7 @@ defmodule Store.Inventory do
7477
{:error, %Ecto.Changeset{}}
7578
7679
"""
77-
def update_product(%Product{} = product, attrs, after_save \\ &{:ok, &1}) do
80+
def update_product(%Product{} = product, attrs \\ %{}, after_save \\ &{:ok, &1}) do
7881
product
7982
|> Product.changeset(attrs)
8083
|> Repo.update()
@@ -98,6 +101,10 @@ defmodule Store.Inventory do
98101
|> Repo.update()
99102
end
100103

104+
def change_product(%Product{} = product, attrs \\ %{}) do
105+
Product.changeset(product, attrs)
106+
end
107+
101108
@doc """
102109
Deletes a product.
103110
@@ -121,21 +128,6 @@ defmodule Store.Inventory do
121128
|> broadcast(:deleted)
122129
end
123130

124-
@doc """
125-
Returns an `%Ecto.Changeset{}` for tracking product changes.
126-
127-
## Examples
128-
129-
iex> change_product(product)
130-
%Ecto.Changeset{data: %Product{}}
131-
132-
"""
133-
def change_product(%Product{} = product, attrs \\ %{}) do
134-
Product.changeset(product, attrs)
135-
end
136-
137-
alias Store.Inventory.Order
138-
139131
def list_orders(params \\ %{})
140132

141133
@doc """
@@ -180,12 +172,6 @@ defmodule Store.Inventory do
180172

181173
defp status_filter(q, status), do: where(q, [o], o.status in ^status)
182174

183-
def update_status(order, attrs) do
184-
order
185-
|> Order.changeset(attrs)
186-
|> Repo.update()
187-
end
188-
189175
@doc """
190176
Returns the list of orders_products.
191177
iex> list_orders_products()
@@ -217,7 +203,11 @@ defmodule Store.Inventory do
217203
** (Ecto.NoResultsError)
218204
219205
"""
220-
def get_order!(id), do: Repo.get!(Order, id)
206+
def get_order!(id, opts) when is_list(opts) do
207+
Order
208+
|> apply_filters(opts)
209+
|> Repo.get!(id)
210+
end
221211

222212
@doc """
223213
Creates a order.
@@ -291,6 +281,10 @@ defmodule Store.Inventory do
291281
|> Repo.update()
292282
end
293283

284+
def change_order(%Order{} = order, attrs \\ %{}) do
285+
Order.changeset(order, attrs)
286+
end
287+
294288
@doc """
295289
Deletes a order.
296290
@@ -307,19 +301,6 @@ defmodule Store.Inventory do
307301
Repo.delete(order)
308302
end
309303

310-
@doc """
311-
Returns an `%Ecto.Changeset{}` for tracking order changes.
312-
313-
## Examples
314-
315-
iex> change_order(order)
316-
%Ecto.Changeset{data: %Order{}}
317-
318-
"""
319-
def change_order(%Order{} = order, attrs \\ %{}) do
320-
Order.changeset(order, attrs)
321-
end
322-
323304
@doc """
324305
Returns a function that can be used to broadcast the given event.
325306
@@ -341,21 +322,20 @@ defmodule Store.Inventory do
341322
iex> purchase(user, product)
342323
{:error, %Ecto.Changeset{}}
343324
"""
344-
alias Store.Accounts.User
345325

346326
def purchase(%User{} = user, %Product{} = product, product_params) do
347327
order = get_order_draft_by_id(user.id, preloads: [])
348328

349329
case order do
350330
%Order{} ->
351-
handle_existing_order(order, product, product_params)
331+
handle_existing_order(order, product, product_params, user.partnership)
352332

353333
nil ->
354334
handle_new_order(user, product, product_params)
355335
end
356336
end
357337

358-
defp handle_existing_order(order, product, product_params) do
338+
defp handle_existing_order(order, product, product_params, partnership) do
359339
quantity = String.to_integer(product_params["quantity"])
360340

361341
order_products =
@@ -374,30 +354,46 @@ defmodule Store.Inventory do
374354
order_product.size == String.to_existing_atom(product_params["size"])
375355
end)
376356

357+
price =
358+
case partnership do
359+
true -> product.price_partnership
360+
false -> product.price
361+
end
362+
377363
if size_found do
378-
update_order_products(order_products, product_params, quantity)
364+
update_order_products(order_products, price, product_params, quantity)
379365
else
380-
add_product_to_order(order, product, product_params)
366+
add_product_to_order(order, product, price, product_params)
381367
end
382368

383369
{:ok, product}
384370
end
385371
end
386372

387-
defp update_order_products(order_products, product_params, quantity) do
373+
defp update_order_products(order_products, price, product_params, quantity) do
388374
Enum.each(order_products, fn order_product ->
389375
if order_product.size == String.to_existing_atom(product_params["size"]) do
390-
update_order_product(order_product, %{quantity: order_product.quantity + quantity})
376+
update_order_product(order_product, %{
377+
quantity: order_product.quantity + quantity,
378+
price: order_product.price + price * quantity
379+
})
391380
end
392381
end)
393382
end
394383

395-
defp handle_new_order(user, product, product_params) do
384+
defp handle_new_order(%User{} = user, %Product{} = product, product_params) do
396385
{:ok, order} = create_order(%{user_id: user.id})
397-
add_product_to_order(order, product, product_params)
386+
387+
price =
388+
case user.partnership do
389+
true -> product.price_partnership
390+
false -> product.price
391+
end
392+
393+
add_product_to_order(order, product, price, product_params)
398394
end
399395

400-
def add_product_to_order(%Order{} = order, %Product{} = product, product_params) do
396+
def add_product_to_order(%Order{} = order, %Product{} = product, price, product_params) do
401397
quantity = String.to_integer(product_params["quantity"])
402398
size = product_params["size"]
403399

@@ -408,7 +404,8 @@ defmodule Store.Inventory do
408404
order_id: order.id,
409405
product_id: product.id,
410406
quantity: quantity,
411-
size: size
407+
size: size,
408+
price: price * quantity
412409
})
413410
end
414411
end
@@ -452,17 +449,6 @@ defmodule Store.Inventory do
452449
{:ok, "Product added to cart"}
453450
end
454451

455-
@doc """
456-
457-
458-
"""
459-
460-
def checkout_order(order) do
461-
order
462-
|> Order.changeset(%{status: :ordered})
463-
|> Repo.update()
464-
end
465-
466452
@doc """
467453
Function which verifies that the user has 1 or more of each product in his cart.
468454
## Examples
@@ -490,12 +476,6 @@ defmodule Store.Inventory do
490476
end
491477
end
492478

493-
def capitalize_status(status) do
494-
status
495-
|> Atom.to_string()
496-
|> String.capitalize()
497-
end
498-
499479
def total_price(order) do
500480
Enum.reduce(order.products, 0, fn product, acc -> acc + product.price end)
501481
end
@@ -508,21 +488,9 @@ defmodule Store.Inventory do
508488
total_price(order) - total_price_with_partnership(order)
509489
end
510490

511-
def total_price_cart(id) do
512-
order =
513-
Order
514-
|> where(user_id: ^id)
515-
|> where(status: :draft)
516-
|> Repo.one()
517-
518-
order_products =
519-
OrdersProducts
520-
|> where(order_id: ^order.id)
521-
|> preload([:product])
522-
|> Repo.all()
523-
491+
def total_price_cart(order_products) do
524492
Enum.reduce(order_products, 0, fn order_product, acc ->
525-
acc + order_product.quantity * order_product.product.price
493+
acc + order_product.price
526494
end)
527495
end
528496

@@ -552,12 +520,10 @@ defmodule Store.Inventory do
552520
|> Repo.update()
553521
end
554522

555-
def discount_cart(id) do
556-
total_price_cart(id) - total_price_partnership_cart(id)
523+
def discount_cart(id, order_products) do
524+
total_price_cart(order_products) - total_price_partnership_cart(id)
557525
end
558526

559-
alias Store.Inventory.OrderHistory
560-
561527
def create_orders_history(order) do
562528
%OrderHistory{}
563529
|> OrderHistory.changeset(order)
@@ -612,6 +578,10 @@ defmodule Store.Inventory do
612578
|> Repo.preload(:order)
613579
end
614580

581+
def delete_order_product(%OrdersProducts{} = order_product) do
582+
Repo.delete(order_product)
583+
end
584+
615585
defp broadcast({:error, _reason} = error, _event), do: error
616586

617587
defp broadcast({:ok, %Product{} = product}, event)

lib/store/inventory/order.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ defmodule Store.Inventory.Order do
22
use Store.Schema
33

44
alias Store.Accounts.User
5-
alias StoreWeb.Inventory.Product
5+
alias Store.Inventory.Product
66
alias Store.Inventory.OrdersProducts
77

88
@required_fields ~w(user_id)a
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
defmodule Store.Inventory.OrdersProducts do
22
use Store.Schema
33

4-
alias StoreWeb.Inventory.Product
4+
alias Store.Inventory.Product
55
alias Store.Inventory.Order
66

77
schema "orders_products" do
@@ -10,14 +10,15 @@ defmodule Store.Inventory.OrdersProducts do
1010

1111
belongs_to :order, Order
1212
belongs_to :product, Product
13+
field :price, :integer
1314

1415
timestamps()
1516
end
1617

1718
@doc false
1819
def changeset(orders_products, attrs) do
1920
orders_products
20-
|> cast(attrs, [:order_id, :product_id, :quantity, :size])
21-
|> validate_required([:order_id, :product_id, :quantity, :size])
21+
|> cast(attrs, [:order_id, :product_id, :quantity, :size, :price])
22+
|> validate_required([:order_id, :product_id, :quantity, :size, :price])
2223
end
2324
end

lib/store/inventory/product.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
defmodule StoreWeb.Inventory.Product do
1+
defmodule Store.Inventory.Product do
22
@moduledoc """
33
A product.
44
"""

0 commit comments

Comments
 (0)