
    yi1                        S SK r S SKrS SKrS SKrS SKJr  S SKJr  S SKJ	r	  \R                  " \5      R                  5       R                  R                  r\S-  r\R                   " SS5      R#                  5       S;   r\R                   " S	5      =(       d    \R&                  " S
5      r " S S\5      r\" \R,                  R/                  \SS5      S9rS rS rS rS rg)    N)Jinja2Templates)StaticFiles)Responsez
db.sqlite3APP_ENVdev)prod
productionAPP_SECRET_KEY@   c                   0   ^  \ rS rSrS\4U 4S jjrSrU =r$ )CachedStaticFiles   returnc                 F   > [         TU ]  " U0 UD6nSUR                  S'   U$ )Nz#public, max-age=31536000, immutablezCache-Control)superfile_responseheaders)selfargskwargsresp	__class__s       ,/home/mario/Escritorio/furbo/app/database.pyr   CachedStaticFiles.file_response   s*    w$d5f5(M_%     )__name__
__module____qualname____firstlineno__r   r   __static_attributes____classcell__)r   s   @r   r   r      s      r   r   app	templates)	directoryc                  v   [         R                  " [        S SS9n [         R                  U l        U R                  S5        U R                  S5        U R                  S5        U R                  S5        U R                  S5        U R                  S5         U R                  S	5        U $ ! [         a     U $ f = f)
NF)isolation_levelcheck_same_threadzPRAGMA foreign_keys = ON;zPRAGMA journal_mode = WAL;zPRAGMA synchronous = NORMAL;zPRAGMA busy_timeout = 5000;zPRAGMA cache_size = -20000;zPRAGMA temp_store = MEMORY;zPRAGMA mmap_size = 268435456;)sqlite3connectDB_PATHRowrow_factoryexecute	Exception)conns    r   get_connr1      s    ??7DERD{{DLL,-LL-.LL/0LL./LL./LL./45 K  Ks   B* *
B87B8c                      [        5       $ )N)r1   r   r   r   _connr3   )   s
    :r   c                      U R                  SU S35      R                  5        Vs1 s H  o"S   iM	     sn$ s  snf ! [         a    [        5       s $ f = f)NzPRAGMA table_info()   )r.   fetchallr/   set)r0   tablers      r   _table_columnsr;   ,   sU    "ll-?wa+HIRRTUT!TUUU us   %= 8= = AAc                     [        5        n U R                  5       nUR                  S5        UR                  S5        UR                  S5      R                  5        Vs1 s H  o"S   iM	     nnSU;  a  UR                  S5        SU;  a  UR                  S5        S	U;  a  UR                  S
5        UR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  S5      R                  5        Vs1 s H  o"S   iM	     nnSU;  a"  UR                  S5        UR                  S5        SU;  a  UR                  S5        SU;  a  UR                  S5        SU;  a  UR                  S5        SU;  a  UR                  S5        SU;  a  UR                  S 5        S	U;  a  UR                  S!5        S"U;  a  UR                  S#5        S$U;  a  UR                  S%5        S&U;  a  UR                  S'5        S(U;  a  UR                  S)5        S*U;  a  UR                  S+5        UR                  S,5        UR                  S-5      R                  5        Vs1 s H  o"S   iM	     nnS*U;  a  UR                  S.5        UR                  S/5        UR                  S05        UR                  S15        UR                  S25        UR                  S35        UR                  S45        UR                  S55        UR                  S65        UR                  S75        UR                  S85        UR                  S95        UR                  S:5        UR                  S;5        UR                  S<5        UR                  S=5        UR                  S>5        UR                  S?5        UR                  S@5        UR                  SA5        U R	                  5         S S S 5        g s  snf s  snf s  snf ! , (       d  f       g = f)BNzPRAGMA foreign_keys=ONa  
        CREATE TABLE IF NOT EXISTS users (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            email TEXT NOT NULL UNIQUE,
            name TEXT NOT NULL,
            first_name TEXT,
            last_name TEXT,
            phone TEXT,
            password_hash TEXT NOT NULL,
            role TEXT NOT NULL DEFAULT 'alumno',
            created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%S','now','localtime'))
        )
        zPRAGMA table_info(users)r6   
first_namez,ALTER TABLE users ADD COLUMN first_name TEXT	last_namez+ALTER TABLE users ADD COLUMN last_name TEXTphonez'ALTER TABLE users ADD COLUMN phone TEXTa1  
        CREATE TABLE IF NOT EXISTS user_profile (
            user_id INTEGER PRIMARY KEY,
            phone TEXT,
            avatar TEXT,
            city TEXT,
            dni TEXT,
            birth_date TEXT,
            FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE
        )
        a  
        CREATE TABLE IF NOT EXISTS user_sports (
            user_id INTEGER PRIMARY KEY,
            team TEXT,
            category TEXT,
            position TEXT,
            dominant_foot TEXT,
            strengths TEXT,
            weaknesses TEXT,
            injury_history TEXT,
            training_type TEXT,
            FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE
        )
        a  
        CREATE TABLE IF NOT EXISTS user_health (
            user_id INTEGER PRIMARY KEY,
            physical_work INTEGER,
            physical_work_details TEXT,
            smoking INTEGER,
            alcohol INTEGER,
            recovery TEXT,
            chest_pain INTEGER,
            discomfort INTEGER,
            FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE
        )
        ap  
        CREATE TABLE IF NOT EXISTS user_consent (
            user_id INTEGER PRIMARY KEY,
            whatsapp_content INTEGER,
            video_permission INTEGER,
            privacy_acceptance INTEGER,
            data_confirmation INTEGER,
            agreement INTEGER,
            FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE
        )
        a0  
        CREATE TABLE IF NOT EXISTS user_guardians (
            user_id INTEGER PRIMARY KEY,
            occupation TEXT,
            study_place TEXT,
            parent_name TEXT,
            parent_email TEXT,
            FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE
        )
        a9  
        CREATE TABLE IF NOT EXISTS user_marketing (
            user_id INTEGER PRIMARY KEY,
            found_us TEXT,
            enjoyment TEXT,
            nerves_confidence TEXT,
            additional_comments TEXT,
            FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE
        )
        z
        CREATE TABLE IF NOT EXISTS user_finance (
            user_id INTEGER PRIMARY KEY,
            matricula_eur REAL NOT NULL DEFAULT 0,
            FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE
        )
        a  
        CREATE TABLE IF NOT EXISTS reservations (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%S','now','localtime')),
            date TEXT NOT NULL,
            time TEXT,
            duration_minutes INTEGER,
            price_cents INTEGER NOT NULL DEFAULT 0,
            name TEXT,
            email TEXT,
            phone TEXT,
            notes TEXT,
            user_id INTEGER,
            status TEXT NOT NULL DEFAULT 'confirmada',
            docente_id INTEGER NOT NULL,
            paid INTEGER NOT NULL DEFAULT 0,
            FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE SET NULL,
            FOREIGN KEY(docente_id) REFERENCES users(id) ON DELETE CASCADE
        )
        zPRAGMA table_info(reservations)
created_atz3ALTER TABLE reservations ADD COLUMN created_at TEXTzmUPDATE reservations SET created_at = strftime('%Y-%m-%dT%H:%M:%S','now','localtime') WHERE created_at IS NULLtimez-ALTER TABLE reservations ADD COLUMN time TEXTduration_minutesz<ALTER TABLE reservations ADD COLUMN duration_minutes INTEGERprice_centszJALTER TABLE reservations ADD COLUMN price_cents INTEGER NOT NULL DEFAULT 0namez-ALTER TABLE reservations ADD COLUMN name TEXTemailz.ALTER TABLE reservations ADD COLUMN email TEXTz.ALTER TABLE reservations ADD COLUMN phone TEXTnotesz.ALTER TABLE reservations ADD COLUMN notes TEXTuser_idz3ALTER TABLE reservations ADD COLUMN user_id INTEGERstatuszMALTER TABLE reservations ADD COLUMN status TEXT NOT NULL DEFAULT 'confirmada'
docente_idzIALTER TABLE reservations ADD COLUMN docente_id INTEGER NOT NULL DEFAULT 1paidzCALTER TABLE reservations ADD COLUMN paid INTEGER NOT NULL DEFAULT 0a  
        CREATE TABLE IF NOT EXISTS reservation_students (
            reservation_id INTEGER NOT NULL,
            user_id INTEGER NOT NULL,
            paid INTEGER NOT NULL DEFAULT 0,
            PRIMARY KEY (reservation_id, user_id),
            FOREIGN KEY(reservation_id) REFERENCES reservations(id) ON DELETE CASCADE,
            FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE
        )
        z'PRAGMA table_info(reservation_students)zKALTER TABLE reservation_students ADD COLUMN paid INTEGER NOT NULL DEFAULT 0aS  
        CREATE TABLE IF NOT EXISTS jugadores_gastos (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%S','now','localtime')),
            date TEXT NOT NULL,
            user_id INTEGER,
            reservation_id INTEGER,
            amount_cents INTEGER NOT NULL,
            category TEXT,
            concept TEXT,
            notes TEXT,
            FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE,
            FOREIGN KEY(reservation_id) REFERENCES reservations(id) ON DELETE CASCADE
        )
        z@CREATE INDEX IF NOT EXISTS idx_jg_date ON jugadores_gastos(date)zCCREATE INDEX IF NOT EXISTS idx_jg_user ON jugadores_gastos(user_id)zQCREATE INDEX IF NOT EXISTS idx_jg_reservation ON jugadores_gastos(reservation_id)a  
        CREATE TABLE IF NOT EXISTS notifications (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%S','now','localtime')),
            title TEXT,
            body TEXT,
            sender_id INTEGER,
            recipient_id INTEGER NOT NULL,
            reservation_id INTEGER,
            is_read INTEGER NOT NULL DEFAULT 0,
            deleted_by_sender INTEGER NOT NULL DEFAULT 0,
            deleted_by_recipient INTEGER NOT NULL DEFAULT 0,
            FOREIGN KEY(sender_id) REFERENCES users(id) ON DELETE SET NULL,
            FOREIGN KEY(recipient_id) REFERENCES users(id) ON DELETE CASCADE,
            FOREIGN KEY(reservation_id) REFERENCES reservations(id) ON DELETE CASCADE
        )
        zPCREATE INDEX IF NOT EXISTS idx_notif_rec ON notifications(recipient_id, is_read)zECREATE INDEX IF NOT EXISTS idx_notif_send ON notifications(sender_id)zICREATE INDEX IF NOT EXISTS idx_notif_created ON notifications(created_at)a  
        CREATE TABLE IF NOT EXISTS player_ratings (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            player_id INTEGER NOT NULL,
            docente_id INTEGER NOT NULL,
            rating INTEGER NOT NULL,
            notes TEXT,
            created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%S','now','localtime')),
            FOREIGN KEY(player_id) REFERENCES users(id) ON DELETE CASCADE,
            FOREIGN KEY(docente_id) REFERENCES users(id) ON DELETE CASCADE
        )
        a  
        CREATE TABLE IF NOT EXISTS valoraciones_jugador (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            eval_id TEXT NOT NULL,
            player_id INTEGER NOT NULL,
            docente_id INTEGER NOT NULL,
            area TEXT NOT NULL,
            subescala TEXT NOT NULL,
            indicador TEXT NOT NULL,
            score INTEGER NOT NULL,
            observaciones TEXT,
            created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%S','now','localtime')),
            FOREIGN KEY(player_id) REFERENCES users(id) ON DELETE CASCADE,
            FOREIGN KEY(docente_id) REFERENCES users(id) ON DELETE CASCADE
        )
        a  
        CREATE TABLE IF NOT EXISTS "formulario-registro" (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            pin TEXT NOT NULL UNIQUE,
            email TEXT,
            name TEXT,
            used INTEGER NOT NULL DEFAULT 0,
            expires_at TEXT NOT NULL,
            created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%S','now','localtime'))
        )
        zZCREATE INDEX IF NOT EXISTS idx_formreg_used_exp ON "formulario-registro"(used, expires_at)zAINSERT OR IGNORE INTO user_profile(user_id)  SELECT id FROM userszAINSERT OR IGNORE INTO user_sports(user_id)   SELECT id FROM userszAINSERT OR IGNORE INTO user_health(user_id)   SELECT id FROM userszAINSERT OR IGNORE INTO user_consent(user_id)  SELECT id FROM userszAINSERT OR IGNORE INTO user_guardians(user_id)SELECT id FROM userszAINSERT OR IGNORE INTO user_marketing(user_id)SELECT id FROM userszTINSERT OR IGNORE INTO user_finance(user_id, matricula_eur) SELECT id, 0.0 FROM users)r3   cursorr.   r7   commit)r0   cr:   
