···11# AUTOGENERATED: This file was generated using the mix task `lexgen`.
22defmodule Atproto do
33- @default_pds_hostname Application.compile_env!(:comet, :default_pds_hostname)
33+ @default_pds_hostname Application.compile_env(
44+ :atproto,
55+ :default_pds_hostname,
66+ "https://bsky.social"
77+ )
4859 @typedoc """
610 A type representing the names of the options that can be passed to `query/3` and `procedure/3`.
+22
apps/backend/lib/comet/repo/comment.ex
···11+defmodule Comet.Repo.Comment do
22+ @moduledoc """
33+ Schema containing information about a Comet comment.
44+ """
55+ use Comet.Schema
66+77+ schema "comments" do
88+ field :rkey, :string
99+ field :text, :string
1010+ embeds_one :facets, Repo.Embed.Facet, on_replace: :update
1111+ field :subject_id, :binary_id
1212+ field :subject_type, Ecto.Enum, values: [:track, :playlist]
1313+ field :langs, {:array, :string}
1414+ field :created_at, :utc_datetime
1515+1616+ belongs_to :identity, Repo.Identity, foreign_key: :did, references: :did
1717+ belongs_to :parent, __MODULE__, foreign_key: :reply_id
1818+ has_many :replies, __MODULE__, foreign_key: :reply_id
1919+2020+ timestamps(inserted_at: :indexed_at, updated_at: false)
2121+ end
2222+end
+14
apps/backend/lib/comet/repo/embed/facet.ex
···11+defmodule Comet.Repo.Embed.Facet do
22+ use Comet.Schema
33+44+ @primary_key false
55+ embedded_schema do
66+ embeds_one :index, ByteSlice do
77+ field :byte_start, :integer
88+ field :byte_end, :integer
99+ end
1010+1111+ # Sadly Ecto doesn't support union types/embeds so this has to be generic, without doing weirdness in the database at least
1212+ field :features, {:array, :map}
1313+ end
1414+end
+9
apps/backend/lib/comet/repo/embed/link.ex
···11+defmodule Comet.Repo.Embed.Link do
22+ use Comet.Schema
33+44+ @primary_key false
55+ embedded_schema do
66+ field :type, :string
77+ field :value, :string
88+ end
99+end
+18
apps/backend/lib/comet/repo/identity.ex
···11+defmodule Comet.Repo.Identity do
22+ @moduledoc """
33+ Schema containing information about an ATProtocol identity.
44+ """
55+ use Ecto.Schema
66+77+ @primary_key {:did, :string, autogenerate: false}
88+ @foreign_key_type :string
99+1010+ schema "identity" do
1111+ field :handle, :string
1212+ field :active, :boolean
1313+ # TODO: see if it'd be possible to set this to an enum, if ecto allows open enums
1414+ field :status, :string
1515+1616+ timestamps(inserted_at: :indexed_at, updated_at: false)
1717+ end
1818+end
+17
apps/backend/lib/comet/repo/like.ex
···11+defmodule Comet.Repo.Like do
22+ @moduledoc """
33+ Schema containing information about a Comet like.
44+ """
55+ use Comet.Schema
66+77+ schema "likes" do
88+ field :rkey, :string
99+ field :subject_id, :binary_id
1010+ field :subject_type, Ecto.Enum, values: [:track, :playlist]
1111+ field :created_at, :utc_datetime
1212+1313+ belongs_to :identity, Repo.Identity, foreign_key: :did, references: :did
1414+1515+ timestamps(inserted_at: :indexed_at, updated_at: false)
1616+ end
1717+end
+23
apps/backend/lib/comet/repo/playlist.ex
···11+defmodule Comet.Repo.Playlist do
22+ @moduledoc """
33+ Schema containing information about a Comet playlist.
44+ """
55+ use Comet.Schema
66+77+ schema "playlists" do
88+ field :rkey, :string
99+ field :title, :string
1010+ field :image, :string
1111+ field :description, :string
1212+ embeds_one :description_facets, Repo.Embed.Facet, on_replace: :update
1313+ field :type, :string
1414+ field :tags, {:array, :string}
1515+ embeds_one :link, Repo.Embed.Link, on_replace: :update
1616+ field :created_at, :utc_datetime
1717+1818+ belongs_to :identity, Repo.Identity, foreign_key: :did, references: :did
1919+ has_many :tracks, Repo.Playlist
2020+2121+ timestamps(inserted_at: :indexed_at, updated_at: false)
2222+ end
2323+end
+18
apps/backend/lib/comet/repo/playlist_track.ex
···11+defmodule Comet.Repo.PlaylistTrack do
22+ @moduledoc """
33+ Schema containing information about a track in a Comet playlist.
44+ """
55+ use Comet.Schema
66+77+ schema "playlist_tracks" do
88+ field :rkey, :string
99+ field :position, :integer
1010+ field :created_at, :utc_datetime
1111+1212+ belongs_to :identity, Repo.Identity, foreign_key: :did, references: :did
1313+ belongs_to :track, Repo.Track
1414+ belongs_to :playlist, Repo.Playlist
1515+1616+ timestamps(inserted_at: :indexed_at, updated_at: false)
1717+ end
1818+end
+21
apps/backend/lib/comet/repo/profile.ex
···11+defmodule Comet.Repo.Profile do
22+ @moduledoc """
33+ Schema containing information about a Comet profile.
44+ """
55+ use Comet.Schema
66+77+ schema "profiles" do
88+ field :rkey, :string, default: "self"
99+ field :display_name, :string
1010+ field :description, :string
1111+ embeds_one :description_facets, Repo.Embed.Facet, on_replace: :update
1212+ field :avatar, :string
1313+ field :banner, :string
1414+ field :featured_items, {:array, :string}
1515+ field :created_at, :utc_datetime
1616+1717+ belongs_to :identity, Repo.Identity, foreign_key: :did, references: :did
1818+1919+ timestamps(inserted_at: :indexed_at, updated_at: false)
2020+ end
2121+end
+17
apps/backend/lib/comet/repo/repost.ex
···11+defmodule Comet.Repo.Repost do
22+ @moduledoc """
33+ Schema containing information about a Comet repost.
44+ """
55+ use Comet.Schema
66+77+ schema "reposts" do
88+ field :rkey, :string
99+ field :subject_id, :binary_id
1010+ field :subject_type, Ecto.Enum, values: [:track, :playlist]
1111+ field :created_at, :utc_datetime
1212+1313+ belongs_to :identity, Repo.Identity, foreign_key: :did, references: :did
1414+1515+ timestamps(inserted_at: :indexed_at, updated_at: false)
1616+ end
1717+end
+24
apps/backend/lib/comet/repo/track.ex
···11+defmodule Comet.Repo.Track do
22+ @moduledoc """
33+ Schema containing information about a Comet track.
44+ """
55+ use Comet.Schema
66+77+ schema "tracks" do
88+ field :rkey, :string
99+ field :title, :string
1010+ field :audio, :string
1111+ field :image, :string
1212+ field :description, :string
1313+ embeds_one :description_facets, Repo.Embed.Facet, on_replace: :update
1414+ field :explicit, :boolean
1515+ field :tags, {:array, :string}
1616+ embeds_one :link, Repo.Embed.Link, on_replace: :update
1717+ field :created_at, :utc_datetime
1818+ field :released_at, :utc_datetime
1919+2020+ belongs_to :identity, Repo.Identity, foreign_key: :did, references: :did
2121+2222+ timestamps(inserted_at: :indexed_at, updated_at: false)
2323+ end
2424+end
+11
apps/backend/lib/comet/schema.ex
···11+defmodule Comet.Schema do
22+ defmacro __using__(_) do
33+ quote do
44+ use Ecto.Schema
55+ alias Comet.Repo
66+77+ @primary_key {:id, :binary_id, autogenerate: true}
88+ @foreign_key_type :binary_id
99+ end
1010+ end
1111+end