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: add celetista to model #240

Draft
wants to merge 2 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion lib/pescarte/identidades/models/usuario.ex
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ defmodule Pescarte.Identidades.Models.Usuario do
external_customer_id: String.t()
}

@valid_roles ~w(pesquisador pescador admin)a
@valid_roles ~w(celetista pesquisador pescador admin)a

@required_fields ~w(primeiro_nome sobrenome cpf data_nascimento papel)a
@optional_fields ~w(rg link_avatar contato_id external_customer_id)a
Expand Down
118 changes: 118 additions & 0 deletions lib/pescarte/modulo_pesquisa/models/celetista.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
defmodule Pescarte.ModuloPesquisa.Models.Celetista do

Check warning on line 1 in lib/pescarte/modulo_pesquisa/models/celetista.ex

View workflow job for this annotation

GitHub Actions / test (26.2.5, 1.16.2)

invalid association `relatorios_pesquisa` in schema Pescarte.ModuloPesquisa.Models.Celetista: associated schema Pescarte.ModuloPesquisa.Models.RelatorioPesquisa does not have field `celetista_id`

Check warning on line 1 in lib/pescarte/modulo_pesquisa/models/celetista.ex

View workflow job for this annotation

GitHub Actions / test (26.2.5, 1.16.2)

invalid association `orientandos` in schema Pescarte.ModuloPesquisa.Models.Celetista: associated schema Pesquisador does not exist

Check warning on line 1 in lib/pescarte/modulo_pesquisa/models/celetista.ex

View workflow job for this annotation

GitHub Actions / test (26.2.5, 1.16.2)

invalid association `orientador` in schema Pescarte.ModuloPesquisa.Models.Celetista: associated schema Pesquisador does not exist

Check warning on line 1 in lib/pescarte/modulo_pesquisa/models/celetista.ex

View workflow job for this annotation

GitHub Actions / lint (26.2.5, 1.16.2)

invalid association `relatorios_pesquisa` in schema Pescarte.ModuloPesquisa.Models.Celetista: associated schema Pescarte.ModuloPesquisa.Models.RelatorioPesquisa does not have field `celetista_id`

Check warning on line 1 in lib/pescarte/modulo_pesquisa/models/celetista.ex

View workflow job for this annotation

GitHub Actions / lint (26.2.5, 1.16.2)

invalid association `orientador` in schema Pescarte.ModuloPesquisa.Models.Celetista: associated schema Pesquisador does not exist
use Pescarte, :model

alias Pescarte.Database.Types.PublicId
alias Pescarte.Identidades.Models.Usuario
alias Pescarte.ModuloPesquisa.Models.Campus
alias Pescarte.ModuloPesquisa.Models.LinhaPesquisa
alias Pescarte.ModuloPesquisa.Models.Midia
alias Pescarte.ModuloPesquisa.Models.RelatorioPesquisa

@type t :: %Celetista{
id: binary,
minibio: binary,
bolsa: atom,
link_lattes: binary,
link_banner_perfil: binary,
link_linkedin: binary,
formacao: binary,
data_inicio_bolsa: Date.t(),
data_fim_bolsa: Date.t(),
data_contratacao: Date.t(),
data_termino: Date.t(),
orientandos: list(Pesquisador.t()),
orientador: Pesquisador.t() | nil,
midias: list(Midia.t()),
relatorios_pesquisa: list(RelatorioPesquisa.t()),
campus_id: Campus.t(),
usuario: User.t(),
anotacoes: binary
}

@tipo_bolsas ~w(
ic pesquisa consultoria
voluntario
celetista
coordenador_tecnico
doutorado mestrado
pos_doutorado nsa
coordenador_pedagogico
desconhecido
)a

@required_fields ~w(bolsa data_inicio_bolsa data_contratacao formacao linha_pesquisa_principal_id data_fim_bolsa data_termino)a
@optional_fields ~w(orientador_id link_banner_perfil link_linkedin link_lattes campus_id usuario_id)a

@derive {
Flop.Schema,
filterable: ~w(nome cpf email bolsa)a,
sortable: ~w(nome email bolsa)a,
adapter_opts: [
join_fields: [
nome: [
binding: :usuario,
field: :primeiro_nome,
ecto_type: :string
],
cpf: [
binding: :usuario,
field: :cpf,
ecto_type: :string
],
email: [
binding: :contato,
field: :email_principal,
ecto_type: :string,
path: [:usuario, :contato]
]
]
]
}

@primary_key {:id, PublicId, autogenerate: true}
schema "celetista" do
field :minibio, :string
field :bolsa, Ecto.Enum, values: @tipo_bolsas
field :link_lattes, :string
field :link_banner_perfil, :string
field :link_linkedin, :string
field :formacao, :string
field :data_inicio_bolsa, :date
field :data_fim_bolsa, :date
field :data_contratacao, :date
field :data_termino, :date
field :anotacoes, :string

has_many :relatorios_pesquisa, RelatorioPesquisa
has_many :orientandos, Pesquisador
has_many :midias, Midia, foreign_key: :autor_id

many_to_many :linhas_pesquisa, LinhaPesquisa,
join_through: "pesquisador_lp",
on_replace: :delete,
unique: true

belongs_to :linha_pesquisa_principal, LinhaPesquisa, type: :string
belongs_to :usuario, Usuario, type: :string
belongs_to :campus, Campus, type: :string
belongs_to :orientador, Pesquisador, foreign_key: :orientador_id, type: :string

timestamps()
end

@spec changeset(Pesquisador.t(), map) :: changeset
def changeset(pesquisador \\ %Celetista{}, attrs) do
pesquisador
|> cast(attrs, @required_fields ++ @optional_fields)
|> validate_required(@required_fields)
|> cast_assoc(:usuario, required: true)
|> cast_assoc(:campus, required: true)
|> cast_assoc(:linhas_pesquisa, required: false)
|> unique_constraint(:rg)
|> foreign_key_constraint(:usuario_id)
|> foreign_key_constraint(:orientador_id)
|> foreign_key_constraint(:campus_id)
end

def tipo_bolsas, do: @tipo_bolsas
end
29 changes: 29 additions & 0 deletions priv/repo/migrations/20241207124241_create_celetista.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
defmodule Pescarte.Database.Repo.Migrations.CreateCeletista do
use Ecto.Migration

def change do
create table(:celetista, primary_key: false) do
add(:id, :string, primary_key: true)
add(:minibio, :text)
add(:bolsa, :string)
add(:link_linkedin, :string)
add(:link_lattes, :string)
add(:formacao, :string)
add(:anotacoes, :string)
add(:data_inicio_bolsa, :date)
add(:data_fim_bolsa, :date)
add(:data_contratacao, :date)
add(:data_termino, :date)
add(:link_banner_perfil, :string)
add(:usuario_id, references(:usuario, type: :string), null: false)
add(:campus_id, references(:campus, type: :string), null: false)
add(:orientador_id, references(:pesquisador, type: :string))

timestamps()
end

create(index(:celetista, [:usuario_id]))
create(index(:celetista, [:campus_id]))
create(index(:celetista, [:orientador_id]))
end
end
Loading