o
    ]ojX                     @  s   d Z ddlmZ ddlZddlmZ ddlmZmZmZm	Z	m
Z
mZmZmZmZmZ ddlmZmZ ddlmZ dd
dZG dd deZG dd deZG dd deZG dd deZG dd deZdS )z4Tenant-aware persistence for the generic QR service.    )annotationsN)datetime)
JSONBooleanCheckConstraintDateTime
ForeignKeyIndexIntegerStringTextUniqueConstraint)Mappedmapped_column)Basereturnstrc                   C  s   t t S )N)r   uuiduuid4 r   r   apps/qr_service/models.py_uuid
   s    r   c                   @  s  e Zd ZU dZeddddedddd	d
eddddedddfZeedde	dZ
ded< eededdddZded< eedddZded< eedZded< eedddZded< eedddZded < eed!ddZded"< eedddZded	< eed#ddZded
< eedddZded< eedZded$< ed%eded&Zd'ed(< eed)dd*d&Zded< eeZd+ed,< eeZd+ed< eeZd-ed.< eeZ d-ed/< eedd0d&Z!d1ed2< eedd0d&Z"d1ed3< ee#ddd&Z$d4ed5< eedZ%ded6< eed7Z&ded8< eede'j(d&Z)d9ed:< eeZ*d+ed;< eeZ+d+ed<< eeZ,d+ed=< eed7Z-ded>< eed#Z.ded?< eeded@Z/dedA< eeded@Z0dedB< eeZ1d+edC< eeZ2d+edD< edEeded&Z3d'edF< dGS )HQRRecord
qr_recordsix_qr_token_hashpublic_token_hashTuniqueix_qr_resource	tenant_id	owner_appresource_typeresource_referenceix_qr_status_expirystatus
expires_atz-scan_count >= 0 AND successful_use_count >= 0ck_qr_nonnegative_countsname$   primary_keydefaultMapped[str]qr_id@   tenants.tenant_idFnullableindex   r2   display_namei  Mapped[str | None]description   public_token_prefix    qr_kind   
action_keypolicyr2   r,   Mapped[dict]policy_json   activeMapped[datetime | None]
valid_fromzMapped[int | None]	max_scansmax_successful_usesr   zMapped[int]
scan_countsuccessful_use_countMapped[bool]requires_authenticationauthentication_purpose   
created_byMapped[datetime]
created_atactivated_atsuspended_at
revoked_at
revoked_byrevoke_reasonqr_records.qr_idreplaced_by_qr_idreplaces_qr_idlast_scanned_atlast_successful_use_atmetadatametadata_jsonN)4__name__
__module____qualname____tablename__r	   r   __table_args__r   r   r   r.   __annotations__r   r   r6   r8   r   r:   r<   r!   r"   r    r>   r   dictrB   r$   r   rF   r%   r
   rG   rH   rI   rJ   r   rL   rM   rO   r   utcnowrQ   rR   rS   rT   rU   rV   rX   rY   rZ   r[   r]   r   r   r   r   r      sP   
 
 r   c                   @  s  e Zd ZU dZeddddedddfZeed	ded
Z	de
d< eededddZde
d< eed	eddddZde
d< eedddZde
d< eedddZde
d< eedZde
d< eedddZde
d< eedddZde
d< eedZde
d< eedZde
d< eedddZde
d< eedejdZd e
d!< eeddZd e
d"< eeZd#e
d$< eedddZde
d< d%S )&QRResolutionqr_resolutionsix_qr_resolution_hashresolution_token_hashTr   ix_qr_resolution_correlationr   correlation_idr)   r*   r-   resolution_idr/   r0   Fr5   rW   r1   r.   r    r7   r>   r!   r=   r"   rN   authenticated_subject_idchallenge_idrC   r$   r@   rP   rQ   r%   rE   consumed_atN)r^   r_   r`   ra   r	   rb   r   r   r   rl   rc   r   r   r.   ri   r    r>   r!   r"   rm   rn   r$   r   r   re   rQ   r%   ro   rk   r   r   r   r   rf   6   s$   
  rf   c                   @  s   e Zd ZU dZeddddfZeeddedZ	d	e
d
< eededddZd	e
d< eedddZd	e
d< eedddZde
d< edededZde
d< edededZde
d< edededZde
d< eedddZde
d< dS )QRAppPermissionqr_app_permissionsr   requesting_appuq_qr_permission_appr'   r)   Tr*   r-   permission_idr/   r0   Fr5   r@   rK   enabled
operationszMapped[list]operations_jsonresource_typesresource_types_jsonaction_keysaction_keys_jsonmay_manage_other_appsN)r^   r_   r`   ra   r   rb   r   r   r   rt   rc   r   r   rr   r   ru   r   listrw   ry   r{   r|   r   r   r   r   rp   I   s   
 rp   c                   @  s   e Zd ZU dZeddddddfZeedd	ed
Z	de
d< eedddZde
d< eedddZde
d< eedddZde
d< eedddZde
d< eedddZde
d< ededdZde
d< eedejdZde
d< dS )QRIdempotencyqr_idempotencyr   rr   	operationidempotency_keyuq_qr_idempotency_scoper'   r)   Tr*   r-   idempotency_idr/   Fr5   rN   request_hashresponserA   response_jsonr@   rP   rQ   N)r^   r_   r`   ra   r   rb   r   r   r   r   rc   r   rr   r   r   r   r   r   r   r   re   rQ   r   r   r   r   r~   U   s   
 r~   c                   @  s  e Zd ZU dZeddddfZeeddedZ	d	e
d
< eedddZd	e
d< eedZde
d< eedZde
d< eedddZd	e
d< eedZde
d< eedddZd	e
d< eedZde
d< edededZde
d< eedejdZde
d< dS )QRAuditEventqr_audit_eventsix_qr_audit_scoper   r.   rQ   r)   Tr*   r-   event_idr/   Fr5   r7   rl   eventrr   r;   resultrN   rk   detailsr@   rA   details_jsonrP   N)r^   r_   r`   ra   r	   rb   r   r   r   r   rc   r   r.   rl   r   rr   r   rk   r   rd   r   r   r   re   rQ   r   r   r   r   r   a   s   
 r   )r   r   )__doc__
__future__r   r   r   
sqlalchemyr   r   r   r   r   r	   r
   r   r   r   sqlalchemy.ormr   r   	config.dbr   r   r   rf   rp   r~   r   r   r   r   r   <module>   s    0
*