diff --git a/app/controllers/admins/edu_settings_controller.rb b/app/controllers/admins/edu_settings_controller.rb new file mode 100644 index 000000000..9d9334b23 --- /dev/null +++ b/app/controllers/admins/edu_settings_controller.rb @@ -0,0 +1,55 @@ +class Admins::EduSettingsController < Admins::BaseController + before_action :find_setting, only: [:edit,:update, :destroy] + + def index + default_sort('id', 'desc') + + edu_settings = Admins::EduSettingQuery.call(params) + @edu_settings = paginate edu_settings + end + + def new + @edu_setting = EduSetting.new + end + + def edit + end + + def create + @edu_setting = EduSetting.new(edu_setting_params) + if @edu_setting.save + redirect_to admins_edu_settings_path + flash[:success] = '创建成功' + else + redirect_to admins_edu_settings_path + flash[:danger] = @edu_setting.errors.full_messages.join(",") + end + end + + def update + if @edu_setting.update!(edu_setting_params) + flash[:success] = '更新成功' + else + flash[:danger] = @edu_setting.errors.full_messages.join(",") + end + redirect_to admins_edu_settings_path + end + + def destroy + if @edu_setting.destroy! + flash[:success] = '删除成功' + else + lash[:danger] = '删除失败' + end + redirect_to admins_edu_settings_path + end + + private + def find_setting + @edu_setting ||= EduSetting.find(params[:id]) + end + + def edu_setting_params + params.require(:edu_setting).permit(:name, :value, :description) + end +end diff --git a/app/controllers/admins/sites_controller.rb b/app/controllers/admins/sites_controller.rb new file mode 100644 index 000000000..f3da4ccf2 --- /dev/null +++ b/app/controllers/admins/sites_controller.rb @@ -0,0 +1,56 @@ +class Admins::SitesController < Admins::BaseController + before_action :find_site, only: [:edit,:update, :destroy] + + def index + default_sort('id', 'desc') + + sites = Admins::SiteQuery.call(params) + @sites = paginate sites + end + + def new + @site = Site.new + end + + def edit + end + + def create + @site = Site.new(site_params) + if @site.save + redirect_to admins_sites_path + flash[:success] = '创建成功' + else + redirect_to admins_sites_path + flash[:danger] = @site.errors.full_messages.join(",") + end + end + + def update + if @site.update!(site_params) + flash[:success] = '更新成功' + else + flash[:danger] = @site.errors.full_messages.join(",") + end + redirect_to admins_sites_path + end + + def destroy + if @site.destroy! + flash[:success] = '删除成功' + else + lash[:danger] = '删除失败' + end + redirect_to admins_sites_path + end + + private + def find_site + @site ||= Site.find(params[:id]) + end + + def site_params + params.require(:site).permit(:name, :url, :key, :site_type) + end + +end diff --git a/app/controllers/edu_settings_controller.rb b/app/controllers/edu_settings_controller.rb index d3b796da7..340b03ddc 100644 --- a/app/controllers/edu_settings_controller.rb +++ b/app/controllers/edu_settings_controller.rb @@ -29,10 +29,8 @@ class EduSettingsController < ApplicationController respond_to do |format| if @edu_setting.save - format.html { redirect_to @edu_setting, notice: 'Edu setting was successfully created.' } format.json { render :show, status: :created, location: @edu_setting } else - format.html { render :new } format.json { render json: @edu_setting.errors, status: :unprocessable_entity } end end @@ -43,10 +41,8 @@ class EduSettingsController < ApplicationController def update respond_to do |format| if @edu_setting.update(edu_setting_params) - format.html { redirect_to @edu_setting, notice: 'Edu setting was successfully updated.' } format.json { render :show, status: :ok, location: @edu_setting } else - format.html { render :edit } format.json { render json: @edu_setting.errors, status: :unprocessable_entity } end end @@ -57,7 +53,6 @@ class EduSettingsController < ApplicationController def destroy @edu_setting.destroy respond_to do |format| - format.html { redirect_to edu_settings_url, notice: 'Edu setting was successfully destroyed.' } format.json { head :no_content } end end diff --git a/app/models/application_record.rb b/app/models/application_record.rb index 3ab2b11e8..0b95d7a58 100644 --- a/app/models/application_record.rb +++ b/app/models/application_record.rb @@ -24,4 +24,12 @@ class ApplicationRecord < ActiveRecord::Base def reset_platform_cache_async_job ResetPlatformCacheJob.perform_later end + + def self.strip_param(key) + key.to_s.strip.presence + end + + def strip_param(key) + key.to_s.strip.presence + end end diff --git a/app/models/edu_setting.rb b/app/models/edu_setting.rb index 6968b008e..22575ff15 100644 --- a/app/models/edu_setting.rb +++ b/app/models/edu_setting.rb @@ -1,22 +1,24 @@ -# == Schema Information -# -# Table name: edu_settings -# -# id :integer not null, primary key -# name :string(255) -# value :string(255) -# created_at :datetime not null -# updated_at :datetime not null -# description :string(255) -# -# Indexes -# -# index_edu_settings_on_name (name) UNIQUE -# - +# == Schema Information +# +# Table name: edu_settings +# +# id :integer not null, primary key +# name :string(255) +# value :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# description :string(255) +# +# Indexes +# +# index_edu_settings_on_name (name) UNIQUE +# + class EduSetting < ApplicationRecord after_commit :expire_value_cache + scope :by_search, -> (keyword){ where("name LIKE :keyword OR value LIKE :keyword", keyword: "%#{strip_param(keyword)}%") unless strip_param(keyword).blank? } + def value_cache_key self.class.value_cache_key(name) end diff --git a/app/models/site.rb b/app/models/site.rb index 58daddf14..de352dcc5 100644 --- a/app/models/site.rb +++ b/app/models/site.rb @@ -17,6 +17,9 @@ class Site < ApplicationRecord # common: 普通链接 enum site_type: { add: 0, personal: 1, common: 2 } + scope :by_search, -> (keyword){ where("name LIKE :keyword OR url LIKE :keyword", keyword: "%#{strip_param(keyword)}%") unless strip_param(keyword).blank? } + scope :by_site_type, -> (site_type){ where(site_type: strip_param(site_type)) unless strip_param(site_type).blank? } + def self.set_default_menu set_add_menu! set_personal_menu! @@ -26,8 +29,8 @@ class Site < ApplicationRecord private def self.set_add_menu! adds= [ - {name: '新建镜像项目', key: 'add_mirror_project', url: '/projects/mirror/new'}, - {name: '新建托管项目', key: 'add_common', url: '/projects/deposit/new'}, + {name: '新建项目', key: 'add_mirror_project', url: '/projects/mirror/new'}, + {name: '导入项目', key: 'add_common', url: '/projects/deposit/new'}, {name: '新建组织', key: 'add_r', url: '/organize/new'}] adds.each { |ele| diff --git a/app/queries/admins/edu_setting_query.rb b/app/queries/admins/edu_setting_query.rb new file mode 100644 index 000000000..3e61ffd33 --- /dev/null +++ b/app/queries/admins/edu_setting_query.rb @@ -0,0 +1,28 @@ +class Admins::EduSettingQuery < ApplicationQuery + include CustomSortable + + attr_reader :params + + sort_columns :id, default_by: :id, default_direction: :desc + + def initialize(params) + @params = params + end + + def call + collection = EduSetting.all + collection = filter_settings(collection) + + custom_sort collection, params[:sort_by], params[:sort_direction] + end + + def filter_settings(collection) + by_search(collection) + end + + def by_search(collection) + keyword = strip_param(:search) + collection.by_search(keyword) + end + +end \ No newline at end of file diff --git a/app/queries/admins/site_query.rb b/app/queries/admins/site_query.rb new file mode 100644 index 000000000..1d15f0312 --- /dev/null +++ b/app/queries/admins/site_query.rb @@ -0,0 +1,35 @@ +class Admins::SiteQuery < ApplicationQuery + include CustomSortable + + attr_reader :params + + sort_columns :id, default_by: :id, default_direction: :desc + + def initialize(params) + @params = params + end + + def call + collection = Site.all + collection = filter_sites(collection) + + custom_sort collection, params[:sort_by], params[:sort_direction] + end + + def filter_sites(collection) + collection = by_search(collection) + collection = by_stie_type(collection) + collection + end + + def by_search(collection) + keyword = strip_param(:search) + collection.by_search(keyword) + end + + def by_stie_type(collection) + site_type = strip_param(:site_type) + collection.by_site_type(site_type) + end + +end \ No newline at end of file diff --git a/app/views/admins/edu_settings/_form.html.erb b/app/views/admins/edu_settings/_form.html.erb new file mode 100644 index 000000000..cce930f2a --- /dev/null +++ b/app/views/admins/edu_settings/_form.html.erb @@ -0,0 +1,38 @@ +
\ No newline at end of file diff --git a/app/views/admins/edu_settings/_list.html.erb b/app/views/admins/edu_settings/_list.html.erb new file mode 100644 index 000000000..a37cc9bef --- /dev/null +++ b/app/views/admins/edu_settings/_list.html.erb @@ -0,0 +1,36 @@ +序号 | +变量名 | +变量值 | +备注说明 | +<%= sort_tag('创建时间', name: 'created_at', path: admins_edu_settings_path) %> | +操作 | +
---|---|---|---|---|---|
<%= list_index_no((params[:page] || 1).to_i, index) %> | ++ <%= edu_setting.name %> + | +<%= edu_setting.value %> | + +<%= overflow_hidden_span display_text(edu_setting.description), width: 200 %> | +<%= edu_setting.created_at&.strftime('%Y-%m-%d %H:%M') %> | ++ <%= link_to "编辑", edit_admins_edu_setting_path(edu_setting), remote: true, class: "action" %> + <%= link_to "删除", admins_edu_setting_path(edu_setting), method: :delete, data:{confirm: "确认删除的吗?"}, class: "action" %> + | +
序号 | +名称 | +路由 | +标识 | +类型 | +<%= sort_tag('创建时间', name: 'created_at', path: admins_sites_path) %> | +操作 | +
---|---|---|---|---|---|---|
<%= list_index_no((params[:page] || 1).to_i, index) %> | ++ <%= overflow_hidden_span display_text(site.name), width: 150 %> + | +<%= site.url %> | + +<%= overflow_hidden_span display_text(site.key), width: 150 %> | +<%= site.site_type.humanize %> | +<%= site.created_at&.strftime('%Y-%m-%d %H:%M') %> | ++ <%= link_to "编辑", edit_admins_site_path(site), remote: true, class: "action" %> + <%= link_to "删除", admins_site_path(site), method: :delete, data:{confirm: "确认删除的吗?"}, class: "action" %> + | +
<%= notice %>
- -说明:该界面适用于存储全局变量
- -变量名 | -变量值 | -- | ||
---|---|---|---|---|
<%= edu_setting.name %> | -<%= edu_setting.value %> | -<%= link_to 'Show', edu_setting %> | -<%= link_to 'Edit', edit_edu_setting_path(edu_setting) %> | -<%= link_to 'Destroy', edu_setting, method: :delete, data: { confirm: 'Are you sure?' } %> | -
<%= notice %>
- -- Name: - <%= @edu_setting.name %> -
- -- Value: - <%= @edu_setting.value %> -
- -<%= link_to 'Edit', edit_edu_setting_path(@edu_setting) %> | -<%= link_to 'Back', edu_settings_path %> diff --git a/config/routes.rb b/config/routes.rb index 346468fb7..37b98b228 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -651,6 +651,8 @@ Rails.application.routes.draw do get :visits_static end end + resources :sites + resources :edu_settings resources :project_languages resources :project_categories resources :project_licenses diff --git a/spec/controllers/admins/edu_settings_controller_spec.rb b/spec/controllers/admins/edu_settings_controller_spec.rb new file mode 100644 index 000000000..ae5164879 --- /dev/null +++ b/spec/controllers/admins/edu_settings_controller_spec.rb @@ -0,0 +1,47 @@ +require 'rails_helper' + +RSpec.describe Admins::EduSettingsController, type: :controller do + + describe "GET #index" do + it "returns http success" do + get :index + expect(response).to have_http_status(:success) + end + end + + describe "GET #new" do + it "returns http success" do + get :new + expect(response).to have_http_status(:success) + end + end + + describe "GET #update" do + it "returns http success" do + get :update + expect(response).to have_http_status(:success) + end + end + + describe "GET #edit" do + it "returns http success" do + get :edit + expect(response).to have_http_status(:success) + end + end + + describe "GET #create" do + it "returns http success" do + get :create + expect(response).to have_http_status(:success) + end + end + + describe "GET #destroy" do + it "returns http success" do + get :destroy + expect(response).to have_http_status(:success) + end + end + +end diff --git a/spec/controllers/admins/sites_controller_spec.rb b/spec/controllers/admins/sites_controller_spec.rb new file mode 100644 index 000000000..0c5f79b3d --- /dev/null +++ b/spec/controllers/admins/sites_controller_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe Admins::SitesController, type: :controller do + +end diff --git a/spec/views/admins/edu_settings/create.html.erb_spec.rb b/spec/views/admins/edu_settings/create.html.erb_spec.rb new file mode 100644 index 000000000..bc53b9f18 --- /dev/null +++ b/spec/views/admins/edu_settings/create.html.erb_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "edu_settings/create.html.erb", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/views/admins/edu_settings/destroy.html.erb_spec.rb b/spec/views/admins/edu_settings/destroy.html.erb_spec.rb new file mode 100644 index 000000000..51acd4901 --- /dev/null +++ b/spec/views/admins/edu_settings/destroy.html.erb_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "edu_settings/destroy.html.erb", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/views/admins/edu_settings/edit.html.erb_spec.rb b/spec/views/admins/edu_settings/edit.html.erb_spec.rb new file mode 100644 index 000000000..e381cbb04 --- /dev/null +++ b/spec/views/admins/edu_settings/edit.html.erb_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "edu_settings/edit.html.erb", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/views/admins/edu_settings/index.html.erb_spec.rb b/spec/views/admins/edu_settings/index.html.erb_spec.rb new file mode 100644 index 000000000..ba6e16ebc --- /dev/null +++ b/spec/views/admins/edu_settings/index.html.erb_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "edu_settings/index.html.erb", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/views/admins/edu_settings/new.html.erb_spec.rb b/spec/views/admins/edu_settings/new.html.erb_spec.rb new file mode 100644 index 000000000..00bc830cd --- /dev/null +++ b/spec/views/admins/edu_settings/new.html.erb_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "edu_settings/new.html.erb", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/views/admins/edu_settings/update.html.erb_spec.rb b/spec/views/admins/edu_settings/update.html.erb_spec.rb new file mode 100644 index 000000000..89ae0feb8 --- /dev/null +++ b/spec/views/admins/edu_settings/update.html.erb_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "edu_settings/update.html.erb", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end