Add address input and refactor federation stuff
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
@@ -6,6 +6,20 @@ defmodule Mobilizon.Addresses.Address do
|
||||
alias Mobilizon.Addresses.Address
|
||||
alias Mobilizon.Events.Event
|
||||
# alias Mobilizon.Actors.Actor
|
||||
@attrs [
|
||||
:description,
|
||||
:floor,
|
||||
:geom,
|
||||
:country,
|
||||
:locality,
|
||||
:region,
|
||||
:postal_code,
|
||||
:street,
|
||||
:url
|
||||
]
|
||||
@required [
|
||||
:url
|
||||
]
|
||||
|
||||
schema "addresses" do
|
||||
field(:country, :string)
|
||||
@@ -16,8 +30,8 @@ defmodule Mobilizon.Addresses.Address do
|
||||
field(:geom, Geo.PostGIS.Geometry)
|
||||
field(:postal_code, :string)
|
||||
field(:street, :string)
|
||||
has_one(:event, Event, foreign_key: :physical_address_id)
|
||||
# has_one(:group, Actor)
|
||||
field(:url, :string)
|
||||
has_many(:event, Event, foreign_key: :physical_address_id)
|
||||
|
||||
timestamps()
|
||||
end
|
||||
@@ -25,15 +39,15 @@ defmodule Mobilizon.Addresses.Address do
|
||||
@doc false
|
||||
def changeset(%Address{} = address, attrs) do
|
||||
address
|
||||
|> cast(attrs, [
|
||||
:description,
|
||||
:floor,
|
||||
:geom,
|
||||
:country,
|
||||
:locality,
|
||||
:region,
|
||||
:postal_code,
|
||||
:street
|
||||
])
|
||||
|> cast(attrs, @attrs)
|
||||
|> set_url()
|
||||
|> validate_required(@required)
|
||||
end
|
||||
|
||||
defp set_url(%Ecto.Changeset{changes: changes} = changeset) do
|
||||
url =
|
||||
Map.get(changes, :url, MobilizonWeb.Endpoint.url() <> "/address/#{Ecto.UUID.generate()}")
|
||||
|
||||
put_change(changeset, :url, url)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -50,6 +50,21 @@ defmodule Mobilizon.Addresses do
|
||||
"""
|
||||
def get_address!(id), do: Repo.get!(Address, id)
|
||||
|
||||
@doc """
|
||||
Gets a single address by it's url
|
||||
|
||||
## Examples
|
||||
|
||||
iex> get_address_by_url("https://mobilizon.social/addresses/4572")
|
||||
%Address{}
|
||||
|
||||
iex> get_address_by_url("https://mobilizon.social/addresses/099")
|
||||
nil
|
||||
"""
|
||||
def get_address_by_url(url) do
|
||||
Repo.get_by(Address, url: url)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Creates a address.
|
||||
|
||||
@@ -163,7 +178,7 @@ defmodule Mobilizon.Addresses do
|
||||
We only look at the description for now, and eventually order by object distance
|
||||
"""
|
||||
@spec search_addresses(String.t(), list()) :: list(Address.t())
|
||||
def search_addresses(search, options) do
|
||||
def search_addresses(search, options \\ []) do
|
||||
limit = Keyword.get(options, :limit, 5)
|
||||
|
||||
query = from(a in Address, where: ilike(a.description, ^"%#{search}%"), limit: ^limit)
|
||||
@@ -181,7 +196,7 @@ defmodule Mobilizon.Addresses do
|
||||
do: from(a in query, where: ilike(a.country, ^"%#{country}%")),
|
||||
else: query
|
||||
|
||||
Repo.all(query)
|
||||
if Keyword.get(options, :single, false) == true, do: Repo.one(query), else: Repo.all(query)
|
||||
end
|
||||
|
||||
@doc """
|
||||
|
||||
Reference in New Issue
Block a user