Update
This commit is contained in:
parent
f90a7133bc
commit
00ecbadeca
29 changed files with 871 additions and 12 deletions
|
@ -47,9 +47,9 @@ defmodule Nulla.Accounts.User do
|
|||
end
|
||||
|
||||
defp maybe_put_id(changeset) do
|
||||
id_in_attrs = get_field(changeset, :id)
|
||||
id = get_field(changeset, :id)
|
||||
|
||||
if is_nil(id_in_attrs) do
|
||||
if is_nil(id) do
|
||||
change(changeset, id: Snowflake.next_id())
|
||||
else
|
||||
changeset
|
||||
|
|
|
@ -26,9 +26,9 @@ defmodule Nulla.Activities.Activity do
|
|||
end
|
||||
|
||||
defp maybe_put_id(changeset) do
|
||||
id_in_attrs = get_field(changeset, :id)
|
||||
id = get_field(changeset, :id)
|
||||
|
||||
if is_nil(id_in_attrs) do
|
||||
if is_nil(id) do
|
||||
change(changeset, id: Snowflake.next_id())
|
||||
else
|
||||
changeset
|
||||
|
|
|
@ -85,9 +85,9 @@ defmodule Nulla.Actors.Actor do
|
|||
end
|
||||
|
||||
defp maybe_put_id(changeset) do
|
||||
id_in_attrs = get_field(changeset, :id)
|
||||
id = get_field(changeset, :id)
|
||||
|
||||
if is_nil(id_in_attrs) do
|
||||
if is_nil(id) do
|
||||
change(changeset, id: Snowflake.next_id())
|
||||
else
|
||||
changeset
|
||||
|
|
104
lib/nulla/announces.ex
Normal file
104
lib/nulla/announces.ex
Normal file
|
@ -0,0 +1,104 @@
|
|||
defmodule Nulla.Announces do
|
||||
@moduledoc """
|
||||
The Announces context.
|
||||
"""
|
||||
|
||||
import Ecto.Query, warn: false
|
||||
alias Nulla.Repo
|
||||
|
||||
alias Nulla.Announces.Announce
|
||||
|
||||
@doc """
|
||||
Returns the list of announces.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> list_announces()
|
||||
[%Announce{}, ...]
|
||||
|
||||
"""
|
||||
def list_announces do
|
||||
Repo.all(Announce)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Gets a single announce.
|
||||
|
||||
Raises `Ecto.NoResultsError` if the Announce does not exist.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> get_announce!(123)
|
||||
%Announce{}
|
||||
|
||||
iex> get_announce!(456)
|
||||
** (Ecto.NoResultsError)
|
||||
|
||||
"""
|
||||
def get_announce!(id), do: Repo.get!(Announce, id)
|
||||
|
||||
@doc """
|
||||
Creates a announce.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> create_announce(%{field: value})
|
||||
{:ok, %Announce{}}
|
||||
|
||||
iex> create_announce(%{field: bad_value})
|
||||
{:error, %Ecto.Changeset{}}
|
||||
|
||||
"""
|
||||
def create_announce(attrs \\ %{}) do
|
||||
%Announce{}
|
||||
|> Announce.changeset(attrs)
|
||||
|> Repo.insert()
|
||||
end
|
||||
|
||||
@doc """
|
||||
Updates a announce.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> update_announce(announce, %{field: new_value})
|
||||
{:ok, %Announce{}}
|
||||
|
||||
iex> update_announce(announce, %{field: bad_value})
|
||||
{:error, %Ecto.Changeset{}}
|
||||
|
||||
"""
|
||||
def update_announce(%Announce{} = announce, attrs) do
|
||||
announce
|
||||
|> Announce.changeset(attrs)
|
||||
|> Repo.update()
|
||||
end
|
||||
|
||||
@doc """
|
||||
Deletes a announce.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> delete_announce(announce)
|
||||
{:ok, %Announce{}}
|
||||
|
||||
iex> delete_announce(announce)
|
||||
{:error, %Ecto.Changeset{}}
|
||||
|
||||
"""
|
||||
def delete_announce(%Announce{} = announce) do
|
||||
Repo.delete(announce)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Returns an `%Ecto.Changeset{}` for tracking announce changes.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> change_announce(announce)
|
||||
%Ecto.Changeset{data: %Announce{}}
|
||||
|
||||
"""
|
||||
def change_announce(%Announce{} = announce, attrs \\ %{}) do
|
||||
Announce.changeset(announce, attrs)
|
||||
end
|
||||
end
|
33
lib/nulla/announces/announce.ex
Normal file
33
lib/nulla/announces/announce.ex
Normal file
|
@ -0,0 +1,33 @@
|
|||
defmodule Nulla.Announces.Announce do
|
||||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
alias Nulla.Snowflake
|
||||
alias Nulla.Actors.Actor
|
||||
alias Nulla.Notes.Note
|
||||
|
||||
@primary_key {:id, :integer, autogenerate: false}
|
||||
schema "announces" do
|
||||
belongs_to :actor, Actor
|
||||
belongs_to :note, Note
|
||||
|
||||
timestamps(type: :utc_datetime)
|
||||
end
|
||||
|
||||
@doc false
|
||||
def changeset(announce, attrs) do
|
||||
announce
|
||||
|> cast(attrs, [:actor_id, :note_id])
|
||||
|> maybe_put_id()
|
||||
|> validate_required([:actor_id, :note_id])
|
||||
end
|
||||
|
||||
defp maybe_put_id(changeset) do
|
||||
id = get_field(changeset, :id)
|
||||
|
||||
if is_nil(id) do
|
||||
change(changeset, id: Snowflake.next_id())
|
||||
else
|
||||
changeset
|
||||
end
|
||||
end
|
||||
end
|
104
lib/nulla/likes.ex
Normal file
104
lib/nulla/likes.ex
Normal file
|
@ -0,0 +1,104 @@
|
|||
defmodule Nulla.Likes do
|
||||
@moduledoc """
|
||||
The Likes context.
|
||||
"""
|
||||
|
||||
import Ecto.Query, warn: false
|
||||
alias Nulla.Repo
|
||||
|
||||
alias Nulla.Likes.Like
|
||||
|
||||
@doc """
|
||||
Returns the list of likes.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> list_likes()
|
||||
[%Like{}, ...]
|
||||
|
||||
"""
|
||||
def list_likes do
|
||||
Repo.all(Like)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Gets a single like.
|
||||
|
||||
Raises `Ecto.NoResultsError` if the Like does not exist.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> get_like!(123)
|
||||
%Like{}
|
||||
|
||||
iex> get_like!(456)
|
||||
** (Ecto.NoResultsError)
|
||||
|
||||
"""
|
||||
def get_like!(id), do: Repo.get!(Like, id)
|
||||
|
||||
@doc """
|
||||
Creates a like.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> create_like(%{field: value})
|
||||
{:ok, %Like{}}
|
||||
|
||||
iex> create_like(%{field: bad_value})
|
||||
{:error, %Ecto.Changeset{}}
|
||||
|
||||
"""
|
||||
def create_like(attrs \\ %{}) do
|
||||
%Like{}
|
||||
|> Like.changeset(attrs)
|
||||
|> Repo.insert()
|
||||
end
|
||||
|
||||
@doc """
|
||||
Updates a like.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> update_like(like, %{field: new_value})
|
||||
{:ok, %Like{}}
|
||||
|
||||
iex> update_like(like, %{field: bad_value})
|
||||
{:error, %Ecto.Changeset{}}
|
||||
|
||||
"""
|
||||
def update_like(%Like{} = like, attrs) do
|
||||
like
|
||||
|> Like.changeset(attrs)
|
||||
|> Repo.update()
|
||||
end
|
||||
|
||||
@doc """
|
||||
Deletes a like.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> delete_like(like)
|
||||
{:ok, %Like{}}
|
||||
|
||||
iex> delete_like(like)
|
||||
{:error, %Ecto.Changeset{}}
|
||||
|
||||
"""
|
||||
def delete_like(%Like{} = like) do
|
||||
Repo.delete(like)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Returns an `%Ecto.Changeset{}` for tracking like changes.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> change_like(like)
|
||||
%Ecto.Changeset{data: %Like{}}
|
||||
|
||||
"""
|
||||
def change_like(%Like{} = like, attrs \\ %{}) do
|
||||
Like.changeset(like, attrs)
|
||||
end
|
||||
end
|
33
lib/nulla/likes/like.ex
Normal file
33
lib/nulla/likes/like.ex
Normal file
|
@ -0,0 +1,33 @@
|
|||
defmodule Nulla.Likes.Like do
|
||||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
alias Nulla.Snowflake
|
||||
alias Nulla.Actors.Actor
|
||||
alias Nulla.Notes.Note
|
||||
|
||||
@primary_key {:id, :integer, autogenerate: false}
|
||||
schema "likes" do
|
||||
belongs_to :actor, Actor
|
||||
belongs_to :note, Note
|
||||
|
||||
timestamps(type: :utc_datetime)
|
||||
end
|
||||
|
||||
@doc false
|
||||
def changeset(like, attrs) do
|
||||
like
|
||||
|> cast(attrs, [:actor_id, :note_id])
|
||||
|> maybe_put_id()
|
||||
|> validate_required([:actor_id, :note_id])
|
||||
end
|
||||
|
||||
defp maybe_put_id(changeset) do
|
||||
id = get_field(changeset, :id)
|
||||
|
||||
if is_nil(id) do
|
||||
change(changeset, id: Snowflake.next_id())
|
||||
else
|
||||
changeset
|
||||
end
|
||||
end
|
||||
end
|
|
@ -27,9 +27,9 @@ defmodule Nulla.MediaAttachments.MediaAttachment do
|
|||
end
|
||||
|
||||
defp maybe_put_id(changeset) do
|
||||
id_in_attrs = get_field(changeset, :id)
|
||||
id = get_field(changeset, :id)
|
||||
|
||||
if is_nil(id_in_attrs) do
|
||||
if is_nil(id) do
|
||||
change(changeset, id: Snowflake.next_id())
|
||||
else
|
||||
changeset
|
||||
|
|
|
@ -17,6 +17,7 @@ defmodule Nulla.Notes.Note do
|
|||
field :cc, {:array, :string}
|
||||
field :sensitive, :boolean, default: false
|
||||
field :content, :string
|
||||
field :tag, {:array, :map}
|
||||
field :language, :string
|
||||
field :featured, :boolean, default: false
|
||||
|
||||
|
@ -39,6 +40,7 @@ defmodule Nulla.Notes.Note do
|
|||
:cc,
|
||||
:sensitive,
|
||||
:content,
|
||||
:tag,
|
||||
:language,
|
||||
:featured,
|
||||
:actor_id
|
||||
|
@ -53,6 +55,7 @@ defmodule Nulla.Notes.Note do
|
|||
:to,
|
||||
:cc,
|
||||
:content,
|
||||
:tag,
|
||||
:language,
|
||||
:featured,
|
||||
:actor_id
|
||||
|
|
|
@ -64,9 +64,9 @@ defmodule Nulla.Relations.Relation do
|
|||
end
|
||||
|
||||
defp maybe_put_id(changeset) do
|
||||
id_in_attrs = get_field(changeset, :id)
|
||||
id = get_field(changeset, :id)
|
||||
|
||||
if is_nil(id_in_attrs) do
|
||||
if is_nil(id) do
|
||||
change(changeset, id: Snowflake.next_id())
|
||||
else
|
||||
changeset
|
||||
|
|
43
lib/nulla_web/controllers/api/announce_controller.ex
Normal file
43
lib/nulla_web/controllers/api/announce_controller.ex
Normal file
|
@ -0,0 +1,43 @@
|
|||
defmodule NullaWeb.Api.AnnounceController do
|
||||
use NullaWeb, :controller
|
||||
|
||||
alias Nulla.Announces
|
||||
alias Nulla.Announces.Announce
|
||||
|
||||
action_fallback NullaWeb.FallbackController
|
||||
|
||||
def index(conn, _params) do
|
||||
announces = Announces.list_announces()
|
||||
render(conn, :index, announces: announces)
|
||||
end
|
||||
|
||||
def create(conn, %{"announce" => announce_params}) do
|
||||
with {:ok, %Announce{} = announce} <- Announces.create_announce(announce_params) do
|
||||
conn
|
||||
|> put_status(:created)
|
||||
|> put_resp_header("location", ~p"/api/announces/#{announce}")
|
||||
|> render(:show, announce: announce)
|
||||
end
|
||||
end
|
||||
|
||||
def show(conn, %{"id" => id}) do
|
||||
announce = Announces.get_announce!(id)
|
||||
render(conn, :show, announce: announce)
|
||||
end
|
||||
|
||||
def update(conn, %{"id" => id, "announce" => announce_params}) do
|
||||
announce = Announces.get_announce!(id)
|
||||
|
||||
with {:ok, %Announce{} = announce} <- Announces.update_announce(announce, announce_params) do
|
||||
render(conn, :show, announce: announce)
|
||||
end
|
||||
end
|
||||
|
||||
def delete(conn, %{"id" => id}) do
|
||||
announce = Announces.get_announce!(id)
|
||||
|
||||
with {:ok, %Announce{}} <- Announces.delete_announce(announce) do
|
||||
send_resp(conn, :no_content, "")
|
||||
end
|
||||
end
|
||||
end
|
23
lib/nulla_web/controllers/api/announce_json.ex
Normal file
23
lib/nulla_web/controllers/api/announce_json.ex
Normal file
|
@ -0,0 +1,23 @@
|
|||
defmodule NullaWeb.Api.AnnounceJSON do
|
||||
alias Nulla.Announces.Announce
|
||||
|
||||
@doc """
|
||||
Renders a list of announces.
|
||||
"""
|
||||
def index(%{announces: announces}) do
|
||||
%{data: for(announce <- announces, do: data(announce))}
|
||||
end
|
||||
|
||||
@doc """
|
||||
Renders a single announce.
|
||||
"""
|
||||
def show(%{announce: announce}) do
|
||||
%{data: data(announce)}
|
||||
end
|
||||
|
||||
defp data(%Announce{} = announce) do
|
||||
%{
|
||||
id: announce.id
|
||||
}
|
||||
end
|
||||
end
|
43
lib/nulla_web/controllers/api/like_controller.ex
Normal file
43
lib/nulla_web/controllers/api/like_controller.ex
Normal file
|
@ -0,0 +1,43 @@
|
|||
defmodule NullaWeb.Api.LikeController do
|
||||
use NullaWeb, :controller
|
||||
|
||||
alias Nulla.Likes
|
||||
alias Nulla.Likes.Like
|
||||
|
||||
action_fallback NullaWeb.FallbackController
|
||||
|
||||
def index(conn, _params) do
|
||||
likes = Likes.list_likes()
|
||||
render(conn, :index, likes: likes)
|
||||
end
|
||||
|
||||
def create(conn, %{"like" => like_params}) do
|
||||
with {:ok, %Like{} = like} <- Likes.create_like(like_params) do
|
||||
conn
|
||||
|> put_status(:created)
|
||||
|> put_resp_header("location", ~p"/api/likes/#{like}")
|
||||
|> render(:show, like: like)
|
||||
end
|
||||
end
|
||||
|
||||
def show(conn, %{"id" => id}) do
|
||||
like = Likes.get_like!(id)
|
||||
render(conn, :show, like: like)
|
||||
end
|
||||
|
||||
def update(conn, %{"id" => id, "like" => like_params}) do
|
||||
like = Likes.get_like!(id)
|
||||
|
||||
with {:ok, %Like{} = like} <- Likes.update_like(like, like_params) do
|
||||
render(conn, :show, like: like)
|
||||
end
|
||||
end
|
||||
|
||||
def delete(conn, %{"id" => id}) do
|
||||
like = Likes.get_like!(id)
|
||||
|
||||
with {:ok, %Like{}} <- Likes.delete_like(like) do
|
||||
send_resp(conn, :no_content, "")
|
||||
end
|
||||
end
|
||||
end
|
23
lib/nulla_web/controllers/api/like_json.ex
Normal file
23
lib/nulla_web/controllers/api/like_json.ex
Normal file
|
@ -0,0 +1,23 @@
|
|||
defmodule NullaWeb.Api.LikeJSON do
|
||||
alias Nulla.Likes.Like
|
||||
|
||||
@doc """
|
||||
Renders a list of likes.
|
||||
"""
|
||||
def index(%{likes: likes}) do
|
||||
%{data: for(like <- likes, do: data(like))}
|
||||
end
|
||||
|
||||
@doc """
|
||||
Renders a single like.
|
||||
"""
|
||||
def show(%{like: like}) do
|
||||
%{data: data(like)}
|
||||
end
|
||||
|
||||
defp data(%Like{} = like) do
|
||||
%{
|
||||
id: like.id
|
||||
}
|
||||
end
|
||||
end
|
|
@ -26,6 +26,7 @@ defmodule NullaWeb.Api.NoteJSON do
|
|||
cc: note.cc,
|
||||
sensitive: note.sensitive,
|
||||
content: note.content,
|
||||
tag: note.tag,
|
||||
language: note.language
|
||||
}
|
||||
end
|
||||
|
|
|
@ -71,6 +71,8 @@ defmodule NullaWeb.Router do
|
|||
resources "/notes", NoteController, except: [:new, :edit]
|
||||
resources "/media_attachments", MediaAttachmentController, except: [:new, :edit]
|
||||
resources "/relations", RelationController, except: [:new, :edit]
|
||||
resources "/likes", LikeController, except: [:new, :edit]
|
||||
resources "/announces", AnnounceController, except: [:new, :edit]
|
||||
resources "/activities", ActivityController, except: [:new, :edit]
|
||||
end
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue