-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
e78bfc8
commit d9e1649
Showing
23 changed files
with
1,115 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,228 @@ | ||
defmodule Safira.Teams do | ||
@moduledoc """ | ||
The Teams context. | ||
""" | ||
use Safira.Context | ||
|
||
alias Safira.Teams.Team | ||
|
||
@doc """ | ||
Returns the list of teams. | ||
## Examples | ||
iex> list_teams() | ||
[%Team{}, ...] | ||
""" | ||
def list_teams(opts \\ []) when is_list(opts) do | ||
Team | ||
|> order_by(:priority) | ||
|> apply_filters(opts) | ||
|> Repo.all() | ||
end | ||
|
||
@doc """ | ||
Gets a single team. | ||
Raises `Ecto.NoResultsError` if the Team does not exist. | ||
## Examples | ||
iex> get_team!(123) | ||
%Team{} | ||
iex> get_team!(456) | ||
** (Ecto.NoResultsError) | ||
""" | ||
def get_team!(id), do: Repo.get!(Team, id) | ||
|
||
@doc """ | ||
Creates a team. | ||
## Examples | ||
iex> create_team(%{field: value}) | ||
{:ok, %Team{}} | ||
iex> create_team(%{field: bad_value}) | ||
{:error, %Ecto.Changeset{}} | ||
""" | ||
def create_team(attrs \\ %{}) do | ||
%Team{} | ||
|> Team.changeset(attrs) | ||
|> Repo.insert() | ||
end | ||
|
||
@doc """ | ||
Updates a team. | ||
## Examples | ||
iex> update_team(team, %{field: new_value}) | ||
{:ok, %Team{}} | ||
iex> update_team(team, %{field: bad_value}) | ||
{:error, %Ecto.Changeset{}} | ||
""" | ||
def update_team(%Team{} = team, attrs) do | ||
team | ||
|> Team.changeset(attrs) | ||
|> Repo.update() | ||
end | ||
|
||
@doc """ | ||
Deletes a team. | ||
## Examples | ||
iex> delete_team(team) | ||
{:ok, %Team{}} | ||
iex> delete_team(team) | ||
{:error, %Ecto.Changeset{}} | ||
""" | ||
def delete_team(%Team{} = team) do | ||
Repo.delete(team) | ||
end | ||
|
||
@doc """ | ||
Returns an `%Ecto.Changeset{}` for tracking team changes. | ||
## Examples | ||
iex> change_team(team) | ||
%Ecto.Changeset{data: %Team{}} | ||
""" | ||
def change_team(%Team{} = team, attrs \\ %{}) do | ||
Team.changeset(team, attrs) | ||
end | ||
|
||
def get_next_team_priority do | ||
(Repo.aggregate(from(t in Team), :max, :priority) || -1) + 1 | ||
end | ||
|
||
alias Safira.Teams.TeamMember | ||
|
||
def update_team_member_foto(%TeamMember{} = member, attrs) do | ||
member | ||
|> TeamMember.image_changeset(attrs) | ||
|> Repo.update() | ||
end | ||
|
||
@doc """ | ||
Returns the list of team_members. | ||
## Examples | ||
iex> list_team_members(team_id) | ||
[%TeamMember{}, ...] | ||
""" | ||
def list_team_members(team_id \\ nil) do | ||
members = | ||
TeamMember | ||
|> order_by(:name) | ||
|> Repo.all() | ||
|
||
case team_id do | ||
nil -> | ||
{:ok, members} | ||
|
||
_ -> | ||
filtered_members = Enum.filter(members, fn member -> member.team_id == team_id end) | ||
|
||
if Enum.empty?(filtered_members) do | ||
{:error, "No members found for the given team ID"} | ||
else | ||
{:ok, filtered_members} | ||
end | ||
end | ||
end | ||
|
||
@doc """ | ||
Gets a single team_member. | ||
Raises `Ecto.NoResultsError` if the Team member does not exist. | ||
## Examples | ||
iex> get_team_member!(123) | ||
%TeamMember{} | ||
iex> get_team_member!(456) | ||
** (Ecto.NoResultsError) | ||
""" | ||
def get_team_member!(id), do: Repo.get!(TeamMember, id) | ||
|
||
@doc """ | ||
Creates a team_member. | ||
## Examples | ||
iex> create_team_member(%{field: value}) | ||
{:ok, %TeamMember{}} | ||
iex> create_team_member(%{field: bad_value}) | ||
{:error, %Ecto.Changeset{}} | ||
""" | ||
def create_team_member(attrs \\ %{}) do | ||
%TeamMember{} | ||
|> TeamMember.changeset(attrs) | ||
|> Repo.insert() | ||
end | ||
|
||
@doc """ | ||
Updates a team_member. | ||
## Examples | ||
iex> update_team_member(team_member, %{field: new_value}) | ||
{:ok, %TeamMember{}} | ||
iex> update_team_member(team_member, %{field: bad_value}) | ||
{:error, %Ecto.Changeset{}} | ||
""" | ||
def update_team_member(%TeamMember{} = team_member, attrs) do | ||
team_member | ||
|> TeamMember.changeset(attrs) | ||
|> Repo.update() | ||
end | ||
|
||
@doc """ | ||
Deletes a team_member. | ||
## Examples | ||
iex> delete_team_member(team_member) | ||
{:ok, %TeamMember{}} | ||
iex> delete_team_member(team_member) | ||
{:error, %Ecto.Changeset{}} | ||
""" | ||
def delete_team_member(%TeamMember{} = team_member) do | ||
Repo.delete(team_member) | ||
end | ||
|
||
@doc """ | ||
Returns an `%Ecto.Changeset{}` for tracking team_member changes. | ||
## Examples | ||
iex> change_team_member(team_member) | ||
%Ecto.Changeset{data: %TeamMember{}} | ||
""" | ||
def change_team_member(%TeamMember{} = team_member, attrs \\ %{}) do | ||
TeamMember.changeset(team_member, attrs) | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
defmodule Safira.Teams.Team do | ||
@moduledoc """ | ||
Team schema. | ||
""" | ||
use Safira.Schema | ||
|
||
@required_fields ~w(name priority)a | ||
|
||
schema "teams" do | ||
field :name, :string | ||
field :priority, :integer | ||
has_many :team_members, Safira.Teams.TeamMember | ||
|
||
timestamps(type: :utc_datetime) | ||
end | ||
|
||
@doc false | ||
def changeset(team, attrs) do | ||
team | ||
|> cast(attrs, @required_fields) | ||
|> validate_required(@required_fields) | ||
|> foreign_key_constraint(:name) | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
defmodule Safira.Teams.TeamMember do | ||
@moduledoc """ | ||
Team member schema. | ||
""" | ||
use Safira.Schema | ||
|
||
@required_fields ~w(name team_id)a | ||
@optional_fields ~w(url)a | ||
|
||
schema "team_members" do | ||
field :name, :string | ||
belongs_to :team, Safira.Teams.Team | ||
field :url, :string | ||
field :image, Uploaders.Member.Type | ||
|
||
timestamps(type: :utc_datetime) | ||
end | ||
|
||
@doc false | ||
def changeset(team_member, attrs) do | ||
team_member | ||
|> cast(attrs, @required_fields ++ @optional_fields) | ||
|> validate_required(@required_fields) | ||
|> unique_constraint(:name) | ||
|> validate_url(:url) | ||
end | ||
|
||
@doc false | ||
def image_changeset(team_member, attrs) do | ||
team_member | ||
|> cast_attachments(attrs, [:image]) | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
defmodule Safira.Uploaders.Member do | ||
@moduledoc """ | ||
Member image uploader. | ||
""" | ||
use Safira.Uploader | ||
|
||
alias Safira.Teams.TeamMember | ||
|
||
@versions [:original] | ||
@extension_whitelist ~w(.jpg .jpeg .png) | ||
|
||
def validate({file, _}) do | ||
file_extension = file.file_name |> Path.extname() |> String.downcase() | ||
Enum.member?(extension_whitelist(), file_extension) | ||
end | ||
|
||
def storage_dir(_, {_file, %TeamMember{} = team_member}) do | ||
"uploads/team/members/#{team_member.id}" | ||
end | ||
|
||
def filename(version, _) do | ||
version | ||
end | ||
|
||
def extension_whitelist do | ||
@extension_whitelist | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.