defmodule GitGud.Lfs.LfsObject do
use Ecto.Schema
import Ecto.Changeset
alias GitGud.Repositories.Repository
@primary_key {:id, :id, autogenerate: true}
schema "lfs_objects" do
field :oid, :string
field :size, :integer
field :storage_bucket, :string
field :storage_key, :string
field :uploaded_at, :utc_datetime
belongs_to :repository, Repository
timestamps(type: :utc_datetime)
end
def create_changeset(obj, attrs) do
obj
|> cast(attrs, [:repository_id, :oid, :size, :storage_bucket, :storage_key])
|> validate_required([:repository_id, :oid, :size, :storage_bucket, :storage_key])
|> validate_length(:oid, is: 64)
|> validate_format(:oid, ~r/^[0-9a-f]{64}$/)
|> validate_number(:size, greater_than_or_equal_to: 0)
|> unique_constraint([:repository_id, :oid])
end
def mark_uploaded(obj),
do: change(obj, uploaded_at: DateTime.utc_now(:second))
def uploaded?(%__MODULE__{uploaded_at: t}), do: not is_nil(t)
end
998 B · text
5af55d9