Files
VoiceVault/backend/__pycache__/db_queries.cpython-314.pyc

116 lines
28 KiB
Plaintext
Raw Normal View History

2026-02-14 22:57:24 -07:00
+
2026-02-15 02:18:07 -07:00
><3E><>i 9<00><00><>a<00>RCt00tRt^RIt^RIHtHtHtHtHt^RI H
2026-02-15 00:07:07 -07:00
t
^RI H t H t ]
!4]P!R4;'gRP4t]P!R4;'gRP4t]'d ]'g ]!R4h] !]]4t ]^kR R
2026-02-15 02:18:07 -07:00
ltR R ltR RltRRltRDRRlltRERRlltRRltRRltRRltRRltRRltRR ltR!R"ltRFR#R$llt RGR%R&llt!R'R(lt"R)R*lt#R+R,lt$R-R.lt%R/R0lt&R1R2lt'R3R4lt(R5R6lt)RHR7R8llt*RIR9R:llt+RJR;R<llt,R=R>lt-RKR?R@llt.RARBlt/R#)Lz9
2026-02-14 22:57:24 -07:00
Supabase data layer aligned with TitanForge/schema.sql.
2026-02-15 02:18:07 -07:00
N)<05>Any<6E>Dict<63>List<73>Optional<61>Tuple)<01> load_dotenv)<02>Client<6E> create_client<6E> SUPABASE_URL<52><00>SUPABASE_SERVICE_ROLE_KEYzHMissing SUPABASE_URL or SUPABASE_SERVICE_ROLE_KEY environment variables.c<00>h<00>V^8<>dQhR\R\\\\3,,/#<00><03><00>response<73>return)rrr<00>str)<01>formats"<22>6/Users/mannpatel/Work/TitanForge/backend/db_queries.py<70> __annotate__rs'<00><00>1<>1<>C<EFBFBD>1<>D<EFBFBD><14>c<EFBFBD>3<EFBFBD>h<EFBFBD><1E>0<>1<>c<00>0<00>\VRR4;'g.#)<02>dataN)<01>getattr)rs&r<00>_rowsrs<00><00> <12>8<EFBFBD>V<EFBFBD>T<EFBFBD> *<2A> 0<> 0<>b<EFBFBD>0rc<00>h<00>V^8<>dQhR\R\\\\3,,/#r)rrrr)rs"rrrs'<00><00>%<25>%<25>S<EFBFBD>%<25>X<EFBFBD>d<EFBFBD>3<EFBFBD><03>8<EFBFBD>n<EFBFBD>5<>%rc<00>><00>\V4pV'd
2026-02-15 00:07:07 -07:00
V^,#R#)<02>N)r)rrs& r<00>_firstrs<00><00> <10><18>?<3F>D<EFBFBD><1A>4<EFBFBD><01>7<EFBFBD>$<24><04>$rc<00>^<00>V^8<>dQhR\R\R\\\3,/#)r<00>page<67>limitr)<02>int<6E>tuple)rs"rrrs)<00><00><16><16>C<EFBFBD><16><03><16><05>c<EFBFBD>3<EFBFBD>h<EFBFBD><0F>rc<00><><00>\^V4p\\^V4^d4pV^,
2026-02-14 22:57:24 -07:00
V,pW!,^,
2026-02-15 00:07:07 -07:00
pW#3#)<01>)<02>max<61>min)r r!<00>start<72>ends&& r<00> _paginater*sA<00><00> <0E>q<EFBFBD>$<24><<3C>D<EFBFBD> <0F><03>A<EFBFBD>u<EFBFBD> <0A>s<EFBFBD> #<23>E<EFBFBD> <11>A<EFBFBD>X<EFBFBD><15> <1E>E<EFBFBD>
2026-02-14 22:57:24 -07:00
<0F>-<2D>!<21>
2026-02-15 02:18:07 -07:00
<1B>C<EFBFBD> <10>:<3A>rc<00>R<00>V^8<>dQhR\R\\\3,/#<00>r<00> stored_pathr)rr)rs"rrr's"<00><00><1E><1E>C<EFBFBD><1E>E<EFBFBD>#<23>s<EFBFBD>(<28>O<EFBFBD>rc<04><><00>T;'gRPR^4p\V4^8wgV^,'dV^,'g\RV 24hV^,V^,3#)zs
2026-02-15 00:07:07 -07:00
Convert stored path like 'archives/user/uuid/original/file.mp4'
into ('archives', 'user/uuid/original/file.mp4').
r <00>/zInvalid storage path format: )<03>split<69>len<65>
2026-02-15 02:18:07 -07:00
ValueError)r-<00>partss& r<00>_parse_bucket_pathr4's_<00><00>
2026-02-15 00:07:07 -07:00
<19> <1E> <1E>B<EFBFBD> %<25> %<25>c<EFBFBD>1<EFBFBD> -<2D>E<EFBFBD>
<EFBFBD>5<EFBFBD>z<EFBFBD>Q<EFBFBD><EFBFBD>e<EFBFBD>A<EFBFBD>h<EFBFBD>h<EFBFBD>e<EFBFBD>A<EFBFBD>h<EFBFBD>h<EFBFBD><18>8<><1B> <0A>F<>G<>G<> <10><11>8<EFBFBD>U<EFBFBD>1<EFBFBD>X<EFBFBD> <1D>rc<00><><00>V^8<>dQhR\R\R\R\R\R\\\3,/#)r<00>bucket<65> object_path<74>content<6E> content_type<70>upsertr)r<00>bytes<65>boolrr)rs"rrr2sL<00><00><06><06> <0F><06><14><06><13><06><16> <06>
<11> <06> 
<EFBFBD>#<23>s<EFBFBD>(<28>^<5E> rc
<04><><00>\PPV4PVVRVR\ V4P 4/4#)zC
Upload bytes to Supabase Storage and return upload response data.
2026-02-15 02:18:07 -07:00
z content-typer:)<06>supabase<73>storage<67>from_<6D>uploadr<00>lower)r6r7r8r9r:s&&&&&r<00>upload_storage_objectrC2sF<00><00> <11><18><18><1E><1E>v<EFBFBD>&<26> <0F><16> <17> <13> <1B>\<5C>8<EFBFBD>S<EFBFBD><16>[<5B>5F<35>5F<35>5H<35> I<>
2026-02-15 00:07:07 -07:00
<EFBFBD>rc<00>^<00>V^8<>dQhR\R\R\\\3,/#)r<00>post_id<69>
expires_inr<00>r"rrr)rs"rrrFs)<00><00>)<06>)<06>C<EFBFBD>)<06>S<EFBFBD>)<06>D<EFBFBD><13>c<EFBFBD><18>N<EFBFBD>)rc <04><00>\PR4PR4PRV4PRR4P ^4P 4p\ V4pV'g \R4h\VR,4wrE\PPV4PWQ4p\V\4'd~VPR4;'gdVPR 4;'gKVPR
/4PR 4;'g"VPR
/4PR4pMR pV'g \R 4hRVR VRVRVPR4RVRV/#)z@
Return a signed URL for the original audio/video archive file.
2026-02-15 02:18:07 -07:00
<EFBFBD> archive_fileszpath, content_typerE<00>role<6C>original_audioz,Original audio file not found for this post.<2E>path<74> signedURL<52> signedUrlrNz/Failed to create signed URL for original audio.r6r7r9<00>
signed_urlrF)r><00>table<6C>select<63>eqr!<00>executerr2r4r?r@<00>create_signed_url<72>
isinstance<EFBFBD>dict<63>get<65> RuntimeError)rErFr<00>rowr6r7<00>signedrOs&& r<00>get_original_audio_urlr[Fs]<00><00>
2026-02-15 00:07:07 -07:00
<11><0E><0E><EFBFBD>'<27> <0F><16>$<24> %<25> <0B><12>I<EFBFBD>w<EFBFBD> <1F> <0B><12>F<EFBFBD>$<24> %<25> <0E><15>q<EFBFBD><18> <10><17><19>  <0A> <11><18>
<1A>C<EFBFBD> <0E><18>G<>H<>H<>,<2C>S<EFBFBD><16>[<5B>9<><17>F<EFBFBD> <15> <1D> <1D> #<23> #<23>F<EFBFBD> +<2B> =<3D> =<3D>k<EFBFBD> V<>F<EFBFBD><12>&<26>$<24><1F><1F> <12>J<EFBFBD>J<EFBFBD>{<7B> #<23> 7<> 7<><15>z<EFBFBD>z<EFBFBD>+<2B>&<26> 7<> 7<><15>z<EFBFBD>z<EFBFBD>&<26>"<22>%<25>)<29>)<29>+<2B>6<> 7<> 7<><16>z<EFBFBD>z<EFBFBD>&<26>"<22>%<25>)<29>)<29>+<2B>6<> <13><1A>
2026-02-15 02:18:07 -07:00
<EFBFBD> <15><1A>L<>M<>M<> <12>7<EFBFBD><10>&<26><15>{<7B><16><03><07><07><0E>/<2F><14>j<EFBFBD><14>j<EFBFBD>  <06>rc <00>t<00>V^8<>dQhR\R\R\\\\3,,/#)rrErJr)r"rrrr)rs"rrrrs.<00><00> <1C> <1C>c<EFBFBD> <1C><13> <1C><18>$<24>s<EFBFBD>C<EFBFBD>x<EFBFBD>.<2E>9Q<39> rc<00><><00>\PR4PR4PRV4PRV4P ^4P 4p\ V4#)rI<00>*rErJ)r>rPrQrRr!rSr)rErJrs&& r<00>get_archive_file_by_roler_rsQ<00><00><10><0E><0E><EFBFBD>'<27> <0F><16><03><1B> <0B><12>I<EFBFBD>w<EFBFBD> <1F> <0B><12>F<EFBFBD>D<EFBFBD> <19> <0E><15>q<EFBFBD><18> <10><17><19>  <0A> <12>(<28> <1B>rc<00>0<00>V^8<>dQhR\R\/#r,)rr;)rs"rrr~s<00><00> E<01> E<01><03> E<01><05> Erc<04><><00>\V4wr\PPV4P V4p\ V\ \34'd \ V4#\R4h)zW
Download object bytes from a stored path like
'archives/user/uuid/original/file.mp4'.
z*Failed to download storage object content.) r4r>r?r@<00>downloadrUr;<00> bytearrayrX)r-r6r7r8s& r<00>&download_storage_object_by_stored_pathrd~sZ<00><00>
-<2D>[<5B>9<><17>F<EFBFBD><16><1E><1E>$<24>$<24>V<EFBFBD>,<2C>5<>5<>k<EFBFBD>B<>G<EFBFBD><11>'<27>E<EFBFBD>9<EFBFBD>-<2D>.<2E>.<2E><14>W<EFBFBD>~<7E><1D>
<16>C<>
D<EFBFBD>Drc<00>t<00>V^8<>dQhR\\\3,R\\\3,/#<00>r<00>payloadr<00>rrr)rs"rrr<00>s*<00><00><13><13><14>c<EFBFBD>3<EFBFBD>h<EFBFBD><1E><13>D<EFBFBD><13>c<EFBFBD><18>N<EFBFBD>rc <00><><00>RR.pVF)pVPV4'dK\RV R24h RVR,RVR,RVPR4RVPR4RVPR4/p\PR4P V4P 4p\ V4pV'g \R4hV#) <09>email<69> password_hash<73>'<27>' is required.<2E> display_name<6D>
avatar_url<EFBFBD>bio<69>userszFailed to create user.<2E>rWr2r>rP<00>insertrSrrX<00>rg<00>required<65>fieldrr<00>createds& r<00> create_userrx<00>s<><00><00><17><1F>)<29>H<EFBFBD><19><05><16>{<7B>{<7B>5<EFBFBD>!<21>!<21><1C>q<EFBFBD><15><07>~<7E>6<>7<> 7<><1A>
<10><17><17>!<21><17><17><1F>1<><16><07> <0B> <0B>N<EFBFBD>3<><14>g<EFBFBD>k<EFBFBD>k<EFBFBD>,<2C>/<2F> <0A>w<EFBFBD>{<7B>{<7B>5<EFBFBD>!<21>  <06>D<EFBFBD><18>~<7E>~<7E>g<EFBFBD>&<26>-<2D>-<2D>d<EFBFBD>3<>;<3B>;<3B>=<3D>H<EFBFBD><14>X<EFBFBD><1E>G<EFBFBD> <12><1A>3<>4<>4<> <12>Nrc<00>h<00>V^8<>dQhR\R\\\\3,,/#)r<00>user_idr<00>r"rrrr)rs"rrr<00>s+<00><00>a<01>a<01>C<EFBFBD>a<01>H<EFBFBD>T<EFBFBD>#<23>s<EFBFBD>(<28>^<5E>$<<3C>arc<00><><00>\\PR4PR4P RV4P ^4P 44#)rqr^rz<00>rr>rPrQrRr!rS)rzs&r<00>get_user_by_idr~<00>sC<00><00> <11>(<28>.<2E>.<2E><17>)<29>0<>0<><13>5<>8<>8<><19>G<EFBFBD>L<>R<>R<>ST<53>U<>]<5D>]<5D>_<> `<60>`rc<00>h<00>V^8<>dQhR\R\\\\3,,/#)rrjr)rrrr)rs"rrr<00>s+<00><00>]<01>]<01>S<EFBFBD>]<01>X<EFBFBD>d<EFBFBD>3<EFBFBD><03>8<EFBFBD>n<EFBFBD>%=<3D>]rc<00><><00>\\PR4PR4P RV4P ^4P 44#)rqr^rjr})rjs&r<00>get_user_by_emailr<6C><00>sB<00><00> <11>(<28>.<2E>.<2E><17>)<29>0<>0<><13>5<>8<>8<><17>%<25>H<>N<>N<>q<EFBFBD>Q<>Y<>Y<>[<5B> \<5C>\rc<00>t<00>V^8<>dQhR\\\3,R\\\3,/#rfrh)rs"rrr<00>s*<00><00><13><13>t<EFBFBD>C<EFBFBD><13>H<EFBFBD>~<7E><13>$<24>s<EFBFBD>C<EFBFBD>x<EFBFBD>.<2E>rc<00>Z<00>.ROpVF(pVPV4R9gK\RV R24h RVR,RVR,RVPR4RVPRR4RVPRR 4R
2026-02-14 22:57:24 -07:00
VPR
2026-02-15 02:18:07 -07:00
4R VPR R 4RVR,R VPR 4RVPR4RVPR4/ p\PR4P V4P 4p\ V4pV'g \R4hV#)rz<00>title<6C>storage_prefixrlrm<00> description<6F>
visibility<EFBFBD>private<74>status<75>uploaded<65> recorded_date<74>language<67>en<65>manifest_sha256<35> bundle_sha256<35> published_at<61> audio_postszFailed to create audio post.)rzr<>r<>)Nr rrrts& r<00>create_audio_postr<74><00>s<00><00>5<>H<EFBFBD><19><05> <12>;<3B>;<3B>u<EFBFBD> <1D><1A> +<2B><1C>q<EFBFBD><15><07>~<7E>6<>7<> 7<><1A>
2026-02-14 22:57:24 -07:00
<12>7<EFBFBD>9<EFBFBD>%<25><0F><17><17>!<21><15>w<EFBFBD>{<7B>{<7B>=<3D>1<><14>g<EFBFBD>k<EFBFBD>k<EFBFBD>,<2C> <09>:<3A><10>'<27>+<2B>+<2B>h<EFBFBD>
<EFBFBD>3<><17><17><1B><1B>_<EFBFBD>5<><12>G<EFBFBD>K<EFBFBD>K<EFBFBD>
2026-02-15 02:18:07 -07:00
<EFBFBD>D<EFBFBD>1<><18>'<27>"2<>3<><19>7<EFBFBD>;<3B>;<3B>'8<>9<><17><17><1B><1B>_<EFBFBD>5<><16><07> <0B> <0B>N<EFBFBD>3<> <06>D<EFBFBD><18>~<7E>~<7E>m<EFBFBD>,<2C>3<>3<>D<EFBFBD>9<>A<>A<>C<>H<EFBFBD><14>X<EFBFBD><1E>G<EFBFBD> <12><1A>9<>:<3A>:<3A> <12>Nrc<00>h<00>V^8<>dQhR\R\\\\3,,/#<00>rrErr{)rs"rrr<00>s'<00><00>#<23>#<23>#<23>#<23>(<28>4<EFBFBD><03>S<EFBFBD><08>><3E>*B<>#rc<00><><00>\PR4PR4PRV4P ^4p\ VP 44#)r<><00>2*, users(user_id, email, display_name, avatar_url)rE)r>rPrQrRr!rrS)rE<00>querys& r<00>get_audio_post_by_idr<64><00>sF<00><00><10><0E><0E>}<7D>%<25> <0F><16>D<> E<> <0B><12>I<EFBFBD>w<EFBFBD> <1F> <0E><15>q<EFBFBD><18> 
<EFBFBD> <12>%<25>-<2D>-<2D>/<2F> "<22>"rc <00><><00>V^8<>dQhR\R\R\R\\\\3,,/#)rrzr r!r<00>r"rrrr)rs"rrr<00>s><00><00>E<01>E<01>s<EFBFBD>E<01>#<23>E<01>#<23>E<01>t<EFBFBD>D<EFBFBD>QT<51>VY<56>QY<51>N<EFBFBD>G[<5B>Erc<00><00>\WVR7#))r r!rz)<01>list_audio_posts)rzr r!s&&&r<00>list_user_historyr<79><00>s<00><00> <1B><14>G<EFBFBD> D<>Drc <00><><00>V^8<>dQhR\R\R\\,R\\,R\\\\
3,,/#)rr r!r<>rzr)r"rrrrr)rs"rrr<00>se<00><00>
2026-02-14 22:57:24 -07:00
<1B>
<1B>3<EFBFBD>
<1B>3<EFBFBD>
<1B><18>#<23><1D>
<1B>`h<>il<69>`m<>
<1B>y}<7D>C<02>DG<02>IL<02>DL<02>M<02>zN<02>
2026-02-15 02:18:07 -07:00
rc<00>B<00>\W4wrE\PR4PR4pV'dVP RV4pV'dVP RV4pVP RRR7P WE4P4p\V4#)r<>r<>r<>rz<00>
created_atT<EFBFBD><01>desc<73> r*r>rPrQrR<00>order<65>rangerSr)r r!r<>rzr(r)r<>rs&&&& rr<>r<><00>s~<00><00><1A>4<EFBFBD>'<27>J<EFBFBD>E<EFBFBD> <14>N<EFBFBD>N<EFBFBD>=<3D> )<29> 0<> 0<>1e<31> f<>E<EFBFBD><11><15><08><08><1C>z<EFBFBD>2<><05><0E><15><08><08><19>G<EFBFBD>,<2C><05><14>{<7B>{<7B><<3C>d<EFBFBD>{<7B>3<>9<>9<>%<25>E<>M<>M<>O<>H<EFBFBD> <10><18>?<3F>rc <00><><00>V^8<>dQhR\R\\\3,R\\\\3,,/#)rrE<00>updatesr)r"rrrr)rs"rrr<00>s7<00><00><1C><1C>s<EFBFBD><1C>T<EFBFBD>#<23>s<EFBFBD>(<28>^<5E><1C><08><14>c<EFBFBD>SV<53>h<EFBFBD><1E>@X<>rc<00>R<00>V'g \V4#0RmpVP4UUu/uFwr4W29gK W4bK pppV'g \V4#\PR4P V4P RV4P 4p\V4#uuppi)r<>r<>rE>
r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>)r<><00>itemsr>rP<00>updaterRrSr)rEr<><00>allowed<65>k<>v<>cleanrs&& r<00>update_audio_postr<74><00>s<><00><00> <12>#<23>G<EFBFBD>,<2C>,<2C> <06>G<EFBFBD>&<26>m<EFBFBD>m<EFBFBD>o<EFBFBD> ><3E>o<EFBFBD>d<EFBFBD>a<EFBFBD><11><1C>T<EFBFBD>Q<EFBFBD>T<EFBFBD>o<EFBFBD>E<EFBFBD> ><3E> <10>#<23>G<EFBFBD>,<2C>,<2C> <11><0E><0E>}<7D>%<25> <0F><16><05><1D> <0B><12>I<EFBFBD>w<EFBFBD> <1F> <10><17><19>  <0A> <12>(<28> <1B><1B><> ?s
2026-02-14 22:57:24 -07:00
<00>
2026-02-15 02:18:07 -07:00
B#<06>B#c<00><><00>V^8<>dQhR\R\\\3,R\\\3,/#<00>rrErgrrG)rs"rrrs1<00><00><13><13>c<EFBFBD><13>D<EFBFBD><13>c<EFBFBD><18>N<EFBFBD><13>t<EFBFBD>C<EFBFBD><13>H<EFBFBD>~<7E>rc <00><><00>.R
OpVF)pVPV4'dK\RV R24h RVRVR,RVR,RVPR4RVPR4RVR,/p\PR4P V4P 4p\ V4pV'g \R 4hV#) rJrL<00>sha256rlrmrEr9<00>
size_bytesrIzFailed to add archive file.)rJrLr<>rr)rErgrurvrrrws&& r<00>add_archive_filer<65>s<><00><00>)<29>H<EFBFBD><19><05><16>{<7B>{<7B>5<EFBFBD>!<21>!<21><1C>q<EFBFBD><15><07>~<7E>6<>7<> 7<><1A>
<12>7<EFBFBD><0E><07><06><0F><0E><07><06><0F><16><07> <0B> <0B>N<EFBFBD>3<><14>g<EFBFBD>k<EFBFBD>k<EFBFBD>,<2C>/<2F><10>'<27>(<28>#<23>  <06>D<EFBFBD><18>~<7E>~<7E>o<EFBFBD>.<2E>5<>5<>d<EFBFBD>;<3B>C<>C<>E<>H<EFBFBD><14>X<EFBFBD><1E>G<EFBFBD> <12><1A>8<>9<>9<> <12>Nrc<00>h<00>V^8<>dQhR\R\\\\3,,/#r<>r<>)rs"rrrs'<00><00><1B><1B><03><1B><04>T<EFBFBD>#<23>s<EFBFBD>(<28>^<5E>(<<3C>rc<00><><00>\PR4PR4PRV4P RRR7P 4p\ V4#)rIr^rEr<>Fr<46>)r>rPrQrRr<>rSr)rErs& r<00>list_archive_filesr<73>sI<00><00><10><0E><0E><EFBFBD>'<27> <0F><16><03><1B> <0B><12>I<EFBFBD>w<EFBFBD> <1F> <0E><15>|<7C>%<25><15> (<28> <10><17><19>  <0A> <11><18>?<3F>rc<00>^<00>V^8<>dQhR\R\R\\\3,/#)rrE<00>metadatar)r"rrr)rs"rrr#s)<00><00> <0F> <0F>S<EFBFBD> <0F>C<EFBFBD> <0F>D<EFBFBD><13>c<EFBFBD><18>N<EFBFBD> rc<00><00>RVRV/p\\PR4PR4P RV4P ^4P 44pV'dF\PR4PRV/4P RV4P 4pM2\PR4PV4P 4p\V4pV'g \R4hV#)rEr<><00>archive_metadataz"Failed to upsert archive metadata.)
rr>rPrQrRr!rSr<>rsrX)rEr<>r<00>existingrrYs&& r<00>upsert_archive_metadatar<61>#s<><00><00> <15>w<EFBFBD>
2026-02-14 22:57:24 -07:00
<EFBFBD>H<EFBFBD> 5<>D<EFBFBD><15>h<EFBFBD>n<EFBFBD>n<EFBFBD>%7<>8<>?<3F>?<3F> <09>J<>M<>M<>i<EFBFBD>Y`<60>a<>g<>g<>hi<68>j<>r<>r<>t<>u<>H<EFBFBD><0F><1B>><3E>><3E>"4<>5<><<3C><<3C>j<EFBFBD>(<28>=S<>T<>W<>W<>Xa<58>cj<63>k<>s<>s<>u<><08><1B>><3E>><3E>"4<>5<><<3C><<3C>T<EFBFBD>B<>J<>J<>L<><08>
<10><18>
2026-02-15 02:18:07 -07:00
<1A>C<EFBFBD> <0E><1A>?<3F>@<40>@<40> <0E>Jrc<00>h<00>V^8<>dQhR\R\\\\3,,/#r<>r{)rs"rrr2s+<00><00>l<01>l<01>#<23>l<01>(<28>4<EFBFBD><03>S<EFBFBD><08>><3E>*B<>lrc<00><><00>\\PR4PR4P RV4P ^4P 44#)r<>r^rEr}<00>rEs&r<00>get_archive_metadatar<61>2sD<00><00> <11>(<28>.<2E>.<2E>!3<>4<>;<3B>;<3B>C<EFBFBD>@<40>C<>C<>I<EFBFBD>w<EFBFBD>W<>]<5D>]<5D>^_<>`<60>h<>h<>j<> k<>krc<00><><00>V^8<>dQhR\R\\\3,R\\\3,/#r<>rG)rs"rrr6s1<00><00><0F><0F>3<EFBFBD><0F><14>c<EFBFBD>3<EFBFBD>h<EFBFBD><1E><0F>D<EFBFBD><13>c<EFBFBD><18>N<EFBFBD>rc<00><00>RVRVPRR4RVPR4RVPR4RVPR4RVPR4/p\\PR4P R4P RV4P ^4P44pV'do\PR4PVP4UUu/uFwrEVR8wgKWEbK upp4P RV4P4pM2\PR4PV4P4p\V4pV'g \R4hV#uuppi) rE<00>has_speaker_consentF<74>license<73> consent_notes<65> allowed_use<73> restrictions<6E>archive_rightsz Failed to upsert archive rights.) rWrr>rPrQrRr!rSr<>r<>rsrX)rErgrr<>r<>r<>rrYs&& r<00>upsert_archive_rightsr<73>6s7<00><00><11>7<EFBFBD><1D>w<EFBFBD>{<7B>{<7B>+@<40>%<25>H<><11>7<EFBFBD>;<3B>;<3B>y<EFBFBD>)<29><17><17><1B><1B>_<EFBFBD>5<><15>w<EFBFBD>{<7B>{<7B>=<3D>1<><16><07> <0B> <0B>N<EFBFBD>3<>  <06>D<EFBFBD><16>h<EFBFBD>n<EFBFBD>n<EFBFBD>%5<>6<>=<3D>=<3D>i<EFBFBD>H<>K<>K<>I<EFBFBD>W^<5E>_<>e<>e<>fg<66>h<>p<>p<>r<>s<>H<EFBFBD><0F> <14>N<EFBFBD>N<EFBFBD>+<2B> ,<2C> <13>V<EFBFBD>d<EFBFBD>j<EFBFBD>j<EFBFBD>l<EFBFBD>E<>l<EFBFBD>d<EFBFBD>a<EFBFBD>a<EFBFBD>9<EFBFBD>n<EFBFBD>T<EFBFBD>Q<EFBFBD>T<EFBFBD>l<EFBFBD>E<> F<> <0F>R<EFBFBD> <09>7<EFBFBD> #<23> <14>W<EFBFBD>Y<EFBFBD> <11><1C>><3E>><3E>"2<>3<>:<3A>:<3A>4<EFBFBD>@<40>H<>H<>J<><08>
2026-02-14 22:57:24 -07:00
<10><18>
<1A>C<EFBFBD> <0E><1A>=<3D>><3E>><3E> <0E>J<EFBFBD><4A>Fs <00>. E=
<EFBFBD>>E=
2026-02-15 02:18:07 -07:00
c<00>h<00>V^8<>dQhR\R\\\\3,,/#r<>r{)rs"rrrQs+<00><00>j<01>j<01><03>j<01><08><14>c<EFBFBD>3<EFBFBD>h<EFBFBD><1E>(@<40>jrc<00><><00>\\PR4PR4P RV4P ^4P 44#)r<>r^rEr}r<>s&r<00>get_archive_rightsr<73>QsD<00><00> <11>(<28>.<2E>.<2E>!1<>2<>9<>9<>#<23>><3E>A<>A<>)<29>W<EFBFBD>U<>[<5B>[<5B>\]<5D>^<5E>f<>f<>h<> i<>irc <00><><00>V^8<>dQhR\R\\\\3,,R\\\\3,,/#)rrE<00>chunksrr<>)rs"rrrWs<<00><00><1B><1B>C<EFBFBD><1B><14>d<EFBFBD>3<EFBFBD><03>8<EFBFBD>n<EFBFBD>)=<3D><1B>$<24>t<EFBFBD>C<EFBFBD>QT<51>H<EFBFBD>~<7E>BV<42>rc<00><><00>V'g.#.pVF<>pVPR4p\V\4'd'RRPRV44,R,pVP RVRVPR4RVPR4RVPR4R VPR 4RV/4K<> \
P R
4PV4P4p\V4#) <0B> embedding<6E>[<5B>,c3<00>J"<00>TFp\\V44x<00>K R#5i<01>N<>r<00>float<61><02>.0r<EFBFBD>s& r<00> <genexpr><3E>!add_rag_chunks.<locals>.<genexpr>_s<00><00><00>&H<>i<EFBFBD><11>s<EFBFBD>5<EFBFBD><11>8<EFBFBD>}<7D>}<7D>i<EFBFBD><69><00>!#<01>]rE<00> start_sec<65>end_sec<65>text<78>
confidence<EFBFBD>
rag_chunks)
rWrU<00>list<73>join<69>appendr>rPrsrSr)rEr<><00>rows<77>cr<63>rs&& r<00>add_rag_chunksr<73>Ws<><00><00> <11><11> <09> <0A>D<EFBFBD> <13><01><15>E<EFBFBD>E<EFBFBD>+<2B>&<26> <09> <15>i<EFBFBD><14> &<26> &<26><1B>c<EFBFBD>h<EFBFBD>h<EFBFBD>&H<>i<EFBFBD>&H<>H<>H<>3<EFBFBD>N<>I<EFBFBD> <0C> <0B> <0B><19>7<EFBFBD><1B>Q<EFBFBD>U<EFBFBD>U<EFBFBD>;<3B>/<2F><19>1<EFBFBD>5<EFBFBD>5<EFBFBD><19>+<2B><16><01><05><05>f<EFBFBD> <0A><1C>a<EFBFBD>e<EFBFBD>e<EFBFBD>L<EFBFBD>1<><1B>Y<EFBFBD>  <0E>
<EFBFBD> <14><18>~<7E>~<7E>l<EFBFBD>+<2B>2<>2<>4<EFBFBD>8<>@<40>@<40>B<>H<EFBFBD> <10><18>?<3F>rc <00><><00>V^8<>dQhR\R\R\R\\\\3,,/#)rrEr r!rr<>)rs"rrros8<00><00>
2026-02-14 22:57:24 -07:00
<1B>
<1B>S<EFBFBD>
<1B><03>
<1B><03>
<1B>d<EFBFBD>4<EFBFBD>PS<50>UX<55>PX<50>><3E>FZ<46>
2026-02-15 02:18:07 -07:00
rc<00><><00>\W4wr4\PR4PR4P RV4P RRR7P W44P4p\V4#)r<>r^rEr<>Fr<46>r<>)rEr r!r(r)rs&&& r<00>list_rag_chunksr<73>os_<00><00><1A>4<EFBFBD>'<27>J<EFBFBD>E<EFBFBD><10><0E><0E>|<7C>$<24> <0F><16><03><1B> <0B><12>I<EFBFBD>w<EFBFBD> <1F> <0E><15>{<7B><15><15> '<27> <0E><15>u<EFBFBD> <1A> <10><17><19>  <0A> <11><18>?<3F>rc <00><><00>V^8<>dQhR\R\R\R\R\\\\3,,/#)rrz<00>
query_textr r!r)r"rrrr)rs"rrr|sB<00><00><1B><1B>s<EFBFBD><1B><03><1B>3<EFBFBD><1B>3<EFBFBD><1B>X\<5C>]a<>be<62>gj<67>bj<62>]k<>Xl<58>rc<00><00>\W#4wrE\PR4PR4P RV4P RRV R24P RRR7PWE4P4p\V4#)r<>z<>chunk_id, post_id, start_sec, end_sec, text, confidence, created_at, audio_posts!inner(post_id, user_id, title, visibility, created_at)zaudio_posts.user_idr<64><00>%r<>Tr<54>)
r*r>rPrQrR<00>iliker<65>r<>rSr)rzr<>r r!r(r)rs&&&& r<00>search_rag_chunksr<73>|s~<00><00><1A>4<EFBFBD>'<27>J<EFBFBD>E<EFBFBD><10><0E><0E>|<7C>$<24> <0F><16> Q<01>
2026-02-14 22:57:24 -07:00
<EFBFBD>
2026-02-15 02:18:07 -07:00
<0C><12> !<21>7<EFBFBD> +<2B> <0E><15>v<EFBFBD><11>:<3A>,<2C>a<EFBFBD>(<28> )<29> <0E><15>|<7C>$<24><15> '<27> <0E><15>u<EFBFBD> <1A> <10><17><19> <0A> <11><18>?<3F>rc <00><><00>V^8<>dQhR\R\\,R\R\\\\
3,,/#)rrz<00>query_embeddingr!r)r"rr<>rrr)rs"rrr<00>s@<00><00> <1B> <1B>c<EFBFBD> <1B>D<EFBFBD><15>K<EFBFBD> <1B>PS<50> <1B>]a<>bf<62>gj<67>lo<6C>go<67>bp<62>]q<> rc<04><><00>RRPRV44,R,p\PRRVRVR\\ ^V4^d4/4P 4p\ V4#) zC
Vector search via SQL RPC function `match_rag_chunks` (pgvector).
r<EFBFBD>r<>c3<00>J"<00>TFp\\V44x<00>K R#5ir<>r<>r<>s& rr<><00>+search_rag_chunks_vector.<locals>.<genexpr><3E>s<00><00><00> H<><0F>1<EFBFBD><13>U<EFBFBD>1<EFBFBD>X<EFBFBD><1D><1D><0F>r<EFBFBD>r<><00>match_rag_chunks<6B> p_user_id<69>p_query_embedding<6E> p_match_count)r<>r><00>rpcr'r&rSr)rzr<>r!<00> vector_textrs&&& r<00>search_rag_chunks_vectorr<72><00>sl<00><00><16><03><08><08> H<><0F> H<>H<>H<>3<EFBFBD>N<>K<EFBFBD><17>|<7C>|<7C><1A> <17><17> <1F><1B> <1B>S<EFBFBD><13>Q<EFBFBD><05><1D><03>4<>
<EFBFBD><06><0E>g<EFBFBD>i<EFBFBD> <0A> <11><18>?<3F>rc<00>t<00>V^8<>dQhR\\\3,R\\\3,/#rfrh)rs"rrr<00>s*<00><00><0F><0F>4<EFBFBD><03>S<EFBFBD><08>><3E><0F>d<EFBFBD>3<EFBFBD><03>8<EFBFBD>n<EFBFBD>rc
<00>f<00>VPR4'g \R4hRVPR4RVPR4RVR,RVPR4/p\PR4P V4P 4p\ V4pV'g \R4hV#)<07>actionz'action' is required.rErz<00>details<6C> audit_logzFailed to create audit log.rr)rgrrrYs& r<00> add_audit_logr<00>s<><00><00> <12>;<3B>;<3B>x<EFBFBD> <20> <20><18>0<>1<>1<> <12>7<EFBFBD>;<3B>;<3B>y<EFBFBD>)<29><11>7<EFBFBD>;<3B>;<3B>y<EFBFBD>)<29><10>'<27>(<28>#<23><11>7<EFBFBD>;<3B>;<3B>y<EFBFBD>)<29>  <06>D<EFBFBD><18>~<7E>~<7E>k<EFBFBD>*<2A>1<>1<>$<24>7<>?<3F>?<3F>A<>H<EFBFBD>
2026-02-14 22:57:24 -07:00
<10><18>
2026-02-15 00:07:07 -07:00
<1A>C<EFBFBD> <0E><1A>8<>9<>9<> <0E>Jrc <00><><00>V^8<>dQhR\\,R\\,R\R\R\\\\
2026-02-15 02:18:07 -07:00
3,,/#)rrErzr r!r)rr"rrrr)rs"rrr<00>s`<00><00>
2026-02-14 22:57:24 -07:00
<1B>
<1B>X<EFBFBD>c<EFBFBD>]<5D>
<1B>H<EFBFBD>S<EFBFBD>M<EFBFBD>
<1B>X[<5B>
<1B>hk<68>
<1B>vz<76>{<>AD<02>FI<02>AI<02>|J<02>wK<02>
2026-02-15 02:18:07 -07:00
rc<00>2<00>\W#4wrE\PR4PR4pVeVP RV4pVeVP RV4pVP RRR7P WE4P4p\V4#)rr^rErzr<>Tr<54>r<>)rErzr r!r(r)r<>rs&&&& r<00>list_audit_logsr<00>s<><00><00><1A>4<EFBFBD>'<27>J<EFBFBD>E<EFBFBD> <14>N<EFBFBD>N<EFBFBD>;<3B> '<27> .<2E> .<2E>s<EFBFBD> 3<>E<EFBFBD><0E><1A><15><08><08><19>G<EFBFBD>,<2C><05><0E><1A><15><08><08><19>G<EFBFBD>,<2C><05><14>{<7B>{<7B><<3C>d<EFBFBD>{<7B>3<>9<>9<>%<25>E<>M<>M<>O<>H<EFBFBD> <10><18>?<3F>rc<00>R<00>V^8<>dQhR\R\\\3,/#r<>rG)rs"rrr<00>s"<00><00> <06> <06>S<EFBFBD> <06>T<EFBFBD>#<23>s<EFBFBD>(<28>^<5E> rc<00><><00>\V4pV'g/#RVR\V4R\V4R\V4R\ V^RR7R\ V^^<5E>R7/#) <09>post<73>filesr<73><00>rightsr<73>i<>)r r!r)rEr r!)r<>r<>r<>r<>r<>r)rEr
s& r<00>get_post_bundler <00>sb<00><00> <1F><07> (<28>D<EFBFBD> <0F><11> <09> <0F><04><0F>#<23>G<EFBFBD>,<2C><12>(<28><17>1<><10>$<24>W<EFBFBD>-<2D><14>o<EFBFBD>g<EFBFBD>A<EFBFBD>T<EFBFBD>B<><13>_<EFBFBD>W<EFBFBD>1<EFBFBD>C<EFBFBD>H<>  <06>rc<00>@<00>V^8<>dQh/^\9d
\;R&#)rr>)<02>__conditional_annotations__r)rs"rrrs<00><00><04><04>$J<01>I<>&<26>I<>%r)zapplication/octet-streamF)i)r%<00>)r%rNN)r%<00><>)r%<00>)r)NNr%<00>d)1r<00>__doc__<5F>os<6F>typingrrrrr<00>dotenvrr>rr <00>getenv<6E>stripr
r rXrrr*r4rCr[r_rdrxr~r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>rrr r)rs@r<00><module>rs<00><><01><04>
2026-02-15 00:07:07 -07:00
<EFBFBD>3<>3<><1E>*<2A> <0B> <0A><12> <09> <09>.<2E>)<29>/<2F>/<2F>R<EFBFBD>6<>6<>8<> <0C><1F>Y<EFBFBD>Y<EFBFBD>'B<>C<>I<>I<>r<EFBFBD>P<>P<>R<><19><13>4<>
2026-02-14 22:57:24 -07:00
<16>a<>
b<EFBFBD>b<> <20><1C>/H<>I<><08>I<>1<>%<25>
2026-02-15 02:18:07 -07:00
<16><1E><06>()<06>X <1C> E<01><13>*a<01>]<01> <13>6#<23>E<01>
<1B><1C>><13>,<1B> <0F>l<01><0F>6j<01> <1B>0
<1B><1B>" <1B>$<0F>$
2026-02-15 00:07:07 -07:00
<1B> r