
    zi                        S SK Jr  S SKrS SKrS SKJr  S SKJr  S SKJ	r	  Sr
\ " S S5      5       r " S	 S
5      r\" 5       rg)    )annotationsN)	dataclass)RLock)Optionali  c                  >    \ rS rSr% S\S'   S\S'   S\S'   S\S'   Srg	)
SessionRecord   str
session_idparticipant_idroom_idfloat
expires_at N)__name__
__module____qualname____firstlineno____annotations____static_attributes__r       PC:\Users\jasmi\Projects\line-hihaho-voting\backend\app\services\session_store.pyr   r      s    OLr   r   c                  b    \ rS rSr\4S	S jjrS
S jrSS jr  S       SS jjrSS jr	Sr
g)SessionStore   c                <    Xl         0 U l        [        5       U l        g N)_ttl_seconds_recordsr   _lock)selfttl_secondss     r   __init__SessionStore.__init__   s    '24W
r   c                ,    [         R                   " 5       $ r   )time)r!   s    r   _nowSessionStore._now   s    yy{r   c                    U R                  5       nU R                  R                  5        VVs/ sH  u  p#UR                  U::  d  M  UPM     nnnU H  nU R                  R	                  US 5        M!     g s  snnf r   )r'   r   itemsr   pop)r!   nowsidrecexpireds        r   _purge_expired_locked"SessionStore._purge_expired_locked   sb    iik'+}}':':'<V'<83RU@U3'<VCMMc4(  Ws   A6A6Nc                6   U R                      U R                  5         U(       am  U R                  R                  U5      nU(       aK  UR                  U:X  a;  U R                  5       U R                  -   Ul        X@R                  U'   UsS S S 5        $ [        R                  " S5      nU=(       d    S[        R                  " S5       3n[        UUUU R                  5       U R                  -   S9nXpR                  U'   UsS S S 5        $ ! , (       d  f       g = f)N   zp-   )r   r   r   r   )r    r0   r   getr   r'   r   r   secretstoken_urlsafe	token_hexr   )r!   r   r   r   existingnew_session_idnew_participant_idr.   s           r   create_or_reuseSessionStore.create_or_reuse$   s     ZZ&&(==,,Z8 0 0G ;*.))+8I8I*IH'08MM*-# Z %2226N!/!NR8I8I!8L7M3N)199;):)::	C -0MM.)% ZZs   A;D
A.D


Dc                <   U(       d  g U R                      U R                  5         U R                  R                  U5      nU(       d
   S S S 5        g U R	                  5       U R
                  -   Ul        X R                  U'   UsS S S 5        $ ! , (       d  f       g = fr   )r    r0   r   r5   r'   r   r   )r!   r   r.   s      r   r5   SessionStore.get>   so    ZZ&&(--##J/C	 Z
 "YY[4+<+<<CN(+MM*% ZZs   4B1B
B)r    r   r   )r"   int)returnr   )rA   None)NN)r   r
   r   Optional[str]r   rC   rA   r   )r   rC   rA   zOptional[SessionRecord])r   r   r   r   DEFAULT_TTL_SECONDSr#   r'   r0   r<   r5   r   r   r   r   r   r      sL    *= 
) %)(,	 " &	
 
4
r   r   )
__future__r   r6   r&   dataclassesr   	threadingr   typingr   rD   r   r   session_storer   r   r   <module>rJ      sL    "   !   #    3 3l r   