philomena/lib/philomena/image_hides.ex

55 lines
1.1 KiB
Elixir
Raw Normal View History

2019-11-17 00:42:41 +01:00
defmodule Philomena.ImageHides do
@moduledoc """
The ImageHides context.
"""
import Ecto.Query, warn: false
2019-11-17 03:20:33 +01:00
alias Ecto.Multi
2019-11-17 00:42:41 +01:00
2019-11-17 03:20:33 +01:00
alias Philomena.Images.Image
2019-11-17 00:42:41 +01:00
alias Philomena.ImageHides.ImageHide
@doc """
Creates a image_hide.
"""
2019-11-17 03:20:33 +01:00
def create_hide_transaction(image, user) do
hide =
%ImageHide{image_id: image.id, user_id: user.id}
|> ImageHide.changeset(%{})
image_query =
Image
|> where(id: ^image.id)
2020-01-11 05:20:19 +01:00
Multi.new()
2019-11-17 03:20:33 +01:00
|> Multi.insert(:hide, hide)
|> Multi.update_all(:inc_hides_count, image_query, inc: [hides_count: 1])
2019-11-17 00:42:41 +01:00
end
@doc """
Deletes a ImageHide.
"""
2019-11-17 03:20:33 +01:00
def delete_hide_transaction(image, user) do
hide_query =
ImageHide
|> where(image_id: ^image.id)
|> where(user_id: ^user.id)
image_query =
Image
|> where(id: ^image.id)
2020-01-11 05:20:19 +01:00
Multi.new()
2019-11-17 03:20:33 +01:00
|> Multi.delete_all(:unhide, hide_query)
|> Multi.run(:dec_hides_count, fn repo, %{unhide: {hides, nil}} ->
{count, nil} =
image_query
|> repo.update_all(inc: [hides_count: -hides])
{:ok, count}
end)
2019-11-17 00:42:41 +01:00
end
end