o
    h@                     @   s   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	 d dl
mZmZmZmZmZmZ d dlmZ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  G dd deZ!G dd deZ"G dd deZ#dS )    )datetime)Union)HTTPException)OAuth2PasswordRequestForm)	BaseModelField)INTEGER	TIMESTAMPVARCHAR
ForeignKeyselecttext)MappedSessionmapped_columnrelationshipobject_session)Base)TblAdmin)TblSeafarers)CustomModel)hybrid_propertyc                   @   s   e Zd ZU eddZedB ed< eddZedB ed< eddZ	edB ed< eddZ
edB ed< eddZedB ed< eddZedB ed< eddZedB ed	< dS )
	UsersBaseNdefaultusr_id	user_namepasswordrole_id	entity_id
created_at
updated_at)__name__
__module____qualname__r   r   int__annotations__r   strr   r   r   r    r   r!    r(   r(   1/var/www/html/beacon-api/app/models/main/users.pyr      s   
 r   c                   @   s:   e Zd ZU eddZedB ed< eddZedB ed< dS )UsersFilterNr   r   r   )	r"   r#   r$   r   r   r%   r&   r   r'   r(   r(   r(   r)   r*      s   
 r*   c                	   @   sv  e Zd ZU dZededddZee e	d< ede
ddddZee e	d< ed	e
ddddZee e	d	< eeed
ddZee e	d< eeddZee e	d< edededdZee e	d< edededdZee e	d< edddZedd Zedededd fddZedededefddZed eee e!f dededB fd!d"Z"ededededd fd#d$Z#dS )%TblUsers	tbl_usersr   T)primary_keyautoincrementr      N)nullableserver_defaultr   ztbl_role.role_id)r0   r   r   usr_created_AtFzcurrent_timestamp()r    r!   z"NULL ON UPDATE current_timestamp()TblRoleusers)back_populatesc                 C   s~   t | }|d u s| jd u s| jd u rd S | jdv r%tttj| jk}n| jdkr6tttj| jk}nd S |	|
 S )N>               )r   r   r   r   r   whereadmin_idr   seafarer_idexecutescalar_one_or_none)selfsessionstmtr(   r(   r)   entity)   s   

zTblUsers.entitydatadbreturnc                 C   s,   |  }| di |}|| |  |S )Nr(   )
model_dumpaddflush)clsrC   rD   	data_dictnew_datar(   r(   r)   create6   s
   
zTblUsers.createc                 C   s4   | | | j|k }|stdddt|S Ni  zUser not found)status_codedetail)queryfilterr   firstr   r   model_validate)rI   r   rD   get_datar(   r(   r)   
get_usr_id>   s   
zTblUsers.get_usr_idrequestc                 C   sx   t |trd|ji}nt |tr|jdd}nt |tr|}ntd|| jdi |	 }|s4d S t
di |jS )Nr   T)exclude_nonez5Unsupported request type passed to get_by_user_filterr(   )
isinstancer   usernamer   rF   dict	TypeErrorrP   	filter_byrR   r   __dict__)rI   rV   rD   filter_datauserr(   r(   r)   get_by_user_filterE   s   


zTblUsers.get_by_user_filterc                 C   sf   | | | j|k }|stddd| }| D ]
\}}t||| q|| |	  |S rM   )
rP   rQ   r   rR   r   rF   itemssetattrrG   rH   )rI   r   rC   rD   rT   rJ   keyvaluer(   r(   r)   updateT   s   
zTblUsers.update)$r"   r#   r$   __tablename__r   r   r   r   r%   r&   r
   r   r'   r   r   r   r   r	   r   r    r!   r   roler   rB   classmethodr   r   rL   rU   r   rZ   r*   r   r`   re   r(   r(   r(   r)   r+      s(   
     
& r+   N)$r   typingr   fastapir   fastapi.securityr   pydanticr   r   
sqlalchemyr   r	   r
   r   r   r   sqlalchemy.ormr   r   r   r   r   app.models.mainr   app.models.main.adminr   app.models.main.seafarerr   app.utils.schemas_utilsr   sqlalchemy.ext.hybridr   r   r*   r+   r(   r(   r(   r)   <module>   s     
