
    љi v                         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	  S SK
J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)DictAnyOptionalList)uuid4   )CharacterRepositoryBaseActivityRepositoryBaseUserRepository   )	CharacterWeeklyScheduleDailyScheduleDiaryUserc                       \ rS rSrSrS\4S jrS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)SQLiteCharacterRepository
   
charactersdb_pathc                 0    Xl         U R                  5         g Nr   init_dbselfr   s     ^/home/james-whalen/.local/lib/python3.13/site-packages/aiavatar/character/repository/sqlite.py__init__"SQLiteCharacterRepository.__init__           returnNc                    [         R                  " U R                  5      n U   UR                  SU R                   S35        S S S 5        UR                  5         g ! , (       d  f       N= f! UR                  5         f = f)N0
                    CREATE TABLE IF NOT EXISTS a^   (
                        id TEXT PRIMARY KEY,
                        created_at TIMESTAMP NOT NULL,
                        updated_at TIMESTAMP NOT NULL,
                        name TEXT NOT NULL,
                        prompt TEXT NOT NULL,
                        metadata JSON NOT NULL DEFAULT '{}'
                    )
                    sqlite3connectr   execute
TABLE_NAMEcloser   conns     r    r   !SQLiteCharacterRepository.init_db   sf    t||,	004/@ A	  JJL  JJL"   A.  AA. 
A+'A. .B metadatanamepromptr3   c          
        #    [         R                  " [        R                  5      n[	        [        5       5      n[        R                  " U=(       d    0 5      n[        R                  " U R                  5      n U   UR                  SU R                   S3XTR                  5       UR                  5       XU45        S S S 5        UR                  5         [        UUUUUUS9$ ! , (       d  f       N,= f! UR                  5         f = f7f)N!
                    INSERT INTO zx (id, created_at, updated_at, name, prompt, metadata)
                    VALUES (?, ?, ?, ?, ?, ?)
                    id
