Commit
•
27f0329
1
Parent(s):
8eda717
chore: Remove unused HomeLive LV
Browse files
lib/medicode_web/live/home_live/index.ex
DELETED
@@ -1,101 +0,0 @@
|
|
1 |
-
defmodule MedicodeWeb.HomeLive.Index do
|
2 |
-
use MedicodeWeb, :live_view
|
3 |
-
|
4 |
-
alias Medicode.Transcriptions
|
5 |
-
|
6 |
-
@impl Phoenix.LiveView
|
7 |
-
def mount(_params, session, socket) do
|
8 |
-
if connected?(socket) do
|
9 |
-
Phoenix.PubSub.subscribe(:medicode_pubsub, "medicode:#{session["current_user"].id}")
|
10 |
-
end
|
11 |
-
|
12 |
-
socket =
|
13 |
-
socket
|
14 |
-
|> assign(:current_user, session["current_user"])
|
15 |
-
|> allow_upload(:audio, accept: ~w(.mp3), max_entries: 1)
|
16 |
-
|
17 |
-
{:ok, socket}
|
18 |
-
end
|
19 |
-
|
20 |
-
@impl Phoenix.LiveView
|
21 |
-
def render(assigns) do
|
22 |
-
~H"""
|
23 |
-
<div class="min-h-[calc(100vh-56px)] flex gap-5">
|
24 |
-
<.live_component
|
25 |
-
id="sidebar"
|
26 |
-
module={MedicodeWeb.Components.SidebarComponent}
|
27 |
-
current_user={@current_user}
|
28 |
-
/>
|
29 |
-
|
30 |
-
<main class="flex-1 pl-16 pr-16 pt-[25px]">
|
31 |
-
<div class="flex flex-col h-full mx-auto max-w-5xl">
|
32 |
-
<div class="flex-1 flex flex-col space-y-6">
|
33 |
-
<div class="flex-1 flex flex-col justify-center items-center gap-4">
|
34 |
-
<img src={~p"/images/logo.svg"} width="106" />
|
35 |
-
<p class="text-2xl leading-normal font-semibold">MediCode</p>
|
36 |
-
</div>
|
37 |
-
<.upload_form audio_upload={@uploads.audio} />
|
38 |
-
</div>
|
39 |
-
</div>
|
40 |
-
</main>
|
41 |
-
</div>
|
42 |
-
"""
|
43 |
-
end
|
44 |
-
|
45 |
-
@impl true
|
46 |
-
def handle_event("validate", _params, socket) do
|
47 |
-
{:noreply, socket}
|
48 |
-
end
|
49 |
-
|
50 |
-
def handle_event("save", _params, socket) do
|
51 |
-
if socket.assigns.uploads.audio.entries == [] do
|
52 |
-
{:noreply, put_flash(socket, :error, "Please select an audio file")}
|
53 |
-
else
|
54 |
-
_filename =
|
55 |
-
socket.assigns.uploads.audio.entries
|
56 |
-
|> Enum.at(0)
|
57 |
-
|> Map.get(:client_name)
|
58 |
-
|
59 |
-
uploaded_files =
|
60 |
-
consume_uploaded_entries(socket, :audio, fn %{path: path}, _entry ->
|
61 |
-
dest = Path.join(System.tmp_dir(), Path.basename(path))
|
62 |
-
File.cp!(path, dest)
|
63 |
-
{:ok, dest}
|
64 |
-
end)
|
65 |
-
|
66 |
-
{:ok, transcription} =
|
67 |
-
Transcriptions.create_transcription(%{
|
68 |
-
user_id: socket.assigns.current_user.id,
|
69 |
-
filename: Enum.at(uploaded_files, 0)
|
70 |
-
})
|
71 |
-
|
72 |
-
Phoenix.PubSub.broadcast(
|
73 |
-
:medicode_pubsub,
|
74 |
-
"medicode:#{socket.assigns.current_user.id}",
|
75 |
-
{:transcription_created, transcription.id}
|
76 |
-
)
|
77 |
-
|
78 |
-
Transcriptions.transcribe_audio(transcription)
|
79 |
-
|
80 |
-
{:noreply, push_navigate(socket, to: ~p"/transcriptions/#{transcription.id}")}
|
81 |
-
end
|
82 |
-
end
|
83 |
-
|
84 |
-
@impl true
|
85 |
-
def handle_info({:transcription_updated, transcription_id}, socket) do
|
86 |
-
transcription = get_transcription(transcription_id)
|
87 |
-
|
88 |
-
socket =
|
89 |
-
socket
|
90 |
-
|> assign(:transcription, transcription)
|
91 |
-
|
92 |
-
{:noreply, socket}
|
93 |
-
end
|
94 |
-
|
95 |
-
def error_to_string(:too_large), do: "Too large"
|
96 |
-
def error_to_string(:not_accepted), do: "You have selected an unacceptable file type"
|
97 |
-
|
98 |
-
defp get_transcription(id) do
|
99 |
-
Transcriptions.get_transcription(id, true)
|
100 |
-
end
|
101 |
-
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lib/medicode_web/live/home_live/sample_results.ex
DELETED
@@ -1,94 +0,0 @@
|
|
1 |
-
defmodule MedicodeWeb.HomeLive.Index.SampleResults do
|
2 |
-
@moduledoc """
|
3 |
-
Contains sample data that can be displayed in HomeLive for prototyping UI.
|
4 |
-
|
5 |
-
To test the success UI, replace the status assignment with:
|
6 |
-
|
7 |
-
status: :success
|
8 |
-
|
9 |
-
And the `chunks` stream with:
|
10 |
-
|
11 |
-
|> stream(:chunks, MedicodeWeb.HomeLive.Index.SampleResults.get_sample_results())
|
12 |
-
"""
|
13 |
-
|
14 |
-
alias AudioTagger.Structs.TagResult
|
15 |
-
|
16 |
-
def get_sample_results do
|
17 |
-
[
|
18 |
-
%{
|
19 |
-
id: 0,
|
20 |
-
start_mark: "00:00:00",
|
21 |
-
end_mark: "00:00:07",
|
22 |
-
text:
|
23 |
-
"This 55-year-old man with known coronary artery disease comes for a follow-up visit today.",
|
24 |
-
tags: [
|
25 |
-
%TagResult{
|
26 |
-
code: "74685",
|
27 |
-
label: "Coronary artery anomaly",
|
28 |
-
score: 0.892520010471344
|
29 |
-
},
|
30 |
-
%TagResult{
|
31 |
-
code: "41412",
|
32 |
-
label: "Dissection of coronary artery",
|
33 |
-
score: 0.8386646509170532
|
34 |
-
},
|
35 |
-
%TagResult{
|
36 |
-
code: "V717",
|
37 |
-
label: "Observation for suspected cardiovascular disease",
|
38 |
-
score: 0.8203237056732178
|
39 |
-
},
|
40 |
-
%TagResult{
|
41 |
-
code: "41400",
|
42 |
-
label: "Coronary atherosclerosis of unspecified type of vessel, native or graft",
|
43 |
-
score: 0.8200777173042297
|
44 |
-
},
|
45 |
-
%TagResult{
|
46 |
-
code: "V812",
|
47 |
-
label: "Screening for other and unspecified cardiovascular conditions",
|
48 |
-
score: 0.8076164722442627
|
49 |
-
}
|
50 |
-
]
|
51 |
-
},
|
52 |
-
%{
|
53 |
-
id: 1,
|
54 |
-
start_mark: "00:00:07",
|
55 |
-
end_mark: "00:00:11",
|
56 |
-
text: "Last month he was admitted to our hospital with unstable angina.",
|
57 |
-
tags: [
|
58 |
-
%TagResult{code: "4381", label: "Angiopathy in other dis", score: 0.8538626432418823},
|
59 |
-
%TagResult{code: "131", label: "Prinzmetal angina", score: 0.8411313891410828},
|
60 |
-
%TagResult{code: "130", label: "Angina decubitus", score: 0.8362892270088196},
|
61 |
-
%TagResult{code: "6985", label: "Angio intes w hmrhg", score: 0.8048261404037476},
|
62 |
-
%TagResult{code: "139", label: "Angina pectoris NEC/NOS", score: 0.7996218800544739}
|
63 |
-
]
|
64 |
-
},
|
65 |
-
%{
|
66 |
-
id: 2,
|
67 |
-
start_mark: "00:00:11",
|
68 |
-
end_mark: "00:00:15",
|
69 |
-
text: "He underwent heart catheterization on November 15th, 2007.",
|
70 |
-
tags: [
|
71 |
-
%TagResult{code: "8716", label: "FB post heart catheter", score: 0.8772457242012024},
|
72 |
-
%TagResult{code: "8705", label: "Acc cut/hem w catheteriz", score: 0.8552037477493286},
|
73 |
-
%TagResult{code: "5881", label: "Fit/adj vascular cathetr", score: 0.8404607772827148},
|
74 |
-
%TagResult{code: "6112", label: "Heart laceration-open", score: 0.834895133972168},
|
75 |
-
%TagResult{code: "6102", label: "Heart laceration-closed", score: 0.8253614902496338}
|
76 |
-
]
|
77 |
-
},
|
78 |
-
%{
|
79 |
-
id: 3,
|
80 |
-
start_mark: "00:00:15",
|
81 |
-
end_mark: "00:00:22",
|
82 |
-
text:
|
83 |
-
"At that time he was found to have a tight 99% proxmost enosis, total occlusion and collateralization",
|
84 |
-
tags: [
|
85 |
-
%TagResult{code: "641", label: "No proc/contraindication", score: 0.8215043544769287},
|
86 |
-
%TagResult{code: "643", label: "No proc for reasons NEC", score: 0.8145027160644531},
|
87 |
-
%TagResult{code: "416", label: "Proteus infection NOS", score: 0.8083868622779846},
|
88 |
-
%TagResult{code: "019", label: "Prostatitis NOS", score: 0.8061345815658569},
|
89 |
-
%TagResult{code: "5270", label: "Prolapsed arm-unspec", score: 0.8031538128852844}
|
90 |
-
]
|
91 |
-
}
|
92 |
-
]
|
93 |
-
end
|
94 |
-
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lib/medicode_web/router.ex
CHANGED
@@ -83,7 +83,6 @@ defmodule MedicodeWeb.Router do
|
|
83 |
on_mount: [{MedicodeWeb.UserAuth, :ensure_authenticated}] do
|
84 |
live "/users/settings", UserSettingsLive, :edit
|
85 |
live "/users/settings/confirm_email/:token", UserSettingsLive, :confirm_email
|
86 |
-
# live "/", HomeLive.Index
|
87 |
live "/", TranscriptionsLive.Show
|
88 |
live "/transcriptions/:id", TranscriptionsLive.Show
|
89 |
end
|
|
|
83 |
on_mount: [{MedicodeWeb.UserAuth, :ensure_authenticated}] do
|
84 |
live "/users/settings", UserSettingsLive, :edit
|
85 |
live "/users/settings/confirm_email/:token", UserSettingsLive, :confirm_email
|
|
|
86 |
live "/", TranscriptionsLive.Show
|
87 |
live "/transcriptions/:id", TranscriptionsLive.Show
|
88 |
end
|
test/medicode_web/live/home_live_test.exs
DELETED
@@ -1,64 +0,0 @@
|
|
1 |
-
defmodule MedicodeWeb.HomeLiveTest do
|
2 |
-
use MedicodeWeb.ConnCase, async: true
|
3 |
-
|
4 |
-
import Ecto.Query
|
5 |
-
import Medicode.AccountsFixtures
|
6 |
-
import Phoenix.LiveViewTest
|
7 |
-
|
8 |
-
alias Medicode.Repo
|
9 |
-
alias Medicode.Transcriptions.Transcription
|
10 |
-
|
11 |
-
setup %{conn: conn} do
|
12 |
-
password = valid_user_password()
|
13 |
-
user = user_fixture(%{password: password})
|
14 |
-
%{conn: log_in_user(conn, user), current_user: user}
|
15 |
-
end
|
16 |
-
|
17 |
-
describe "/" do
|
18 |
-
test "renders upload screen", %{conn: conn, current_user: current_user} do
|
19 |
-
# 1. Find file input
|
20 |
-
# 2. Upload file
|
21 |
-
# 3. Click submit
|
22 |
-
# 4. Assert we see text
|
23 |
-
# 5. Assert we see codes alongside text
|
24 |
-
|
25 |
-
# TODO: Ensure that we're testing both the non-live and live versions here.
|
26 |
-
conn = get(conn, "/")
|
27 |
-
assert html_response(conn, 200) =~ "MediCode"
|
28 |
-
|
29 |
-
{:ok, view, html} = live(conn)
|
30 |
-
assert html =~ "Audio file can be .mp3"
|
31 |
-
|
32 |
-
sample_file =
|
33 |
-
__DIR__
|
34 |
-
|> Path.join("../../../medasrdemo-Paul.mp3")
|
35 |
-
|> Path.expand()
|
36 |
-
|
37 |
-
audio =
|
38 |
-
file_input(view, "#audio-form", :audio, [
|
39 |
-
%{
|
40 |
-
last_modified: 1_594_171_879_000,
|
41 |
-
name: "sample.mp3",
|
42 |
-
content: File.read!(sample_file),
|
43 |
-
size: 992_980,
|
44 |
-
type: "audio/mp3"
|
45 |
-
}
|
46 |
-
])
|
47 |
-
|
48 |
-
render_upload(audio, "sample.mp3")
|
49 |
-
|
50 |
-
view
|
51 |
-
|> form("#audio-form")
|
52 |
-
|> render_submit()
|
53 |
-
|
54 |
-
transcription =
|
55 |
-
Transcription
|
56 |
-
|> where([t], t.user_id == ^current_user.id)
|
57 |
-
|> order_by(desc: :inserted_at)
|
58 |
-
|> limit(1)
|
59 |
-
|> Repo.one()
|
60 |
-
|
61 |
-
assert_redirected(view, ~p"/transcriptions/#{transcription.id}")
|
62 |
-
end
|
63 |
-
end
|
64 |
-
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|