Files
Claper/lib/claper/interactions.ex
Alex Lion 093bb79b42 Add quizz feature + improvements
commit 705ea00064e552f482bff52c3c5b11d23fbd5b4c
Author: Alex Lion <dev@alexandrelion.com>
Date:   Sat Dec 21 10:08:42 2024 -0500

    Change version

commit 330173bd64bb18c5ea7e68a2122f66497981c3c3
Author: Alex Lion <dev@alexandrelion.com>
Date:   Sat Dec 21 10:01:52 2024 -0500

    Fix layout

commit 3cc075962e961f8a78b0c30eca9b79db6b9a5731
Author: Alex Lion <dev@alexandrelion.com>
Date:   Thu Dec 19 14:20:59 2024 +0100

    Update changelog

commit 63b1fa7ee591d40e44005b7939f51c99cf3e119e
Author: Alex Lion <dev@alexandrelion.com>
Date:   Sun Dec 15 18:56:01 2024 +0100

    Fix upper

commit 8e7bb1990c58e343de5aa18036eb0916573fb4c6
Author: Alex Lion <dev@alexandrelion.com>
Date:   Sun Dec 15 18:49:20 2024 +0100

    Add pagination for events

commit 28beacd120f0a1081e670e4a06bbc185cc699beb
Author: Alex Lion <dev@alexandrelion.com>
Date:   Mon Dec 9 21:03:13 2024 +0100

    Add pagination

commit c79d6cce947869b98795b9baf541a32952624969
Author: Alex Lion <dev@alexandrelion.com>
Date:   Sun Dec 8 21:24:23 2024 +0100

    Fix tests

commit caad25ad75b5937ca0906dca89dedaa4d58ae072
Author: Alex Lion <dev@alexandrelion.com>
Date:   Sun Dec 8 17:43:55 2024 +0100

    Fix user registration bug

commit 38c3eecc49d1397a8bb7a4a11203775396d00272
Author: Alex Lion <dev@alexandrelion.com>
Date:   Sat Dec 7 22:23:24 2024 +0100

    Update changelog

commit e648ef08a0f61cf4b554fcbf0a83e02a2249de0d
Author: Alex Lion <dev@alexandrelion.com>
Date:   Sat Dec 7 22:06:27 2024 +0100

    Add obin

commit 6925117818e117dbd60efea5ae6c81a26a57f76f
Author: Alex Lion <dev@alexandrelion.com>
Date:   Sat Dec 7 19:39:03 2024 +0100

    WIP

commit be9b2886d3b879452f5bae08b3cdd181cac254f8
Author: Alex Lion <dev@alexandrelion.com>
Date:   Sat Dec 7 16:19:09 2024 +0100

    Add LTI AGS for quizzes

commit 29a7c96de6d4e38b26dfaa61bfa5e689a16d4935
Author: Alex Lion <dev@alexandrelion.com>
Date:   Thu Dec 5 13:30:49 2024 +0100

    Add translations

commit 249fdc9188c7613a6adafb0b983303c1ae7601bd
Author: Alex Lion <dev@alexandrelion.com>
Date:   Tue Dec 3 21:37:27 2024 +0100

    Add qti export

commit c2d56e30cdb6c629e957c64e4393dfd9d5af7159
Author: Alex Lion <dev@alexandrelion.com>
Date:   Tue Dec 3 20:44:58 2024 +0100

    Fix report embed

commit a34c239f9014e53b079106f1935bc2b079d01eed
Author: Alex Lion <dev@alexandrelion.com>
Date:   Sat Nov 30 11:32:32 2024 +0100

    Add export quiz

commit 8d1f34b90635776ae40849bd75fd135693b116fb
Author: Alex Lion <dev@alexandrelion.com>
Date:   Sat Nov 30 00:56:50 2024 +0100

    Improve design

commit d9a7370419ed9e288eccf263c2715330831e45e4
Author: Alex Lion <dev@alexandrelion.com>
Date:   Sat Nov 30 00:43:27 2024 +0100

    Add exports

commit b374b7bbccfa655dfad7695d7a24c5ddd4a07b66
Author: Alex Lion <dev@alexandrelion.com>
Date:   Thu Nov 28 15:22:41 2024 +0100

    Remove presence on manager

commit 404e759ae3d2f5e555ae20437204553bffdc5065
Author: Alex Lion <dev@alexandrelion.com>
Date:   Thu Nov 28 15:22:33 2024 +0100

    Improve engagement report

commit 39dbec6692c2d3f74a97647a703993d6152bfa06
Author: Alex Lion <dev@alexandrelion.com>
Date:   Sat Nov 23 15:39:59 2024 +0100

    Add translation

