o
    {iU                     @   sR  d dl Z d dlmZ e je je jedZee d dl	Z	d dl
mZmZmZmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZmZmZmZ d dlZd dlmZ d dl Z d dl!Z!d dl"m#Z" ej$j%ed e Z&e&'ddd Z(dgZ)e&j*ee)ddgdgd e je je jedZ+e j,e+dd e&-deefde!j.defddZ/e&-de eefdedefddZ0e&1e" e je je jeZ2e je2dZ3e j4e3se je2d Z3e&5d!d"d# Z6e&5d$d%d& Z7e&j8d'ee+d(d)d* e j4e3r'e&j8d!ee3dd+dd* dS dS ),    N)load_dotenvz.env.development)FastAPIDependsHTTPExceptionstatus)StaticFiles)FileResponse)CORSMiddleware)OAuth2PasswordRequestForm)Session)SessionLocalengineBaseget_db)User)router)bindstartupc               
   C   s\   zt  } dd l}||  |   W d S  ty- } ztd|  W Y d }~d S d }~ww )Nr   zBM25 Init Failed: )r   dictionary_service	init_bm25close	Exceptionprint)dbr   e r   !/home/air/biblejyuku/back/main.pystartup_event   s   
r   *T)allow_originsallow_credentialsallow_methodsallow_headersuploads)exist_okz/biblejyuku/api/registeruserr   c                 C   s`   | ttj| jk }|rtdddt| j}t| j|d}|	| |
  ddiS )Ni  zUsername already registered)status_codedetail)usernamehashed_passwordmessagezUser created successfully)queryr   filterr(   firstr   authget_password_hashpasswordaddcommit)r%   r   db_userr)   new_userr   r   r   register8   s   
r5   z/biblejyuku/api/token	form_datac                    sr   | ttj| jk }|rt| j|js#t	t
jdddidtjtjd}tjd|ji|d}|dd	S )
NzIncorrect username or passwordzWWW-AuthenticateBearer)r&   r'   headers)minutessub)dataexpires_deltabearer)access_token
token_type)r+   r   r,   r(   r-   r.   verify_passwordr0   r)   r   r   HTTP_401_UNAUTHORIZEDdatetime	timedeltaACCESS_TOKEN_EXPIRE_MINUTEScreate_access_token)r6   r   r%   access_token_expiresr>   r   r   r   login_for_access_tokenC   s   

rG   frontendfront/c                     s6   t jtd} t j| rt| S tt jtdS )Nz
index.htmlz	main.html)ospathjoinFRONTEND_DIRexistsr   )
index_pathr   r   r   	read_root\   s
   rQ   z/favicon.icoc                      s0   t jt jtdrtt jtdS tjS )Nzfavicon.ico)rK   rL   rO   rM   rN   r   r   HTTP_204_NO_CONTENTr   r   r   r   faviconc   s   .rS   z/biblejyuku/api/static)	directorystatic)name)rT   html)9rK   dotenvr   rL   rM   dirnameabspath__file__env_pathrB   fastapir   r   r   r   fastapi.staticfilesr   fastapi.responsesr   fastapi.middleware.corsr	   fastapi.securityr
   sqlalchemy.ormr   databaser   r   r   r   modelsr   r.   schemasbible_routerr   metadata
create_allappon_eventr   originsadd_middlewareUPLOAD_DIRECTORYmakedirspost
UserCreater5   rG   include_routerBASE_DIRrN   rO   getrQ   rS   mountr   r   r   r   <module>   s`    
	
 


