o
    ȟ1i                     @   sn   d dl Z d dlmZmZ d dlmZ d dlmZmZ d dlm	Z	 d dl
mZmZ d dlmZ G dd	 d	ZdS )
    N)datetimetimezone)Path)get_db	BASE_PATH)GenericError)CourseCategoryCourse)CourseCategoryResponseSchemac                   @   sB   e Zd Zdd Zdd Zdd Zdefdd	Zd
d Zdd Z	dS )CourseCategoryServicec                    s   |j r?t|j jj}t  | }td|  }|j  I d H }t|d}|	| W d    |S 1 s8w   Y  |S d S )Nzuploads/wb)
iconr   filenamesuffixuuiduuid4r   readopenwrite)selfrequestfile_extensionnew_filenamefile_locationcontentf r    /app/services/course_category.pyupload_image   s   
z"CourseCategoryService.upload_imagec                    s   |j dgd}| |I d H }|r||d< t }tdi |}|| |  || |W  d    S 1 s;w   Y  d S )Nr   excluder   )
model_dumpr   r   r   addcommitrefresh)r   r   payloadr   dbZnew_course_categoryr   r   r   create_course_category   s   

$z,CourseCategoryService.create_course_categoryc                 C   sT   t  }|ttjd  }dd |D W  d    S 1 s#w   Y  d S )Nc                 S   s   g | ]	}t | qS r   )r
   model_validater!   ).0recordr   r   r   
<listcomp>(   s    zCCourseCategoryService.fetch_all_course_category.<locals>.<listcomp>)r   queryr   where
deleted_atis_all)r   r&   recordsr   r   r   fetch_all_course_category%   s   $z/CourseCategoryService.fetch_all_course_categorycourse_category_idc                 C   sl   t  )}|ttj|ktjd  }|stdddt	
| W  d    S 1 s/w   Y  d S )N  Course category not foundstatus_codeexc)r   r,   r   r-   idr.   r/   firstr   r
   r(   r!   )r   r3   r&   r*   r   r   r   fetch_course_category_details*   s   
$z3CourseCategoryService.fetch_course_category_detailsc                    s   |j ddgd}| |I d H }|r||d< t ,}|ttj|ktjd j	|dd}|
  |dkr>tddd	W d    d S 1 sIw   Y  d S )
Nr9   r   r   fetch)synchronize_sessionr     z Could not update course categoryr6   )r!   r   r   r,   r   r-   r9   r.   r/   updater#   r   )r   r3   r   r%   r   r&   resultr   r   r   update_course_category3   s"   
"z,CourseCategoryService.update_course_categoryc                 C   s   t  F}|ttj|k dkrtddd|ttj|ktj	
d  }|s3tdddttj|_	|  ddiW  d    S 1 sLw   Y  d S )	Nr   r>   z9Course category is associated with course. Cannot delete.r6   r4   r5   messagez$Course category deleted successfully)r   r,   r	   r-   r3   countr   r   r9   r.   r/   r:   r   nowr   utcr#   )r   r3   r&   course_categoryr   r   r   delete_course_categoryA   s   
$z,CourseCategoryService.delete_course_categoryN)
__name__
__module____qualname__r   r'   r2   intr;   rA   rG   r   r   r   r   r      s    	r   )r   r   r   pathlibr   core.configr   r   core.security.exceptionsr   modelsr   r	   schema.course_categoryr
   r   r   r   r   r   <module>   s    