
    =h                         d dl Z d dlmZmZmZ d dl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 d d
lmZ d dlmZ d dlmZmZ  G d deeef         Zy)    N)datetimetimezone	timedelta)OptionalList)jwt)EmailStr)Session)Users)BaseRepository)UserRead)EmailVerificationStatus)bcrypt_context)AlreadyExistsExceptionNotFoundExceptionc                        e Zd Zdef fdZdee   dee   fdZdedefdZ	dedef fd	Z
	 dd
edee   ee   z  fdZd
edefdZdeded
edefdZdededefdZdededefdZd
edee   fdZ xZS )UserRepository
db_sessionc                 .    t         |   |t               y N)super__init__r   )selfr   	__class__s     J/var/www/html/phonemate/phone_mate_backend/repositories/user_repository.pyr   zUserRepository.__init__   s    U+    db_modelreturnc                 4    |rt        j                  |      S d S r   )r   model_validate)r   r   s     r   
_to_entityzUserRepository._to_entity   s    4<x&&x0F$Fr   entityc                 4    t        di |j                         S )N )r   
model_dump)r   r"   s     r   _to_db_modelzUserRepository._to_db_model   s    +v((*++r   userc                    K   | j                  |j                         d {   }|rt        d      t        |   |       d {   S 7 (7 wNUser)get_by_emailemailr   r   create)r   r'   existing_userr   s      r   r-   zUserRepository.create   sI     "//

;;(00W^D))) < *s!   AA#AAAAr,   c                 F   K   | j                  d||       d {   S 7 w)Nr,   convert_to_entity)get_by_field)r   r,   r1   s      r   r+   zUserRepository.get_by_email!   s2      &&U.? ' 
 
 	
 
s   !!passwordc                    K   | j                  |       d {   }|syt        j                  ||j                        sy|S 7 *w)NF)r+   r   verifyr3   )r   r,   r3   r'   s       r   authenticatezUserRepository.authenticate(   s@     &&u--$$Xt}}= .s   AA+Anameuser_idexpires_deltac                     |||d}t        j                  t        j                        |z   }|j	                  d|i       t        j                  |t        j                  d      t        j                  d            S )N)r,   idsubexp
SECRET_KEY	ALGORITHM)	algorithm)	r   nowr   utcupdater   encodeosgetenv)r   r7   r8   r,   r9   rD   expiress          r   create_access_tokenz"UserRepository.create_access_token0   sh     

 ,,x||,}<ug&'zzBIIl+ryy7M
 	
r   stepc                    K   | j                  |       d {   }|st        d      ||_        t        j                  t
        j                        |_        | j                  ||       d {   S 7 Z7 wr)   )		get_by_idr   rI   r   rA   r   rB   
updated_atrC   )r   r8   rI   r'   s       r   update_stepzUserRepository.update_step>   s_     ^^G,,#F++	",,x||4[[$/// - 0"   A6A2AA6-A4.A64A6
company_idc                    K   | j                  |       d {   }|st        d      ||_        t        j                  t
        j                        |_        | j                  ||       d {   S 7 Z7 wr)   )	rK   r   default_companyr   rA   r   rB   rL   rC   )r   r8   rO   r'   s       r   update_default_companyz%UserRepository.update_default_companyG   s`     ^^G,,#F++)",,x||4[[$/// - 0rN   c                 F  K   | j                  |d       d {   }|sy t        j                  j                  |_        t        j                  t        j                        |_	        | j                  j                          | j                  j                  |       |S 7 w)NFr0   )r+   r   VERIFIEDvalueis_email_verifiedr   rA   r   rB   email_verified_atdbcommitrefresh)r   r,   r'   s      r   verify_emailzUserRepository.verify_emailP   sv     &&u&FF!8!A!A!G!G!)hll!; Gs   B!BBB!)T)__name__
__module____qualname__r
   r   r   r   r   r!   r&   r-   r	   r+   strr6   intr   rH   rM   rR   r[   __classcell__)r   s   @r   r   r      s    ,7 ,G8E? Gx7I G,8 , ,* *h * 26

	(	huo	-
 C 

"%
.1
BK
0 0C 0H 00C 0S 0X 0
 
Xe_ 
r   r   )rE   r   r   r   typingr   r   joser   pydanticr	   sqlalchemy.ormr
   modelsr   repositories.base_repositoryr   schemas.authr   utils.constantsr   utils.encryptionr   utils.exceptionsr   r   r   r$   r   r   <module>rl      sC    	 2 2 !   "  7 ! 3 + FI^HeO4 Ir   