diff --git a/data/courses.txt b/data/courses.txt new file mode 100644 index 00000000..dcadebc1 --- /dev/null +++ b/data/courses.txt @@ -0,0 +1,254 @@ +Licenciatura em Engenharia Informática +Mestrado em Engenharia Informática +Doutoramento em Informática +Licenciatura em Administração Pública +Licenciatura em Arqueologia +Licenciatura em Artes Visuais +Licenciatura em Biologia Aplicada +Licenciatura em Biologia e Geologia +Licenciatura em Bioquímica +Licenciatura em Ciência de Dados +Licenciatura em Ciência Política +Licenciatura em Ciências da Computação +Licenciatura em Ciências da Comunicação +Licenciatura em Ciências do Ambiente +Licenciatura em Contabilidade +Licenciatura em Criminologia e Justiça Criminal +Licenciatura em Design de Produto +Licenciatura em Design e Marketing de Moda +Licenciatura em Direito +Licenciatura em Economia +Licenciatura em Educação +Licenciatura em Educação Básica +Licenciatura em Enfermagem +Licenciatura em Engenharia Aeroespacial +Licenciatura em Engenharia Biomédica +Licenciatura em Engenharia Civil +Licenciatura em Engenharia de Materiais +Licenciatura em Engenharia de Polímeros +Licenciatura em Engenharia de Telecomunicações e Informática +Licenciatura em Engenharia e Gestão de Sistemas de Informação +Licenciatura em Engenharia e Gestão Industrial +Licenciatura em Engenharia Eletrónica Industrial e Computadores +Licenciatura em Engenharia Física +Licenciatura em Engenharia Mecânica +Licenciatura em Engenharia Química e Biológica +Licenciatura em Engenharia Têxtil +Licenciatura em Estatística Aplicada +Licenciatura em Estudos Culturais +Licenciatura em Estudos Orientais: Estudos Chineses e Japoneses +Licenciatura em Estudos Portugueses +Licenciatura em Filosofia +Licenciatura em Física +Licenciatura em Geografia e Planeamento +Licenciatura em Geologia +Licenciatura em Gestão +Licenciatura em História +Licenciatura em Línguas Aplicadas +Licenciatura em Línguas e Literaturas Europeias +Licenciatura em Marketing +Licenciatura em Matemática +Licenciatura em Música +Licenciatura em Negócios Internacionais +Licenciatura em Optometria e Ciências da Visão +Licenciatura em Proteção Civil e Gestão do Território +Licenciatura em Psicologia +Licenciatura em Química +Licenciatura em Relações Internacionais +Licenciatura em Sociologia +Licenciatura em Teatro +Mestrado Integrado em Arquitetura +Mestrado Integrado em Engenharia Biológica +Mestrado Integrado em Engenharia Biomédica +Mestrado Integrado em Engenharia Civil +Mestrado Integrado em Engenharia de Materiais +Mestrado Integrado em Engenharia de Polímeros +Mestrado Integrado em Engenharia de Telecomunicações e Informática +Mestrado Integrado em Engenharia e Gestão de Sistemas de Informação +Mestrado Integrado em Engenharia e Gestão Industrial +Mestrado Integrado em Engenharia Eletrónica Industrial e Computadores +Mestrado Integrado em Engenharia Física +Mestrado Integrado em Engenharia Informática +Mestrado Integrado em Engenharia Mecânica +Mestrado Integrado em Engenharia Têxtil +Mestrado Integrado em Medicina +Mestrado Integrado em Psicologia +Mestrado em Administração Pública +Mestrado em Análise Estrutural Avançada e Projeto com Materiais Compósitos +Mestrado em Análise Estrutural de Monumentos e Construções Históricas +Mestrado em Arqueologia +Mestrado em Avaliação Aplicada à Formação nas Profissões da Saúde +Mestrado em Biodiversidade, Ecologia e Alterações Globais +Mestrado em Biofísica e Bionanossistemas +Mestrado em Bioinformática +Mestrado em Biologia Molecular, Biotecnologia e Bioempreendedorismo em Plantas +Mestrado em Bioquímica Aplicada +Mestrado em Biotecnologia +Mestrado em Ciência Política +Mestrado em Ciências Criminais +Mestrado em Ciências da Comunicação +Mestrado em Ciências da Educação +Mestrado em Ciências da Saúde +Mestrado em Ciências e Tecnologias do Ambiente +Mestrado em Cognição Humana +Mestrado em Comunicação de Ciência +Mestrado em Comunicação, Arte e Cultura +Mestrado em Construção e Reabilitação Sustentáveis +Mestrado em Contabilidade +Mestrado em Crime, Diferença e Desigualdade +Mestrado em Desafios das Cidades +Mestrado em Design de Produto e Serviços +Mestrado em Design e Inovação de Produtos Têxteis e Acessórios +Mestrado em Design para a Comunicação de Moda +Mestrado em Direito Administrativo +Mestrado em Direito da União Europeia +Mestrado em Direito das Crianças, Família e Sucessões +Mestrado em Direito dos Contratos e da Empresa +Mestrado em Direito dos Negócios, Europeu e Transnacional +Mestrado em Direito e Informática +Mestrado em Direito Judiciário (Direitos Processuais e Organização Judiciária) +Mestrado em Direito Transnacional da Empresa e das Tecnologias Digitais +Mestrado em Direito Tributário +Mestrado em Direitos Humanos +Mestrado em Economia +Mestrado em Economia Industrial e da Empresa +Mestrado em Economia Monetária, Bancária e Financeira +Mestrado em Economia Social +Mestrado em Educação +Mestrado em Educação Pré-Escolar +Mestrado em Educação Pré-Escolar e Ensino do 1º Ciclo do Ensino Básico +Mestrado em Engenharia Aeroespacial +Mestrado em Engenharia Biomédica +Mestrado em Engenharia Civil +Mestrado em Engenharia de Estruturas +Mestrado em Engenharia de Materiais +Mestrado em Engenharia de Polímeros +Mestrado em Engenharia de Sistemas +Mestrado em Engenharia de Telecomunicações e Informática +Mestrado em Engenharia do Produto +Mestrado em Engenharia e Gestão da Qualidade +Mestrado em Engenharia e Gestão de Operações +Mestrado em Engenharia e Gestão de Sistemas de Informação +Mestrado em Engenharia e Gestão Industrial +Mestrado em Engenharia Eletrónica Industrial e Computadores +Mestrado em Engenharia Física +Mestrado em Engenharia Humana +Mestrado em Engenharia Mecânica +Mestrado em Engenharia Mecatrónica +Mestrado em Engenharia Química e Biológica +Mestrado em Engenharia Têxtil +Mestrado em Engenharia Urbana +Mestrado em Ensino de Biologia e Geologia no 3º Ciclo no Ensino Básico e no Ensino Secundário +Mestrado em Ensino de Física e de Química no 3º Ciclo do Ensino Básico e no Ensino Secundário +Mestrado em Ensino de História no 3º Ciclo do Ensino Básico e no Ensino Secundário +Mestrado em Ensino de Informática +Mestrado em Ensino de Inglês no 1º Ciclo do Ensino Básico +Mestrado em Ensino de Matemática no 3º Ciclo do Ensino Básico e no Secundário +Mestrado em Ensino de Música +Mestrado em Ensino de Português no 3º Ciclo do Ensino Básico e no Ensino Secundário +Mestrado em Ensino do 1º Ciclo do Ensino Básico e de Matemática e Ciências Naturais no 2º Ciclo do Ensino Básico +Mestrado em Ensino do 1º Ciclo do Ensino Básico e de Português e História e Geografia de Portugal no 2º Ciclo do Ensino Básico +Mestrado em Espanhol Língua Segunda e Língua Estrangeira +Mestrado em Estatística para Ciência de Dados +Mestrado em Estudos da Criança +Mestrado em Estudos Interculturais Português/Chinês +Mestrado em Estudos Luso-Alemães +Mestrado em Filosofia Política +Mestrado em Finanças +Mestrado em Física +Mestrado em Genética Molecular +Mestrado em Geociências +Mestrado em Geografia +Mestrado em Gestão +Mestrado em Gestão de Projetos de Engenharia +Mestrado em Gestão de Recursos Humanos +Mestrado em Gestão de Unidades de Saúde +Mestrado em Gestão e Negócios +Mestrado em História +Mestrado em Humanidades Digitais +Mestrado em Lexicografia +Mestrado em Língua, Literatura e Cultura Inglesas +Mestrado em Literaturas de Língua Portuguesa +Mestrado em Marketing e Estratégia +Mestrado em Matemática e Computação +Mestrado em Media Arts +Mestrado em Micro e Nano Tecnologias +Mestrado em Modelação de Informação na Construção de Edifícios +Mestrado em Negócios Internacionais +Mestrado em Optometria Avançada +Mestrado em Património Cultural +Mestrado em Português Língua Não Materna +Mestrado em Psicologia Clínica e Psicoterapia de Adultos +Mestrado em Psicologia Clínica na Infância e Adolescência +Mestrado em Psicologia da Educação +Mestrado em Psicologia da Justiça +Mestrado em Psicologia do Trabalho e das Organizações +Mestrado em Química Medicinal +Mestrado em Relações Internacionais +Mestrado em Sistemas de Informação +Mestrado em Sociologia +Mestrado em Sociologia do Género e da Sexualidade +Mestrado em Sustentabilidade do Ambiente Construído +Mestrado em Técnicas de Caracterização e Análise Química +Mestrado em Tecnologia e Ciência Alimentar +Mestrado em Tecnologias Interativas +Mestrado em Temas de Psicologia da Educação +Mestrado em Tradução e Comunicação Multilingue +Doutoramento em Biologia +Doutoramento em Ciência e Engenharia de Polímeros e Compósitos +Doutoramento em Ciências da Cultura +Doutoramento em Ciências da Linguagem +Doutoramento em Ciências da Literatura +Doutoramento em Engenharia Biomédica +Doutoramento em Engenharia Civil +Doutoramento em Engenharia de Materiais +Doutoramento em Engenharia de Tecidos, Medicina Regenerativa e Células Estaminais +Doutoramento em Engenharia Eletrónica e de Computadores +Doutoramento em Engenharia Mecânica +Doutoramento em Engenharia Química e Biológica +Doutoramento em Engenharia Têxtil +Doutoramento em Filosofia +Doutoramento em Geologia - Geoconservação, Geologia Ambiental e Recursos Geológicos +Doutoramento em Gestão e Tratamento de Resíduos +Doutoramento em Matemática +Doutoramento em Química Aplicada +Doutoramento em Sustentabilidade do Ambiente Construído +Programa Doutoral em Arqueologia +Programa Doutoral em Arquitetura +Programa Doutoral em Bioengenharia +Programa Doutoral em Biologia Molecular e Ambiental +Programa Doutoral em Biotecnologia Marinha e Aquacultura +Programa Doutoral em Cadeias de Produção Agrícola - da mesa ao campo +Programa Doutoral em Ciência e Tecnologia Alimentar e Nutrição +Programa Doutoral em Ciência Política e Relações Internacionais +Programa Doutoral em Ciência, Tecnologia e Gestão do Mar +Programa Doutoral em Ciências da Administração +Programa Doutoral em Ciências da Comunicação +Programa Doutoral em Ciências da Educação +Programa Doutoral em Ciências da Saúde +Programa Doutoral em Ciências Jurídicas +Programa Doutoral em Design de Moda +Programa Doutoral em Economia +Programa Doutoral em Educação a Distância e e-Learning +Programa Doutoral em Engenharia Industrial e de Sistemas +Programa Doutoral em Estudos Culturais +Programa Doutoral em Estudos da Criança +Programa Doutoral em Fabrico Digital Direto para as Indústrias dos Polímeros e Moldes +Programa Doutoral em Física +Programa Doutoral em Geografia +Programa Doutoral em Gestão +Programa Doutoral em História +Programa Doutoral em Informática +Programa Doutoral em Marketing e Estratégia +Programa Doutoral em Matemática Aplicada +Programa Doutoral em Matemática e Aplicações +Programa Doutoral em Materiais e Processamento Avançados +Programa Doutoral em Medicina +Programa Doutoral em Modernidades Comparadas: Literaturas, Artes e Culturas +Programa Doutoral em Optometria e Ciências da Visão +Programa Doutoral em Psicologia +Programa Doutoral em Química +Programa Doutoral em Sistemas Avançados de Engenharia para a Indústria +Programa Doutoral em Sociologia +Programa Doutoral em Tecnologia e Sistemas de Informação +Programa Doutoral em Telecomunicações \ No newline at end of file diff --git a/lib/mix/tasks/gen.attendees_with_password.ex b/lib/mix/tasks/gen.attendees_with_password.ex index 18d8cb35..136f34f4 100644 --- a/lib/mix/tasks/gen.attendees_with_password.ex +++ b/lib/mix/tasks/gen.attendees_with_password.ex @@ -24,6 +24,8 @@ defmodule Mix.Tasks.Gen.AttendeesWithPassword do defp create(number) do Mix.Task.run("app.start") + courses = Accounts.list_courses() + Enum.each(1..number, fn n -> nickname = "attendee#{n}" email = Enum.join([nickname, @domain], "@") @@ -35,8 +37,15 @@ defmodule Mix.Tasks.Gen.AttendeesWithPassword do "password_confirmation" => password } + course = Enum.random(courses) + account = - Accounts.create_attendee(%{"name" => nickname, "nickname" => nickname, "user" => user}) + Accounts.create_attendee(%{ + "name" => nickname, + "nickname" => nickname, + "course_id" => course.id, + "user" => user + }) |> elem(1) IO.puts("#{email}:#{password}") diff --git a/lib/mix/tasks/gen.companies.ex b/lib/mix/tasks/gen.companies.ex index bdec7e1e..fa28f06f 100644 --- a/lib/mix/tasks/gen.companies.ex +++ b/lib/mix/tasks/gen.companies.ex @@ -16,7 +16,7 @@ defmodule Mix.Tasks.Gen.Companies do def run(args) do if Enum.empty?(args) do - Mix.shell().info("Needs to receive atleast one file path.") + Mix.shell().info("Needs to receive at least one file path.") else args |> create end diff --git a/lib/mix/tasks/gen.courses.ex b/lib/mix/tasks/gen.courses.ex new file mode 100644 index 00000000..3e45e6aa --- /dev/null +++ b/lib/mix/tasks/gen.courses.ex @@ -0,0 +1,38 @@ +defmodule Mix.Tasks.Gen.Courses do + @moduledoc """ + Task to generate university courses + """ + use Mix.Task + + alias Safira.Accounts + + def run(args) do + if Enum.empty?(args) do + Mix.shell().info("Needs to receive at least one file path.") + else + args |> create + end + end + + defp create(path) do + Mix.Task.run("app.start") + + path + |> parse_txt() + |> insert_courses() + end + + defp parse_txt(path) do + path + |> File.read!() + |> String.split("\n") + end + + defp insert_courses(courses) do + Enum.each(courses, fn course -> + Accounts.create_course(%{ + "name" => course + }) + end) + end +end diff --git a/lib/safira/accounts/accounts.ex b/lib/safira/accounts/accounts.ex index 71af43d4..1604e3ae 100644 --- a/lib/safira/accounts/accounts.ex +++ b/lib/safira/accounts/accounts.ex @@ -7,6 +7,7 @@ defmodule Safira.Accounts do alias Safira.Accounts.Attendee alias Safira.Accounts.Company + alias Safira.Accounts.Course alias Safira.Accounts.Staff alias Safira.Accounts.User @@ -106,6 +107,7 @@ defmodule Safira.Accounts do |> Repo.preload(:badges) |> Repo.preload(:user) |> Repo.preload(:prizes) + |> Repo.preload(:course) end def get_attendee_by_discord_association_code(discord_association_code) do @@ -264,4 +266,37 @@ defmodule Safira.Accounts do |> get_user_preload!() end end + + @doc """ + Creates a course. + + ## Examples + + iex> create_course(%{field: value}) + {:ok, %Course{}} + + iex> create_course(%{field: bad_value}) + {:error, %Ecto.Changeset{}} + + """ + def create_course(attrs) do + %Course{} + |> Course.changeset(attrs) + |> Repo.insert() + end + + @doc """ + Returns the list of courses. + + ## Examples + + iex> list_courses() + [%Course{}, ...] + + """ + def list_courses do + Course + |> order_by(:id) + |> Repo.all() + end end diff --git a/lib/safira/accounts/attendee.ex b/lib/safira/accounts/attendee.ex index a894bb49..99e337e1 100644 --- a/lib/safira/accounts/attendee.ex +++ b/lib/safira/accounts/attendee.ex @@ -6,6 +6,7 @@ defmodule Safira.Accounts.Attendee do use Arc.Ecto.Schema import Ecto.Changeset + alias Safira.Accounts.Course alias Safira.Accounts.User alias Safira.Contest.Badge @@ -36,6 +37,7 @@ defmodule Safira.Accounts.Attendee do field :cv, Safira.CV.Type belongs_to :user, User + belongs_to :course, Course many_to_many :badges, Badge, join_through: Redeem has_many :referrals, Referral has_many :daily_tokens, DailyToken @@ -49,7 +51,7 @@ defmodule Safira.Accounts.Attendee do def changeset(attendee, attrs) do attendee - |> cast(attrs, [:name, :nickname, :user_id]) + |> cast(attrs, [:name, :nickname, :user_id, :course_id]) |> cast_attachments(attrs, [:avatar, :cv]) |> cast_assoc(:user) |> validate_required([:name, :nickname]) @@ -59,7 +61,7 @@ defmodule Safira.Accounts.Attendee do def update_changeset_sign_up(attendee, attrs) do attendee - |> cast(attrs, [:name, :nickname, :user_id]) + |> cast(attrs, [:name, :nickname, :user_id, :course_id]) |> cast_attachments(attrs, [:avatar, :cv]) |> cast_assoc(:user) |> validate_required([:name, :nickname]) @@ -69,7 +71,7 @@ defmodule Safira.Accounts.Attendee do def update_changeset(attendee, attrs) do attendee - |> cast(attrs, [:nickname]) + |> cast(attrs, [:nickname, :course_id]) |> cast_attachments(attrs, [:avatar, :cv]) |> validate_required([:nickname]) |> validate_format(:nickname, @nickname_regex) diff --git a/lib/safira/accounts/course.ex b/lib/safira/accounts/course.ex new file mode 100644 index 00000000..8d4ebfa1 --- /dev/null +++ b/lib/safira/accounts/course.ex @@ -0,0 +1,24 @@ +defmodule Safira.Accounts.Course do + @moduledoc """ + A course the user is enrolled in + """ + use Ecto.Schema + import Ecto.Changeset + + alias Safira.Accounts.Attendee + + @required_fields ~w(name)a + + schema "courses" do + field :name, :string + has_many :attendees, Attendee + + timestamps() + end + + def changeset(course, attrs) do + course + |> cast(attrs, @required_fields) + |> validate_required(@required_fields) + end +end diff --git a/lib/safira_web/controllers/course/course_controller.ex b/lib/safira_web/controllers/course/course_controller.ex new file mode 100644 index 00000000..cf77e0d5 --- /dev/null +++ b/lib/safira_web/controllers/course/course_controller.ex @@ -0,0 +1,12 @@ +defmodule SafiraWeb.CourseController do + use SafiraWeb, :controller + + alias Safira.Accounts + + action_fallback SafiraWeb.FallbackController + + def index(conn, _params) do + courses = Accounts.list_courses() + render(conn, :index, courses: courses) + end +end diff --git a/lib/safira_web/controllers/course/course_json.ex b/lib/safira_web/controllers/course/course_json.ex new file mode 100644 index 00000000..d6960d73 --- /dev/null +++ b/lib/safira_web/controllers/course/course_json.ex @@ -0,0 +1,14 @@ +defmodule SafiraWeb.CourseJSON do + @moduledoc false + + def index(%{courses: courses}) do + %{data: for(course <- courses, do: data(course))} + end + + def data(course) do + %{ + id: course.id, + name: course.name + } + end +end diff --git a/lib/safira_web/router.ex b/lib/safira_web/router.ex index 35e01c6e..a32ef6f1 100644 --- a/lib/safira_web/router.ex +++ b/lib/safira_web/router.ex @@ -43,6 +43,8 @@ defmodule SafiraWeb.Router do resources "/passwords", PasswordController, only: [:create, :update] end + get "/attendee/courses", CourseController, :index + get "/is_registered/:id", AuthController, :is_registered pipe_through :jwt_authenticated diff --git a/lib/safira_web/views/attendee_view.ex b/lib/safira_web/views/attendee_view.ex index 973ee342..3cb05573 100644 --- a/lib/safira_web/views/attendee_view.ex +++ b/lib/safira_web/views/attendee_view.ex @@ -26,6 +26,7 @@ defmodule SafiraWeb.AttendeeView do id: attendee.id, nickname: attendee.nickname, name: attendee.name, + course: attendee.course_id, avatar: Avatar.url({attendee.avatar, attendee}, :original), cv: CV.url({attendee.cv, attendee}, :original), badges: render_many(attendee.badges, SafiraWeb.BadgeView, "badge.json"), @@ -43,6 +44,7 @@ defmodule SafiraWeb.AttendeeView do id: attendee.id, nickname: attendee.nickname, name: attendee.name, + course: attendee.course_id, avatar: Avatar.url({attendee.avatar, attendee}, :original), cv: CV.url({attendee.cv, attendee}, :original), badges: render_many(attendee.badges, SafiraWeb.BadgeView, "badge.json"), @@ -72,6 +74,7 @@ defmodule SafiraWeb.AttendeeView do id: attendee.id, nickname: attendee.nickname, name: attendee.name, + course: attendee.course_id, avatar: Avatar.url({attendee.avatar, attendee}, :original), cv: CV.url({attendee.cv, attendee}, :original), token_balance: attendee.token_balance, @@ -84,6 +87,7 @@ defmodule SafiraWeb.AttendeeView do id: attendee.id, nickname: attendee.nickname, name: attendee.name, + course: attendee.course_id, avatar: Avatar.url({attendee.avatar, attendee}, :original), cv: nil, token_balance: attendee.token_balance, diff --git a/priv/repo/migrations/20231127120646_create_courses.exs b/priv/repo/migrations/20231127120646_create_courses.exs new file mode 100644 index 00000000..24c16f4a --- /dev/null +++ b/priv/repo/migrations/20231127120646_create_courses.exs @@ -0,0 +1,15 @@ +defmodule Safira.Repo.Migrations.CreateCourses do + use Ecto.Migration + + def change do + create table(:courses) do + add :name, :string, null: false + + timestamps() + end + + alter table(:attendees) do + add :course_id, references(:courses, on_delete: :nothing) + end + end +end diff --git a/priv/repo/seeds/accounts.exs b/priv/repo/seeds/accounts.exs index 76fe752f..28c49ff0 100644 --- a/priv/repo/seeds/accounts.exs +++ b/priv/repo/seeds/accounts.exs @@ -1,18 +1,23 @@ defmodule Safira.Repo.Seeds.Accounts do @moduledoc false - alias Mix.Tasks.Gen.{AttendeesWithPassword, Companies, Staffs} + alias Mix.Tasks.Gen.{AttendeesWithPassword, Companies, Courses, Staffs} alias Safira.Accounts alias Safira.Accounts.User alias Safira.Repo def run do + seed_courses() seed_staffs() seed_companies() seed_attendees() reset_passwords() end + defp seed_courses do + Courses.run(["data/courses.txt"]) + end + defp seed_companies do Companies.run(["data/sponsors.csv"]) end diff --git a/test/safira_web/controllers/attendee_controller_test.exs b/test/safira_web/controllers/attendee_controller_test.exs index bf682055..ef204af7 100644 --- a/test/safira_web/controllers/attendee_controller_test.exs +++ b/test/safira_web/controllers/attendee_controller_test.exs @@ -95,6 +95,7 @@ defmodule SafiraWeb.AttendeeControllerTest do "id" => attendee.id, "name" => attendee.name, "nickname" => attendee.nickname, + "course" => attendee.course_id, "token_balance" => 0, "badges" => [], "badge_count" => 0 @@ -133,6 +134,7 @@ defmodule SafiraWeb.AttendeeControllerTest do expected_attendee = %{ "avatar" => nil, "cv" => nil, + "course" => nil, "entries" => 0, "id" => attendee.id, "name" => attendee.name, @@ -176,6 +178,7 @@ defmodule SafiraWeb.AttendeeControllerTest do expected_attendee = %{ "avatar" => nil, "cv" => nil, + "course" => nil, "entries" => 0, "id" => attendee.id, "name" => attendee.name, diff --git a/test/safira_web/controllers/company_controller_test.exs b/test/safira_web/controllers/company_controller_test.exs index eb180c61..25739eb9 100644 --- a/test/safira_web/controllers/company_controller_test.exs +++ b/test/safira_web/controllers/company_controller_test.exs @@ -115,6 +115,7 @@ defmodule SafiraWeb.CompanyControllerTest do "name" => attendee.name, "avatar" => nil, "cv" => nil, + "course" => nil, "token_balance" => attendee.token_balance, "entries" => attendee.entries } @@ -143,6 +144,7 @@ defmodule SafiraWeb.CompanyControllerTest do "id" => attendee1.id, "nickname" => attendee1.nickname, "name" => attendee1.name, + "course" => nil, "avatar" => nil, "cv" => nil, "token_balance" => attendee1.token_balance, @@ -152,6 +154,7 @@ defmodule SafiraWeb.CompanyControllerTest do "id" => attendee2.id, "nickname" => attendee2.nickname, "name" => attendee2.name, + "course" => nil, "avatar" => nil, "cv" => nil, "token_balance" => attendee2.token_balance, @@ -192,6 +195,7 @@ defmodule SafiraWeb.CompanyControllerTest do "id" => attendee1.id, "nickname" => attendee1.nickname, "name" => attendee1.name, + "course" => nil, "avatar" => nil, "cv" => nil, "token_balance" => attendee1.token_balance,