@@ -5,6 +5,8 @@ defmodule Algora.Accounts do
55
66 alias Algora.Accounts.Identity
77 alias Algora.Accounts.User
8+ alias Algora.Bounties.Bounty
9+ alias Algora.Organizations
810 alias Algora.Payments.Transaction
911 alias Algora.Repo
1012
@@ -367,6 +369,42 @@ defmodule Algora.Accounts do
367369 { :ok , Repo . preload ( user , :identities , force: true ) }
368370 end
369371
372+ def last_context ( % { last_context: nil } = user ) do
373+ orgs = Organizations . get_user_orgs ( user )
374+
375+ last_debit_query =
376+ from ( t in Transaction ,
377+ join: u in assoc ( t , :user ) ,
378+ where: t . type == :debit ,
379+ where: u . id in ^ Enum . map ( orgs , & & 1 . id ) ,
380+ order_by: [ desc: t . succeeded_at ] ,
381+ limit: 1
382+ )
383+
384+ last_bounty_query =
385+ from ( b in Bounty ,
386+ join: c in assoc ( b , :creator ) ,
387+ where: c . id in ^ Enum . map ( orgs , & & 1 . id ) ,
388+ order_by: [ desc: b . created_at ] ,
389+ limit: 1
390+ )
391+
392+ cond do
393+ last_debit = Repo . one ( last_debit_query ) ->
394+ last_debit . user . handle
395+
396+ last_bounty = Repo . one ( last_bounty_query ) ->
397+ last_bounty . owner . handle
398+
399+ true ->
400+ default_context ( )
401+ end
402+ end
403+
404+ def last_context ( % { last_context: last_context } ) , do: last_context
405+
406+ def default_context , do: "personal"
407+
370408 defp get_flag ( user ) , do: Algora.Misc.CountryEmojis . get ( user . country , "🌎" )
371409
372410 # TODO: implement this
0 commit comments