created_at
updated_atr4   r5   r3   )r   nowr   utcstrr
   jsondumpsr)   r*   r   r+   r,   	isoformatr-   r   )r   r4   r5   r3   r<   character_idmetadata_jsonr/   s           r    create SQLiteCharacterRepository.create$   s      ll8<<(57|

8>r2t||,
	!!% 1 2 "==?CMMOTS`a  JJL
 	
  JJLs7   A7D	:C4 <AC#=C4 D	#
C1-C4 4DD	rB   c          	      4  #    [         R                  " U R                  5      n[         R                  Ul         UR                  5       nUR                  SU R                   S3U45        UR                  5       nUR                  5         Uc  g US   n[        U[        5      (       a  [        R                  " U5      n[        US   [        R                   " US   5      [        R                   " US   5      US   US   US	9$ ! UR                  5         f = f7f)
Nz`
                SELECT id, created_at, updated_at, name, prompt, metadata
                FROM .
                WHERE id = ?
                r3   r9   r:   r;   r4   r5   r8   )r)   r*   r   Rowrow_factorycursorr+   r,   fetchoner-   
isinstancer>   r?   loadsr   r   fromisoformat)r   rB   r/   rJ   rowr3   s         r    getSQLiteCharacterRepository.getE   s     t||,";;	[[]FNNoo& '
  //#CJJL;z?h$$zz(+H4y--c,.?@--c,.?@Vx=
 	
 JJLs   6DAD :B	DDD)r4   r5   r3   c          	      z  #    [         R                  " [        R                  5      nS/nUR	                  5       /nUb"  UR                  S5        UR                  U5        Ub"  UR                  S5        UR                  U5        Ub6  UR                  S5        UR                  [        R                  " U5      5        UR                  U5        [        R                  " U R                  5      n[        R                  Ul         U   UR                  SU R                   SSR                  U5       S3[!        U5      5        UR#                  5       n	U	R                  S	U R                   S3U45        U	R%                  5       n
S S S 5        UR'                  5         W
c  g U
S
   n[)        U[*        5      (       a  [        R,                  " U5      n[/        U
S   [         R0                  " U
S   5      [         R0                  " U
S   5      U
S   U
S   US9$ ! , (       d  f       N= f! UR'                  5         f = f7f)Nupdated_at = ?name = ?z
prompt = ?metadata = ?
                    UPDATE 
                    SET , 6
                    WHERE id = ?
                    zh
                    SELECT id, created_at, updated_at, name, prompt, metadata
                    FROM r3   r9   r:   r;   r4   r5   r8   )r   r<   r   r=   rA   appendr?   r@   r)   r*   r   rH   rI   r+   r,   jointuplerJ   rK   r-   rL   r>   rM   r   rN   )r   rB   r4   r5   r3   r<   updatesparamsr/   rJ   rO   row_metadatas               r    update SQLiteCharacterRepository.updatef   s     ll8<<(#$ ]]_-NN:&MM$NN<(MM&!NN>*MM$**X./l#t||,";;	 OO, -7+, -
 &M //* +
 "O oo'% ( JJL;:lC((::l3L4y--c,.?@--c,.?@Vx=!
 	
; ( JJLs8   DH;H& A=HH& B	H;
H#H& &H88H;c                T  #    [         R                  " U R                  5      n U   UR                  SU R                   S3U45      nUR
                  S:H  sS S S 5        UR                  5         $ ! , (       d  f       O= f UR                  5         g ! UR                  5         f = f7fN!
                    DELETE FROM rY   r   r)   r*   r   r+   r,   rowcountr-   r   rB   r/   rJ   s       r    delete SQLiteCharacterRepository.delete   s     t||,	!!% 1 2 "O !+  JJL  JJLDJJL9   !B(B 0A0	B B(0
A>:B B(B%%B(r   r%   N)__name__
__module____qualname____firstlineno__r,   r>   r!   r   r   r   r   r   rD   rP   r`   boolrh   __static_attributes__ r$   r    r   r   
   s    J 0 .2
 
 	

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

 B
 4S>*B
 
)	B
HC D r$   r   c                      \ rS rSrSrSrSrS\4S jrS"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S jrS
\S\S\4S  jrS!r g)#SQLiteActivityRepository   weekly_schedulesdaily_schedulesdiariesr   c                 0    Xl         U R                  5         g r   r   r   s     r    r!   !SQLiteActivityRepository.__init__   r#   r$   r%   Nc                    [         R                  " U R                  5      n U   UR                  SU R                   S35        UR                  SU R
                   S35        UR                  SU R                   S35        S S S 5        UR                  5         g ! , (       d  f       N= f! UR                  5         f = f)Nr'   a1   (
                        id TEXT PRIMARY KEY,
                        created_at TIMESTAMP NOT NULL,
                        updated_at TIMESTAMP NOT NULL,
                        character_id TEXT NOT NULL UNIQUE,
                        content TEXT NOT NULL
                    )
                    a   (
                        id TEXT PRIMARY KEY,
                        created_at TIMESTAMP NOT NULL,
                        updated_at TIMESTAMP NOT NULL,
                        character_id TEXT NOT NULL,
                        schedule_date DATE NOT NULL,
                        content TEXT NOT NULL,
                        content_context JSON NOT NULL DEFAULT '{}',
                        UNIQUE (character_id, schedule_date)
                    )
                    a   (
                        id TEXT PRIMARY KEY,
                        created_at TIMESTAMP NOT NULL,
                        updated_at TIMESTAMP NOT NULL,
                        character_id TEXT NOT NULL,
                        diary_date DATE NOT NULL,
                        content TEXT NOT NULL,
                        content_context JSON NOT NULL DEFAULT '{}',
                        UNIQUE (character_id, diary_date)
                    )
                    )r)   r*   r   r+   WEEKLY_SCHEDULES_TABLEDAILY_SCHEDULES_TABLEDIARIES_TABLEr-   r.   s     r    r    SQLiteActivityRepository.init_db   s    t||,*	0040K0K/L M
 0040J0J/K 
