| defmodule Plausible.Teams.SiteTransfer do |
| @moduledoc """ |
| Site transfer schema |
| """ |
|
|
| use Ecto.Schema |
|
|
| import Ecto.Changeset |
|
|
| @type t() :: %__MODULE__{} |
|
|
| schema "team_site_transfers" do |
| field :transfer_id, :string |
| field :email, :string |
| field :transfer_guests, :boolean, default: true |
|
|
| belongs_to :site, Plausible.Site |
| belongs_to :initiator, Plausible.Auth.User |
| belongs_to :destination_team, Plausible.Teams.Team |
|
|
| timestamps() |
| end |
|
|
| def changeset(site, opts) do |
| initiator = Keyword.fetch!(opts, :initiator) |
| transfer_guests = Keyword.get(opts, :transfer_guests, true) |
| destination_team = Keyword.get(opts, :destination_team) |
| email = Keyword.get(opts, :email) |
|
|
| %__MODULE__{transfer_id: Nanoid.generate()} |
| |> cast(%{email: email}, [:email]) |
| |> put_change(:transfer_guests, transfer_guests) |
| |> put_assoc(:site, site) |
| |> put_assoc(:destination_team, destination_team) |
| |> put_assoc(:initiator, initiator) |
| end |
| end |
|
|