Skip to content

Instantly share code, notes, and snippets.

@shahryarjb
Created June 28, 2018 22:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shahryarjb/92a3fd59a0983c0e4f648e02108dcac7 to your computer and use it in GitHub Desktop.
Save shahryarjb/92a3fd59a0983c0e4f648e02108dcac7 to your computer and use it in GitHub Desktop.
defmodule TrangellCmsService.Cms.Db.LearnCategory do
use Ecto.Schema
import Ecto.Changeset
@primary_key {:id, :binary_id, autogenerate: true}
@foreign_key_type :binary_id
schema "cms_learn_category" do
field :title, :string
field :status, :boolean
field :language, :string
field :group_acl, :string
field :seo_alias_link, :string
field :seo_words, :string
field :seo_description, :string
field :seo_language, :string
field :seo_language_link, :string
field :pic_x1_link, :string
field :pic_x2_link, :string
field :pic_x3_link, :string
has_many :cms_learn_headlines, TrangellCmsService.Cms.Db.LearnHeadlines, foreign_key: :cms_learn_category_id
has_many :cms_learn_post, TrangellCmsService.Cms.Db.LearnPost, foreign_key: :cms_learn_category_id
timestamps()
end
@all_fields ~w(title status language group_acl seo_alias_link seo_words seo_description seo_language seo_language_link pic_x1_link pic_x2_link pic_x3_link)a
def changeset(struct, params \\ %{}) do
struct
|> cast(params, @all_fields)
|> validate_required(@all_fields)
|> validate_inclusion(:group_acl, ["admin", "actived", "unactived", "blocked"])
|> validate_inclusion(:language, ["en", "fa"])
|> validate_inclusion(:seo_language, ["en", "fa"])
|> unique_constraint(:seo_alias_link, name: :index_of_learn_categories_alias_unique_link, message: "alias link already exists.")
end
end
defmodule TrangellCmsService.Cms.Db.LearnHeadlines do
use Ecto.Schema
import Ecto.Changeset
@primary_key {:id, :binary_id, autogenerate: true}
@foreign_key_type :binary_id
schema "cms_learn_headlines" do
field :title, :string
field :status, :boolean
field :language, :string
field :group_acl, :string
field :description, :string
field :seo_alias_link, :string
field :seo_words, :string
field :seo_description, :string
field :seo_language, :string
field :seo_language_link, :string
belongs_to :cms_learn_category, TrangellCmsService.Cms.Db.LearnCategory, foreign_key: :cms_learn_category_id, type: :binary_id
has_many :cms_learn_post, TrangellCmsService.Cms.Db.LearnPost, foreign_key: :cms_learn_headlines_id
timestamps()
end
@all_fields ~w(title status language group_acl description seo_alias_link seo_words seo_description seo_language seo_language_link cms_learn_category_id)a
def changeset(struct, params \\ %{}) do
struct
|> cast(params, @all_fields)
|> validate_required(@all_fields)
|> validate_inclusion(:language, ["en", "fa"])
|> validate_inclusion(:seo_language, ["en", "fa"])
|> validate_inclusion(:group_acl, ["admin", "actived", "unactived", "blocked"])
|> unique_constraint(:seo_alias_link, name: :index_of_learn_headlines_alias_unique_link, message: "alias link already exists.")
|> foreign_key_constraint(:cms_learn_category_id)
|> validate_field_relational(:cms_learn_category_id)
end
defp validate_field_relational(changeset, field) do
field_concerned = get_field(changeset, field)
case Ecto.UUID.cast(field_concerned) do
:error ->
add_error(changeset, field, "relational field is invalid")
_ ->
changeset
end
end
end
defmodule TrangellCmsService.Cms.Db.LearnPost do
use Ecto.Schema
import Ecto.Changeset
@primary_key {:id, :binary_id, autogenerate: true}
@foreign_key_type :binary_id
schema "cms_learn_post" do
field :title, :string
field :status, :boolean
field :group_acl, :string
field :short_description, :string
field :description, :string
field :seo_alias_link, :string
field :seo_words, :string
field :seo_description, :string
field :seo_language, :string
field :seo_language_link, :string
belongs_to :cms_learn_category, TrangellCmsService.Cms.Db.LearnCategory, foreign_key: :cms_learn_category_id, type: :binary_id
belongs_to :cms_learn_headlines, TrangellCmsService.Cms.Db.LearnHeadlines, foreign_key: :cms_learn_headlines_id, type: :binary_id
timestamps()
end
@all_fields ~w(title status group_acl short_description description seo_alias_link seo_words seo_description seo_language seo_language_link cms_learn_category_id cms_learn_headlines_id)a
def changeset(struct, params \\ %{}) do
struct
|> cast(params, @all_fields)
|> validate_required(@all_fields)
|> validate_inclusion(:seo_language, ["en", "fa"])
|> validate_inclusion(:group_acl, ["admin", "actived", "unactived", "blocked"])
|> unique_constraint(:seo_alias_link, name: :index_of_learn_posts_alias_unique_link, message: "alias link already exists.")
|> foreign_key_constraint(:cms_learn_category_id)
|> foreign_key_constraint(:cms_learn_headlines_id)
|> validate_field_relational(:cms_learn_category_id)
|> validate_field_relational(:cms_learn_headlines_id)
# |> check_constraint(:cms_learn_category_id)
# |> check_constraint(:cms_learn_headlines_id)
end
defp validate_field_relational(changeset, field) do
field_concerned = get_field(changeset, field)
case Ecto.UUID.cast(field_concerned) do
:error ->
add_error(changeset, field, "relational field is invalid")
_ ->
changeset
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment