feat(chats): tags
This commit is contained in:
parent
f443a5b7ae
commit
b301a3a726
6 changed files with 43 additions and 13 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -38,3 +38,4 @@ erl_crash.dump
|
||||||
/tags*
|
/tags*
|
||||||
/xref_graph.dot
|
/xref_graph.dot
|
||||||
/xref_graph.png
|
/xref_graph.png
|
||||||
|
/scripts
|
||||||
|
|
|
@ -98,6 +98,9 @@
|
||||||
erlang
|
erlang
|
||||||
elixir
|
elixir
|
||||||
postgres
|
postgres
|
||||||
|
|
||||||
|
pkgs.ruby_3_2
|
||||||
|
pkgs.rubyPackages_3_2.nokogiri
|
||||||
] ++ lib.optionals isDarwin (with pkgs.darwin.apple_sdk.frameworks; [
|
] ++ lib.optionals isDarwin (with pkgs.darwin.apple_sdk.frameworks; [
|
||||||
CoreFoundation
|
CoreFoundation
|
||||||
CoreServices
|
CoreServices
|
||||||
|
@ -138,6 +141,7 @@
|
||||||
settings = {
|
settings = {
|
||||||
environment = {
|
environment = {
|
||||||
BDFR_BROWSER_BASE_DIRECTORY = "/Volumes/MediaScraper/Reddit";
|
BDFR_BROWSER_BASE_DIRECTORY = "/Volumes/MediaScraper/Reddit";
|
||||||
|
BDFR_BROWSER_CONFIG_FILE = "./priv/config.yml";
|
||||||
BDFR_BROWSER_REPO_USER = db-user;
|
BDFR_BROWSER_REPO_USER = db-user;
|
||||||
BDFR_BROWSER_REPO_HOST = db-host;
|
BDFR_BROWSER_REPO_HOST = db-host;
|
||||||
RELEASE_DISTRIBUTION = "none";
|
RELEASE_DISTRIBUTION = "none";
|
||||||
|
|
|
@ -9,6 +9,7 @@ defmodule BdfrBrowser.Chat do
|
||||||
|
|
||||||
schema "chats" do
|
schema "chats" do
|
||||||
field :accounts, {:array, :string}
|
field :accounts, {:array, :string}
|
||||||
|
field :tags, {:array, :string}, default: []
|
||||||
|
|
||||||
has_many :messages, Message
|
has_many :messages, Message
|
||||||
end
|
end
|
||||||
|
@ -16,7 +17,13 @@ defmodule BdfrBrowser.Chat do
|
||||||
def listing do
|
def listing do
|
||||||
from(c in __MODULE__,
|
from(c in __MODULE__,
|
||||||
left_join: m in assoc(c, :messages),
|
left_join: m in assoc(c, :messages),
|
||||||
select: %{id: c.id, accounts: c.accounts, num_messages: count(m.id), latest_message: max(m.posted_at)},
|
select: %{
|
||||||
|
id: c.id,
|
||||||
|
accounts: c.accounts,
|
||||||
|
num_messages: count(m.id),
|
||||||
|
latest_message: max(m.posted_at),
|
||||||
|
tags: c.tags
|
||||||
|
},
|
||||||
order_by: [desc: max(m.posted_at)],
|
order_by: [desc: max(m.posted_at)],
|
||||||
group_by: c.id
|
group_by: c.id
|
||||||
)
|
)
|
||||||
|
|
25
mix.nix
25
mix.nix
|
@ -1,4 +1,4 @@
|
||||||
{ lib, beamPackages, overrides ? (x: y: {}) }:
|
{ lib, beamPackages, overrides ? (x: y: { }) }:
|
||||||
|
|
||||||
let
|
let
|
||||||
buildRebar3 = lib.makeOverridable beamPackages.buildRebar3;
|
buildRebar3 = lib.makeOverridable beamPackages.buildRebar3;
|
||||||
|
@ -44,7 +44,7 @@ let
|
||||||
sha256 = "1c4dgi8canscyjgddp22mjc69znvwy44wk3r7jrl2wvs6vv76fqn";
|
sha256 = "1c4dgi8canscyjgddp22mjc69znvwy44wk3r7jrl2wvs6vv76fqn";
|
||||||
};
|
};
|
||||||
|
|
||||||
beamDeps = [];
|
beamDeps = [ ];
|
||||||
};
|
};
|
||||||
|
|
||||||
db_connection = buildMix rec {
|
db_connection = buildMix rec {
|
||||||
|
@ -70,7 +70,7 @@ let
|
||||||
sha256 = "1k7z418b6cj977wswpxsk5844xrxc1smaiqsmrqpf3pdjzsfbksk";
|
sha256 = "1k7z418b6cj977wswpxsk5844xrxc1smaiqsmrqpf3pdjzsfbksk";
|
||||||
};
|
};
|
||||||
|
|
||||||
beamDeps = [];
|
beamDeps = [ ];
|
||||||
};
|
};
|
||||||
|
|
||||||
earmark = buildMix rec {
|
earmark = buildMix rec {
|
||||||
|
@ -96,7 +96,7 @@ let
|
||||||
sha256 = "13qvlqnii8g6bcz6cl330vjwaan7jy30g1app3yvjncvf8rnhlid";
|
sha256 = "13qvlqnii8g6bcz6cl330vjwaan7jy30g1app3yvjncvf8rnhlid";
|
||||||
};
|
};
|
||||||
|
|
||||||
beamDeps = [];
|
beamDeps = [ ];
|
||||||
};
|
};
|
||||||
|
|
||||||
ecto = buildMix rec {
|
ecto = buildMix rec {
|
||||||
|
@ -135,7 +135,7 @@ let
|
||||||
sha256 = "1p0myxmnjjds8bbg69dd6fvhk8q3n7lb78zd4qvmjajnzgdmw6a1";
|
sha256 = "1p0myxmnjjds8bbg69dd6fvhk8q3n7lb78zd4qvmjajnzgdmw6a1";
|
||||||
};
|
};
|
||||||
|
|
||||||
beamDeps = [];
|
beamDeps = [ ];
|
||||||
};
|
};
|
||||||
|
|
||||||
jason = buildMix rec {
|
jason = buildMix rec {
|
||||||
|
@ -161,7 +161,7 @@ let
|
||||||
sha256 = "0p50h0ki8ay5sraiqxiajgwy1829bvyagj65bj9wjny4cnin83fs";
|
sha256 = "0p50h0ki8ay5sraiqxiajgwy1829bvyagj65bj9wjny4cnin83fs";
|
||||||
};
|
};
|
||||||
|
|
||||||
beamDeps = [];
|
beamDeps = [ ];
|
||||||
};
|
};
|
||||||
|
|
||||||
plug = buildMix rec {
|
plug = buildMix rec {
|
||||||
|
@ -200,7 +200,7 @@ let
|
||||||
sha256 = "0hnqgzc3zas7j7wycgnkkdhaji5farkqccy2n4p1gqj5ccfrlm16";
|
sha256 = "0hnqgzc3zas7j7wycgnkkdhaji5farkqccy2n4p1gqj5ccfrlm16";
|
||||||
};
|
};
|
||||||
|
|
||||||
beamDeps = [];
|
beamDeps = [ ];
|
||||||
};
|
};
|
||||||
|
|
||||||
postgrex = buildMix rec {
|
postgrex = buildMix rec {
|
||||||
|
@ -226,7 +226,7 @@ let
|
||||||
sha256 = "1rfz5ld54pkd2w25jadyznia2vb7aw9bclck21fizargd39wzys9";
|
sha256 = "1rfz5ld54pkd2w25jadyznia2vb7aw9bclck21fizargd39wzys9";
|
||||||
};
|
};
|
||||||
|
|
||||||
beamDeps = [];
|
beamDeps = [ ];
|
||||||
};
|
};
|
||||||
|
|
||||||
telemetry = buildRebar3 rec {
|
telemetry = buildRebar3 rec {
|
||||||
|
@ -239,7 +239,7 @@ let
|
||||||
sha256 = "1mgyx9zw92g6w8fp9pblm3b0bghwxwwcbslrixq23ipzisfwxnfs";
|
sha256 = "1mgyx9zw92g6w8fp9pblm3b0bghwxwwcbslrixq23ipzisfwxnfs";
|
||||||
};
|
};
|
||||||
|
|
||||||
beamDeps = [];
|
beamDeps = [ ];
|
||||||
};
|
};
|
||||||
|
|
||||||
typed_struct = buildMix rec {
|
typed_struct = buildMix rec {
|
||||||
|
@ -252,7 +252,7 @@ let
|
||||||
sha256 = "0v8v3l8j7g3ran3f9gc2nc1mkj6kwfdr6kshm2cf3r0zlv1xa2y5";
|
sha256 = "0v8v3l8j7g3ran3f9gc2nc1mkj6kwfdr6kshm2cf3r0zlv1xa2y5";
|
||||||
};
|
};
|
||||||
|
|
||||||
beamDeps = [];
|
beamDeps = [ ];
|
||||||
};
|
};
|
||||||
|
|
||||||
yamerl = buildRebar3 rec {
|
yamerl = buildRebar3 rec {
|
||||||
|
@ -265,7 +265,7 @@ let
|
||||||
sha256 = "0vjf9gnchvh4qfykrxf0jw0didvfrx54wdm26z41s1gicclxnsil";
|
sha256 = "0vjf9gnchvh4qfykrxf0jw0didvfrx54wdm26z41s1gicclxnsil";
|
||||||
};
|
};
|
||||||
|
|
||||||
beamDeps = [];
|
beamDeps = [ ];
|
||||||
};
|
};
|
||||||
|
|
||||||
yaml_elixir = buildMix rec {
|
yaml_elixir = buildMix rec {
|
||||||
|
@ -281,5 +281,6 @@ let
|
||||||
beamDeps = [ yamerl ];
|
beamDeps = [ yamerl ];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
in self
|
in
|
||||||
|
self
|
||||||
|
|
||||||
|
|
9
priv/repo/migrations/20230820220618_add_chat_tags.exs
Normal file
9
priv/repo/migrations/20230820220618_add_chat_tags.exs
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
defmodule BdfrBrowser.Repo.Migrations.AddChatTags do
|
||||||
|
use Ecto.Migration
|
||||||
|
|
||||||
|
def change do
|
||||||
|
alter table("chats") do
|
||||||
|
add :tags, {:array, :string}, default: []
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -9,6 +9,14 @@
|
||||||
<h6 class="card-subtitle mb-2 text-body-secondary">
|
<h6 class="card-subtitle mb-2 text-body-secondary">
|
||||||
<%= chat.num_messages %> message(s) - <%= DateTime.to_iso8601(chat.latest_message) %>
|
<%= chat.num_messages %> message(s) - <%= DateTime.to_iso8601(chat.latest_message) %>
|
||||||
</h6>
|
</h6>
|
||||||
|
|
||||||
|
<%= if length(chat.tags) > 0 do %>
|
||||||
|
<p>
|
||||||
|
<%= for tag <- chat.tags do %>
|
||||||
|
<span class="badge text-bg-info"><%= tag %></span>
|
||||||
|
<% end %>
|
||||||
|
</p>
|
||||||
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
Reference in a new issue