
    љi;|                         S SK r S SKrS SKJrJrJr  S SKJrJrJrJ	r	J
r
Jr  S SKJr  S SKrSSKJrJrJr  SSKJrJrJrJrJr   " S	 S
\5      r " S S\5      r " S S\5      rg)    N)datetimetimezonedate)ListDictAnyOptionalCallable	Awaitable)uuid4   )CharacterRepositoryBaseActivityRepositoryBaseUserRepository   )	CharacterWeeklyScheduleDailyScheduleDiaryUserc                   r   \ rS rSrSrSSSSSSSSS	S
.	S\/ \\R                     4   S\	S\
S\	S\	S\	S\	S\
S\
4S jjrS\R                  4S jrS\R                  SS4S jrSS.S\	S\	S\\\	\4      S\4S jjrS\	S\\   4S jrSSSS .S\	S\\	   S\\	   S\\\	\4      S\\   4
S! jjrS\	S\4S" jrS#rg)$PostgreSQLCharacterRepository   
charactersN	localhost8  aiavatarpostgresr      	get_poolhostportdbnameuserpasswordconnection_strdb_pool_min_sizedb_pool_max_sizer!   r"   r#   r$   r%   r&   r'   r(   r)   c       	             Xl         X l        X0l        X@l        XPl        X`l        Xpl        Xl        Xl        S U l	        [        R                  " 5       U l        SU l        g NF_get_pool_funcr"   r#   r$   r%   r&   r'   r(   r)   _poolasyncioLock
_pool_lock_db_initialized
selfr!   r"   r#   r$   r%   r&   r'   r(   r)   s
             `/home/james-whalen/.local/lib/python3.13/site-packages/aiavatar/character/repository/postgres.py__init__&PostgreSQLCharacterRepository.__init__   Q     '			 , 0 0#'
!,,.$    returnc                   #    U R                   b  U R                  5       I S h  vN nU R                  (       dX  U R                   IS h  vN   U R                  (       d   U R                  U5      I S h  vN   SU l        S S S 5      IS h  vN   U$ U$ U R                  b  U R                  $ U R                   IS h  vN   U R                  b  U R                  sS S S 5      IS h  vN   $ U R
                  (       aB  [        R                  " U R
                  U R                  U R                  S9I S h  vN U l        Om[        R                  " U R                  U R                  U R                  U R                  U R                  U R                  U R                  S9I S h  vN U l        U R                  U R                  5      I S h  vN   SU l        S S S 5      IS h  vN   U R                  $  GN GN GN GNp! , IS h  vN  (       d  f       U$ = f GN\ GN6 N N~ NX NC! , IS h  vN  (       d  f       U R                  $ = f7fNT)dsnmin_sizemax_size)r"   r#   databaser%   r&   r>   r?   r-   r2   r1   init_dbr.   r'   asyncpgcreate_poolr(   r)   r"   r#   r$   r%   r&   r4   pools     r5   r!   &PostgreSQLCharacterRepository.get_pool(       *,,..D''???//"ll4000/3, +? K4K ::!::???zz%zz #?? ""#*#6#6++!22!22$ 
 $+#6#6![[!]]!22!22$ 
 ,,tzz***#'D + #?. zzG /*0 +??? K #
 +) #??. zz  !IG1%I	G4
I&G=3G74G=?I
G:1I<H=I H&I%H&I+AH&3H4A-H&!H "'H&	H"
H&I H$!I4I7G=:I=HHH	IIH& H&"H&$I&I,H/-I9IrF   c                    #    UR                  5        IS h  vN nUR                  SU R                   S35      I S h  vN   S S S 5      IS h  vN   g  N< N N	! , IS h  vN  (       d  f       g = f7f)N,
                CREATE TABLE IF NOT EXISTS aC   (
                    id TEXT PRIMARY KEY,
                    created_at TIMESTAMPTZ NOT NULL,
                    updated_at TIMESTAMPTZ NOT NULL,
                    name TEXT NOT NULL,
                    prompt TEXT NOT NULL,
                    metadata JSONB NOT NULL DEFAULT '{}'
                )
                acquireexecute
TABLE_NAMEr4   rF   conns      r5   rB   %PostgreSQLCharacterRepository.init_dbP   sZ     <<>>T,,,,0OO+< =	   ">> ">>>T   A4AA4#AAAA4AA4AA4A1 A#!A1-A4metadatanamepromptrU   c          
        #    [         R                  " [        R                  5      n[	        [        5       5      n[        R                  " U=(       d    0 5      nU R                  5       I S h  vN nUR                  5        IS h  vN nUR                  SU R                   S3XTXAX&5      I S h  vN   S S S 5      IS h  vN   [        UUUUUUS9$  Ne NN N& N! , IS h  vN  (       d  f       N-= f7f)N
                INSERT INTO zv (id, created_at, updated_at, name, prompt, metadata)
                VALUES ($1, $2, $3, $4, $5, $6)
                id
created_at
updated_atrV   rW   rU   )r   nowr   utcstrr   jsondumpsr!   rM   rN   rO   r   )	r4   rV   rW   rU   r^   character_idmetadata_jsonrF   rQ   s	            r5   create$PostgreSQLCharacterRepository.create_   s      ll8<<(57|

8>r2]]_$<<>>T,,!__- . 3f   "> 
 	
 %! ">>>sl   A*C4,C-C4CC4	&C/C0C4C4?C C4C4CC4C1 C#!C1-C4rc   c          	        #    U R                  5       I S h  vN nUR                  5        IS h  vN nUR                  SU R                   S3U5      I S h  vN nS S S 5      IS h  vN   Wc  g US   n[	        U[
        5      (       a  [        R                  " U5      n[        US   US   US   US   US   US	9$  N N Ni N[! , IS h  vN  (       d  f       Np= f7f)
Nz`
                SELECT id, created_at, updated_at, name, prompt, metadata
                FROM /
                WHERE id = $1
                rU   r[   r\   r]   rV   rW   rZ   )	r!   rM   fetchrowrO   
