Rails.application.routes.draw do

  def draw(routes_name)
    instance_eval(File.read(Rails.root.join("config/routes/#{routes_name}.rb")))
  end

  draw :api

  use_doorkeeper
  require 'sidekiq/web'
  require 'sidekiq/cron/web'
  require 'admin_constraint'

  # mount Sidekiq::Web => '/sidekiq', :constraints => AdminConstraint.new

  # Serve websocket cable requests in-process
  mount ActionCable.server => '/cable'

  get 'attachments/entries/get_file', to: 'attachments#get_file'
  get 'attachments/download/:id', to: 'attachments#show'
  get 'attachments/send_file/:id', to: 'attachments#old_url'
  get 'attachments/download/:id/:filename', to: 'attachments#show'
  get ':owner/:repo/releases/download/:tag_name/:filename',  to:  'version_releases#download', constraints: { repo: /[^\/]+/, tag_name: /[^\/]+/, filename: /[^\/]+/ }
  get 'check_pr_url',to: "settings#check_url"

  # 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 'auth/acge/callback', to: "oauth/acge#create"
  get 'oauth_ci4s', to: "oauth/ci4s#oauth_url"
  get 'auth/ci4s/callback', to: "oauth/ci4s#create"
  get 'auth/acge/refer', to: "oauth/acge#refer"
  get 'auth/:provider/callback', to: 'oauth/callbacks#create'

  get 'oauth/bind', to: 'oauth/educoder#bind'
  get 'oauth/register', to: 'oauth#register'
  post 'oauth/auto_register', to: 'oauth#auto_register'
  get 'projects', to: redirect('/explore/all')
  get 'competitions/:identifier/home', to: 'home#to_competitions'
  get 'cgk', :to =>"home#to_cgk"

  get 'oauth2', to: 'oauth2#show'
  post 'oauth2', to: 'oauth2#create'

  resources :edu_settings

  scope '/api' do
    post 'sso/user', to: 'users#test_sso'
    resources :topics, only: [:index]
    namespace :ci  do
      resources :languages, only: [:index, :show] do
        collection do
          get :common
        end
      end

      resources :templates, only: [:list,:templates_by_stage,:create,:update,:destroy,:show] do
        collection do
          get :list
          get :templates_by_stage
        end
      end

      resources :secrets do
      end

      resources :pipelines do
        collection do
          get :list
        end
        member do
          get :content
          get :stages
          post :create_stage
          post :create_trustie_pipeline
          delete :delete_stage, :path => ":stage_id/delete_stage", to: 'pipelines#delete_stage'
          put :update_stage, :path => ":stage_id/update_stage", to: 'pipelines#update_stage'
          get :stage_steps, :path => ":stage_id/steps", to: 'pipelines#steps'
          post :create_stage_step, :path => ":stage_id/create_step", to: 'pipelines#create_stage_step'
          post :stage_step, :path => ":stage_id/stage_step", to: 'pipelines#stage_step'
          delete :delete_stage_step, :path => ":stage_id/:step_id/delete_step", to: 'pipelines#delete_stage_step'
          put :update_stage_step, :path => ":stage_id/update_step", to: 'pipelines#update_stage_step'
        end
      end

      # resources :repos, only: :index do
      #   collection do
      #     get 'get_trustie_pipeline', to: 'builds#get_trustie_pipeline', as: 'get_trustie_pipeline'
      #     get ':number', to: 'builds#detail', as: 'detail'
      #     post ':number', to: 'builds#restart', as: 'restart'
      #     delete ':number', to: 'builds#delete', as: 'delete'
      #     get ':number/logs/:stage/:step', to: 'builds#logs', as: 'logs'
      #   end
      # end
    end

    resources :public_keys, only: [:index, :create, :destroy]

    resources :project_rank, only: [:index]
    resources :user_rank, only: [:index]
    resources :nps, only: [:create]
    resources :buckets do
      collection do
        get :get_upload_token_for_tzb
        match :callback, :via => [:get, :post]
      end
    end

    resources :statistic, only: [:index] do
      collection do
        get :platform_profile
        get :platform_code
        get :active_project_rank
        get :active_developer_rank
        get :hot_keyword
      end
    end
    resources :sync_forge, only: [:create] do
      collection do
        post :sync_users
        post :sync_range_projects
      end
    end
    resources :composes do
      resources :compose_projects, only: [:create, :destroy]
    end
    resources :attachments do
      member do
        post :preview_attachment
      end
      collection do
        delete :destroy_files
      end
    end
    resources :apply_signatures, only: [:index, :create, :update] do
      collection do
        get :template_file
        get :show_pro_info
        post :create_simple_info
      end
      member do
        post :create_detail
      end
    end
    namespace :home do
      resources :platform_statistics, only: [:index]
      resources :competitions, only:[:index]
      resources :platform_communicates, only: [:index]
      resources :platform_people, only: [:index]
    end
    get 'home/index'
    get 'home/search'
    get 'main/first_stamp'
    get 'activity/last', to: 'project_trends#last'

    get 'search', to: 'searchs#index'
    put    'commons/hidden',      to: 'commons#hidden'
    put    'commons/unhidden',    to: 'commons#unhidden'
    delete 'commons/delete',      to: 'commons#delete'

    # blockchain related routes
    get 'users/blockchain/balance', to: 'users#blockchain_balance'
    post 'users/blockchain/balance_project', to: 'users#blockchain_balance_one_project'
    post 'users/blockchain/transfer', to: 'users#blockchain_transfer'
    post 'users/blockchain/exchange', to: 'users#blockchain_exchange'
    post 'users/blockchain/create_trade', to: 'users#blockchain_create_trade'
    get '/users/blockchain/get_trades', to: 'users#blockchain_get_trades'
    post '/users/blockchain/trade', to: 'users#blockchain_trade'
    get '/users/blockchain/get_verify_trades', to: 'users#blockchain_get_verify_trades'
    post '/users/blockchain/verify_trade', to: 'users#blockchain_verify_trade'
    get '/users/blockchain/get_history_trades', to: 'users#blockchain_get_history_trades'
    post '/blockchain/issue/get_token_num', to: 'users#blockchain_get_issue_token_num'
    get '/projects/blockchain/get_unclosed_issue_list', to: 'users#blockchain_get_unclosed_issue_list'

    resources :owners, only: [:index, :show]

    scope module: :organizations do
      resources :organizations, except: [:edit, :new] do
        resources :organization_users, only: [:index, :destroy] do
          collection do
            delete :quit
            get :pm_check_user
          end
        end
        resources :clas
        resources :teams, except: [:edit, :new] do
          collection do
            get :search
          end
          resources :team_users, only: [:index, :create, :destroy] do
            collection do
              delete :quit
              get :pm_check_user
            end
          end
          resources :team_projects, only: [:index, :create, :destroy] do
            collection do
              post :create_all
              delete :destroy_all
            end
          end
        end
        resources :projects, only: [:index] do
          collection do
            get :search
          end
        end
        get :recommend, on: :collection
        resources :is_pinned_projects, only: [:index, :update] do
          collection do
            post :pin
          end
        end
        member do
          post :update_news
          post :update_memo
          post :update_other
          get :languages
        end
      end
    end

    resources :issues, except: [:index, :new,:create, :update, :edit, :destroy] do
      resources :journals, only: [:index, :create, :destroy, :edit, :update] do
        member do
          get :get_children_journals
        end
      end

      resources :claims, only: [:index] do
        collection do
          post :create
          delete :destroy
          get :index
          put :update
        end
      end

      resources :issue_times, only: [:create] do
        collection do
          post :end_work
        end
      end
      resources :issue_depends, only: [:create, :destroy]
    end

    resources :template_message_settings, only: [:index]

    resources :applied_projects, only: [:create]

    resources :project_categories, only: [:index, :show] do
      get :group_list, on: :collection
      get :pinned_index, on: :collection
    end
    resources :project_languages, only: [:index, :show]
    resources :ignores, only: [:index, :show]
    resources :licenses, only: [:index, :show]

    resources :watchers, only: [:index] do
      collection do
        post :follow
        delete :unfollow
        get :check_watch
      end
    end
    resources :projects do
      resources :praise_tread, only: [:index] do
        collection do
          post :like
          delete :unlike
          get :check_like
        end
      end

      collection do
        post :migrate
        post :page_migrate
        get :group_type_list
        get :recommend
        get :banner_recommend
        post :verify_auth_token
      end
    end

    resources :accounts do
      collection do
        post :login
        post :register
        post :reset_password
        get :logout
        get :get_verification_code
        get :valid_email_and_phone
        post :remote_register
        post :remote_update
        post :remote_login
        post :remote_password
        post :change_password
        post :check
        post :check_keywords
        post :login_check
        post :simple_update
      end
    end

    resources :users do
      member do
        get :homepage_info
        get :projects
        get :watch_users
        get :fan_users
        get :hovercard
        get :hovercard4proj # author: zxh, 获取用户对项目的贡献情况
        get :contribution_perc
        put :update_image
        get :get_image
      end
      collection do
        post :following
        post :unfollow
        get :get_user_info
        get :get_user_info_by_login
        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 :me
        get :info
        get :list
        post :sync_token
        post :sync_gitea_pwd
        post :sync_salt
        get :trustie_projects
        get :trustie_related_projects
        post :sync_user_info
        get :email_search
        post :action

        scope '/ci', module: :ci do
          scope do
            post(
              '/cloud_account/bind',
              to: 'cloud_accounts#bind',
              as: :bind_cloud_acclount
            )

            post(
                '/cloud_account/trustie_bind',
                to: 'cloud_accounts#trustie_bind',
                as: :trustie_bind_cloud_acclount
            )

            get(
              '/cloud_account',
              to: 'cloud_accounts#show',
              as: :get_cloud_account
            )

            delete(
              '/cloud_account/unbind',
              to: 'cloud_accounts#unbind',
              as: :unbind_cloud_acclount
            )

            get(
              'oauth_grant',
              to: 'cloud_accounts#oauth_grant',
              as: :ci_oauth_grant
            )
          end
        end
      end

      scope module: :users do
        get 'template_message_settings', to: 'template_message_settings#current_setting'
        post 'template_message_settings/update_setting', to: 'template_message_settings#update_setting'
        resources :system_notification_histories, only: [:create]
        resources :applied_messages, only: [:index]
        resources :applied_transfer_projects, only: [:index] do
          member do
            post :accept
            post :refuse
          end
        end
        resources :applied_projects, only: [:index] do
          member do
            post :accept
            post :refuse
          end
        end
        resources :headmaps, only: [:index]
        resources :is_pinned_projects, only: [:index, :update] do
          collection do
            post :pin
          end
        end
        resources :statistics, only: [:index] do
          collection do
            get :activity
            get :develop
            get :role
            get :major
          end
        end
        resources :project_trends, only: [:index]
        resources :organizations, only: [:index]
        # resources :projects, only: [:index]
        # resources :subjects, only: [:index]
        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 :messages, only: [:index, :create] do
          collection do
            post :read

          end
        end
        delete 'messages', to: 'messages#delete'
      end

      resources :tidings, only: [:index]

      scope module: :users do
        resource :interest, only: [:create]
        resources :clas
        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

    resources :users_for_private_messages, only: [:index]

    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
      end
    end

    namespace :wechats do
      resource :js_sdk_signature, only: [:create]
    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'
    get '/auth/educoder/callback', to: 'oauth/educoder#create'
    get '/auth/gitlink/callback', to: 'oauth/gitlink#create'
    get '/auth/openkylin/callback', to: 'oauth/openkylin#create'
    resource :bind_user, only: [:create]

    resources :hot_keywords, only: [:index]
    resources :notices, only: [:create]

    resources :competition_banners, only: [:index]
    resources :competition_infos do
      get :list, on: :collection
      get :recommend, on: :collection
      post :auto_score, on: :collection
      post :update_expert_audit, on: :collection
      post :tzb_actived, on: :collection
      member do
        post :import
        get :import_template
        get :enroll_list
        get :ranking_list
        get :statistics
        get :enroll_status
        post :enroll_update
        post :enroll_status_update
        post :apply_status_update
        post :enroll
        post :upload
        post :upload_enroll_template
        post :upload_apply_template
        get :enroll_template
        get :apply_template
        get :update_zone_or_sub
        post :online_switch
      end
      resources :competition_notices, only: [:show, :index, :update, :destroy, :create]
      resources :component_journals, only: [:show, :index, :update, :destroy, :create] do
        member do
          get :get_children_journals
        end
      end
    end

    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 :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
          post :change_member_roles
          delete :delete_course_teachers
          delete :delete_course_students
        end

        collection do
          get :check_invite_code
        end
      end
    end
    resources :identity_verifications
    resources :site_pages do
      member do
        post :build
      end
      collection do
        post :softbot_build
        get :themes
      end
    end

    namespace :traces do
      resources :trace_users, only: [:create]
      scope "/:owner/:repo", constraints: { repo: /[^\/]+/ }  do
        resource :projects, path: '/', only: [:index] do
          member do
            post :tasks
            get :task_results
            get :reload_task
            get :task_pdf
          end
        end
      end
    end

    # scope module: :action do
    #
    # end

    namespace :action do
      resources :nodes do
        resources :node_inputs
        resources :node_selects
      end
      resources :node_types
      resources :templates
    end

    # Project Area START
    scope "/:owner/:repo",constraints: { repo: /[^\/]+/ }  do
      scope do
        get(
          '/activity',
          to: 'project_trends#index',
          as: :project_activity
        )
      end

      resource :projects, path: '/', except: [:show, :edit] do
        member do
          get :menu_list
          get :branches
          get :branches_slice
          get :simple
          get :watchers, to: 'projects#watch_users'
          get :stargazers, to: 'projects#praise_users'
          get :forks, to: 'projects#fork_users'
          get :user_actions, to: 'projects#user_actions'
          match :about, :via => [:get, :put, :post]
          post :quit
          post :clone_detection
        end
      end

      resource :repositories, path: '/', only: [:show, :create, :edit] do
        member do
          get :top_counts
          get :files
          get :detail
          get :entries
          match :sub_entries, :via => [:get, :put]
          get :commits
          get :commits_slice
          get :tags
          get :contributors
          post :create_file
          post :replace_file
          put :update_file
          delete :delete_file
          post :repo_hook
          post :sync_mirror
          get :top_counts
          get 'commits/:sha', to: 'repositories#commit', as: 'commit'
          get 'readme'
          get 'languages'
          get 'archive/:archive', to: 'repositories#archive', as: "archive", constraints: { archive: /.+/, format: /(zip|gzip)/ }
          get 'raw/*filepath', to: 'repositories#raw', as: "raw", constraints: { filepath: /.+/}
        end
      end

      # protected_branches
      scope do
        get(
          '/protected_branches/',
          to: 'protected_branches#index'
        )
        get(
          '/protected_branches/:branch_name',
          to: 'protected_branches#show'
        )
        get(
          '/protected_branches/:branch_name/edit',
          to: 'protected_branches#edit'
        )
        delete(
          '/protected_branches/:branch_name',
          to: 'protected_branches#destroy'
        )
        post(
          '/protected_branches',
          to: 'protected_branches#create'
        )
        patch(
          '/protected_branches/:branch_name',
          to: 'protected_branches#update'
        )
      end

      resources :issues do
        collection do
          get :commit_issues
          get :index_chosen
          post :clean
          post :series_update
          get :index_to_name
        end
        member do
         post :copy
         post :close_issue
         post :lock_issue
        end
      end

      # compare
      resources :compare, only: [:index, :create]
      get '/compare/:base...:head' => 'compare#show', :as => 'compare',
            :constraints => { base: /.+/, head: /.+/ }

      resources :pull_requests, :path => :pulls, except: [:destroy] do
        member do
          post :pr_merge
          # post :check_merge
          post :refuse_merge
          get :files
          get :commits
          resources :reviews, only: [:create]
          scope '/diffs' do
            resources :mark_files, only:  [:index]
            put :mark_file_as_unread, to: 'mark_files#mark_file_as_unread', as: 'mark_file_as_unread'
            put :mark_file_as_read, to: 'mark_files#mark_file_as_read', as: 'mark_file_as_read'
          end
        end
        collection do
          post :check_can_merge
          get :create_merge_infos
          get :get_branches
        end
      end

      resources :versions, :path => :milestones do
        member do
          post :update_status
        end
      end

      resources :members, :path => :collaborators, only: [:index, :create] do
        collection do
          delete :remove
          put :change_role
        end
      end

      resources :hooks
      resources :forks, only: [:create]
      resources :project_trends, :path => :activity, only: [:index, :create]
      resources :issue_tags, :path => :labels, only: [:create, :edit, :update, :destroy, :index]
      resources :version_releases, :path => :releases, only: [:index,:new, :show, :create, :edit, :update, :destroy]
      resources :ob_repository_syncs, :path => :synchronizes, only: [:index, :create] do
        collection do
          delete :delete
          get :jobs
          get :job_logs
          post :create_jobs
          delete :delete_job
          post :start_job
          post :stop_job
        end
      end

      scope module: :ci do
        scope do
          match(
            'ci_authorize',
            to: 'projects#authorize',
            as: :ci_authorize,
            :via => [:get, :put]
          )
          get(
            'get_trustie_pipeline',
            to: 'projects#get_trustie_pipeline',
            as: :get_trustie_pipeline
          )
          put(
            'update_trustie_pipeline',
            to: 'projects#update_trustie_pipeline',
            as: :update_trustie_pipeline
          )
          post(
            'activate',
            to: 'projects#activate',
            as: :ci_activate_project
          )
          delete(
            'deactivate',
            to: 'projects#deactivate',
            as: :ci_deactivate_project
          )
        end

        resources :cloud_accounts, only: [:create] do
          member do
            post :activate
            delete :deactivate
          end
        end
        resources :builds, param: :build do
          member do
            post :restart
            delete :stop
            get '/logs/:stage/:step', to: 'builds#logs', as: 'logs'
          end
        end
      end

      scope module: :projects do
        resources :project_visitors, only: [:index] do
          collection do
            post :create
          end
        end
        resources :members, only: [:index]
        resources :teams, only: [:index, :create, :destroy]
        resources :project_units, only: [:index, :create]
        resources :applied_transfer_projects, only: [:create] do
          collection do
            get :organizations
            post :cancel
          end
        end
        resources :project_invite_links, only: [:index] do
          collection do
            get :current_link
            post :generate_link
            get :show_link
            post :redirect_link
          end
        end
        resources :webhooks, except: [:show, :new] do
          member do
            get :tasks
            post :test
          end
        end
        scope do
          get(
            '/blob/*id/diff',
            to: 'blob#diff',
            constraints: { id: /.+/, format: false },
            as: :blob_diff
          )
          get(
            '/blob/*id',
            to: 'blob#show',
            constraints: { id: /.+/, format: false },
            as: :blob
          )
          delete(
            '/blob/*id',
            to: 'blob#destroy',
            constraints: { id: /.+/, format: false }
          )
          put(
            '/blob/*id',
            to: 'blob#update',
            constraints: { id: /.+/, format: false }
          )
          post(
            '/blob/*id',
            to: 'blob#create',
            constraints: { id: /.+/, format: false }
          )
        end

        scope do
          get(
            '/raw/*id',
            to: 'raw#show',
            constraints: { id: /.+/, format: /(html|js)/ },
            as: :raw
          )
        end

        scope do
          get(
            '/blame/*id',
            to: 'blame#show',
            constraints: { id: /.+/, format: /(html|js)/ },
            as: :blame
          )
        end

        scope do
          get(
            '/tree/*id',
            to: 'tree#show',
            constraints: { id: /.+/, format: /(html|js)/ },
            as: :tree
          )
        end
      end
    end

    # Project Area END

    scope module: :helps do
      resources :faqs, only: [:index]
    end

  end

  namespace :admins do
    mount Sidekiq::Web => '/sidekiq'
    get '/', to: 'dashboards#index'
    get '/baidu_tongji', to: 'dashboards#baidu_tongji'
    get '/baidu_tongji_auth', to: 'dashboards#baidu_tongji_auth'
    resources :topics
    namespace :topic do
      resources :service_terms
      resources :technical_discussions
      resources :ck_js_forums
      resources :activity_forums
      resources :banners
      resources :cards
      resources :cooperators
      resources :excellent_projects
      resources :experience_forums
      resources :glcc_news
      resources :pinned_forums
      resources :organizations
      resources :schools
      resources :applet_banners
      resources :friendly_links 
      resources :join_us
      resources :ck_banners
    end
    resources :recruitments
    resources :glcc_pr_check do
      collection do
        post :send_mail
      end
    end

    resources :project_statistics, only: [:index] do
      collection do
        get :visits_static
      end
    end
    resources :users_rank, only: [:index]
    resources :identity_verifications
    resources :site_pages
    resources :page_themes
    resources :issues_rank, only: [:index]
    resources :projects_rank, only: [:index]
    resources :sites
    resources :edu_settings
    resources :project_languages
    resources :project_categories
    resources :project_licenses
    resources :project_ignores
    resources :reversed_keywords
    resources :system_notifications do
      member do
        get :history
      end
    end
    resources :message_templates, only: [:index, :new, :create, :edit, :update] do
      collection do
        get :init_data
      end
    end
    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 :organizations, only: [:index, :edit, :show, :destroy] do
      member do
        post :open_cla
        post :close_cla
      end
    end
    resources :users, only: [:index, :edit, :update, :destroy] do
      get :export, on: :collection
      member do
        post :reward_grade
        post :lock
        post :unlock
        post :active
        post :reset_login_times
        post :fresh_gitea_token
      end
    end
    resources :phenglei_users, only: [:index, :new, :create]
    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 :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 :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

    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 :user_actions , only:[:index]
    resources :faqs
    resources :nps do
      post :switch_change, on: :collection
    end
    resources :feedbacks, only: [:index, :destroy] do
      get :new_history, on: :member
      post :create_history, 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, :new]
      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

    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 :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]

    resources :projects, only: [:index, :edit, :update, :destroy] do
      collection do
        get :export
      end
      member do
        get :sync_phenglei_user
      end
    end

    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
    resources :apply_signatures, only: [:index, :update]
    resources :platform_communicates do
      get :applet, on: :collection
      member do
        post :online_switch
      end
    end
    resources :platform_people
  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'

  resources :commit_logs, :only => [:create]

  scope '/app' do
    get '/', to: 'installations#app'
    post ':id/auth_active', to: 'installations#auth_active'
    post ':id/update_private_key', to: 'installations#update_private_key'
    post ':id/update_secret', to: 'installations#update_secret'
    post ':id/update_callback_url', to: 'installations#update_callback_url'
    resources :installations, only: [:index, :show] do
      member do
        post :access_tokens
        put :suspended, to: 'installations#suspended'
        delete :suspended, to: 'installations#unsuspended'
      end
    end
  end

  resources :installations, only: []  do
    get :repositories, on: :member
  end

  root 'main#index'


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


end
