
    rOi%                     H   S r SSKJr  SSKJr  SSKJrJrJrJ	r	  SSK
Jr  SSKJrJr  SSKJrJrJrJr  SSKJr  \R,                  " S	S
/S9\S 5       5       r\R,                  " SS
/S9\S 5       5       r\R,                  " S	S/S9\S 5       5       r\R,                  " SS/S9\S 5       5       r\R,                  " SS/S9\S 5       5       r\R,                  " SS/S9\S 5       5       r\R,                  " SS/S9\S 5       5       r\R,                  " SS
/S9\S 5       5       rg)uM   
基础方向配置 API

提供方向的 CRUD 操作和基础管理功能。
    )request)category_api_bp)admin_requiredcategory_admin_requiredlogin_requiredget_current_user)APIResponse)ValidationErrorNotFoundError)dbCategoryConfigCategoryAdminRole)CategoryService GET)methodsc            
      $   [        5       n U R                  [        R                  :X  a  [        R
                  " 5       nO [        R                  " U R                  5      nSSK	J
n  U" SU Vs/ s H  o3R                  SS9PM     snS.5      $ s  snf )u   获取所有方向列表r   )jsonifyTFinclude_config)success
categories)r   roler   ADMINr   get_all_categoriesr   get_user_categoriesidflaskr   to_dict)userr   r   cs       H   /Users/yu22x/Desktop/ddd_副本121/ctf/app/routes/admin/category/base.pylist_categoriesr$      sx     D yyDJJ$779
"66tww?
 @JK
1yyy6
K  Ks   ,B
z/<category_id>c                     [         R                  " U 5      nU(       d  [        S5      e[        R                  " SUR                  SS90S9$ )u   获取方向详情   方向不存在categoryTr   data)r   get_categoryr   r	   r   r    category_idr'   s     r#   r*   r*   #   sL     ++K8H-..(**$*?@     POSTc                     [         R                  " 5       n U (       d  [        S5      eU R                  S5      nU(       d
  [        SSS9e[        R
                  R                  U5      nU(       a
  [        SSS9e [        R                  " U 5      n[        R                  " SUR                  5       0SS9$ ! [         a,  n[        R                  " S	[        U5       35      s S
nA$ S
nAff = f)u   创建新方向   无效的请求数据r   u   方向 ID 不能为空fieldu   方向 ID 已存在r'   u   方向创建成功r)   messageu   创建失败: N)r   get_jsonr
   getr   queryr   create_categoryr	   r   r    	Exceptionserver_errorstr)r)   r,   existingr'   es        r#   r8   r8   0   s     D566((4.K6dCC ##''4H34@@C"2248""h..01(
 	
  C''.Q(ABBCs   ;:B6 6
C, !C'!C,'C,PUTc                 r   [         R                  " 5       nU(       d  [        S5      e [        R                  " X5      nU(       d  [        S5      e[        R                  " SUR                  5       0SS9$ ! [
         a    e [         a,  n[        R                  " S[        U5       35      s SnA$ SnAff = f)u   更新方向配置r0   r&   r'   u   方向配置更新成功r3   u   更新失败: N)r   r5   r
   r   update_categoryr   r	   r   r    r9   r:   r;   )r,   r)   r'   r=   s       r#   r@   r@   K   s     D566C"22;E 122""h..01.
 	
   C''.Q(ABBCs   AA6 6B6
!B1+B61B6DELETEc                     [         R                  " U 5      nU(       d  [        S5      e[        R                  " SS9$ ! [         a    e [
         a,  n[        R                  " S[        U5       35      s SnA$ SnAff = f)u   删除方向r&   u   方向删除成功)r4   u   删除失败: N)r   delete_categoryr   r	   r   r9   r:   r;   )r,   r   r=   s      r#   rC   rC   b   sr    	C!11+> 122""+?@@  C''.Q(ABBCs   ;> A>!A93A>9A>z/<category_id>/togglec                 :   [         R                  R                  U 5      nU(       d  [        S5      eUR                  (       + Ul        [
        R                  R                  5         [        R                  " SUR                  0SUR                  (       a  SOS 3S9$ )u   启用/禁用方向r&   enabledu	   方向已u   启用u   禁用r3   )
r   r7   r6   r   rE   r   sessioncommitr	   r   r+   s     r#   toggle_categoryrH   r   s     ##''4H-..#+++HJJ))*(8(8HhGH r-   z/importc                     [         R                  " 5       n U (       d  [        S5      eU R                  S5      nU R                  SS5      nU(       d  [        S5      eUR                  S5      (       d
  [        SSS9eUR                  S	5      (       d
  [        S
S	S9eUS   n[        R
                  R                  U5      n U(       a  US:X  a  [        SU S3SS9eUS:X  aT  [        R                  R                  U5        [        R                  R                  5         [        R                  " U5      nO-[        R                  " X15      nO[        R                  " U5      n[        R                  " SUR                  5       0SUR                    S3S9$ ! [         a    e ["         aJ  n[        R                  R%                  5         [        R&                  " S[)        U5       35      s SnA$ SnAff = f)u   导入方向配置（JSON）r0   configmodecreateu   缺少配置数据r   u   配置必须包含 id 字段r1   nameu   配置必须包含 name 字段u   方向 u+    已存在，请选择覆盖或合并模式	overwriter'   u    导入成功r3   u   导入失败: N)r   r5   r
   r6   r   r7   r   rF   deleterG   r   r8   r@   r	   r   r    rM   r9   rollbackr:   r;   )r)   rJ   rK   r,   r<   r'   r=   s          r#   import_categoryrQ      s    D566XXhF88FH%D233 ::d<DII::f>fMM,K##''4HCx%k]*UV  $

!!(+

!!#*::6B +::;O '66v>H""h..01hmm_M:
 	
   C


''.Q(ABBCs   CF G5+?G0*G50G5z/<category_id>/exportc                    [         R                  R                  U 5      nU(       d  [        S5      eUR                  UR
                  UR                  UR                  UR                  UR                  UR                  5       UR                  5       UR                  5       UR                  5       UR                  5       UR                  5       UR!                  5       UR"                  UR$                  S.n[&        R(                  " SU0S9$ )u   导出方向配置（JSON）r&   )r   rM   icondescriptionrE   
sort_orderform_fieldsform_layoutstagesdifficulty_rulesoutput_config	ui_configadvanced_configprompt_template_pathknowledge_base_pathrJ   r(   )r   r7   r6   r   r   rM   rS   rT   rE   rU   get_form_fieldsget_form_layout
get_stagesget_difficulty_rulesget_output_configget_ui_configget_advanced_configr]   r^   r	   r   )r,   r'   rJ   s      r#   export_categoryrf      s     ##''4H-.. kk++##))//1//1%%'$99;!335++-#779 ( = =';;F$ Xv$677r-   N)__doc__r   r   app.routes.admin.categoryr   app.middleware.authr   r   r   r   app.utils.responser	   app.utils.exceptionsr
   r   app.models.database.modelsr   r   r   r   app.services.categoryr   router$   r*   r8   r@   rC   rH   rQ   rf    r-   r#   <module>rp      s  
  5 i i * ? N N 1 rE7+  ,$ '%9  : rF8,C  -C2 '%9C  :C* '(<C  =C .A  B y6(31C  41Ch .@8  A8r-   