Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: team page #464

Merged
merged 53 commits into from
Feb 7, 2025
Merged
Show file tree
Hide file tree
Changes from 42 commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
e4acd5e
feat: migrations and some modals
AfonsoMartins26 Jan 15, 2025
d8ca57e
feat: create team and edit
AfonsoMartins26 Jan 16, 2025
9ceb0d8
feat: see team members when edit team
AfonsoMartins26 Jan 17, 2025
a6aaeec
feat: all working in backend
AfonsoMartins26 Jan 17, 2025
85492ab
format code
AfonsoMartins26 Jan 17, 2025
a75da49
fix: lint code
AfonsoMartins26 Jan 17, 2025
8989df1
feat: landing page not finish
AfonsoMartins26 Jan 18, 2025
493ddf6
feat: teams from the bd to the landing team
AfonsoMartins26 Jan 18, 2025
ed706bf
feat: try image uplouad
AfonsoMartins26 Jan 20, 2025
60c280b
feat: uplouad working
AfonsoMartins26 Jan 22, 2025
82cdd34
feat: delete members
AfonsoMartins26 Jan 22, 2025
892c445
format
AfonsoMartins26 Jan 22, 2025
1ac66b0
feat: team page working
AfonsoMartins26 Jan 22, 2025
4a82e7b
Merge branch 'main' into am/landing-team
AfonsoMartins26 Jan 22, 2025
9aa369d
fix: some things
AfonsoMartins26 Jan 22, 2025
4b8326e
fix: warning
AfonsoMartins26 Jan 22, 2025
4c9c3b7
feat: team page now a landing_view
AfonsoMartins26 Jan 23, 2025
ddc7520
Merge branch 'main' into am/landing-team
AfonsoMartins26 Jan 23, 2025
5069f24
feat: some fixes and changes to the team page
AfonsoMartins26 Jan 23, 2025
82c48d1
fix: priority in teams
AfonsoMartins26 Jan 23, 2025
62a7d5f
format and lint
AfonsoMartins26 Jan 23, 2025
7c19d15
feat: remove gap
AfonsoMartins26 Jan 24, 2025
df346fb
feat: try to put seeds
AfonsoMartins26 Jan 24, 2025
e2cd047
feat: seeds working with members
AfonsoMartins26 Jan 25, 2025
473ba36
feat: requested changes
AfonsoMartins26 Jan 25, 2025
8e6f6b8
fix: some tests
AfonsoMartins26 Jan 25, 2025
794dfb4
fix: tests
AfonsoMartins26 Jan 25, 2025
195f992
feat: some touches
AfonsoMartins26 Jan 25, 2025
20efe47
Merge branch 'main' into am/landing-team
AfonsoMartins26 Jan 25, 2025
96fa1a1
feat: requested changes and mobile
AfonsoMartins26 Jan 25, 2025
a60c21d
Merge branch 'am/landing-team' of github.com:cesium/safira into am/la…
AfonsoMartins26 Jan 25, 2025
bcab4ad
feat: requested changes
AfonsoMartins26 Jan 28, 2025
fb2a04e
Merge branch 'main' into am/landing-team
AfonsoMartins26 Jan 28, 2025
2dd635d
format code
AfonsoMartins26 Jan 28, 2025
54f574f
feat: requested changes
AfonsoMartins26 Jan 30, 2025
2b4c354
feat: request change and fix name folder
AfonsoMartins26 Jan 30, 2025
d4be723
feat: requeste changes
AfonsoMartins26 Feb 1, 2025
88384b1
feat: try to not repeat the form
AfonsoMartins26 Feb 2, 2025
9e4128d
format code
AfonsoMartins26 Feb 2, 2025
49f2895
fix: problem with guard
AfonsoMartins26 Feb 2, 2025
9abf77c
format code
AfonsoMartins26 Feb 2, 2025
c7d8f3e
feat: resolve error
AfonsoMartins26 Feb 3, 2025
2473ab1
feat: requested changes
AfonsoMartins26 Feb 4, 2025
b259476
feat: some changes
AfonsoMartins26 Feb 4, 2025
9e5e727
format code
AfonsoMartins26 Feb 5, 2025
b65e755
feat: all working
AfonsoMartins26 Feb 7, 2025
ef8aa3d
fix: sorting
AfonsoMartins26 Feb 7, 2025
f98edc7
feat: add `current_page` to team page
AfonsoMartins26 Feb 7, 2025
9a098ec
Merge branch 'main' into am/landing-team
AfonsoMartins26 Feb 7, 2025
39b1d40
fix: merge issues
AfonsoMartins26 Feb 7, 2025
b374640
fix: event buttun
AfonsoMartins26 Feb 7, 2025
dab65a1
feat: remove import and add @impl true
AfonsoMartins26 Feb 7, 2025
e6af82a
feat: remove color
AfonsoMartins26 Feb 7, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions lib/safira/event.ex
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ defmodule Safira.Event do
"survival_guide_enabled",
"faqs_enabled",
"general_regulation_enabled",
"team_enabled",
"call_for_staff_enabled"
]
end
Expand Down
224 changes: 224 additions & 0 deletions lib/safira/teams.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,224 @@
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
|> apply_filters(opts)
|> Repo.all()
end