L 0040B0B/C 
D5 R JJLS R JJLs#   B, ABB, 
B)%B, ,B>rB   contentc          	        #    [         R                  " [        R                  5      n[	        [        5       5      n[        R                  " U R                  5      n U   UR                  SU R                   S3XCR                  5       UR                  5       X45        S S S 5        UR                  5         [        UUUUUS9$ ! , (       d  f       N+= f! UR                  5         f = f7f)Nr7   zt (id, created_at, updated_at, character_id, content)
                    VALUES (?, ?, ?, ?, ?)
                    r9   r:   r;   rB   r   )r   r<   r   r=   r>   r
   r)   r*   r   r+   r}   rA   r-   r   )r   rB   r   r<   schedule_idr/   s         r    create_weekly_schedule/SQLiteActivityRepository.create_weekly_schedule   s      ll8<<(%'lt||,
	!!%!<!< = > !--/3==?LZ  JJL%
 	
  JJLs7   AC(C A CC %C(
CC C%%C(c                  #    [         R                  " U R                  5      n[         R                  Ul         UR                  5       nUR                  SU R                   S3U45        UR                  5       nUR                  5         Uc  g [        US   [        R                  " US   5      [        R                  " US   5      US   US   S9$ ! UR                  5         f = f7f)	Nz_
                SELECT id, created_at, updated_at, character_id, content
                FROM z8
                WHERE character_id = ?
                r9   r:   r;   rB   r   r   )r)   r*   r   rH   rI   rJ   r+   r}   rK   r-   r   r   rN   )r   rB   r/   rJ   rO   s        r    get_weekly_schedule,SQLiteActivityRepository.get_weekly_schedule  s     t||,";;	[[]FNN112 3
  //#CJJL;4y--c,.?@--c,.?@^,	N
 	
 JJLs   6C'AC :AC'C$$C'c                  #    [         R                  " [        R                  5      n[        R
                  " U R                  5      n[        R                  Ul         U   UR                  SU R                   S3X#R                  5       U45        UR                  5       nUR                  SU R                   S3U45        UR                  5       nS S S 5        UR                  5         Wc  g [        US   [         R                   " US   5      [         R                   " US   5      US   US	   S
9$ ! , (       d  f       Nf= f! UR                  5         f = f7f)NrV   zt
                    SET content = ?, updated_at = ?
                    WHERE character_id = ?
                    zg
                    SELECT id, created_at, updated_at, character_id, content
                    FROM @
                    WHERE character_id = ?
                    r9   r:   r;   rB   r   r   )r   r<   r   r=   r)   r*   r   rH   rI   r+   r}   rA   rJ   rK   r-   r   rN   )r   rB   r   r<   r/   rJ   rO   s          r    update_weekly_schedule/SQLiteActivityRepository.update_weekly_schedule-  s3     ll8<<(t||,";;	 778 9
 mmo|< 556 7
 "O oo'% ( JJL;4y--c,.?@--c,.?@^,	N
 	
3 ( JJLs8   AEE A2D1E AE1
D?;E EEc                T  #    [         R                  " U R                  5      n U   UR                  SU R                   S3U45      nUR
                  S:H  sS S S 5        UR                  5         $ ! , (       d  f       O= f UR                  5         g ! UR                  5         f = f7f)Nrd   r   r   )r)   r*   r   r+   r}   rf   r-   rg   s       r    delete_weekly_schedule/SQLiteActivityRepository.delete_weekly_scheduleY  s     t||,	!!%!<!< = > "O !+  JJL  JJLDJJLrj   )content_contextschedule_dater   c                4  #    [         R                  " [        R                  5      n[	        [        5       5      n[        R                  " U=(       d    0 5      n[        R                  " U R                  5      n U   UR                  SU R                   S3XeR                  5       UR                  5       XR                  5       X745        S S S 5        UR                  5         [        UUUUUUUS9$ ! , (       d  f       N-= f! UR                  5         f = f7f)Nr7   z (id, created_at, updated_at, character_id, schedule_date, content, content_context)
                    VALUES (?, ?, ?, ?, ?, ?, ?)
                    r9   r:   r;   rB   r   r   r   )r   r<   r   r=   r>   r
   r?   r@   r)   r*   r   r+   r~   rA   r-   r   )	r   rB   r   r   r   r<   r   content_context_jsonr/   s	            r    create_daily_schedule.SQLiteActivityRepository.create_daily_schedulej  s      ll8<<(%'l#zz/*?R@t||,
	!!%!;!; < = !--/3==?LRiRiRkmt  L  JJL%'+
 	
  JJLs7   A7D:D <AC2D D2
D <D DDc          
        #    [         R                  " U R                  5      n[         R                  Ul         UR                  5       nUR                  SU R                   S3XR                  5       45        UR                  5       nUR                  5         Uc  g US   n[        U[        5      (       a  [        R                  " U5      n[        US   [         R"                  " US   5      [         R"                  " US   5      US   [$        R"                  " US   5      US	   US
9$ ! UR                  5         f = f7f)N
                SELECT id, created_at, updated_at, character_id, schedule_date, content, content_context
                FROM zN
                WHERE character_id = ? AND schedule_date = ?
                r   r9   r:   r;   rB   r   r   r   )r)   r*   r   rH   rI   rJ   r+   r~   rA   rK   r-   rL   r>   r?   rM   r   r   rN   r   )r   rB   r   r/   rJ   rO   r   s          r    get_daily_schedule+SQLiteActivityRepository.get_daily_schedule  s     t||,";;	[[]FNN001 2
 6689 //#CJJL;/0os++"jj9O4y--c,.?@--c,.?@^,,,S-AB	N+
 	
 JJL   6D>AD) B!D>)D;;D>c          
      |  #    [         R                  " [        R                  5      n[        R
                  " U R                  5      n[        R                  Ul         U   UR                  SU R                   S3X4R                  5       XR                  5       45        UR                  5       nUR                  SU R                   S3XR                  5       45        UR                  5       nS S S 5        UR                  5         Wc  g US   n[        U[         5      (       a  ["        R$                  " U5      n['        US   [         R(                  " US   5      [         R(                  " US   5      US	   [*        R(                  " US
   5      US   US9$ ! , (       d  f       N= f! UR                  5         f = f7f)NrV   z
                    SET content = ?, updated_at = ?
                    WHERE character_id = ? AND schedule_date = ?
                    z
                    SELECT id, created_at, updated_at, character_id, schedule_date, content, content_context
                    FROM V
                    WHERE character_id = ? AND schedule_date = ?
                    r   r9   r:   r;   rB   r   r   r   )r   r<   r   r=   r)   r*   r   rH   rI   r+   r~   rA   rJ   rK   r-   rL   r>   r?   rM   r   rN   r   )	r   rB   r   r   r<   r/   rJ   rO   r   s	            r    update_daily_schedule.SQLiteActivityRepository.update_daily_schedule  s     ll8<<(t||,";;	 667 8
 mmo|=T=T=VW 445 6
 "#:#:#<= oo'% ( JJL;/0os++"jj9O4y--c,.?@--c,.?@^,,,S-AB	N+
 	
; ( JJLs8   AF<F' BF-F' 5B!F<
F$ F' 'F99F<
start_dateend_datec                  #    [         R                  " U R                  5      n[         R                  Ul         UR                  5       nUR                  SU R                   S3XR                  5       UR                  5       45        UR                  5       nUR                  5         / nU H  nUS   n	[        U	[        5      (       a  [        R                  " U	5      n	UR                  [!        US   ["        R$                  " US   5      ["        R$                  " US   5      US   [&        R$                  " US   5      US	   U	S
95        M     U$ ! UR                  5         f = f7f)Nr   z
                WHERE character_id = ? AND schedule_date BETWEEN ? AND ?
                ORDER BY schedule_date
                r   r9   r:   r;   rB   r   r   r   )r)   r*   r   rH   rI   rJ   r+   r~   rA   fetchallr-   rL   r>   r?   rM   rZ   r   r   rN   r   
