
    =h                         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mZ d dlZd dlZ G d	 d
e	eef         Zy)    )EmailStr)Session)OTPLog)OTPLogSchema)BaseRepository)Optional)datetimetimezone	timedeltaNc                        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de
fdZd	e
d
edee   fdZdefdZdeddfdZd	ed
edefdZd	e
d
edee   fdZdeddfdZ xZS )OTPRepositorydbc                 .    t         |   |t               y N)super__init__r   )selfr   	__class__s     I/var/www/html/phonemate/phone_mate_backend/repositories/otp_repository.pyr   zOTPRepository.__init__   s    V$    db_modelreturnc                     |S r    )r   r   s     r   
_to_entityzOTPRepository._to_entity   s    r   entityc                     |S r   r   )r   r   s     r   _to_db_modelzOTPRepository._to_db_model   s    r   c                 j    dj                  t        j                  t        j                  |            S )N )k)joinrandomchoicesstringdigits)r   lengths     r   generate_otpzOTPRepository.generate_otp   s     wwv~~fmmv>??r   emailotp_typec                    | j                   j                  t              j                  t        j                  |k(  t        j
                  |k(        j                  t        j                  j                               j                         S r   )
r   queryr   filterr)   typeorder_by
created_atdescfirstr   r)   r*   s      r   get_latest_otpzOTPRepository.get_latest_otp   sU    ww}}V$VFLLE)6;;(+BCXf'',,./UW	r   
expired_atc                 r    t        j                  t        j                        }||j	                  d       k  S )N)tzinfo)r	   nowr
   utcreplace)r   r5   r8   s      r   is_otp_expiredzOTPRepository.is_otp_expired   s*    ll8<<(CKKtK444r   otp_idNc                 (   | j                   j                  t              j                  t        j                  |k(        j                         }|rCt        j                  t        j                        |_
        | j                   j                          y y r   )r   r,   r   r-   idr2   r	   r8   r
   r9   used_atcommit)r   r<   otp_logs      r   mark_otp_usedzOTPRepository.mark_otp_used#   s[    ''--'..vyyF/BCIIK&ll8<<8GOGGNN r   c           
         K   | j                         }t        j                  t        j                        }t        |||||t        d      z         }| j                  |       d {   S 7 w)N   )minutes)r)   otpr.   r0   r5   )r(   r	   r8   r
   r9   r   r   create)r   r)   r*   rF   r8   rA   s         r   
create_otpzOTPRepository.create_otp)   s`     !ll8<<(Yr22
 [[))))s   A%A.'A,(A.c                   K   | j                   j                  t              j                  t        j                  |k(        j                  t        j
                  |k(        j                  t        j                  j                  d             j                  t        j                  j                               j                         S wr   )r   r,   r   r-   r)   r.   r?   is_r/   r0   r1   r2   r3   s      r   r4   zOTPRepository.get_latest_otp5   sz     ww}}V$VFLLE)*VFKK8+,VFNN&&t,-Xf'',,./UW	s   CCrA   c                    K   t        j                  t        j                        |_        | j                  |j                  |       d {    y 7 wr   )r	   r8   r
   r9   r?   updater>   )r   rA   s     r   rB   zOTPRepository.mark_otp_used=   s2     ",,x||4kk'**g...s   AA
AA)   )__name__
__module____qualname__r   r   r   r   r   r   r   strr(   intr4   r	   r;   rB   r   rH   __classcell__)r   s   @r   r   r      s    %7 %8F#3 8N < F @ @C 3 8L;Q 5 5C D 
*h 
*# 
*, 
*#  ,AW /< /D /r   r   )pydanticr   sqlalchemy.ormr   modelsr   schemas.authr   repositories.base_repositoryr   typingr   r	   r
   r   r#   r%   r   r   r   r   <module>rZ      s9     "  % 7  2 2  3/N<#78 3/r   