Rails.application.routes.draw do

  require 'sidekiq/web'
  require 'admin_constraint'
  mount Sidekiq::Web => '/sidekiq', :constraints => AdminConstraint.new

  get 'attachments/download/:id', to: 'attachments#show'
  get 'attachments/download/:id/:filename', to: 'attachments#show'
  get 'auth/qq/callback', to: 'oauth/qq#create'
  get 'auth/failure', to: 'oauth/base#auth_failure'
  get 'auth/cas/callback', to: 'oauth/cas#create'
  get 'ecloud/ecloud_login', to: 'ecloud#ecloud_login_callback'




  resources :edu_settings
  scope '/api' do

    get 'home/index'
    get 'home/search'
    get 'main/first_stamp'

    get 'search', to: 'searchs#index'

    post   'praise_tread/like',   to: 'praise_tread#like'
    delete 'praise_tread/unlike', to: 'praise_tread#unlike'

    put    'commons/hidden',      to: 'commons#hidden'
    put    'commons/unhidden',    to: 'commons#unhidden'
    delete 'commons/delete',      to: 'commons#delete'

    resources :watch_video_histories, only: [:create]

    resource :edu_apis do
      get :edu_data_info
    end

    resources :resumes, only: [:create] do
      member do
        get :preview
      end
      collection do
        post :logo
        post :destroy_logo
      end
    end
    resources :job_data, only: [] do
      collection do
        get :hot_city
        get :salary
      end
    end
    resources :job_classifies, only: [:index]
    resources :jobs do
      member do
        post :apply
        get :applyed_users
        put :change
      end
    end

    resources :jupyters do
      collection do
        get :save_with_tpi
        get :save_with_tpm
        get :get_info_with_tpi
        get :get_info_with_tpm
        get :reset_with_tpi
        get :reset_with_tpm
        get :active_with_tpm
        get :active_with_tpi
        get :timeinfo_with_tpm
        get :timeinfo_with_tpi

        post :import_with_tpm
      end
    end

    resources :memos do
      member do
        post :sticky_or_cancel
        post :hidden
        get :more_reply
      end

      collection do
        post :reply
      end
    end

    resources :disciplines, only: [:index]
    resources :tag_disciplines, only: [:create]

    resources :item_banks do
      member do
        post :set_public
        post :set_private
      end
    end

    resources :item_baskets do
      collection do
        get :basket_list
        delete :delete_item_type
        post :batch_set_score
      end

      member do
        post :set_score
        post :adjust_position
      end
    end

    resources :examination_banks do
      member do
        post :set_public
        post :set_private
        delete :revoke_item
        post :send_to_course
        get :edit_random_exam
        post :update_random_exam
      end
      collection do
        post :create_random_exam
        post :cancel_items
      end
    end

    resources :examination_items do
      collection do
        delete :delete_item_type
        post :batch_set_score
      end

      member do
        post :set_score
        post :adjust_position
      end
    end

    resources :examination_intelligent_settings do
      collection do
        post :optinal_items
      end

      member do
        post :save_exam
        post :exchange_one_item
        post :exchange_items
      end
    end

    resources :hacks, path: :problems,  param: :identifier do
      collection do
        get :unpulished_list
      end
      member do
        post :publish
        post :cancel_publish
        get :start
        post :update_set
        delete :delete_set
      end
      resources :comments do
        collection do
          post :reply
        end
        member do
          post :hidden
        end
      end
    end

    resources :hack_user_lastest_codes, path: :myproblems,  param: :identifier do
      member do
        post :update_code
        get :code_debug
        get :code_submit
        match :listen_result, :via => [:get, :post]
        get :result
        get :submit_records
        post :restore_initial_code
        post :sync_code
        post :add_notes
      end

      collection do
        get :record_detail
      end


    end


    resources :tem_tests
    # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
    #
    #
    resources :accounts do

      collection do
        post :login
        post :register
        post :reset_password
        get :logout
        get :get_verification_code
        get :valid_email_and_phone
      end

    end

    resources :users do
      member do
        get :homepage_info
        post :cancel_authentication
        post :cancel_professional_certification
      end

      get :question_banks, on: :collection, to: 'users/question_banks#index'

      scope module: :users do
        resources :courses, only: [:index]
        resources :shixuns, only: [:index]
        resources :projects, only: [:index]
        resources :subjects, only: [:index]
        # hacks :question_banks, only: [:index]
        resource :experience_records, only: [:show]
        resource :grade_records, only: [:show]
        resource :watch, only: [:create, :destroy]
        resources :project_packages, only: [:index]
        # 私信
        resources :private_messages, only: [:index, :create, :destroy]
        resources :recent_contacts, only: [:index]
        resource :private_message_details, only: [:show]
        resource :unread_message_info, only: [:show]

        # 视频
        resources :videos, only: [:index, :update, :destroy] do
          collection do
            get :review
            post :batch_publish
            post :cancel
          end
          member do
            get :get_video_data
          end
        end
        resource :video_auths, only: [:create, :update]
      end


      collection do
        get :member_search
        post :following
        post :unfollow
        get :get_user_info
        get :attachment_show
        get :html_show
        get :get_navigation_info
        post :reply_message
        get :search_user_projects
        post :brief_introduction
        post :attendance
        get :system_update
        get :resume
        put :update_resume
        get :jobs
        get :applyed_jobs

        resource :trial_apply, only: [:create]
        resources :projects, module: :users, only: [] do
          get :search, on: :collection
        end

        resources :tidings, only: [:index]

        scope module: :users do
          resource :interest, only: [:create]

          resources :accounts, only: [:show, :update] do
            resource :phone_bind, only: [:create]
            resource :email_bind, only: [:create]
            resource :password, only: [:update]
            resource :avatar, only: [:update]
            resource :auth_attachment, only: [:create]
            resource :authentication_apply, only: [:create, :destroy]
            resource :professional_auth_apply, only: [:create, :destroy]
            resources :open_users, only: [:destroy]
          end
        end
      end
    end
    resources :users_for_private_messages, only: [:index]

    resources :myshixuns, param: :identifier, shallow: true do
      member do
        post :repository
        post :commits
        post :file_content
        post :update_file
        get :reset_my_game
        post :html_content
        get :open_webssh
        get :challenges
        post :sync_code
      end
      collection do
        get :sigle_mul_test
        match :training_task_status, :via => [:get, :post]
        match :code_runinng_message, :via => [:get, :post]
      end
      resources :games
    end

    resources :games, path: :tasks, param: :identifier do
      member do
        get :star
        get :git_entries
        get :answer
        get :answer_grade
        get :rep_content
        get :reset_original_code
        get :reset_passed_code
        post :file_update
        post :choose_build
        get :game_build
        get :game_status
        post :plus_or_cancel_praise
        get :cost_time
        get :system_update
        get :sync_modify_time
        get :picture_display
        get :sync_codes
        get :close_webssh
        get :reset_vnc_link
        get :get_answer_info
        get :unlock_answer
        get :check_test_sets
        get :unlock_choose_answer
        get :get_choose_answer
        get :jupyter

      end
      collection do
        get :challenges
      end
    end

    resources :subject_lists
    resources :shixun_lists

    resources :collections do
      delete :cancel, on: :collection
    end

    resources :shixuns, param: :identifier do

      collection do
        get :menus
        get :get_recommend_shixuns
        get :departments
        get :get_mirror_script
        post :apply_shixun_mirror
        get :download_file
        get :shixun_lists
        post :batch_send_to_course
      end

      member do
        post :copy
        get :propaedeutics
        get :show_right
        get :operation
        get :ranking_list
        get :discusses
        get :tasks
        get :collaborators
        get :settings
        get :get_script_contents
        get :get_custom_script
        post :repository
        post :prebuild_click_hot
        post :secret_repository
        post :set_secret_dir
        post :commits
        post :file_content
        post :upload_git_file
        post :upload_git_folder
        delete :delete_git_file
        post :update_file
        post :close
        post :add_file
        get :fork_list
        post :update_propaedeutics
        get :add_collaborators
        post :shixun_members_added
        match :change_manager, :via => [:get, :post]
        get :search_user_courses
        post :send_to_course
        delete :collaborators_delete
        get :cancel_publish
        get :cancel_apply_public
        get :publish
        get :apply_public
        get :shixun_exec
        post :review_shixun
        get :review_newest_record
        post :update_permission_setting
        post :update_learn_setting
        get :get_data_sets
        get :jupyter_exec
        post :upload_data_sets
        delete :destroy_data_sets
        get :shixun_quotes
        get :export_scores
      end

      resources :challenges do
        member do
          get 'index_up'
          get 'index_down'
          post 'create_choose_question'
          get 'show_choose_question'
          match 'choose_type_show', :via => [:get, :post]
          match 'edit_choose_question', :via => [:get, :post]
          match 'update_choose_question', :via => [:get, :post]
          delete 'destroy_challenge_choose'
          post :crud_answer
          get :answer

        end
      end

      resources :repositories do
        collection do
          post :add_project
          post :fork_project

          post :file_tree # 目录树
          post :update_file # 文件更新
          post :file_content # 文件内容

          post :commits # 提交记录
        end
      end
    end

    resources :discusses do
      collection do
        get :new_message
        get :forum_discusses
      end

      member do
        post :reply
        post :hidden
        post :reward_code
        post :plus
        post :top_or_down_discuss
      end
    end

    resources :subjects, path: :paths do
      member do
        get 'choose_subject_shixun'
        post 'publish'
        post :apply_public
        post :cancel_public
        post 'cancel_publish'
        post 'cancel_has_publish'
        post :cancel_has_public
        get 'statistics'
        get 'statistics_info'
        get 'shixun_report'
        get 'school_report'
        post 'update_attr'
        post :search_members
        post 'add_subject_members'
        delete 'delete_member'
        get :choose_course
        post 'send_to_course'
        delete :delete_member
        post :up_member_position
        post :down_member_position
        get :right_banner
        post :appointment
        post :update_team_title
      end

      collection do
        get 'create_subject'
        get 'new_subject'
        post 'append_to_stage'
        post :add_shixun_to_stage
        get 'search'
      end
    end

    resources :stages do
      member do
        get 'down_position'
        get 'up_position'
      end
    end

    resources :files, only: [:index, :show, :update] do
      collection do
        delete :bulk_delete
        put :bulk_move
        post :bulk_send
        put :bulk_public
        get :public_with_course_and_project
        get :mine_with_course_and_project
        post :import
        post :upload
        put :bulk_publish
      end
      member do
        get :histories
        post :update_visits
      end
    end

    resources :courses do
      member do
        get 'settings', :action => 'settings', :as => 'settings'
        post 'set_invite_code_halt'
        post 'set_public_or_private'
        post 'search_teacher_candidate'
        post 'add_teacher'
        post 'create_graduation_group'
        post 'join_graduation_group'
        post 'set_course_group'
        post 'change_course_admin'
        post 'change_member_role'
        post 'change_course_teacher'
        post 'delete_course_teacher'
        post 'teacher_application_review'
        post 'transfer_to_course_group'
        post 'delete_from_course'
        post 'add_students_by_search'
        post 'create_group_by_importing_file'
        post 'duplicate_course'
        post 'visits_plus_one'
        get 'get_historical_courses'
        get 'get_historical_course_students'
        get 'course_group_list'
        get 'add_teacher_popup'
        get 'teachers'
        get 'apply_teachers'
        get 'graduation_group_list'
        get 'top_banner'
        get 'left_banner'
        get 'students'
        get 'all_course_groups'
        get 'search_users'
        get 'base_info'
        get 'attahcment_category_list'
        get 'export_member_scores_excel'  #导出课堂信息
        get 'export_couser_info'
        get 'export_member_act_score'
        post 'switch_to_teacher'
        post 'switch_to_assistant'
        post 'switch_to_student'
        post 'exit_course'
        get 'informs'
        get 'inform_detail'
        post 'update_informs'
        post 'new_informs'
        delete 'delete_informs'
        get 'online_learning'
        post 'join_excellent_course'
        get 'tasks_list'
        post 'update_task_position'
        get 'course_groups'
        post 'join_course_group'
        get 'work_score'
        get 'act_score'
        get 'statistics'
        get 'course_videos'
        delete 'delete_course_video'
        post :move_to_category
        post :inform_up
        post :inform_down
        get :calculate_all_shixun_scores
        get :watch_video_histories
        get :watch_statics
        get :own_watch_histories
      end

      collection do
        post 'apply_to_join_course'
        post 'search_course_list'
        get 'board_list'
        get 'mine'
        get 'search_slim'
      end

      resources :course_videos, only:[:create, :update], shallow: true do
        member do
          get :watch_histories
        end
      end

      resources :course_stages, shallow: true do
        member do
          post :up_position
          post :down_position
        end
      end

      resources :attendances, shallow: true do
        get :statistics, on: :collection
      end

      resources :polls, only:[:index,:new,:create] do
        collection do
          post :publish   # 立即发布
          post :end_poll  # 立即截止
          post :destroys  # 多个删除
          post :set_public  # 设置公开
          post :join_poll_banks  # 加入习题集
          get :my_polls  #我的问卷题库
          get :public_polls # 公共问卷题库
          get :publish_modal # 立即发布弹窗内容
          get :end_poll_modal  # 立即截止弹窗内容
        end
      end

      resources :live_links, only: [:index, :update, :create, :edit, :destroy], shallow: true

      resources :homework_commons, shallow: true do

        member do
          get :group_list
          post :homework_code_repeat
          get :code_review_results
          get :code_review_detail
          post :update_explanation
          get :show_comment
          get :settings
          post :update_settings
          match 'works_list', :via => [:get, :post]
          # post :works_list
          get :reference_answer
          get :publish_groups
          get :end_groups
          post :alter_name
          get :update_score
          get :update_student_score
          post :batch_comment
          get :get_next_work
        end

        collection do
          post 'create_shixun_homework'
          match 'shixuns', via: [:get, :post]
          match 'subjects', via: [:get, :post]
          post 'create_subject_homework'
          post 'publish_homework'
          post 'end_homework'
          post 'set_public'
          post 'move_to_category'
          get 'choose_category'
          post 'multi_destroy'
          post 'add_to_homework_bank'
        end

        resources :student_works do
          member do
            get :shixun_work
            get :shixun_work_report
            post :adjust_review_score
            get :commit_des
            post :update_des
            post :adjust_score
            post :add_score
            post :add_score_reply
            delete :destroy_score
            delete :destroy_score_reply
            get :comment_list
            get :supply_attachments
            post :revise_attachment
            delete :destroy_score
            post :appeal_anonymous_score
            post :deal_appeal_score
            post :cancel_appeal
            get :export_shixun_work_report
            post :shixun_work_comment
            delete :destroy_work_comment
          end

          collection do
            get :search_member_list
            get :check_project
            get :cancel_relate_project
            post :relate_project
            delete :delete_work
          end
        end
      end


      resources :boards, shallow: true do
        resources :messages do
          collection do
            delete :bulk_delete
            put :bulk_move
            post :bulk_send
            put :bulk_public
          end

          member do
            get :reply_list
            put :sticky_top
            post :reply
          end
        end
        member do
          post 'move_category'
        end
      end

      resources :exercises ,only:[:index,:new,:create] do
        collection do
          get :my_exercises #我的试卷题库
          get :public_exercises # 公共试卷题库
          get :publish_modal # 立即发布弹窗内容
          get :end_modal  # 立即截止弹窗内容
          post :destroys
          post :set_public  # 设置公开
          post :join_exercise_banks  # 加入习题集
          post :publish   # 立即发布
          post :end_exercise  # 立即截止
        end
      end

      resources :course_groups, shallow: true do
        member do
          post 'rename_group'
          post 'move_category'
          post 'set_invite_code_halt'
        end

        collection do
        end
      end

      resources :graduation_topics do
        member do
          post :refuse_student_topic
          post :accept_student_topic
          post :student_select_topic
          post :student_cancel_topic
          get :show_detail
          get :show_comment
        end
        collection do
          delete :destroys
          post :set_public
          get :export
          post :add_to_bank
        end
      end

      resources :graduation_tasks, shallow: true do
        resources :graduation_works do
          collection do
            post 'search_member_list'
            get 'check_project'
            post 'relate_project'
            get 'cancel_relate_project'
            post 'revise_attachment'
            delete 'delete_work'
          end

          member do
            get 'comment_list'
            post 'add_score'
            post 'adjust_score'
            delete 'delete_score'
            get 'supply_attachments'
            post 'revise_attachment'
            post :assign_teacher
          end
        end
        member do
          get 'settings'
          post 'update_settings'
          get 'tasks_list'
          get :show_comment
          get :cross_comment_setting
          post :assign_works
          post :commit_comment_setting
          get :sonar
        end

        collection do
          post 'set_public'
          delete 'multi_destroy'
          post 'publish_task'
          post 'end_task'
          post 'add_to_bank'
        end
      end
    end

    resources :polls,except:[:index,:new,:create] do
      member do
        get :poll_setting
        post :commit_setting
        get :start_answer
        post :commit_poll
        get :commit_result
        get :poll_lists # 问卷的答题列表
        post :cancel_publish #撤销发布
        get :cancel_publish_modal  #撤销发布的弹窗
        get :common_header
        get :publish_groups
      end
      resources :poll_questions,only:[:new,:create]
    end

    resources :poll_questions,except:[:new,:create,:index] do
      member do
        post :delete_answer
        post :up_down
        post :commit_answer
      end
      resource :poll_votes,only:[:create,:destroy]
    end

    resources :exercises do
      member do
        get :choose_shixun
        get :commit_shixun
        get :exercise_setting
        post :commit_setting
        get :start_answer
        post :commit_exercise
        get :redo_modal  #打回重做弹窗内容
        post :redo_exercise
        get :review_exercise
        post :review_exercises_by_students
        get :exercise_lists
        get :blank_exercise   #摒弃，仅作为测试html页面才会使用
        get :export_exercise
        get :common_header
        get :exercise_result
        post :cancel_exercise
        get :begin_commit #提交前的弹窗
        get :publish_groups
        post :adjust_score
        get :get_next_exercise_user #获取下一个待评阅的学生
        get :get_objective_scores #获取一名学生的各类客观题得分
      end
      resources :exercise_questions,only:[:new,:create,:index]
    end

    resources :exercise_questions,except:[:new,:create,:index] do
      member do
        post :up_down
        post :delete_answer
        post :adjust_score
        post :batch_adjust_score
        post :update_scores
        post :update_question_score
      end
      resource :exercise_answers,only:[:create,:destroy]
    end


    resources :course_modules, shallow: true do
      member do
        get 'sticky_module'
        get 'hidden_module'
        post 'rename_module'
        post 'add_second_category'
      end
      collection do
        post 'unhidden_modules'
      end
    end

    resources :course_second_categories, shallow: true do
      member do
        post 'rename_category'
        post 'move_category'
      end
      collection do

      end
    end

    resources :question_banks do
      collection do
        get :bank_list
        post :save_banks
        get :my_courses
        post :send_to_course
        delete :multi_delete
        post :multi_public
      end
    end

    resources :homework_banks do
      member do
        post :set_public
      end
    end

    resources :gtopic_banks
    resources :task_banks

    resources :exercise_banks do
      collection do
        get :choose_shixun
      end

      member do
        get :commit_shixun
      end
    end

    resources :exercise_bank_questions do
      member do
        post :up_down
        get :choose_shixun
      end
    end

    resources :poll_bank_questions

    resources :attachments do
      collection do
        delete :destroy_files
      end
    end

    resources :schools do
      member do
        resources :departments, only: [] do
          get :for_option, on: :collection
        end
      end
      collection do
        get :school_list
        get :for_option
        get :for_province_option
        get :search
      end

      scope module: :ecs do
        get :detail, to: 'homes#index'

        resources :ec_majors, only: [:index]
        resources :ec_major_schools, only: [:index, :create, :destroy]
      end
    end
    resources :add_school_applies, only: [:create]
    resources :add_department_applies, only: [:create]

    # 为避免url过长以及层级过深，路由定义和controller继承都做了处理
    scope module: :ecs do
      resources :ec_major_schools, only: [:show] do
        resources :users, only: [:index]
        resources :major_managers, only: [:create, :destroy]
        resources :ec_years, only: [:index, :show, :create, :destroy]
      end

      resources :ec_years, only: [] do
        resource :ec_training_objectives, only: [:show, :create]
        resources :ec_graduation_requirements, only: [:index, :create, :update, :destroy]
        resource :requirement_support_objectives, only: [:show, :create, :destroy]
        resource :subitem_support_standards, only: [:show, :create, :destroy]
        resource :students, only: [:show, :destroy] do
          post :import, on: :collection
        end

        resources :ec_courses, only: [:index, :create, :destroy] do
          post :link_course, on: :member

          collection do
            post :import
            get :search
          end
        end

        resource :graduation_course_supports, only: [:show, :create]
        resource :reach_evaluation, only: [:show, :create]
        resource :reach_criteria, only: [:create]
        resources :graduation_subitems, only: [:index]
      end

      resources :ec_courses, only: [] do
        resource :evaluation, only: [:show, :create]
        resources :course_managers, only: [:create, :destroy]
        resources :course_targets, only: [:index, :create] do
          get :with_achievement_methods, on: :collection

          resource :course_achievement_methods, only: [:create]
        end
        resources :course_evaluations, only: [:index, :create, :update, :destroy] do
          member do
            get :average_score_import_template
            get :detail_score_import_template
            get :import_student_achievement
          end
          get :slimmer, on: :collection
        end
        resource :score_levels, only: [:show, :create]
      end
    end

    resource :zip, only: [] do
      collection do
        get :shixun_report
        get :export_exercises
      end
    end

    resources :repertoires, only: [:index]

    scope module: :competitions do
      resources :competitions, only: [:index, :show, :update] do
        resources :competition_modules, only: [:index, :show, :update]
        resource :competition_staff
        resources :competition_teams, only: [:index, :show, :create, :update] do
          post :join, on: :collection
          post :leave, on: :member
          get :course_detail, on: :member
          get :shixun_detail, on: :member
        end
        resources :teachers, only: [:index]
        resources :students, only: [:index]

        member do
          get :common_header
          get :informs
          post :update_inform
          get :md_content
          post :update_md_content
          get :charts
          get :export_extra_course_statistics
          get :chart_rules
          post :update_chart_rules
        end
        resource :prize_leader_account, only: [:update]
        resource :prize, only: [:show]
        resources :certificates, only: [] do
          member do
            get :personal
            get :team
          end
        end
      end
    end

    resources :project_package_categories, only: [:index]
    resources :project_packages, only: [:index, :show, :create, :update, :destroy] do
      resources :bidding_users, only: [:create] do
        post :win, on: :collection
      end
    end

    resources :libraries, only: [:index, :show, :create, :update, :destroy]
    resources :library_tags, only: [:index]

    scope module: :projects do
      resources :project_applies, only: [:create]
    end

    post 'callbacks/aliyun_vod', to: 'callbacks/aliyun_vods#create'

    namespace :wechats do
      resource :js_sdk_signature, only: [:create]
    end

    resources :helps, only: [] do
      collection do
        get :about
        get :contact
        get :cooperatives
        get :agreement
        get :help_center
        post :feedback
      end
    end
    resource :template, only: [:show]
    resource :setting, only: [:show]

    get '/auth/qq/callback', to: 'oauth/qq#create'
    get '/auth/wechat/callback', to: 'oauth/wechat#create'
    resource :bind_user, only: [:create]

    resources :hot_keywords, only: [:index]

    namespace :weapps do
      resource :home, only: [:show]
      resource :session, only: [:create]
      resource :register, only: [:create]
      resource :verification_code, only: [:create]
      resource :code_session, only: [:create]
      resource :verify, only: [:create]
      resource :check_account, only: [:create]
      resource :unbind_accounts, only: [:show, :destroy]

      resources :banners, only: [:index]

      resources :searchs, only: [:index]
      resources :course_stickies, only: [:create] do
        post :cancel_sticky, on: :collection
      end

      resources :shixun_lists, only: [:index]
      resources :subjects, path: :paths, only: [:index, :create, :update, :edit, :show]
      resources :challenges do
        get :is_play, on: :member
      end

      resources :courses, only: [:create, :update, :edit, :show] do
        member do
          get :shixun_homework_category
          get :teachers
          get :students
          get :course_groups
          get :basic_info
          get :course_activities
          get :course_videos
          post :change_member_roles
          delete :delete_course_teachers
          delete :delete_course_students
        end

        collection do
          get :check_invite_code
        end

        resources :attendances, only: [:index, :update, :create, :show, :destroy], shallow: true do
          collection do
            get :student_attendances
            get :history_attendances
          end
          post :end, on: :member
        end
      end

      resources :course_member_attendances, only: [:create, :index] do
        post :update_status, on: :collection
      end

      resources :homework_commons do
        post :update_settings, on: :member
      end
    end

    resources :users_for_partners, only: [:index]

    resources :trustie_hacks,  path: :osshackathon do
      collection do
        get :edit_hackathon
        post :update_hackathon
      end
      member do
        post :entry
      end
    end

    resources :colleges, only: [] do
      member do
        get :statistics
        get :course_statistics
        get :student_shixun
        get :shixun_time
        get :shixun_report_count
        get :teachers
        get :shixun_chart_data
        get :student_hot_evaluations
      end
    end

    resources :edu_datas do
      collection do
        get :game
        get :code_lines
      end
    end
  end

  namespace :admins do
    get '/', to: 'dashboards#index'

    resources :hacks, only: [:index]
    resources :hack_imports, only: [:index, :create] do
      collection do
        get :down_template
      end
    end

    resources :item_banks, only: [:index, :create] do
      collection do
        get :down_template
      end
    end
    resources :job_classifies do
      member do
        get :children
        put :change
      end
    end
    resources :multiple_school_reports, only: [:index] do
      collection do
        get :school
      end
    end
    resources :upgrade_notices
    resources :major_informations, only: [:index]
    resources :ec_templates, only: [:index, :destroy] do
      collection do
        post :create_template
      end
    end
    resources :graduation_standards, only: [:index, :destroy] do
      collection do
        post :create_standard
      end
    end
    resources :auth_schools, only: [:index, :destroy] do
      collection do
        get :search_school
        post :add_school
        get :search_manager
        post :add_manager
        post :remove_manager
      end

    end
    resources :dashboards, only: [:index] do
      collection do
        get :month_active_user
        get :evaluate
      end
    end
    resources :files, only: [:create]

    resources :daily_school_statistics, only: [:index] do
      get :export, on: :collection
    end

    resources :school_statistics, only: [:index] do
      get :contrast, on: :collection
    end

    resources :school_base_statistics, only: [:index]

    resources :users, only: [:index, :edit, :update, :destroy] do
      member do
        post :reward_grade
        post :lock
        post :unlock
        post :active
        post :reset_login_times
      end
    end
    resource :import_disciplines, only: [:create]
    resource :import_users, only: [:create]
    resource :import_course_members, only: [:create]
    resources :user_statistics, only: [:index] do
      get :export, on: :collection
    end
    resources :user_schools_statistics, only: [:index] do
      get :export, on: :collection
    end
    resources :library_applies, only: [:index] do
      member do
        post :agree
        post :refuse
      end
    end
    resources :video_applies, only: [:index] do
      member do
        post :agree
        post :refuse
      end
    end
    resources :identity_authentications, only: [:index] do
      member do
        post :agree
        post :refuse
        post :revoke
      end

      collection do
        post :batch_agree
      end
    end
    resources :professional_authentications, only: [:index] do
      member do
        post :agree
        post :refuse
        post :revoke
      end

      collection do
        post :batch_agree
      end
    end
    resources :shixun_authorizations, only: [:index] do
      member do
        post :agree
        post :refuse
      end
    end
    resources :subject_authorizations, only: [:index] do
      member do
        post :agree
        post :refuse
      end
    end
    resources :project_package_applies, only: [:index] do
      member do
        post :agree
        post :refuse
      end
    end
    resources :item_authentications, only: [:index, :show] do
      member do
        post :agree
        post :refuse
      end
    end
    resources :examination_authentications, only: [:index] do
      member do
        post :agree
        post :refuse
      end
    end
    resources :job_authentications, only: [:index, :show] do
      member do
        post :agree
        post :refuse
      end
    end
    resources :shixuns, only: [:index,:destroy]
    resources :shixun_settings, only: [:index,:update] do
      post :update_tag_repertoires, on: :member
    end
    resources :shixun_feedback_messages, only: [:index]
    resources :shixun_recycles, only: [:index, :destroy] do
      post :resume, on: :member
    end
    resources :shixun_modify_records, only: [:index]
    resources :department_applies,only: [:index,:destroy] do
      collection do
        post :merge
      end
      member do
        post :agree
      end
    end
    resources :unit_applies,only: [:index,:destroy,:edit,:update] do
      member do
        post :agree
      end
    end
    resources :mirror_repositories, only: [:index, :new, :create, :edit, :update, :destroy] do
      collection do
        post :merge
        get :for_select
      end
      resources :mirror_scripts, only: [:index, :new, :create, :edit, :update, :destroy]
    end
    resources :choose_mirror_repositories, only: [:new, :create]
    resources :schools, only: [:index, :destroy]
    resources :departments, only: [:index, :create, :edit, :update, :destroy] do
      resource :department_member, only: [:create, :destroy]
      post :merge, on: :collection
    end
    resources :myshixuns, only: [:index]

    resource :about, only: [:edit, :update]
    resource :agreement, only: [:edit, :update]
    resource :help_center, only: [:edit, :update]
    resource :contact_us, only: [:edit, :update] do
      patch :update_address, on: :collection
    end
    resources :cooperatives, only: [:index, :create, :update, :destroy] do
      post :drag, on: :collection
      post :replace_image_url, on: :member
    end
    resources :laboratories, only: [:index, :create, :destroy, :update] do
      member do
        get :shixuns_for_select
        get :subjects_for_select
        get :synchronize_user
        post :update_sync_course
      end

      resource :laboratory_setting, only: [:show, :update]
      resource :laboratory_user, only: [:create, :destroy]

      resources :carousels, only: [:index, :create, :update, :destroy] do
        post :drag, on: :collection
      end

      resources :laboratory_shixuns, only: [:index, :create, :destroy] do
        member do
          post :homepage
          post :cancel_homepage
        end
      end
      resources :laboratory_subjects, only: [:index, :create, :destroy] do
        member do
          post :homepage
          post :cancel_homepage
        end
      end
    end

    resource :import_competition_scores, only: [:create]
    resources :competitions, only: [:index, :destroy, :create] do
      member do
        post :publish
        post :unpublish
        post :online_switch
      end
      collection do
        post :hot_setting
      end

      resources :competition_settings, only: [:index] do
        post :basic_setting, on: :collection
        post :nav_setting, on: :collection
      end

      resources :enroll_lists, only: [:index] do
        get :export, on: :collection
      end

      resources :competition_stages, only: [:create, :update, :destroy] do
        member do
          post :send_message
          post :calculate_stage_score
        end
      end

      resources :competition_prizes, only: [:index, :new, :create, :edit, :update, :destroy]
      resources :competition_prize_users, only: [:index, :create] do
        member do
          post :approve
          post :unapprove
        end
      end
    end

    resources :weapp_carousels, only: [:index, :create, :update, :destroy] do
      post :drag, on: :collection
    end
    resources :weapp_adverts, only: [:index, :create, :update, :destroy] do
      post :drag, on: :collection
    end
    resources :weapp_banners, only: [:index, :create] do
      collection do
        post :shixun_banner
      end
    end


    resources :subject_settings, only: [:index, :update] do
      post :update_mobile_show, on: :collection
    end

    resources :subjects, only: [:index, :edit, :update, :destroy] do
      member do
        post :hide
        post :cancel_hide
        post :homepage_show
        post :cancel_homepage_show
        post :excellent
        post :cancel_excellent
      end
    end

    resources :partners, only: [:index, :create, :destroy] do
      resources :customers, only: [:index, :create, :destroy]
    end

    resources :course_lists, only: [:index, :destroy] do
      post :merge, on: :collection
    end

    resources :courses, only: [:index, :destroy, :update] do
      get :export_teacher_info, on: :collection
    end

    resources :projects, only: [:index, :destroy]

    resources :disciplines, only: [:index, :create, :edit, :update, :destroy] do
      post :adjust_position, on: :member
    end
    resources :sub_disciplines, only: [:index, :create, :edit, :update, :destroy] do
      post :adjust_position, on: :member
    end
    resources :tag_disciplines, only: [:index, :create, :edit, :update, :destroy] do
      post :adjust_position, on: :member
    end

    resources :repertoires, only: [:index, :create, :edit, :update, :destroy]
    resources :sub_repertoires, only: [:index, :create, :edit, :update, :destroy]
    resources :tag_repertoires, only: [:index, :create, :edit, :update, :destroy]

    resources :salesmans, only: [:index, :create, :edit, :update, :destroy] do
      post :batch_add, on: :collection
    end
    resources :salesman_channels, only: [:index, :create, :edit, :update, :destroy] do
      post :batch_add, on: :collection
    end
    resources :salesman_customers, only: [:index, :create, :edit, :update, :destroy] do
      post :batch_add, on: :collection
    end
  end

  namespace :cooperative do
    # get '/', to: 'dashboards#show'
    get '/', to: 'laboratory_settings#edit'
    resources :files, only: [:create]
    resources :users, only: [:index] do
      get :for_select, on: :collection
    end
    resources :laboratory_users, only: [:index, :create, :destroy]
    resource :laboratory_setting, only: [:edit, :update]
    resources :carousels, only: [:index, :create, :update, :destroy] do
      post :drag, on: :collection
    end
    resources :laboratory_shixuns, only: [:index, :edit, :update, :destroy] do
      member do
        post :homepage
        post :cancel_homepage
      end
    end
    resources :laboratory_subjects, only: [:index, :edit, :update, :destroy] do
      member do
        post :homepage
        post :cancel_homepage
      end
    end

    resource :import_competition_scores, only: [:create]
    resources :competitions, only: [:index, :destroy, :create] do
      member do
        post :publish
        post :unpublish
        post :online_switch
      end
      collection do
        post :hot_setting
      end

      resources :competition_settings, only: [:index] do
        post :basic_setting, on: :collection
        post :nav_setting, on: :collection
      end

      resources :enroll_lists, only: [:index] do
        get :export, on: :collection
      end

      resources :competition_stages, only: [:create, :update, :destroy] do
        member do
          post :send_message
          post :calculate_stage_score
        end
      end

      resources :competition_prizes, only: [:index, :new, :create, :edit, :update, :destroy]
      resources :competition_prize_users, only: [:index, :create] do
        member do
          post :approve
          post :unapprove
        end
      end
    end
  end

  resources :partners, only: [] do
    member do
      get :customers
      get :partner_manager_groups
      post :customer_manager_group

      post :manager_group
      delete :remove_manager_group

      post :partner_managers
      delete :remove_partner_manager
    end
  end

  #git 认证回调
  match 'gitauth/*url', to: 'gits#auth', via: :all

  get 'oauth/get_code', to: 'oauth#get_code'
  get 'oauth/get_token_callback', to: 'oauth#get_token_callback'

  root 'main#index'


  ## react用
  get '*path', to: 'main#index', constraints: ReactConstraint.new
end