isinstancer`   ra   loadsr   )r4   rc   rF   rQ   rowrU   s         r5   get!PostgreSQLCharacterRepository.get}   s     ]]_$<<>>Too& '
  C "> ;z?h$$zz(+H4y<(<(Vx=
 	
% %! ">>>sg   CB=CB?C$CCCC'C(AC?CCCCCCC)rV   rW   rU   c          	        #    [         R                  " [        R                  5      nS/nU/nSnUb*  UR	                  SU 35        UR	                  U5        US-  nUb*  UR	                  SU 35        UR	                  U5        US-  nUb>  UR	                  SU 35        UR	                  [
        R                  " U5      5        US-  nUR	                  U5        SU R                   SS	R                  U5       S
U S3n	U R                  5       I S h  vN n
U
R                  5        IS h  vN nUR                  " U	/UQ76 I S h  vN nS S S 5      IS h  vN   Wc  g US   n[        U[        5      (       a  [
        R                  " U5      n[        US   US   US   US   US   US9$  N N Ni N[! , IS h  vN  (       d  f       Np= f7f)Nupdated_at = $1r   name = $r   z
prompt = $metadata = $
            UPDATE 
            SET , 
            WHERE id = $zR
            RETURNING id, created_at, updated_at, name, prompt, metadata
        rU   r[   r\   r]   rV   rW   rZ   )r   r^   r   r_   appendra   rb   rO   joinr!   rM   ri   rj   r`   rk   r   )r4   rc   rV   rW   rU   r^   updatesparams	param_idxqueryrF   rQ   rl   row_metadatas                 r5   update$PostgreSQLCharacterRepository.update   s     ll8<<($% E	NNXi[12MM$NINNZ	{34MM&!NINN\)56MM$**X./NIl#OO$ %7#$ %" $	 ]]_$<<>>Te5f55C "> ;:lC((::l3L4y<(<(Vx=!
 	
 %!5 ">>>sm   DGF-G,F/-G0F5F1F5GF3AG/G1F53G5G;F><GGc                2  #    U R                  5       I S h  vN nUR                  5        IS h  vN nUR                  SU R                   S3U5      I S h  vN nS S S 5      IS h  vN   US:H  $  NZ NC N N! , IS h  vN  (       d  f       WS:H  $ = f7fN
                DELETE FROM rh   DELETE 1r!   rM   rN   rO   r4   rc   rF   rQ   results        r5   delete$PostgreSQLCharacterRepository.delete   s     ]]_$<<>>T<<!__- .  F "> ## %! ">> ##f   BA1BA3B$A9A5A9B'A7(
