Packages

CalDAV server library — mount as a Plug, bring your own storage adapter. Heavily WIP / beta software; APIs may change between releases.

Current section

Files

Jump to
ex_dav lib ex_dav storage postgres schemas collection.ex
Raw

lib/ex_dav/storage/postgres/schemas/collection.ex

defmodule ExDav.Storage.Postgres.Schemas.Collection do
@moduledoc "A DAV collection (calendar or addressbook) owned by a user."
use Ecto.Schema
import Ecto.Changeset
alias ExDav.Storage.Postgres.Schemas.{Resource, User}
schema "dav_collections" do
field :name, :string
field :display_name, :string
field :description, :string
field :kind, Ecto.Enum, values: [:calendar, :addressbook], default: :calendar
field :properties, :map, default: %{}
field :ctag, :integer, default: 0
belongs_to :user, User
has_many :resources, Resource, foreign_key: :collection_id
timestamps(type: :utc_datetime)
end
def changeset(collection, attrs) do
collection
|> cast(attrs, [:name, :display_name, :description, :kind, :properties, :ctag, :user_id])
|> validate_required([:name, :user_id])
|> unique_constraint([:user_id, :name, :kind])
end
def update_props_changeset(collection, attrs) do
cast(collection, attrs, [:display_name, :description])
end
end