mirror of
https://github.com/philomena-dev/philomena.git
synced 2025-02-01 03:46:44 +01:00
context: badges, badge_awards
This commit is contained in:
parent
6da5633010
commit
5cbc64bd1a
4 changed files with 364 additions and 0 deletions
200
lib/philomena/badges.ex
Normal file
200
lib/philomena/badges.ex
Normal file
|
@ -0,0 +1,200 @@
|
||||||
|
defmodule Philomena.Badges do
|
||||||
|
@moduledoc """
|
||||||
|
The Badges context.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import Ecto.Query, warn: false
|
||||||
|
alias Philomena.Repo
|
||||||
|
|
||||||
|
alias Philomena.Badges.Badge
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Returns the list of badges.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
iex> list_badges()
|
||||||
|
[%Badge{}, ...]
|
||||||
|
|
||||||
|
"""
|
||||||
|
def list_badges do
|
||||||
|
Repo.all(Badge)
|
||||||
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Gets a single badge.
|
||||||
|
|
||||||
|
Raises `Ecto.NoResultsError` if the Badge does not exist.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
iex> get_badge!(123)
|
||||||
|
%Badge{}
|
||||||
|
|
||||||
|
iex> get_badge!(456)
|
||||||
|
** (Ecto.NoResultsError)
|
||||||
|
|
||||||
|
"""
|
||||||
|
def get_badge!(id), do: Repo.get!(Badge, id)
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Creates a badge.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
iex> create_badge(%{field: value})
|
||||||
|
{:ok, %Badge{}}
|
||||||
|
|
||||||
|
iex> create_badge(%{field: bad_value})
|
||||||
|
{:error, %Ecto.Changeset{}}
|
||||||
|
|
||||||
|
"""
|
||||||
|
def create_badge(attrs \\ %{}) do
|
||||||
|
%Badge{}
|
||||||
|
|> Badge.changeset(attrs)
|
||||||
|
|> Repo.insert()
|
||||||
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Updates a badge.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
iex> update_badge(badge, %{field: new_value})
|
||||||
|
{:ok, %Badge{}}
|
||||||
|
|
||||||
|
iex> update_badge(badge, %{field: bad_value})
|
||||||
|
{:error, %Ecto.Changeset{}}
|
||||||
|
|
||||||
|
"""
|
||||||
|
def update_badge(%Badge{} = badge, attrs) do
|
||||||
|
badge
|
||||||
|
|> Badge.changeset(attrs)
|
||||||
|
|> Repo.update()
|
||||||
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Deletes a Badge.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
iex> delete_badge(badge)
|
||||||
|
{:ok, %Badge{}}
|
||||||
|
|
||||||
|
iex> delete_badge(badge)
|
||||||
|
{:error, %Ecto.Changeset{}}
|
||||||
|
|
||||||
|
"""
|
||||||
|
def delete_badge(%Badge{} = badge) do
|
||||||
|
Repo.delete(badge)
|
||||||
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Returns an `%Ecto.Changeset{}` for tracking badge changes.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
iex> change_badge(badge)
|
||||||
|
%Ecto.Changeset{source: %Badge{}}
|
||||||
|
|
||||||
|
"""
|
||||||
|
def change_badge(%Badge{} = badge) do
|
||||||
|
Badge.changeset(badge, %{})
|
||||||
|
end
|
||||||
|
|
||||||
|
alias Philomena.Badges.Award
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Returns the list of badge_awards.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
iex> list_badge_awards()
|
||||||
|
[%Award{}, ...]
|
||||||
|
|
||||||
|
"""
|
||||||
|
def list_badge_awards do
|
||||||
|
Repo.all(Award)
|
||||||
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Gets a single badge_award.
|
||||||
|
|
||||||
|
Raises `Ecto.NoResultsError` if the Badge award does not exist.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
iex> get_badge_award!(123)
|
||||||
|
%Award{}
|
||||||
|
|
||||||
|
iex> get_badge_award!(456)
|
||||||
|
** (Ecto.NoResultsError)
|
||||||
|
|
||||||
|
"""
|
||||||
|
def get_badge_award!(id), do: Repo.get!(Award, id)
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Creates a badge_award.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
iex> create_badge_award(%{field: value})
|
||||||
|
{:ok, %Award{}}
|
||||||
|
|
||||||
|
iex> create_badge_award(%{field: bad_value})
|
||||||
|
{:error, %Ecto.Changeset{}}
|
||||||
|
|
||||||
|
"""
|
||||||
|
def create_badge_award(attrs \\ %{}) do
|
||||||
|
%Award{}
|
||||||
|
|> Award.changeset(attrs)
|
||||||
|
|> Repo.insert()
|
||||||
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Updates a badge_award.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
iex> update_badge_award(badge_award, %{field: new_value})
|
||||||
|
{:ok, %Award{}}
|
||||||
|
|
||||||
|
iex> update_badge_award(badge_award, %{field: bad_value})
|
||||||
|
{:error, %Ecto.Changeset{}}
|
||||||
|
|
||||||
|
"""
|
||||||
|
def update_badge_award(%Award{} = badge_award, attrs) do
|
||||||
|
badge_award
|
||||||
|
|> Award.changeset(attrs)
|
||||||
|
|> Repo.update()
|
||||||
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Deletes a Award.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
iex> delete_badge_award(badge_award)
|
||||||
|
{:ok, %Award{}}
|
||||||
|
|
||||||
|
iex> delete_badge_award(badge_award)
|
||||||
|
{:error, %Ecto.Changeset{}}
|
||||||
|
|
||||||
|
"""
|
||||||
|
def delete_badge_award(%Award{} = badge_award) do
|
||||||
|
Repo.delete(badge_award)
|
||||||
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Returns an `%Ecto.Changeset{}` for tracking badge_award changes.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
iex> change_badge_award(badge_award)
|
||||||
|
%Ecto.Changeset{source: %Award{}}
|
||||||
|
|
||||||
|
"""
|
||||||
|
def change_badge_award(%Award{} = badge_award) do
|
||||||
|
Award.changeset(badge_award, %{})
|
||||||
|
end
|
||||||
|
end
|
24
lib/philomena/badges/award.ex
Normal file
24
lib/philomena/badges/award.ex
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
defmodule Philomena.Badges.Award do
|
||||||
|
use Ecto.Schema
|
||||||
|
import Ecto.Changeset
|
||||||
|
|
||||||
|
schema "badge_awards" do
|
||||||
|
belongs_to :user, Philomena.Users.User
|
||||||
|
belongs_to :awarded_by, Philomena.Users.User
|
||||||
|
belongs_to :badge, Philomena.Badges.Badge
|
||||||
|
|
||||||
|
field :label, :string
|
||||||
|
field :awarded_on, :naive_datetime
|
||||||
|
field :reason, :string
|
||||||
|
field :badge_name, :string
|
||||||
|
|
||||||
|
timestamps(inserted_at: :created_at)
|
||||||
|
end
|
||||||
|
|
||||||
|
@doc false
|
||||||
|
def changeset(badge_award, attrs) do
|
||||||
|
badge_award
|
||||||
|
|> cast(attrs, [])
|
||||||
|
|> validate_required([])
|
||||||
|
end
|
||||||
|
end
|
21
lib/philomena/badges/badge.ex
Normal file
21
lib/philomena/badges/badge.ex
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
defmodule Philomena.Badges.Badge do
|
||||||
|
use Ecto.Schema
|
||||||
|
import Ecto.Changeset
|
||||||
|
|
||||||
|
schema "badges" do
|
||||||
|
field :title, :string
|
||||||
|
field :description, :string
|
||||||
|
field :image, :string
|
||||||
|
field :disable_award, :boolean, default: false
|
||||||
|
field :priority, :boolean, default: false
|
||||||
|
|
||||||
|
timestamps(inserted_at: :created_at)
|
||||||
|
end
|
||||||
|
|
||||||
|
@doc false
|
||||||
|
def changeset(badge, attrs) do
|
||||||
|
badge
|
||||||
|
|> cast(attrs, [])
|
||||||
|
|> validate_required([])
|
||||||
|
end
|
||||||
|
end
|
119
test/philomena/badges_test.exs
Normal file
119
test/philomena/badges_test.exs
Normal file
|
@ -0,0 +1,119 @@
|
||||||
|
defmodule Philomena.BadgesTest do
|
||||||
|
use Philomena.DataCase
|
||||||
|
|
||||||
|
alias Philomena.Badges
|
||||||
|
|
||||||
|
describe "badges" do
|
||||||
|
alias Philomena.Badges.Badge
|
||||||
|
|
||||||
|
@valid_attrs %{}
|
||||||
|
@update_attrs %{}
|
||||||
|
@invalid_attrs %{}
|
||||||
|
|
||||||
|
def badge_fixture(attrs \\ %{}) do
|
||||||
|
{:ok, badge} =
|
||||||
|
attrs
|
||||||
|
|> Enum.into(@valid_attrs)
|
||||||
|
|> Badges.create_badge()
|
||||||
|
|
||||||
|
badge
|
||||||
|
end
|
||||||
|
|
||||||
|
test "list_badges/0 returns all badges" do
|
||||||
|
badge = badge_fixture()
|
||||||
|
assert Badges.list_badges() == [badge]
|
||||||
|
end
|
||||||
|
|
||||||
|
test "get_badge!/1 returns the badge with given id" do
|
||||||
|
badge = badge_fixture()
|
||||||
|
assert Badges.get_badge!(badge.id) == badge
|
||||||
|
end
|
||||||
|
|
||||||
|
test "create_badge/1 with valid data creates a badge" do
|
||||||
|
assert {:ok, %Badge{} = badge} = Badges.create_badge(@valid_attrs)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "create_badge/1 with invalid data returns error changeset" do
|
||||||
|
assert {:error, %Ecto.Changeset{}} = Badges.create_badge(@invalid_attrs)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "update_badge/2 with valid data updates the badge" do
|
||||||
|
badge = badge_fixture()
|
||||||
|
assert {:ok, %Badge{} = badge} = Badges.update_badge(badge, @update_attrs)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "update_badge/2 with invalid data returns error changeset" do
|
||||||
|
badge = badge_fixture()
|
||||||
|
assert {:error, %Ecto.Changeset{}} = Badges.update_badge(badge, @invalid_attrs)
|
||||||
|
assert badge == Badges.get_badge!(badge.id)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "delete_badge/1 deletes the badge" do
|
||||||
|
badge = badge_fixture()
|
||||||
|
assert {:ok, %Badge{}} = Badges.delete_badge(badge)
|
||||||
|
assert_raise Ecto.NoResultsError, fn -> Badges.get_badge!(badge.id) end
|
||||||
|
end
|
||||||
|
|
||||||
|
test "change_badge/1 returns a badge changeset" do
|
||||||
|
badge = badge_fixture()
|
||||||
|
assert %Ecto.Changeset{} = Badges.change_badge(badge)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "badge_awards" do
|
||||||
|
alias Philomena.Badges.BadgeAward
|
||||||
|
|
||||||
|
@valid_attrs %{}
|
||||||
|
@update_attrs %{}
|
||||||
|
@invalid_attrs %{}
|
||||||
|
|
||||||
|
def badge_award_fixture(attrs \\ %{}) do
|
||||||
|
{:ok, badge_award} =
|
||||||
|
attrs
|
||||||
|
|> Enum.into(@valid_attrs)
|
||||||
|
|> Badges.create_badge_award()
|
||||||
|
|
||||||
|
badge_award
|
||||||
|
end
|
||||||
|
|
||||||
|
test "list_badge_awards/0 returns all badge_awards" do
|
||||||
|
badge_award = badge_award_fixture()
|
||||||
|
assert Badges.list_badge_awards() == [badge_award]
|
||||||
|
end
|
||||||
|
|
||||||
|
test "get_badge_award!/1 returns the badge_award with given id" do
|
||||||
|
badge_award = badge_award_fixture()
|
||||||
|
assert Badges.get_badge_award!(badge_award.id) == badge_award
|
||||||
|
end
|
||||||
|
|
||||||
|
test "create_badge_award/1 with valid data creates a badge_award" do
|
||||||
|
assert {:ok, %BadgeAward{} = badge_award} = Badges.create_badge_award(@valid_attrs)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "create_badge_award/1 with invalid data returns error changeset" do
|
||||||
|
assert {:error, %Ecto.Changeset{}} = Badges.create_badge_award(@invalid_attrs)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "update_badge_award/2 with valid data updates the badge_award" do
|
||||||
|
badge_award = badge_award_fixture()
|
||||||
|
assert {:ok, %BadgeAward{} = badge_award} = Badges.update_badge_award(badge_award, @update_attrs)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "update_badge_award/2 with invalid data returns error changeset" do
|
||||||
|
badge_award = badge_award_fixture()
|
||||||
|
assert {:error, %Ecto.Changeset{}} = Badges.update_badge_award(badge_award, @invalid_attrs)
|
||||||
|
assert badge_award == Badges.get_badge_award!(badge_award.id)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "delete_badge_award/1 deletes the badge_award" do
|
||||||
|
badge_award = badge_award_fixture()
|
||||||
|
assert {:ok, %BadgeAward{}} = Badges.delete_badge_award(badge_award)
|
||||||
|
assert_raise Ecto.NoResultsError, fn -> Badges.get_badge_award!(badge_award.id) end
|
||||||
|
end
|
||||||
|
|
||||||
|
test "change_badge_award/1 returns a badge_award changeset" do
|
||||||
|
badge_award = badge_award_fixture()
|
||||||
|
assert %Ecto.Changeset{} = Badges.change_badge_award(badge_award)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue