o
    Uh                     @   s   d dl mZ d dlmZ d dlm  m  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 d dlmZ d d	lmZ G d
d dZdS )    )HTTPException)SessionN)Messages)CategoryCreateTblCategory)	GroupBaseTblGroup)TblMainData)
TblStudent)CustomResponsec                   @   s   e Zd ZdefddZdejfddZdefdd	Z	defd
dZ
dejfddZdefddZdefddZdefddZdedejfddZdS )GroupServicedbc                 C   s   || _ || _d S )N)r   token)selfr   r    r   0/var/www/html/RetailAPI/app/api/group/service.py__init__   s   
zGroupService.__init__requestc                    s6   t | }t|| j | j  tdtj	dS )N1statusmessage)
r   model_validate
model_dumpr   creater   commitr   r   GROUP_CREAT)r   r   created_userr   r   r   create_group   s
   
zGroupService.create_groupgroup_idc                    s.   t || j}|stdtjdtj|S )N  status_codedetail)	r   	get_groupr   r   r   GROUP_NOT_FOUNDschemasGroupResposer   r   r   groupr   r   r   r$      s
   zGroupService.get_groupc                    s8   t || j}|stdtjdtj|d |d dS )Nr    r!   r      category_assignedcategory)r   get_group_categoryr   r   r   r%   r&   GroupCategoryResponse)r   r   resultr   r   r   r.      s
   zGroupService.get_group_categoryc                    s`   t |}|jd u rtdtjdt|j|| j}|s$tdtjd| j	  t
dtjdS )Nr    r!   r   r   )r   r   r   r   r   r%   r   updater   r   r   GROUP_UPDATE)r   r   r)   updated_groupr   r   r   update_group"   s   


zGroupService.update_group
group_codec                    s,   | j ttj|k }dd |D S )Nc                 S   s   g | ]}t j|qS r   )r&   StudentInfor   ).0studentr   r   r   
<listcomp>.   s    z3GroupService.get_group_students.<locals>.<listcomp>)r   queryr
   filterr5   all)r   r5   studentsr   r   r   get_group_students,   s   zGroupService.get_group_studentsc                 C   s   t |j| j}|stdtjd|jrtdddS |j	}| j
t t j	|kt j|jk }|r8tdddS |jrAtdddS tt| | j |j|_| j  tdtjdS )	Nr    r!   0z#Category already assigned by admin.r   zJThis category is already assigned to another group in the same simulation.z(Category already assigned to this group.r   )r   r$   r   r   r   r   r%   r,   r   simulation_coder:   r;   choose_categoryfirstr   r   r   r   r   r   GROUP_CATEGORY)r   r   r)   r@   existing_categoryr   r   r   create_categoryM   s(   

zGroupService.create_categoryc                 C   sx   | j ttj|k }|stddd|jp|j}|s$tddd| j t	t	j
|k }|s:tddd|S )Nr    Group not foundr!   i  zGroup has no category assignedz%Main data not found for this category)r   r:   r   r;   r   rB   r   r,   r-   r	   format_type)r   r   r)   r-   	main_datar   r   r   get_main_data_by_group_servicea   s   z+GroupService.get_main_data_by_group_servicereturnc                 C   s>   | j ttj|k }|stdddtj|j	|j
dS )Nr    rF   r!   r+   )r   r:   r   r;   r   rB   r   r&   r/   r,   r-   r(   r   r   r   get_group_category_servicem   s   z'GroupService.get_group_category_serviceN)__name__
__module____qualname__r   r   r&   GroupCreater   intr$   r.   GroupUpdater4   strr>   r   rE   rI   r/   rK   r   r   r   r   r      s    
!r   )fastapir   sqlalchemy.ormr   app.api.group.schemasapir)   r&   app.locale.messagesr   app.models.main.categoryr   r   app.models.main.groupr   r   app.models.main.main_datar	   app.models.main.studentr
   app.utils.schemas_utilsr   r   r   r   r   r   <module>   s    