cols_userscols_rescols_rss         r   init_dbrQ   2   s   	DKKM			*+			  	 %&II.H$I$R$R$TU$Tqd$T
Uz)IIDEj(IICD*$II?@			 
 
	 	
		  	 	
		  	 	
		 
 
	 	
		 	 		 	
		 	 		 	
		  	 	
		  	( #$)),M"N"W"W"YZ"YQaD"YZx'IIKLII  F  G!IIEFX-IITU(IIbc!IIEF("IIFG("IIFG("IIFGH$IIKL8#IIefx'IIab!II[\			 	 		 "#+T!U!^!^!`a!`AQ4!`a IIcd			  	 	
		TU			WX			ef			  	" 	
		de			YZ			]^			  	 	
		  	" 	
		 
 
	 	
		no			UV			UV			UV			UV			UV			UV			hiI 
" V^ [J bK 
s9   AQQ-C0QQ+EQQE,QQ
Q$)r)   pathlibossecretsfastapi.templatingr   fastapi.staticfilesr   fastapir   Path__file__resolveparentBASE_DIRr+   getenvlowerIS_PRODtoken_urlsafe
SECRET_KEYr   pathjoinr$   r1   r3   r;   rQ   r   r   r   <module>rd      s      	  . + <<!))+2299
\
!
))Iu
%
+
+
-1G
GYY'(EG,A,A",E
  bggll8UK&PQ	Er   