r   rB   r   r   r/   rJ   rowsresultrO   r   s
             r    list_daily_schedules-SQLiteActivityRepository.list_daily_schedules  s<     t||,";;	[[]FNN001 2 335x7I7I7KL ??$DJJLC!"34O/3//"&**_"=MM-t9#11#l2CD#11#l2CD 0"00_1EFI / 	  ! JJL   6E%AE B9E%E""E%c                p  #    [         R                  " U R                  5      n U   UR                  SU R                   S3XR                  5       45      nUR                  S:H  sS S S 5        UR                  5         $ ! , (       d  f       O= f UR                  5         g ! UR                  5         f = f7f)Nrd   r   r   )r)   r*   r   r+   r~   rA   rf   r-   )r   rB   r   r/   rJ   s        r    delete_daily_schedule.SQLiteActivityRepository.delete_daily_schedule  s      t||,	!!%!;!; < = "#:#:#<= !+  JJL  JJLDJJL9   !B6B! >A>$	B! -B6>
BB! B6!B33B6
diary_datec                F  #    [         R                  " [        R                  5      n[	        [        5       5      n[        R                  " U=(       d    0 5      n[        R                  " U R                  5      n U   UR                  SU R                   S3XeR                  5       UR                  5       XR                  5       X745        S S S 5        UR                  5         [        UUUUUUU=(       d    0 S9$ ! , (       d  f       N6= f! UR                  5         f = f7f)Nr7   z (id, created_at, updated_at, character_id, diary_date, content, content_context)
                    VALUES (?, ?, ?, ?, ?, ?, ?)
                    r9   r:   r;   rB   r   r   r   )r   r<   r   r=   r>   r
   r?   r@   r)   r*   r   r+   r   rA   r-   r   )	r   rB   r   r   r   r<   diary_idr   r/   s	            r    create_diary%SQLiteActivityRepository.create_diary%  s      ll8<<(uw<#zz/*?R@t||,
	!!%!3!3 4 5 }}OcOcOegn  F  JJL%!+1r
 	
  JJLs7   A7D!:D <AC;D (D!;
D	D DD!c          
        #    [         R                  " U R                  5      n[         R                  Ul         UR                  5       nUR                  SU R                   S3XR                  5       45        UR                  5       nUR                  5         Uc  g US   n[        U[        5      (       a  [        R                  " U5      n[        US   [         R"                  " US   5      [         R"                  " US   5      US   [$        R"                  " US   5      US	   US
9$ ! UR                  5         f = f7f)N|
                SELECT id, created_at, updated_at, character_id, diary_date, content, content_context
                FROM zK
                WHERE character_id = ? AND diary_date = ?
                r   r9   r:   r;   rB   r   r   r   )r)   r*   r   rH   rI   rJ   r+   r   rA   rK   r-   rL   r>   r?   rM   r   r   rN   r   )r   rB   r   r/   rJ   rO   r   s          r    	get_diary"SQLiteActivityRepository.get_diaryH  s     t||,";;	[[]FNN(() *
 3356 //#CJJL;/0os++"jj9O4y--c,.?@--c,.?@^,))#l*;<	N+
 	
 JJLr   )r   r   c          
        #    [         R                  " [        R                  5      nS/nUR	                  5       /nUb"  UR                  S5        UR                  U5        Ub6  UR                  S5        UR                  [        R                  " U5      5        UR                  U5        UR                  UR	                  5       5        [        R                  " U R                  5      n[        R                  Ul         U   UR                  SU R                   SSR                  U5       S3[!        U5      5        UR#                  5       n	U	R                  SU R                   S3XR	                  5       45        U	R%                  5       n
S S S 5        UR'                  5         W
c  g U
S	   n[)        U[*        5      (       a  [        R,                  " U5      n[/        U
S
   [         R0                  " U
S   5      [         R0                  " U
S   5      U
S   [2        R0                  " U
S   5      U
S   US9$ ! , (       d  f       N= f! UR'                  5         f = f7f)NrS   zcontent = ?zcontent_context = ?rV   rW   rX   S
                    WHERE character_id = ? AND diary_date = ?
                    z
                    SELECT id, created_at, updated_at, character_id, diary_date, content, content_context
                    FROM r   r9   r:   r;   rB   r   r   r   )r   r<   r   r=   rA   rZ   r?   r@   r)   r*   r   rH   rI   r+   r   r[   r\   rJ   rK   r-   rL   r>   rM   r   rN   r   )r   rB   r   r   r   r<   r]   r^   r/   rJ   rO   row_content_contexts               r    update_diary%SQLiteActivityRepository.update_diaryo  s     ll8<<(#$ ]]_-NN=)MM'"&NN01MM$**_56l#j**,-t||,";;	 ../ 07+, -
 &M ,,- .
 "#7#7#9: oo'% ( JJL;!"34)3//"&**-@"A4y--c,.?@--c,.?@^,))#l*;<	N/
 	
; ( JJLs8   C<I?I BH5I B!I5
I?I IIc                  #    [         R                  " U R                  5      n[         R                  Ul         UR                  5       nUR                  SU R                   S3XR                  5       UR                  5       45        UR                  5       nUR                  5         / nU H  nUS   n	[        U	[        5      (       a  [        R                  " U	5      n	UR                  [!        US   ["        R$                  " US   5      ["        R$                  " US   5      US   [&        R$                  " US   5      US	   U	S
95        M     U$ ! UR                  5         f = f7f)Nr   z{
                WHERE character_id = ? AND diary_date BETWEEN ? AND ?
                ORDER BY diary_date
                r   r9   r:   r;   rB   r   r   r   )r)   r*   r   rH   rI   rJ   r+   r   rA   r   r-   rL   r>   r?   rM   rZ   r   r   rN   r   r   s
             r    list_diaries%SQLiteActivityRepository.list_diaries  s<     t||,";;	[[]FNN(() * 335x7I7I7KL ??$DJJLC!"34O/3//"&**_"=MM%t9#11#l2CD#11#l2CD 0--c,.?@I / 	  ! JJLr   c                p  #    [         R                  " U R                  5      n U   UR                  SU R                   S3XR                  5       45      nUR                  S:H  sS S S 5        UR                  5         $ ! , (       d  f       O= f UR                  5         g ! UR                  5         f = f7f)Nrd   r   r   )r)   r*   r   r+   r   rA   rf   r-   )r   rB   r   r/   rJ   s        r    delete_diary%SQLiteActivityRepository.delete_diary  s      t||,	!!%!3!3 4 5 "#7#7#9: !+  JJL  JJLDJJLr   rk   rl   )!rm   rn   ro   rp   r}   r~   r   r>   r!   r   r   r   r   r   r   rq   r   r   r   r   r   r   r   r	   r   r   r   r   r   r   r   r   rr   rs   r$   r    ru   ru      s   /-M ,`
 
 	

 

<
 
.AY 
8*
 *
 	*

 
.	!*
XC D . 59!
 !
 	!

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

 
-	 %
N1
 1
 	1

 1
 
-	 1
f& & 	&
 & 
m	&P  	
 
8 59!
 !
 	!

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

 
%%
X "&48@
 @
 	@

 #@
 "$sCx.1@
 
%@
D& & 	&
 & 
e&P  	
 
r$   ru   c            
           \ rS rSrSrS\4S jrS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)SQLiteUserRepositoryi  usersr   c                 0    Xl         U R                  5         g r   r   r   s     r    r!   SQLiteUserRepository.__init__  r#   r$   r%   Nc                    [         R                  " U R                  5      n U   UR                  SU R                   S35        S S S 5        UR                  5         g ! , (       d  f       N= f! UR                  5         f = f)Nr'   a0   (
                        id TEXT PRIMARY KEY,
                        created_at TIMESTAMP NOT NULL,
                        updated_at TIMESTAMP NOT NULL,
                        name TEXT NOT NULL,
                        metadata JSON NOT NULL DEFAULT '{}'
                    )
                    r(   r.   s     r    r   SQLiteUserRepository.init_db  sf    t||,	004/@ A
  JJL  JJLr1   r2   r4   r3   c          	        #    [         R                  " [        R                  5      n[	        [        5       5      n[        R                  " U=(       d    0 5      n[        R                  " U R                  5      n U   UR                  SU R                   S3XCR                  5       UR                  5       X45        S S S 5        UR                  5         [        UUUUUS9$ ! , (       d  f       N+= f! UR                  5         f = f7f)Nr7   zm (id, created_at, updated_at, name, metadata)
                    VALUES (?, ?, ?, ?, ?)
                    r9   r:   r;   r4   r3   )r   r<   r   r=   r>   r
   r?   r@   r)   r*   r   r+   r,   rA   r-   r   )r   r4   r3   r<   user_idrC   r/   s          r    rD   SQLiteUserRepository.create  s      ll8<<(eg,

8>r2t||,
	!!% 1 2 mmos}}T  JJL
 	
  JJLs7   A7D:C2 <A C!<C2 D!
