@@ -7,7 +7,6 @@ defmodule Codebattle.Tournament.Base do
77 alias Codebattle.Event
88 alias Codebattle.Game
99 alias Codebattle.Tournament
10- alias Codebattle.UserEvent
1110 alias Codebattle.UserGameReport
1211
1312 @ callback build_round_pairs ( Tournament . t ( ) ) :: { Tournament . t ( ) , list ( list ( pos_integer ( ) ) ) }
@@ -1328,96 +1327,13 @@ defmodule Codebattle.Tournament.Base do
13281327 tournament
13291328 end
13301329
1331- defp maybe_save_event_results ( % { event_id: event_id } = tournament ) when not is_nil ( event_id ) do
1332- event = Event . get! ( event_id )
1333- event_stage = find_event_stage_for_tournament ( event , tournament )
1334-
1335- has_group_tournament =
1336- match? ( % { group_tournament_meta: meta } when is_map ( meta ) and map_size ( meta ) > 0 , event_stage )
1337-
1338- if ! has_group_tournament do
1339- tournament
1340- |> get_players ( )
1341- |> Enum . reject ( & & 1 . is_bot )
1342- |> Enum . each ( fn player ->
1343- UserEvent . mark_stage_as_completed ( event_id , player . id , % {
1344- id: tournament . id ,
1345- wins_count: player . wins_count ,
1346- games_count: get_players_total_games_count ( tournament , player ) ,
1347- time_spent_in_seconds:
1348- tournament
1349- |> get_matches ( player . matches_ids )
1350- |> Enum . map ( & ( & 1 . duration_sec || 0 ) )
1351- |> Enum . sum ( )
1352- } )
1353- end )
1354- end
1355-
1356- maybe_create_group_tournament ( tournament , event , event_stage )
1330+ defp maybe_save_event_results ( % { event_id: _event_id } = tournament ) do
1331+ Codebattle.UserEvent.Stage.Context . save_tournament_results_async ( tournament . id )
1332+ tournament
13571333 end
13581334
13591335 defp maybe_save_event_results ( t ) , do: t
13601336
1361- defp maybe_create_group_tournament ( tournament , _event , % { group_tournament_meta: meta } )
1362- when is_map ( meta ) and map_size ( meta ) > 0 do
1363- create_group_tournament_for_stage ( tournament , meta )
1364- end
1365-
1366- defp maybe_create_group_tournament ( tournament , _event , _stage ) , do: tournament
1367-
1368- defp find_event_stage_for_tournament ( event , tournament ) do
1369- # For global tournaments, the event stage has tournament_id set
1370- stage = Enum . find ( event . stages , & ( & 1 . tournament_id == tournament . id ) )
1371-
1372- if stage , do: stage , else: find_event_stage_by_slug ( event , tournament )
1373- end
1374-
1375- defp find_event_stage_by_slug ( event , tournament ) do
1376- # For single play tournaments, find via user_event_stage
1377- case find_stage_slug_from_user_event ( tournament ) do
1378- nil -> nil
1379- slug -> Event . get_stage ( event , slug )
1380- end
1381- end
1382-
1383- defp find_stage_slug_from_user_event ( tournament ) do
1384- import Ecto.Query , only: [ where: 3 , select: 3 , limit: 2 ]
1385-
1386- Codebattle.UserEvent.Stage
1387- |> where ( [ s ] , s . tournament_id == ^ tournament . id )
1388- |> select ( [ s ] , s . slug )
1389- |> limit ( 1 )
1390- |> Codebattle.Repo . one ( )
1391- end
1392-
1393- defp create_group_tournament_for_stage ( tournament , meta ) do
1394- attrs = % {
1395- creator_id: tournament . creator_id ,
1396- group_task_id: meta [ :group_task_id ] ,
1397- name: meta [ :name ] || "#{ tournament . name } - Review" ,
1398- slug: meta [ :slug ] || "event-#{ tournament . event_id } -t-#{ tournament . id } " ,
1399- description: meta [ :description ] || tournament . description ,
1400- starts_at: DateTime . utc_now ( ) ,
1401- rounds_count: meta [ :rounds_count ] || 1 ,
1402- round_timeout_seconds: meta [ :round_timeout_seconds ] || 3600 ,
1403- run_on_external_platform: meta [ :run_on_external_platform ] || false ,
1404- template_id: meta [ :template_id ]
1405- }
1406-
1407- case Codebattle.GroupTournament.Context . create_group_tournament ( attrs ) do
1408- { :ok , group_tournament } ->
1409- Tournament.Context . update ( tournament , % {
1410- "group_tournament_id" => group_tournament . id
1411- } )
1412-
1413- update_struct ( tournament , % { group_tournament_id: group_tournament . id } )
1414-
1415- { :error , reason } ->
1416- Logger . error ( "Failed to create group tournament: #{ inspect ( reason ) } " )
1417- tournament
1418- end
1419- end
1420-
14211337 defp maybe_activate_players ( % { current_round_position: 0 } = t ) , do: t
14221338
14231339 defp maybe_activate_players ( t ) , do: t
0 commit comments