Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

Case Study One

notebooks/case_study_1.livemd

Case Study One

Preface

alias Nomify.Accounts
alias Nomify.Documents
alias Nomify.Teams

import Nomify.Result

Team member without nominate privileges nominates a document

scope = Accounts.test_scope()
team_member_1 = Teams.test_team_member_no_nominate(scope)
document = Documents.test_document(scope)

{:error, changeset} = Documents.nominate_document(scope, document, team_member_1)

errors_on(changeset).business_rule

Team members with nominate privileges nominates and publishes a document

delay = 3

scope = Accounts.test_scope()
document = Documents.test_document_secret(scope)

team_member_2 = Teams.test_team_member_secret(scope)

{:ok, nomination} = Documents.nominate_document(scope, document, team_member_2)
{:ok, nomination} = Documents.update_nomination(scope, nomination, %{status: :in_review})
{:ok, _nomination} = Documents.update_nomination(scope, nomination, %{status: :rejected})

Process.sleep(delay * 1000)

team_member_3 = Teams.test_team_member_secret(scope)

{:ok, nomination} = Documents.nominate_document(scope, document, team_member_3)
{:ok, nomination} = Documents.update_nomination(scope, nomination, %{status: :in_review})
{:ok, _nomination} = Documents.update_nomination(scope, nomination, %{status: :rejected})

Process.sleep(delay * 1000)

{:ok, nomination} = Documents.nominate_document(scope, document, team_member_2)
{:ok, nomination} = Documents.update_nomination(scope, nomination, %{status: :in_review})
{:ok, _nomination} = Documents.update_nomination(scope, nomination, %{status: :approved})

document
|> Documents.list_nominations_by_document()
|> Enum.join("\n")
|> IO.puts

team_member_2_nominations_per_days =
  Teams.count_team_member_nominations_per_period(team_member_2)

team_member_1_nominations_per_days =
   Teams.count_team_member_nominations_per_period(team_member_1)

IO.puts("๐ŸŽ‰ Noms per days #2 : #{team_member_2_nominations_per_days}")
IO.puts("๐ŸŽ‰ Noms per days #1 : #{team_member_1_nominations_per_days}")