defmodule Supabase.Storage.Object do @moduledoc """ Represents an Object within a Supabase Storage Bucket. This module encapsulates the structure and operations related to an object or file stored within a Supabase Storage bucket. ## Structure An `Object` has the following attributes: - `id`: The unique identifier for the object. - `path`: The path to the object within its storage bucket. - `bucket_id`: The ID of the bucket that houses this object. - `name`: The name or title of the object. - `owner`: The owner or uploader of the object. - `metadata`: A map containing meta-information about the object (e.g., file type, size). - `created_at`: Timestamp indicating when the object was first uploaded or created. - `updated_at`: Timestamp indicating the last time the object was updated. - `last_accessed_at`: Timestamp of when the object was last accessed or retrieved. ## Functions - `parse!/1`: Accepts a map of attributes and constructs a structured `Object`. ## Examples ### Parsing an object object_attrs = %{ id: "obj_id", path: "/folder/my_file.txt", bucket_id: "bucket_123", ... } Supabase.Storage.Object.parse!(object_attrs) """ use Ecto.Schema import Ecto.Changeset, only: [cast: 3, apply_action!: 2] @type t :: %__MODULE__{ id: String.t(), path: Path.t(), bucket_id: String.t(), name: String.t(), owner: String.t(), metadata: map(), created_at: NaiveDateTime.t(), updated_at: NaiveDateTime.t(), last_accessed_at: NaiveDateTime.t() } @fields ~w(id path bucket_id name owner created_at updated_at metadata last_accessed_at)a @primary_key false embedded_schema do field(:path, :string) field(:id, :string) field(:bucket_id, :string) field(:name, :string) field(:owner, :string) field(:metadata, :map) field(:created_at, :naive_datetime) field(:updated_at, :naive_datetime) field(:last_accessed_at, :naive_datetime) end @spec parse!(map) :: t def parse!(attrs) do %__MODULE__{} |> cast(attrs, @fields) |> apply_action!(:parse) end end