2020from ttt .entities .core .stars import Stars
2121from ttt .entities .core .user .location import UserGameLocation
2222from ttt .entities .core .user .user import User , is_user_in_game , user_stars
23+ from ttt .entities .tools .assertion import not_none
2324from ttt .infrastructure .sqlalchemy .stmts import (
2425 selected_user_emoji_str_from_postgres ,
2526 user_emojis_from_postgres ,
2627)
28+ from ttt .infrastructure .sqlalchemy .tables .game import TableGame
2729from ttt .infrastructure .sqlalchemy .tables .invitation_to_game import (
2830 TableInvitationToGame ,
2931 TableInvitationToGameState ,
@@ -80,13 +82,7 @@ async def view_of_user_with_id(
8082 / ,
8183 ) -> None :
8284 user_stmt = (
83- select (
84- TableUser .number_of_wins ,
85- TableUser .number_of_draws ,
86- TableUser .number_of_defeats ,
87- TableUser .account_stars ,
88- TableUser .rating ,
89- )
85+ select (TableUser .account_stars , TableUser .rating )
9086 .where (TableUser .id == user_id )
9187 )
9288 result = await self ._session .execute (user_stmt )
@@ -96,10 +92,31 @@ async def view_of_user_with_id(
9692 await need_to_start_message (self ._bot , user_id )
9793 return
9894
95+ wins_stmt = (
96+ select (func .count (1 ))
97+ .where (TableGame .result_decided_game_user_win_user_id == user_id )
98+ )
99+ wins = not_none (await self ._session .scalar (wins_stmt ))
100+
101+ draws_stmt = (
102+ select (func .count (1 ))
103+ .where (
104+ (TableGame .result_draw_game_user_draw1_user_id == user_id )
105+ | (TableGame .result_draw_game_user_draw2_user_id == user_id ),
106+ )
107+ )
108+ draws = not_none (await self ._session .scalar (draws_stmt ))
109+
110+ defeats_stmt = (
111+ select (func .count (1 ))
112+ .where (TableGame .result_decided_game_user_loss_user_id == user_id )
113+ )
114+ defeats = not_none (await self ._session .scalar (defeats_stmt ))
115+
99116 view = UserProfileView .of (
100- user_row . number_of_wins ,
101- user_row . number_of_draws ,
102- user_row . number_of_defeats ,
117+ wins ,
118+ draws ,
119+ defeats ,
103120 user_row .account_stars ,
104121 user_row .rating ,
105122 )
@@ -326,9 +343,6 @@ async def user_is_not_admin_view(self, user: User, /) -> None:
326343 async def other_user_view (self , user : User , other_user_id : int , / ) -> None :
327344 stmt = (
328345 select (
329- TableUser .number_of_wins ,
330- TableUser .number_of_draws ,
331- TableUser .number_of_defeats ,
332346 TableUser .account_stars ,
333347 TableUser .rating ,
334348 TableUser .admin_right ,
@@ -349,6 +363,22 @@ async def other_user_view(self, user: User, other_user_id: int, /) -> None:
349363 )
350364 return
351365
366+ wins_stmt = select (func .count (1 )).where (
367+ TableGame .result_decided_game_user_win_user_id == other_user_id ,
368+ )
369+ wins = not_none (await self ._session .scalar (wins_stmt ))
370+
371+ draws_stmt = select (func .count (1 )).where (
372+ (TableGame .result_draw_game_user_draw1_user_id == other_user_id )
373+ | (TableGame .result_draw_game_user_draw2_user_id == other_user_id ),
374+ )
375+ draws = not_none (await self ._session .scalar (draws_stmt ))
376+
377+ defeats_stmt = select (func .count (1 )).where (
378+ TableGame .result_decided_game_user_loss_user_id == other_user_id ,
379+ )
380+ defeats = not_none (await self ._session .scalar (defeats_stmt ))
381+
352382 if row .admin_right is None :
353383 admin_right = None
354384 else :
@@ -359,9 +389,9 @@ async def other_user_view(self, user: User, other_user_id: int, /) -> None:
359389 view = OtherUserProfileView .of (
360390 other_user_id ,
361391 admin_right ,
362- row . number_of_wins ,
363- row . number_of_draws ,
364- row . number_of_defeats ,
392+ wins ,
393+ draws ,
394+ defeats ,
365395 row .account_stars ,
366396 row .rating ,
367397 )
0 commit comments