o
    ȟ1iN	                     @   sZ   d dl m Z mZ d dlmZ d dlmZmZ d dlmZm	Z	 d dl
mZ G dd dZdS )	    )datetimetimezone)get_db)CoreDBErrorGenericError)TermCourse)TermResponseSchemac                   @   s:   e Zd Zdd Zdd ZdefddZdd	 Zd
d ZdS )TermServicec                 C   s   t  <}| }ztdi |}|| |  || |W W  d    S  ty> } z|  td| d }~ww 1 sBw   Y  d S )NzCould not create new term:  )	r   
model_dumpr   addcommitrefresh	Exceptionrollbackr   )selfrequestdbpayloadZnew_termer   r   /app/services/term.pysave   s   

zTermService.savec                 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    z.TermService.fetch_all_term.<locals>.<listcomp>)r   queryr   where
deleted_atis_all)r   r   recordsr   r   r   fetch_all_term   s   $zTermService.fetch_all_termterm_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  Term not foundstatus_codeexc)r   r   r   r   idr   r    firstr   r	   r   r   )r   r$   r   r   r   r   r   term_detail   s   

$zTermService.term_detailc                 C   s   |j dgd}t ,}|ttj|ktjd j|dd}|	  |dkr.t
dddW d    d S 1 s9w   Y  d S )	Nr*   )excludefetch)synchronize_sessionr     zCould not update termr'   )r   r   r   r   filterr*   r   r    updater   r   )r   r$   r   r   r   resultr   r   r   update_term(   s   "zTermService.update_termc                 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   r0   z3Age group is associated with course. Cannot delete.r'   r%   r&   messagezTerm deleted successfully)r   r   r   r   r$   countr   r   r*   r   r    r+   r   nowr   utcr   )r   r$   r   termr   r   r   delete_term4   s   

$zTermService.delete_termN)	__name__
__module____qualname__r   r#   intr,   r4   r:   r   r   r   r   r
   	   s    r
   N)r   r   core.configr   core.security.exceptionsr   r   modelsr   r   schema.termr	   r
   r   r   r   r   <module>   s    