a
    Pi                     @   s   d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZmZ d dlmZ d d	lmZ d d
lmZ edgdZeedddZededddZededddZdS )    N)	APIRouterStreamingResponse)desc)select)async_session_factory)Poll
PollStatuspoll_out)participants)votingstream)tags)room_idreturnc              
      s  t  4 I d H t}|tttj| kttjI d H }t	|
 }dd |D }tdd |D d ptdd |D d ptdd |D d }t|| I d H }t|| I d H }|s| | ||dd |d d dW  d   I d H  S t||jI d H }t|}	|	D ]}
||
d	 qt||	\}}t|}| | ||dt|||t| ||d
|ddW  d   I d H  S 1 I d H s0    Y  d S )Nc                 S   s   g | ]}t |qS  r
   .0pr   r   HC:\Users\jasmi\Projects\line-hihaho-voting\backend\app\routers\stream.py
<listcomp>       z'build_room_snapshot.<locals>.<listcomp>c                 s   s   | ]}|j tjkr|V  qd S N)statusr	   openr   r   r   r   	<genexpr>   r   z&build_room_snapshot.<locals>.<genexpr>c                 s   s   | ]}|j tjkr|V  qd S r   )r   r	   closedr   r   r   r   r      r   c                 s   s   | ]}|j tjkr|V  qd S r   )r   r	   draftr   r   r   r   r      r   )idparticipant_countactive_session_count)r   roompollpollsstatsZ
controllerr   )countstotalleadertiecontroller_command)r   execr   r   wherer   order_byr   
created_atlistallnextparticipants_svccount_room_active_participantscount_room_sessions
voting_svccompute_tallyr   parse_options
setdefaultpick_winnerparse_poll_runtimer   sumvaluesget)r   sessionresultrowsZ	all_pollstargetr    r!   tallyoptsor(   r)   runtimer   r   r   build_room_snapshot   sX    



rF   z/stream/room/{room_id}r   c                    s    fdd}t | ddS )Nc                    s<   t  I d H } dtj| td dV  tdI d H  q d S )Nzdata: )defaultz

   )rF   jsondumpsstrasynciosleep)snaprG   r   r   	event_genI   s    zstream_room.<locals>.event_genztext/event-stream)
media_typer   )r   rP   r   rG   r   stream_roomF   s    rR   z/rooms/{room_id}/snapshotc                    s   t | I d H S r   )rF   rG   r   r   r   get_room_snapshotR   s    rS   )rM   rJ   fastapir   fastapi.responsesr   
sqlalchemyr   sqlmodelr   app.dbr   app.models.entitiesr   r	   app.routers.pollsr   app.servicesr   r2   r   r5   routerrL   dictrF   r=   rR   rS   r   r   r   r   <module>   s    4