commit 354c2e30aece5bc7d800893ce8dee3868a1c1f71
Author: Alex Lion <dev@alexandrelion.com>
Date:   Sat Nov 23 15:18:53 2024 +0100

    Change product tour behavior

commit 5f253812282fb11011694b8828580d886f1f5899
Author: Alex <dev@alexandrelion.com>
Date:   Tue Nov 19 19:59:32 2024 +0100

    WIP

commit f411180433a05b89fc9d029e2b313968985e5c3f
Author: Alex <dev@alexandrelion.com>
Date:   Tue Nov 19 19:32:30 2024 +0100

    WIP

commit 2b5989774eeb839f7b7b2a49377aca9fe4d68c09
Author: Alex <dev@alexandrelion.com>
Date:   Sun Nov 17 19:31:27 2024 +0100

    WIP

commit c8750a667f131b68818859796670c3022c6d53fe
Author: Alex <dev@alexandrelion.com>
Date:   Sun Nov 17 18:23:01 2024 +0100

    WIP

commit fdb9efecb5688423ed2c82cf445868040653d380
Author: Alex <dev@alexandrelion.com>
Date:   Sun Nov 17 17:55:57 2024 +0100

    WIP

commit 5d12b12ce33eb5c1ba2a3307ef4ac679b279f511
Author: Alex <dev@alexandrelion.com>
Date:   Sat Nov 16 21:22:12 2024 +0100

    WIP

commit 548b714fda61464517247910af7e3e1c2bdae8cf
Author: Alex <dev@alexandrelion.com>
Date:   Fri Nov 15 15:34:00 2024 +0100

    WIP

commit f0c87f34ea2ac837b4b3b3d6fd51c32bd625371e
Author: Alex <dev@alexandrelion.com>
Date:   Wed Nov 13 22:09:24 2024 +0100

    WIP

commit c0c8bf99a538653208e28300566cced3d444a764
Author: Alex <dev@alexandrelion.com>
Date:   Mon Nov 11 13:02:36 2024 +0100

    WIP

commit 245ea9b836c2e69c7269fc7d8c7fd2edd0032eed
Author: Alex <dev@alexandrelion.com>
Date:   Sun Nov 10 19:07:36 2024 +0100

    Add presenter

commit 0cf50918d62a9ab5ea127698219e05f781c659bb
Author: Alex <dev@alexandrelion.com>
Date:   Sat Nov 9 23:20:35 2024 +0100

    Refactor reactions

commit ef8ffefe56d5b19dd895be181437c461134176ab
Author: Alex <dev@alexandrelion.com>
Date:   Sat Nov 9 22:21:13 2024 +0100

    Add tests

commit c4055142ed63d8ea1be921f527bcaf595a2b9268
Author: Alex <dev@alexandrelion.com>
Date:   Sat Nov 9 11:28:00 2024 +0100

    WIP

commit 779e6970f7ee7ca89aab2bdfcff6197895b9ce5e
Author: Alex <dev@alexandrelion.com>
Date:   Fri Nov 8 17:21:11 2024 +0100

    WIP

commit 9d25c440b830ded7e6fc2e0bcc9353520ec4a951
Author: Alex <dev@alexandrelion.com>
Date:   Fri Nov 8 11:54:31 2024 +0100

    WIP

commit c0157487a9e20b6773e517553681915c12367851
Author: Alex <dev@alexandrelion.com>
Date:   Fri Nov 1 17:13:04 2024 +0100

    Fix condition

commit a64439fbf2d852e127deb00a11906fb86b0c9ece
Author: Alex <dev@alexandrelion.com>
Date:   Fri Nov 1 12:16:21 2024 +0100

    WIP

commit a994d959afe20ee380d42feb5ca6da2ab832d569
Author: Alex <dev@alexandrelion.com>
Date:   Wed Oct 30 23:06:24 2024 +0100

    Fix changeset

commit 5b2935fc33577af21ccc2558b49d9a813f4835f3
Merge: cec1a97 7476269
Author: Alex <dev@alexandrelion.com>
Date:   Sun Oct 20 11:26:51 2024 +0200

    Merge branch 'dev' into feature/quizz

commit cec1a97650867da3a09d8e23d0756a3a573e1bc8
Author: Alex <dev@alexandrelion.com>
Date:   Sat Oct 19 22:52:00 2024 +0200

    WIP

commit f65854f638393ce80fd9d17642e8a90ee5c1a06e
Author: Alex <dev@alexandrelion.com>
Date:   Sat Oct 19 16:55:42 2024 +0200

    WIP