AfonsoMartins26 marked this conversation as resolved.
Show resolved Hide resolved
@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 = Repo.all(TeamMember)

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
24 changes: 24 additions & 0 deletions lib/safira/teams/team.ex
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
33 changes: 33 additions & 0 deletions lib/safira/teams/team_member.ex
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
AfonsoMartins26 marked this conversation as resolved.
Show resolved Hide resolved
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
28 changes: 28 additions & 0 deletions lib/safira/uploaders/member.ex
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
10 changes: 5 additions & 5 deletions lib/safira_web/config.ex
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@ defmodule SafiraWeb.Config do
url: "/schedule",
feature_flag: "schedule_enabled"
},
# %{
# title: "Team",
# url: "/team",
# feature_flag: "team_enabled"
# },
%{
title: "Team",
url: "/team",
feature_flag: "team_enabled"
},
%{
title: "Challenges",
url: "/challenges",
Expand Down
40 changes: 40 additions & 0 deletions lib/safira_web/live/backoffice/event_live/index.ex
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ defmodule SafiraWeb.Backoffice.EventLive.Index do

alias Safira.Event
alias Safira.Event.Faq
alias Safira.Teams

on_mount {SafiraWeb.StaffRoles,
show: %{"event" => ["show"]},
Expand Down Expand Up @@ -58,4 +59,43 @@ defmodule SafiraWeb.Backoffice.EventLive.Index do
|> assign(:page_title, "New FAQ")
|> assign(:faq, %Faq{})
end

defp apply_action(socket, :teams, _params) do
socket
|> assign(:page_title, "Teams")
end

defp apply_action(socket, :teams_new, _params) do
socket
|> assign(:page_title, "New Team")
end

defp apply_action(socket, :teams_edit, %{"team_id" => team_id}) do
socket
|> assign(:page_title, "Edit Team")
|> assign(:team, Teams.get_team!(team_id))
end

defp apply_action(socket, :teams_members, %{"team_id" => team_id}) do
socket
|> assign(:page_title, "Team Members")
|> assign(:team, Teams.get_team!(team_id))
|> assign(:members, Teams.list_team_members(team_id))
|> assign(:member, %Teams.TeamMember{})
end

defp apply_action(socket, :teams_members_edit, %{"id" => member_id}) do
case Teams.get_team_member!(member_id) do
nil ->
socket
|> put_flash(:error, "Team member not found")
|> push_patch(to: socket.assigns.patch)

member ->
socket
|> assign(:page_title, "Edit Team Member")
|> assign(:team, member.team)
|> assign(:member, member)
end
end
end
Loading