B3B5A97B9B?B BBr2   r-   r.   r1   r'   r)   r(   r$   r"   r&   r#   r%   )__name__
__module____qualname____firstlineno__rO   r
   r   rC   Poolr`   intr6   r!   rB   r	   r   r   r   re   rm   r~   boolr   __static_attributes__ r9   r5   r   r      s   J
 ;? " ! !% 2y667% 	%
 % % % % % % %4& &P',, 4 ( .2
 
 	

 4S>*
 

<
 
)1D 
@ # $-18
 8
 sm	8

 8
 4S>*8
 
)	8
t$C $D $r9   r   c                      \ rS rSrSrSrSrSSSSS	SSS
SS.	S\/ \\	R                     4   S\S\S\S\S\S\S\S\4S jjrS\	R                  4S jrS\	R                  SS4S jrS\S\S\4S jrS\S\\   4S jrS\S\S\\   4S jrS\S\4S  jrSS!.S\S"\S\S#\\\\4      S\4
S$ jjrS\S"\S\\   4S% jrS\S"\S\S\\   4S& jrS\S'\S(\S\\   4S) jrS\S"\S\4S* jrSS!.S\S+\S\S#\\\\4      S\ 4
S, jjr!S\S+\S\\    4S- jr"SSS..S\S+\S\\   S#\\\\4      S\\    4
S/ jjr#S\S'\S(\S\\    4S0 jr$S\S+\S\4S1 jr%S2r&g)3PostgreSQLActivityRepository   weekly_schedulesdaily_schedulesdiariesNr   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   c       	             Xl         X l        X0l        X@l        XPl        X`l        Xpl        Xl        Xl        S U l	        [        R                  " 5       U l        SU l        g r+   r,   r3   s
             r5   r6   %PostgreSQLActivityRepository.__init__   r8   r9   r:   c                   #    U R                   b  U R                  5       I S h  vN nU R                  (       dX  U R                   IS h  vN   U R                  (       d   U R                  U5      I S h  vN   SU l        S S S 5      IS h  vN   U$ U$ U R                  b  U R                  $ U R                   IS h  vN   U R                  b  U R                  sS S S 5      IS h  vN   $ U R
                  (       aB  [        R                  " U R
                  U R                  U R                  S9I S h  vN U l        Om[        R                  " U R                  U R                  U R                  U R                  U R                  U R                  U R                  S9I S h  vN U l        U R                  U R                  5      I S h  vN   SU l        S S S 5      IS h  vN   U R                  $  GN GN GN GNp! , IS h  vN  (       d  f       U$ = f GN\ GN6 N N~ NX NC! , IS h  vN  (       d  f       U R                  $ = f7fr<   rA   rE   s     r5   r!   %PostgreSQLActivityRepository.get_pool   rH   rI   rF   c                   #    UR                  5        IS h  vN nUR                  SU R                   S35      I S h  vN   UR                  SU R                   S35      I S h  vN   UR                  SU R                   S35      I S h  vN   S S S 5      IS h  vN   g  N Ne N@ N N! , IS h  vN  (       d  f       g = f7f)NrK   a   (
                    id TEXT PRIMARY KEY,
                    created_at TIMESTAMPTZ NOT NULL,
                    updated_at TIMESTAMPTZ NOT NULL,
                    character_id TEXT NOT NULL UNIQUE,
                    content TEXT NOT NULL
                )
                a   (
                    id TEXT PRIMARY KEY,
                    created_at TIMESTAMPTZ NOT NULL,
                    updated_at TIMESTAMPTZ NOT NULL,
                    character_id TEXT NOT NULL,
                    schedule_date DATE NOT NULL,
                    content TEXT NOT NULL,
                    content_context JSONB NOT NULL DEFAULT '{}',
                    UNIQUE (character_id, schedule_date)
                )
                a   (
                    id TEXT PRIMARY KEY,
                    created_at TIMESTAMPTZ NOT NULL,
                    updated_at TIMESTAMPTZ NOT NULL,
                    character_id TEXT NOT NULL,
                    diary_date DATE NOT NULL,
                    content TEXT NOT NULL,
                    content_context JSONB NOT NULL DEFAULT '{}',
                    UNIQUE (character_id, diary_date)
                )
                )rM   rN   WEEKLY_SCHEDULES_TABLEDAILY_SCHEDULES_TABLEDIARIES_TABLErP   s      r5   rB   $PostgreSQLActivityRepository.init_db(  s     <<>>T,,,,0,G,G+H I
 
 
 ,,,,0,F,F+G 
H   ,,,,0,>,>+? 
@  5 ">>
5 ">>>sx   CB"C#B,B$&B,%B&&&B,B(B,CB*C$B,&B,(B,*C,C2B53C?Crc   contentc          	        #    [         R                  " [        R                  5      n[	        [        5       5      nU R                  5       I S h  vN nUR                  5        IS h  vN nUR                  SU R                   S3XCX1U5      I S h  vN   S S S 5      IS h  vN   [        UUUUUS9$  Nd NM N% N! , IS h  vN  (       d  f       N,= f7f)NrY   zq (id, created_at, updated_at, character_id, content)
                VALUES ($1, $2, $3, $4, $5)
                r[   r\   r]   rc   r   )r   r^   r   r_   r`   r   r!   rM   rN   r   r   )r4   rc   r   r^   schedule_idrF   rQ   s          r5   create_weekly_schedule3PostgreSQLActivityRepository.create_weekly_scheduleT  s      ll8<<(%'l]]_$<<>>T,,!889 : #W   "> %
 	
 %! ">>>sl   ACB2C&B4'C*&B:B6B:C B8!C4C6B:8C:C CCCc                `  #    U R                  5       I S h  vN nUR                  5        IS h  vN nUR                  SU R                   S3U5      I S h  vN nS S S 5      IS h  vN   Wc  g [	        US   US   US   US   US   S9$  Nu N^ N8 N*! , IS h  vN  (       d  f       N?= f7f)	Nz_
                SELECT id, created_at, updated_at, character_id, content
                FROM 9
                WHERE character_id = $1
                r[   r\   r]   rc   r   r   )r!   rM   ri   r   r   )r4   rc   rF   rQ   rl   s        r5   get_weekly_schedule0PostgreSQLActivityRepository.get_weekly_scheduleo  s     ]]_$<<>>T112 3
  C "> ;4y<(<(^,	N
 	
 %! ">>>sf   B.BB.BB.$BBBB.'B(%B.B.BB.B+BB+'B.c                  #    [         R                  " [        R                  5      nU R	                  5       I S h  vN nUR                  5        IS h  vN nUR                  SU R                   S3X#U5      I S h  vN nS S S 5      IS h  vN   Wc  g [        US   US   US   US   US   S9$  Nv N_ N8 N*! , IS h  vN  (       d  f       N?= f7f)	N
                UPDATE z
                SET content = $1, updated_at = $2
                WHERE character_id = $3
                RETURNING id, created_at, updated_at, character_id, content
                r[   r\   r]   rc   r   r   )	r   r^   r   r_   r!   rM   ri   r   r   )r4   rc   r   r^   rF   rQ   rl   s          r5   update_weekly_schedule3PostgreSQLActivityRepository.update_weekly_schedule  s      ll8<<(]]_$<<>>T334 5 l C "> ;4y<(<(^,	N
 	
 %! ">>>si   8CB1CB3C%B9<B5=B9CB7%C3C5B97C9C?C CCc                2  #    U R                  5       I S h  vN nUR                  5        IS h  vN nUR                  SU R                   S3U5      I S h  vN nS S S 5      IS h  vN   US:H  $  NZ NC N N! , IS h  vN  (       d  f       WS:H  $ = f7f)Nr   r   r   )r!   rM   rN   r   r   s        r5   delete_weekly_schedule3PostgreSQLActivityRepository.delete_weekly_schedule  s     ]]_$<<>>T<<!889 :  F "> ## %! ">> ##r   )content_contextschedule_dater   c                  #    [         R                  " [        R                  5      n[	        [        5       5      n[        R                  " U=(       d    0 5      nU R                  5       I S h  vN nUR                  5        IS h  vN n	U	R                  SU R                   S3XeXQX#U5      I S h  vN   S S S 5      IS h  vN   [        UUUUUUUS9$  Ng NP N' N! , IS h  vN  (       d  f       N.= f7f)NrY   z (id, created_at, updated_at, character_id, schedule_date, content, content_context)
                VALUES ($1, $2, $3, $4, $5, $6, $7)
                r[   r\   r]   rc   r   r   r   )r   r^   r   r_   r`   r   ra   rb   r!   rM   rN   r   r   )
r4   rc   r   r   r   r^   r   content_context_jsonrF   rQ   s
             r5   create_daily_schedule2PostgreSQLActivityRepository.create_daily_schedule  s      ll8<<(%'l#zz/*?R@]]_$<<>>T,,!778 9 #]Ma   "> %'+
 	
 %! ">>>sl   A*C6,C-C6CC6	'C0C1C5C6 CC6C6CC6C3"C%#C3/C6c          
        #    U R                  5       I S h  vN nUR                  5        IS h  vN nUR                  SU R                   S3X5      I S h  vN nS S S 5      IS h  vN   Wc  g US   n[	        U[
        5      (       a  [        R                  " U5      n[        US   US   US   US   US   US	   US
9$  N N Nm N_! , IS h  vN  (       d  f       Nt= f7f)N
                SELECT id, created_at, updated_at, character_id, schedule_date, content, content_context
                FROM P
                WHERE character_id = $1 AND schedule_date = $2
                r   r[   r\   r]   rc   r   r   r   )	r!   rM   ri   r   rj   r`   ra   rk   r   )r4   rc   r   rF   rQ   rl   r   s          r5   get_daily_schedule/PostgreSQLActivityRepository.get_daily_schedule  s      ]]_$<<>>T001 2
  C "> ;/0os++"jj9O4y<(<(^,o.	N+
 	
% %! ">>>g   C#CC#CC#$C	CC	C#'C(AC#C#C	C#	C CC C#c          
        #    [         R                  " [        R                  5      nU R	                  5       I S h  vN nUR                  5        IS h  vN nUR                  SU R                   S3X4X5      I S h  vN nS S S 5      IS h  vN   Wc  g US   n[        U[        5      (       a  [        R                  " U5      n[        US   US   US   US   US   US	   US
9$  N N Nm N_! , IS h  vN  (       d  f       Nt= f7f)Nr   z
                SET content = $1, updated_at = $2
                WHERE character_id = $3 AND schedule_date = $4
                RETURNING id, created_at, updated_at, character_id, schedule_date, content, content_context
                r   r[   r\   r]   rc   r   r   r   )r   r^   r   r_   r!   rM   ri   r   rj   r`   ra   rk   r   )	r4   rc   r   r   r^   rF   rQ   rl   r   s	            r5   update_daily_schedule2PostgreSQLActivityRepository.update_daily_schedule  s      ll8<<(]]_$<<>>T223 4 l C "> ;/0os++"jj9O4y<(<(^,o.	N+
 	
' %! ">>>sj   8DC&DC(D%C.<C*=C.DC,AD(D*C.,D.D4C75DD
start_dateend_datec                  #    U R                  5       I S h  vN nUR                  5        IS h  vN nUR                  SU R                   S3XU5      I S h  vN nS S S 5      IS h  vN   / nW Hc  nUS   n	[	        U	[
        5      (       a  [        R                  " U	5      n	UR                  [        US   US   US   US   US   US	   U	S
95        Me     U$  N N N Nw! , IS h  vN  (       d  f       N= f7f)Nr   z
                WHERE character_id = $1 AND schedule_date BETWEEN $2 AND $3
                ORDER BY schedule_date
                r   r[   r\   r]   rc   r   r   r   )
r!   rM   fetchr   rj   r`   ra   rk   rw   r   
r4   rc   r   r   rF   rQ   rowsr   rl   r   s
             r5   list_daily_schedules1PostgreSQLActivityRepository.list_daily_schedules  s      ]]_$<<>>T001 2 ( D "> C!"34O/3//"&**_"=MM-t9|,|, 0!/2I / 	  5 %! ">>>g   C<CC<CC<%C"CC"C<(C )A2C<C<C" C<"C9(C+)C95C<c                2  #    U R                  5       I S h  vN nUR                  5        IS h  vN nUR                  SU R                   S3X5      I S h  vN nS S S 5      IS h  vN   US:H  $  NZ NC N N! , IS h  vN  (       d  f       WS:H  $ = f7f)Nr   r   r   )r!   rM   rN   r   )r4   rc   r   rF   rQ   r   s         r5   delete_daily_schedule2PostgreSQLActivityRepository.delete_daily_schedule?  s      ]]_$<<>>T<<!778 9  F "> ## %! ">> ##r   
diary_datec                  #    [         R                  " [        R                  5      n[	        [        5       5      n[        R                  " U=(       d    0 5      nU R                  5       I S h  vN nUR                  5        IS h  vN n	U	R                  SU R                   S3XeXQX#U5      I S h  vN   S S S 5      IS h  vN   [        UUUUUUU=(       d    0 S9$  Np NY N0 N"! , IS h  vN  (       d  f       N7= f7f)NrY   z (id, created_at, updated_at, character_id, diary_date, content, content_context)
                VALUES ($1, $2, $3, $4, $5, $6, $7)
                r[   r\   r]   rc   r   r   r   )r   r^   r   r_   r`   r   ra   rb   r!   rM   rN   r   r   )
r4   rc   r   r   r   r^   diary_idr   rF   rQ   s
             r5   create_diary)PostgreSQLActivityRepository.create_diaryS  s      ll8<<(uw<#zz/*?R@]]_$<<>>T,,!//0 1 s*G[   "> %!+1r
 	
 %! ">>>sl   A*C?,C-C?CC?	'C%0C!1C%5C? C#C?C?!C%#C?%C<+C.,C<8C?c          
        #    U R                  5       I S h  vN nUR                  5        IS h  vN nUR                  SU R                   S3X5      I S h  vN nS S S 5      IS h  vN   Wc  g US   n[	        U[
        5      (       a  [        R                  " U5      n[        US   US   US   US   US   US	   US
9$  N N Nm N_! , IS h  vN  (       d  f       Nt= f7f)N|
                SELECT id, created_at, updated_at, character_id, diary_date, content, content_context
                FROM M
                WHERE character_id = $1 AND diary_date = $2
                r   r[   r\   r]   rc   r   r   r   )	r!   rM   ri   r   rj   r`   ra   rk   r   )r4   rc   r   rF   rQ   rl   r   s          r5   	get_diary&PostgreSQLActivityRepository.get_diarys  s      ]]_$<<>>T(() *
  C "> ;/0os++"jj9O4y<(<(^,<(	N+
 	
% %! ">>>r   )r   r   c          
      ~  #    [         R                  " [        R                  5      nS/nU/nSnUb*  UR	                  SU 35        UR	                  U5        US-  nUb>  UR	                  SU 35        UR	                  [
        R                  " U5      5        US-  nUR	                  U5        UR	                  U5        SU R                   SSR                  U5       S	U S
US-    S3	n	U R                  5       I S h  vN n
U
R                  5        IS h  vN nUR                  " U	/UQ76 I S h  vN nS S S 5      IS h  vN   Wc  g US   n[        U[        5      (       a  [
        R                  " U5      n[        US   US   US   US   US   US   US9$  N N Nm N_! , IS h  vN  (       d  f       Nt= f7f)Nrp   r   zcontent = $r   zcontent_context = $rs   rt   ru   z#
            WHERE character_id = $z AND diary_date = $zn
            RETURNING id, created_at, updated_at, character_id, diary_date, content, content_context
        r   r[   r\   r]   rc   r   r   r   )r   r^   r   r_   rw   ra   rb   r   rx   r!   rM   ri   rj   r`   rk   r   )r4   rc   r   r   r   r^   ry   rz   r{   r|   rF   rQ   rl   row_content_contexts                 r5   update_diary)PostgreSQLActivityRepository.update_diary  s     ll8<<($% E	NN[45MM'"NI&NN0<=MM$**_56NIl#j!&&' (7#$ %##,+-@Q P	 ]]_$<<>>Te5f55C "> ;!"34)3//"&**-@"A4y<(<(^,<(	N/
 	
 %!5 ">>>sm   C;F==F>F=FF=F#1F2F#6F=F!AF=F=F#!F=#F:)F,*F:6F=c                  #    U R                  5       I S h  vN nUR                  5        IS h  vN nUR                  SU R                   S3XU5      I S h  vN nS S S 5      IS h  vN   / nW Hc  nUS   n	[	        U	[
        5      (       a  [        R                  " U	5      n	UR                  [        US   US   US   US   US   US	   U	S
95        Me     U$  N N N Nw! , IS h  vN  (       d  f       N= f7f)Nr   z~
                WHERE character_id = $1 AND diary_date BETWEEN $2 AND $3
                ORDER BY diary_date
                r   r[   r\   r]   rc   r   r   r   )
r!   rM   r   r   rj   r`   ra   rk   rw   r   r   s
             r5   list_diaries)PostgreSQLActivityRepository.list_diaries  s      ]]_$<<>>T(() * ( D "> C!"34O/3//"&**_"=MM%t9|,|, 0|,I / 	  5 %! ">>>r   c                2  #    U R                  5       I S h  vN nUR                  5        IS h  vN nUR                  SU R                   S3X5      I S h  vN nS S S 5      IS h  vN   US:H  $  NZ NC N N! , IS h  vN  (       d  f       WS:H  $ = f7f)Nr   r   r   )r!   rM   rN   r   )r4   rc   r   rF   rQ   r   s         r5   delete_diary)PostgreSQLActivityRepository.delete_diary  s      ]]_$<<>>T<<!//0 1  F "> ## %! ">> ##r   r   )'r   r   r   r   r   r   r   r
   r   rC   r   r`   r   r6   r!   rB   r   r   r	   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r9   r5   r   r      sY   /-M
 ;? " ! !% 2y667% 	%
 % % % % % % %4& &P(',, (4 (X
 
 	

 

6
 
.AY 
.
 
 	

 
.	!
>$C $D $* 59
 
 	

 
 "$sCx.1
 

@ 
  
 	 

 
-	  
D$
 $
 	$

 $
 
-	 $
L! ! 	!
 ! 
m	!F$ $ 	$
 
$4 59
 
 	

 
 "$sCx.1
 

@ 
  
 	 

 
% 
N "&485
 5
 	5

 #5
 "$sCx.15
 
%5
n! ! 	!
 ! 
e!F$ $ 	$
 
$r9   r   c                      \ rS rSrSrSSSSSSSSS	S
.	S\/ \\R                     4   S\	S\
S\	S\	S\	S\	S\
S\
4S jjrS\R                  4S jrS\R                  SS4S jrSS.S\	S\\\	\4      S\4S jjrS\	S\\   4S jrSSS.S\	S\\	   S\\\	\4      S\\   4S  jjrS!S"S#.S$\
S%\
S\\   4S& jjrS\	S\4S' jrS(rg))PostgreSQLUserRepositoryi  usersNr   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   c       	             Xl         X l        X0l        X@l        XPl        X`l        Xpl        Xl        Xl        S U l	        [        R                  " 5       U l        SU l        g r+   r,   r3   s
             r5   r6   !PostgreSQLUserRepository.__init__  r8   r9   r:   c                   #    U R                   b  U R                  5       I S h  vN nU R                  (       dX  U R                   IS h  vN   U R                  (       d   U R                  U5      I S h  vN   SU l        S S S 5      IS h  vN   U$ U$ U R                  b  U R                  $ U R                   IS h  vN   U R                  b  U R                  sS S S 5      IS h  vN   $ U R
                  (       aB  [        R                  " U R
                  U R                  U R                  S9I S h  vN U l        Om[        R                  " U R                  U R                  U R                  U R                  U R                  U R                  U R                  S9I S h  vN U l        U R                  U R                  5      I S h  vN   SU l        S S S 5      IS h  vN   U R                  $  GN GN GN GNp! , IS h  vN  (       d  f       U$ = f GN\ GN6 N N~ NX NC! , IS h  vN  (       d  f       U R                  $ = f7fr<   rA   rE   s     r5   r!   !PostgreSQLUserRepository.get_pool  rH   rI   rF   c                    #    UR                  5        IS h  vN nUR                  SU R                   S35      I S h  vN   S S S 5      IS h  vN   g  N< N N	! , IS h  vN  (       d  f       g = f7f)NrK   a   (
                    id TEXT PRIMARY KEY,
                    created_at TIMESTAMPTZ NOT NULL,
                    updated_at TIMESTAMPTZ NOT NULL,
                    name TEXT NOT NULL,
                    metadata JSONB NOT NULL DEFAULT '{}'
                )
                rL   rP   s      r5   rB    PostgreSQLUserRepository.init_dbG  sZ     <<>>T,,,,0OO+< =
 
 
 ">>
 ">>>rS   rT   rV   rU   c          	        #    [         R                  " [        R                  5      n[	        [        5       5      n[        R                  " U=(       d    0 5      nU R                  5       I S h  vN nUR                  5        IS h  vN nUR                  SU R                   S3XCX1U5      I S h  vN   S S S 5      IS h  vN   [        UUUUUS9$  Nd NM N% N! , IS h  vN  (       d  f       N,= f7f)NrY   zj (id, created_at, updated_at, name, metadata)
                VALUES ($1, $2, $3, $4, $5)
                r[   r\   r]   rV   rU   )r   r^   r   r_   r`   r   ra   rb   r!   rM   rN   rO   r   )r4   rV   rU   r^   user_idrd   rF   rQ   s           r5   re   PostgreSQLUserRepository.createU  s      ll8<<(eg,

8>r2]]_$<<>>T,,!__- . c   "> 
 	
 %! ">>>sl   A*C3,C-C3CC3	&C/C0C4C3?C C3C3CC3C0C" C0,C3r   c                  #    U R                  5       I S h  vN nUR                  5        IS h  vN nUR                  SU R                   S3U5      I S h  vN nS S S 5      IS h  vN   Wc  g US   n[	        U[
        5      (       a  [        R                  " U5      n[        US   US   US   US   US9$  N N Ne NW! , IS h  vN  (       d  f       Nl= f7f)	NX
                SELECT id, created_at, updated_at, name, metadata
                FROM rh   rU   r[   r\   r]   rV   r   )	r!   rM   ri   rO   rj   r`   ra   rk   r   )r4   r   rF   rQ   rl   rU   s         r5   rm   PostgreSQLUserRepository.getq  s     ]]_$<<>>Too& '
  C "> ;z?h$$zz(+H4y<(<(V
 	
% %! ">>>sg   CB9CB;C$CB=CC'B?(AC;C=C?CCC
CC)rV   rU   c                @  #    [         R                  " [        R                  5      nS/nU/nSnUb*  UR	                  SU 35        UR	                  U5        US-  nUb>  UR	                  SU 35        UR	                  [
        R                  " U5      5        US-  nUR	                  U5        SU R                   SSR                  U5       S	U S
3nU R                  5       I S h  vN n	U	R                  5        IS h  vN n
U
R                  " U/UQ76 I S h  vN nS S S 5      IS h  vN   Wc  g US   n[        U[        5      (       a  [
        R                  " U5      n[        US   US   US   US   US9$  N N~ Ne NW! , IS h  vN  (       d  f       Nl= f7f)Nrp   r   rq   r   rr   rs   rt   ru   rv   zJ
            RETURNING id, created_at, updated_at, name, metadata
        rU   r[   r\   r]   rV   r   )r   r^   r   r_   rw   ra   rb   rO   rx   r!   rM   ri   rj   r`   rk   r   )r4   r   rV   rU   r^   ry   rz   r{   r|   rF   rQ   rl   r}   s                r5   r~   PostgreSQLUserRepository.update  s     ll8<<($% E	NNXi[12MM$NINN\)56MM$**X./NIgOO$ %7#$ %" $	 ]]_$<<>>Te5f55C "> ;:lC((::l3L4y<(<(V!
 	
 %!5 ">>>sm   C$F&E<'F?E> FFF FF*F+AF>F FFF
FFFd   r   )limitoffsetr   r   c                  #    U R                  5       I S h  vN nUR                  5        IS h  vN nUR                  SU R                   S3X5      I S h  vN nS S S 5      IS h  vN   / nW H[  nUS   n[	        U[
        5      (       a  [        R                  " U5      nUR                  [        US   US   US   US   US95        M]     U$  N N N} No! , IS h  vN  (       d  f       N= f7f)	Nr   z]
                ORDER BY updated_at DESC
                LIMIT $1 OFFSET $2
                rU   r[   r\   r]   rV   r   )
r!   rM   r   rO   rj   r`   ra   rk   rw   r   )	r4   r   r   rF   rQ   r   r   rl   rU   s	            r5   listPostgreSQLUserRepository.list  s     ]]_$<<>>Too& '  D "> C:H(C((::h/MM$t9|,|,[! 	  1 %! ">>>sg   C3CC3CC3$CCCC3'C(A*C3C3CC3C0C" C0,C3c                2  #    U R                  5       I S h  vN nUR                  5        IS h  vN nUR                  SU R                   S3U5      I S h  vN nS S S 5      IS h  vN   US:H  $  NZ NC N N! , IS h  vN  (       d  f       WS:H  $ = f7fr   r   )r4   r   rF   rQ   r   s        r5   r   PostgreSQLUserRepository.delete  s     ]]_$<<>>T<<!__- .  F "> ## %! ">> ##r   r   )r   r   r   r   rO   r
   r   rC   r   r`   r   r6   r!   rB   r	   r   r   r   re   rm   r~   r   r   r   r   r   r   r9   r5   r   r     s   J
 ;? " ! !% 2y667% 	%
 % % % % % % %4& &P',, 4 $ .2	
 
 4S>*	

 

8
C 
HTN 
> #-11
 1
 sm	1

 4S>*1
 
$1
f *-A 3 c $t* 6$s $t $r9   r   )r/   ra   r   r   r   typingr   r   r   r	   r
   r   uuidr   rC   baser   r   r   modelsr   r   r   r   r   r   r   r   r   r9   r5   <module>r     sW      - - A A   Q Q J JS$$; S$l^$#9 ^$Bc$~ c$r9   