commit 1e6429a386c56be6a8fdd2f083e273b50a6bc4c9
Merge: 1977959 6f8a2fd
Author: Alex <dev@alexandrelion.com>
Date:   Sat Oct 19 13:49:22 2024 +0200

    Merge branch 'dev' into feature/quizz

    # Conflicts:
    #	lib/claper_web/live/event_live/manage.html.heex

commit 1977959efb
Author: Alex <dev@alexandrelion.com>
Date:   Sat Oct 5 12:57:09 2024 +0200

    WIP
2024-12-21 10:09:29 -05:00

136 lines
4.0 KiB
Elixir

defmodule Claper.Interactions do
alias Claper.Polls
alias Claper.Forms
alias Claper.Embeds
alias Claper.Events
alias Claper.Presentations
alias Claper.Quizzes
import Ecto.Query, warn: false
@type interaction :: Polls.Poll | Forms.Form | Embeds.Embed
def get_number_total_interactions(presentation_file_id) do
from(p in Polls.Poll,
where: p.presentation_file_id == ^presentation_file_id,
select: count(p.id)
)
|> Claper.Repo.one()
|> Kernel.+(
from(f in Forms.Form,
where: f.presentation_file_id == ^presentation_file_id,
select: count(f.id)
)
|> Claper.Repo.one()
)
|> Kernel.+(
from(e in Embeds.Embed,
where: e.presentation_file_id == ^presentation_file_id,
select: count(e.id)
)
|> Claper.Repo.one()
)
|> Kernel.+(
from(q in Quizzes.Quiz,
where: q.presentation_file_id == ^presentation_file_id,
select: count(q.id)
)
|> Claper.Repo.one()
)
end
def get_active_interaction(event, position) do
with {:ok, interactions} <- get_interactions_at_position(event, position) do
interactions |> Enum.filter(&(&1.enabled == true)) |> List.first()
end
end
def get_interactions_at_position(
%Events.Event{
presentation_file: %Presentations.PresentationFile{id: presentation_file_id}
} = event,
position,
broadcast \\ false
) do
with polls <- Polls.list_polls_at_position(presentation_file_id, position),
forms <- Forms.list_forms_at_position(presentation_file_id, position),
embeds <- Embeds.list_embeds_at_position(presentation_file_id, position),
quizzes <- Quizzes.list_quizzes_at_position(presentation_file_id, position) do
interactions =
(polls ++ forms ++ embeds ++ quizzes)
|> Enum.sort_by(& &1.inserted_at, {:asc, NaiveDateTime})
if broadcast do
active_interaction = interactions |> Enum.filter(&(&1.enabled == true)) |> List.first()
Phoenix.PubSub.broadcast(
Claper.PubSub,
"event:#{event.uuid}",
{:current_interaction, active_interaction}
)
end
{:ok, interactions}
end
end
def enable_interaction(interaction) do
Ecto.Multi.new()
|> Ecto.Multi.run(:disable_polls, fn _repo, _ ->
{count, _} = Polls.disable_all(interaction.presentation_file_id, interaction.position)
{:ok, count}
end)
|> Ecto.Multi.run(:disable_forms, fn _repo, _ ->
{count, _} = Forms.disable_all(interaction.presentation_file_id, interaction.position)
{:ok, count}
end)
|> Ecto.Multi.run(:disable_embeds, fn _repo, _ ->
{count, _} = Embeds.disable_all(interaction.presentation_file_id, interaction.position)
{:ok, count}
end)
|> Ecto.Multi.run(:disable_quizzes, fn _repo, _ ->
{count, _} = Quizzes.disable_all(interaction.presentation_file_id, interaction.position)
{:ok, count}
end)
|> Ecto.Multi.run(:enable_interaction, fn _repo, _ ->
set_enabled(interaction)
end)
|> Claper.Repo.transaction()
|> case do
{:ok, _} -> :ok
{:error, _, reason, _} -> {:error, reason}
end
end
defp set_enabled(%Polls.Poll{} = interaction) do
Polls.set_enabled(interaction.id)
end
defp set_enabled(%Forms.Form{} = interaction) do
Forms.set_enabled(interaction.id)
end
defp set_enabled(%Embeds.Embed{} = interaction) do
Embeds.set_enabled(interaction.id)
end
defp set_enabled(%Quizzes.Quiz{} = interaction) do
Quizzes.set_enabled(interaction.id)
end
def disable_interaction(%Polls.Poll{} = interaction) do
Polls.set_disabled(interaction.id)
end
def disable_interaction(%Forms.Form{} = interaction) do
Forms.set_disabled(interaction.id)
end
def disable_interaction(%Embeds.Embed{} = interaction) do
Embeds.set_disabled(interaction.id)
end
def disable_interaction(%Quizzes.Quiz{} = interaction) do
Quizzes.set_disabled(interaction.id)
end
end