C/+C2 2DDr   c                ,  #    [         R                  " U R                  5      n[         R                  Ul         UR                  5       nUR                  SU R                   S3U45        UR                  5       nUR                  5         Uc  g US   n[        U[        5      (       a  [        R                  " U5      n[        US   [        R                   " US   5      [        R                   " US   5      US   US9$ ! UR                  5         f = f7f)	NX
                SELECT id, created_at, updated_at, name, metadata
                FROM rG   r3   r9   r:   r;   r4   r   )r)   r*   r   rH   rI   rJ   r+   r,   rK   r-   rL   r>   r?   rM   r   r   rN   )r   r   r/   rJ   rO   r3   s         r    rP   SQLiteUserRepository.get&  s     t||,";;	[[]FNNoo& '
 
 //#CJJL;z?h$$zz(+H4y--c,.?@--c,.?@V
 	
 JJLs   6DAC? :BD?DD)r4   r3   c          	      (  #    [         R                  " [        R                  5      nS/nUR	                  5       /nUb"  UR                  S5        UR                  U5        Ub6  UR                  S5        UR                  [        R                  " U5      5        UR                  U5        [        R                  " U R                  5      n[        R                  Ul         U   UR                  SU R                   SSR                  U5       S3[!        U5      5        UR#                  5       nUR                  SU R                   S3U45        UR%                  5       n	S S S 5        UR'                  5         W	c  g U	S	   n
[)        U
[*        5      (       a  [        R,                  " U
5      n
[/        U	S
   [         R0                  " U	S   5      [         R0                  " U	S   5      U	S   U
S9$ ! , (       d  f       N= f! UR'                  5         f = f7f)NrS   rT   rU   rV   rW   rX   rY   z`
                    SELECT id, created_at, updated_at, name, metadata
                    FROM r3   r9   r:   r;   r4   r   )r   r<   r   r=   rA   rZ   r?   r@   r)   r*   r   rH   rI   r+   r,   r[   r\   rJ   rK   r-   rL   r>   rM   r   rN   )r   r   r4   r3   r<   r]   r^   r/   rJ   rO   r_   s              r    r`   SQLiteUserRepository.updateF  s     ll8<<(#$ ]]_-NN:&MM$NN>*MM$**X./gt||,";;	 OO, -7+, -
 &M //* +
 J oo'% ( JJL;:lC((::l3L4y--c,.?@--c,.?@V!
 	
; ( JJLs8   CH G= "A=G,G= 'BH,
G:6G= =HHd   r   )limitoffsetr   r   c                \  #    [         R                  " U R                  5      n[         R                  Ul         UR                  5       nUR                  SU R                   S3X45        UR                  5       nUR                  5         / nU H  nUS   n[        U[        5      (       a  [        R                  " U5      nUR                  [        US   [         R"                  " US   5      [         R"                  " US   5      US   US95        M     U$ ! UR                  5         f = f7f)	Nr   z[
                ORDER BY updated_at DESC
                LIMIT ? OFFSET ?
                r3   r9   r:   r;   r4   r   )r)   r*   r   rH   rI   rJ   r+   r,   r   r-   rL   r>   r?   rM   rZ   r   r   rN   )	r   r   r   r/   rJ   r   r   rO   r3   s	            r    listSQLiteUserRepository.list  s    t||,";;	[[]FNNoo& '  ??$DJJLC:H(C((::h/MM$t9#11#l2CD#11#l2CD[! 	   JJLs   6D,AD :BD,D))D,c                T  #    [         R                  " U R                  5      n U   UR                  SU R                   S3U45      nUR
                  S:H  sS S S 5        UR                  5         $ ! , (       d  f       O= f UR                  5         g ! UR                  5         f = f7frc   re   )r   r   r/   rJ   s       r    rh   SQLiteUserRepository.delete  s     t||,	!!% 1 2 J !+  JJL  JJLDJJLrj   rk   rl   )rm   rn   ro   rp   r,   r>   r!   r   r   r   r   r   rD   rP   r`   intr	   r   rq   rh   rr   rs   r$   r    r   r     s    J , .2	
 
 4S>*	

 

>
C 
HTN 
H #-1<
 <
 sm	<

 4S>*<
 
$<
| *-A 3 c $t* @s t r$   r   )r?   r)   r   r   r   typingr   r   r   r	   uuidr
   baser   r   r   modelsr   r   r   r   r   r   ru   r   rs   r$   r    <module>r      sT      - - , ,  Q Q J Jm 7 m`q5 qhC> Cr$   