2018-12-14 11:23:36 +01:00
|
|
|
defmodule Mobilizon.Ecto do
|
|
|
|
@moduledoc """
|
|
|
|
Mobilizon Ecto utils
|
|
|
|
"""
|
|
|
|
|
|
|
|
import Ecto.Query, warn: false
|
|
|
|
|
|
|
|
@doc """
|
|
|
|
Add limit and offset to the query
|
|
|
|
"""
|
|
|
|
def paginate(query, page \\ 1, size \\ 10)
|
|
|
|
def paginate(query, page, _size) when is_nil(page), do: paginate(query)
|
|
|
|
def paginate(query, page, size) when is_nil(size), do: paginate(query, page)
|
|
|
|
|
|
|
|
def paginate(query, page, size) do
|
|
|
|
from(query,
|
|
|
|
limit: ^size,
|
|
|
|
offset: ^((page - 1) * size)
|
|
|
|
)
|
|
|
|
end
|
|
|
|
|
2019-03-01 11:41:28 +01:00
|
|
|
@doc """
|
|
|
|
Add sort to the query
|
|
|
|
"""
|
|
|
|
def sort(query, sort, direction) do
|
|
|
|
from(
|
|
|
|
query,
|
|
|
|
order_by: [{^direction, ^sort}]
|
|
|
|
)
|
|
|
|
end
|
|
|
|
|
2018-12-14 11:23:36 +01:00
|
|
|
def increment_slug(slug) do
|
|
|
|
case List.pop_at(String.split(slug, "-"), -1) do
|
|
|
|
{nil, _} ->
|
|
|
|
slug
|
|
|
|
|
|
|
|
{suffix, slug_parts} ->
|
|
|
|
case Integer.parse(suffix) do
|
|
|
|
{id, _} -> Enum.join(slug_parts, "-") <> "-" <> Integer.to_string(id + 1)
|
|
|
|
:error -> slug <> "-1"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|