Packages

phoenix_kit

1.7.69
1.7.210 1.7.209 1.7.208 1.7.207 1.7.206 1.7.205 1.7.204 1.7.203 1.7.202 1.7.201 1.7.200 1.7.199 1.7.198 1.7.197 1.7.196 1.7.194 1.7.193 1.7.192 1.7.191 1.7.190 1.7.189 1.7.187 1.7.186 1.7.185 1.7.184 1.7.183 1.7.182 1.7.181 1.7.180 1.7.179 1.7.178 1.7.177 1.7.176 1.7.175 1.7.174 1.7.173 1.7.172 1.7.171 1.7.170 1.7.169 1.7.168 1.7.167 1.7.166 1.7.165 1.7.164 1.7.162 1.7.161 1.7.160 1.7.159 1.7.157 1.7.156 1.7.155 1.7.154 1.7.153 1.7.152 1.7.151 1.7.150 1.7.149 1.7.146 1.7.145 1.7.144 1.7.143 1.7.138 1.7.133 1.7.132 1.7.131 1.7.130 1.7.128 1.7.126 1.7.125 1.7.121 1.7.120 1.7.119 1.7.118 1.7.117 1.7.116 1.7.115 1.7.114 1.7.113 1.7.112 1.7.111 1.7.110 1.7.109 1.7.108 1.7.107 1.7.106 1.7.105 1.7.104 1.7.103 1.7.102 1.7.101 1.7.100 1.7.99 1.7.98 1.7.97 1.7.96 1.7.95 1.7.94 1.7.93 1.7.92 1.7.91 1.7.90 1.7.89 1.7.88 1.7.87 1.7.86 1.7.85 1.7.84 1.7.83 1.7.82 1.7.81 1.7.80 1.7.79 1.7.78 1.7.77 1.7.76 1.7.75 1.7.74 1.7.71 1.7.70 1.7.69 1.7.66 1.7.65 1.7.64 1.7.63 1.7.62 1.7.61 1.7.59 1.7.58 1.7.57 1.7.56 1.7.55 1.7.54 1.7.53 1.7.52 1.7.51 1.7.49 1.7.44 1.7.43 1.7.42 1.7.41 1.7.39 1.7.38 1.7.37 1.7.36 1.7.34 1.7.33 1.7.31 1.7.30 1.7.29 1.7.28 1.7.27 1.7.26 1.7.25 1.7.24 1.7.23 1.7.22 1.7.21 1.7.20 1.7.19 1.7.18 1.7.17 1.7.16 1.7.15 1.7.14 1.7.13 1.7.12 1.7.11 1.7.10 1.7.9 1.7.8 1.7.7 1.7.6 1.7.5 1.7.4 1.7.3 1.7.2 1.7.1 1.7.0 1.6.20 1.6.19 1.6.18 1.6.17 1.6.16 1.6.15 1.6.14 1.6.13 1.6.12 1.6.11 1.6.10 1.6.9 1.6.8 1.6.7 1.6.6 1.6.5 1.6.4 1.6.3 1.5.2 1.5.1 1.5.0 1.4.9 1.4.8 1.4.7 1.4.6 1.4.5 1.4.4 1.4.3 1.4.2 1.4.1 1.4.0 1.3.2 1.3.1 1.3.0 1.2.10 1.2.9 1.2.8 1.2.7 1.2.5 1.2.4 1.2.2 1.2.1 1.2.0 1.1.0 1.0.0

A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more

Current section

Files

Jump to
phoenix_kit lib modules newsletters broadcast.ex
Raw

lib/modules/newsletters/broadcast.ex

defmodule PhoenixKit.Modules.Newsletters.Broadcast do
@moduledoc """
Ecto schema for newsletter broadcasts.
"""
use Ecto.Schema
import Ecto.Changeset
@primary_key {:uuid, UUIDv7, autogenerate: true}
@valid_statuses ["draft", "scheduled", "sending", "sent", "cancelled"]
schema "phoenix_kit_newsletters_broadcasts" do
field :subject, :string
field :markdown_body, :string
field :html_body, :string
field :text_body, :string
field :status, :string, default: "draft"
field :scheduled_at, :utc_datetime
field :sent_at, :utc_datetime
field :total_recipients, :integer, default: 0
field :sent_count, :integer, default: 0
field :delivered_count, :integer, default: 0
field :opened_count, :integer, default: 0
field :bounced_count, :integer, default: 0
field :template_uuid, UUIDv7
field :list_uuid, UUIDv7
field :created_by_user_uuid, UUIDv7
belongs_to :list, PhoenixKit.Modules.Newsletters.List,
foreign_key: :list_uuid,
references: :uuid,
define_field: false,
type: UUIDv7
belongs_to :template, PhoenixKit.Modules.Emails.Template,
foreign_key: :template_uuid,
references: :uuid,
define_field: false,
type: UUIDv7
belongs_to :created_by, PhoenixKit.Users.Auth.User,
foreign_key: :created_by_user_uuid,
references: :uuid,
define_field: false,
type: UUIDv7
has_many :deliveries, PhoenixKit.Modules.Newsletters.Delivery,
foreign_key: :broadcast_uuid,
references: :uuid
timestamps(type: :utc_datetime)
end
def changeset(broadcast, attrs) do
broadcast
|> cast(attrs, [
:subject,
:markdown_body,
:html_body,
:text_body,
:status,
:scheduled_at,
:sent_at,
:total_recipients,
:sent_count,
:delivered_count,
:opened_count,
:bounced_count,
:template_uuid,
:list_uuid,
:created_by_user_uuid
])
|> validate_required([:subject, :list_uuid])
|> validate_length(:subject, min: 1, max: 998)
|> validate_inclusion(:status, @valid_statuses)
end
def valid_statuses, do: @valid_statuses
end