o
    ȟ1i	                     @   s   d dl mZmZ d dlmZmZ d dlm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 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G dd deZ dS )    )datetime)OptionalUnion)
UploadFile)	BaseModel
ConfigDictFieldmodel_validator)get_db)CoreValidationError)Course   )AcademicYearResponseSchema)CourseCategoryResponseSchema)TermResponseSchema)AgeGroupResponse)TimeSlotResponseSchemac                   @   sV  e Zd ZU eed< eed< eed< dZee ed< dZee ed< eed< dZ	ee ed< dZ
ee ed	< dZee ed
< dZee ed< dZee ed< dZee ed< dZee ed< eed< eed< eed< dZeed< dZeed< dZeed< dZeed< dZeed< ee ed< eed< dZee ed< dZee ed< dZee ed< dS )CourseBaseSchemacourse_category_idage_group_idtime_slot_idNterm_idacademic_year_idnamedescriptionshort_descriptionsku
start_dateend_date
start_timeend_timeno_of_seatsamountis_bursary_productr   total_no_termsno_days_in_termno_weeks_in_termFis_enable_waitlistwaiting_list_limitis_special_course	is_activerate_per_classno_of_classesremaining_seat)__name__
__module____qualname__int__annotations__r   r   r   strr   r   r   r   r   r   r    r   r!   floatboolr%   r&   r'   r(   r)   r,   r-   r.    r7   r7   /app/schema/course.pyr      s6   
 r   c                   @   s2   e Zd ZU eddZeed< edddd ZdS )CourseCreateSchemaNdefaultimageaftermodec                 C   s^   t  "}|ttj| jktjd  dkrtdW d    | S 1 s(w   Y  | S )Nr   zSKU already exists.)	r   queryr   wherer   
deleted_atis_countr   )selfdbr7   r7   r8   validate0   s   

zCourseCreateSchema.validate)	r/   r0   r1   r	   r<   r   r3   r
   rG   r7   r7   r7   r8   r9   -   s   
 r9   c                   @   s    e Zd ZU eddZeed< dS )CourseUpdateSchemaNr:   r<   )r/   r0   r1   r	   r<   r   r3   r7   r7   r7   r8   rH   :   s   
 rH   c                   @   s~   e Zd ZU eed< eedf ed< eedf ed< eed< eed< e	e
B ed< eed< eed	< ed
dZedddd ZdS )CourseResponseSchemaidNr<   	image_urlacademic_yeartermcourse_category	time_slot	age_groupT)from_attributesr=   r>   c                 C   s   | j r| j j| j jd| _ | S )N)rJ   title)rN   rJ   rR   )rE   r7   r7   r8   rG   I   s   zCourseResponseSchema.validate)r/   r0   r1   r2   r3   r   r4   r   r   r   dictr   r   r   model_configr
   rG   r7   r7   r7   r8   rI   >   s   
 
rI   N)!datetimer   r   typingr   r   fastapir   pydanticr   r   r	   r
   core.configr   core.security.exceptionsr   modelsr   rL   r   rN   r   rM   r   rP   r   rO   r   r   r9   rH   rI   r7   r7   r7   r8   <module>   s     