1 defmodule Pleroma.User.HashtagFollow do
10 schema "user_follows_hashtag" do
11 belongs_to(:user, User, type: FlakeId.Ecto.CompatType)
12 belongs_to(:hashtag, Hashtag)
15 def changeset(%__MODULE__{} = user_hashtag_follow, attrs) do
17 |> cast(attrs, [:user_id, :hashtag_id])
18 |> unique_constraint(:hashtag_id,
19 name: :user_hashtag_follows_user_id_hashtag_id_index,
20 message: "already following"
22 |> validate_required([:user_id, :hashtag_id])
25 def new(%User{} = user, %Hashtag{} = hashtag) do
27 |> changeset(%{user_id: user.id, hashtag_id: hashtag.id})
28 |> Repo.insert(on_conflict: :nothing)
31 def delete(%User{} = user, %Hashtag{} = hashtag) do
32 with %__MODULE__{} = user_hashtag_follow <- get(user, hashtag) do
33 Repo.delete(user_hashtag_follow)
39 def get(%User{} = user, %Hashtag{} = hashtag) do
40 from(hf in __MODULE__)
41 |> where([hf], hf.user_id == ^user.id and hf.hashtag_id == ^hashtag.id)
45 def get_by_user(%User{} = user) do
46 Ecto.assoc(user, :followed_hashtags)