From e174b8edac50155b29ca90908e20089711081b60 Mon Sep 17 00:00:00 2001 From: SylorHuang Date: Fri, 20 Dec 2019 17:34:10 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E7=BB=84=E7=BB=87?= =?UTF-8?q?=E7=9A=84=E7=9B=B8=E5=85=B3=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/composes_controller.rb | 46 +++++++++++++++++++ app/models/compose.rb | 6 +++ app/models/compose_project.rb | 3 ++ app/models/compose_user.rb | 4 ++ app/models/user.rb | 3 ++ app/views/composes/create.json.jbuilder | 1 + config/routes.rb | 3 +- db/migrate/20191220085002_create_composes.rb | 15 ++++++ .../20191220085133_create_compose_users.rb | 12 +++++ .../20191220085352_create_compose_projects.rb | 14 ++++++ spec/models/compose_project_spec.rb | 5 ++ spec/models/compose_spec.rb | 5 ++ spec/models/compose_user_spec.rb | 5 ++ 13 files changed, 121 insertions(+), 1 deletion(-) create mode 100644 app/controllers/composes_controller.rb create mode 100644 app/models/compose.rb create mode 100644 app/models/compose_project.rb create mode 100644 app/models/compose_user.rb create mode 100644 app/views/composes/create.json.jbuilder create mode 100644 db/migrate/20191220085002_create_composes.rb create mode 100644 db/migrate/20191220085133_create_compose_users.rb create mode 100644 db/migrate/20191220085352_create_compose_projects.rb create mode 100644 spec/models/compose_project_spec.rb create mode 100644 spec/models/compose_spec.rb create mode 100644 spec/models/compose_user_spec.rb diff --git a/app/controllers/composes_controller.rb b/app/controllers/composes_controller.rb new file mode 100644 index 000000000..6d03a1444 --- /dev/null +++ b/app/controllers/composes_controller.rb @@ -0,0 +1,46 @@ +class ComposesController < ApplicationController + before_action :require_login, except: [:index] + + def index + + end + + def new + + end + + def create + ActiveRecord::Base.transaction do + begin + compose_params = params[:compose] + @compose = Compose.new(compose_params.merge(user_id: current_user.id)) + if @compose.save + ComposeUser.create!(user_id: current_user.id, compose_id: @compose.id, is_manager: 1) + normal_status(0,"组织创建成功") + else + normal_status(-1,"组织创建失败") + end + rescue Exception => e + tip_exception("#{e}") + raise ActiveRecord::Rollback + end + end + + end + + def edit + + end + + def update + + end + + def destroy + + end + + def show + + end +end \ No newline at end of file diff --git a/app/models/compose.rb b/app/models/compose.rb new file mode 100644 index 000000000..9bcfb5449 --- /dev/null +++ b/app/models/compose.rb @@ -0,0 +1,6 @@ +class Compose < ApplicationRecord + belongs_to :user + has_many :compose_projects + has_many :compose_users + +end diff --git a/app/models/compose_project.rb b/app/models/compose_project.rb new file mode 100644 index 000000000..617204eff --- /dev/null +++ b/app/models/compose_project.rb @@ -0,0 +1,3 @@ +class ComposeProject < ApplicationRecord + belongs_to :compose +end diff --git a/app/models/compose_user.rb b/app/models/compose_user.rb new file mode 100644 index 000000000..e3b514b3e --- /dev/null +++ b/app/models/compose_user.rb @@ -0,0 +1,4 @@ +class ComposeUser < ApplicationRecord + belongs_to :compose + belongs_to :user +end diff --git a/app/models/user.rb b/app/models/user.rb index f25ecc4b8..5596d8639 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -158,6 +158,9 @@ class User < ApplicationRecord has_many :hacks, dependent: :destroy has_many :hack_user_lastest_codes, dependent: :destroy + has_many :composes, dependent: :destroy + has_many :compose_users, dependent: :destroy + # Groups and active users scope :active, lambda { where(status: STATUS_ACTIVE) } diff --git a/app/views/composes/create.json.jbuilder b/app/views/composes/create.json.jbuilder new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/app/views/composes/create.json.jbuilder @@ -0,0 +1 @@ + diff --git a/config/routes.rb b/config/routes.rb index 34412ccae..b306ebfad 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,4 +1,4 @@ -Rails.application.routes.draw do +Rails.application.routes.draw do require 'sidekiq/web' require 'admin_constraint' mount Sidekiq::Web => '/sidekiq', :constraints => AdminConstraint.new @@ -12,6 +12,7 @@ Rails.application.routes.draw do resources :edu_settings scope '/api' do + resources :composes get 'home/index' get 'home/search' diff --git a/db/migrate/20191220085002_create_composes.rb b/db/migrate/20191220085002_create_composes.rb new file mode 100644 index 000000000..8b301d946 --- /dev/null +++ b/db/migrate/20191220085002_create_composes.rb @@ -0,0 +1,15 @@ +class CreateComposes < ActiveRecord::Migration[5.2] + def change + create_table :composes do |t| + t.integer :user_id + t.string :title + t.text :description + t.integer :show_mode, default: 0 + t.boolean :compose_mode, default: false + t.integer :compose_users_count, default: 0 + t.integer :compose_projects_count , default: 0 + t.timestamps + end + add_index :composes, [:user_id,:show_mode,:compose_mode] + end +end diff --git a/db/migrate/20191220085133_create_compose_users.rb b/db/migrate/20191220085133_create_compose_users.rb new file mode 100644 index 000000000..2df62cb08 --- /dev/null +++ b/db/migrate/20191220085133_create_compose_users.rb @@ -0,0 +1,12 @@ +class CreateComposeUsers < ActiveRecord::Migration[5.2] + def change + create_table :compose_users do |t| + t.integer :user_id + t.integer :compose_id + t.integer :is_manager, default: 0 + + t.timestamps + end + add_index :compose_users, [:user_id, :compose_id] + end +end diff --git a/db/migrate/20191220085352_create_compose_projects.rb b/db/migrate/20191220085352_create_compose_projects.rb new file mode 100644 index 000000000..308b4fa2d --- /dev/null +++ b/db/migrate/20191220085352_create_compose_projects.rb @@ -0,0 +1,14 @@ +class CreateComposeProjects < ActiveRecord::Migration[5.2] + def change + create_table :compose_projects do |t| + t.integer :user_id + t.integer :project_id + t.integer :compose_id + t.integer :position , default: 0 + + t.timestamps + end + add_index :compose_projects, [:user_id, :project_id, :compose_id] + add_column :composes, :compose_projects_count, :integer, :default => 0 + end +end diff --git a/spec/models/compose_project_spec.rb b/spec/models/compose_project_spec.rb new file mode 100644 index 000000000..53a5c80aa --- /dev/null +++ b/spec/models/compose_project_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe ComposeProject, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/compose_spec.rb b/spec/models/compose_spec.rb new file mode 100644 index 000000000..cfdbaa51b --- /dev/null +++ b/spec/models/compose_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe Compose, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/compose_user_spec.rb b/spec/models/compose_user_spec.rb new file mode 100644 index 000000000..ce4d2e00b --- /dev/null +++ b/spec/models/compose_user_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe ComposeUser, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end From c74d5bf95258861d812ab715746e2375073b6adf Mon Sep 17 00:00:00 2001 From: SylorHuang Date: Fri, 20 Dec 2019 17:35:29 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E7=9A=84=E7=BB=84=E7=BB=87=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/migrate/20191220085352_create_compose_projects.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/db/migrate/20191220085352_create_compose_projects.rb b/db/migrate/20191220085352_create_compose_projects.rb index 308b4fa2d..f57248419 100644 --- a/db/migrate/20191220085352_create_compose_projects.rb +++ b/db/migrate/20191220085352_create_compose_projects.rb @@ -9,6 +9,5 @@ class CreateComposeProjects < ActiveRecord::Migration[5.2] t.timestamps end add_index :compose_projects, [:user_id, :project_id, :compose_id] - add_column :composes, :compose_projects_count, :integer, :default => 0 end end From 3f304a28e86c71a8b5254397f7b6c180e44d5f3d Mon Sep 17 00:00:00 2001 From: SylorHuang Date: Mon, 23 Dec 2019 11:47:20 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E7=BB=84=E7=BB=87=E7=9A=84show=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E6=9C=AA=E5=81=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Gemfile | 2 +- app/controllers/application_controller.rb | 3 +- app/controllers/composes_controller.rb | 50 ++++++++++++++++++++--- app/models/compose.rb | 4 ++ app/views/composes/edit.json.jbuilder | 1 + app/views/composes/index.json.jbuilder | 13 ++++++ app/views/composes/show.json.jbuilder | 0 7 files changed, 65 insertions(+), 8 deletions(-) create mode 100644 app/views/composes/edit.json.jbuilder create mode 100644 app/views/composes/index.json.jbuilder create mode 100644 app/views/composes/show.json.jbuilder diff --git a/Gemfile b/Gemfile index b4a30658d..70838ca40 100644 --- a/Gemfile +++ b/Gemfile @@ -39,7 +39,7 @@ gem 'oauth2' #导出为pdf gem 'pdfkit' gem 'wkhtmltopdf-binary' - +gem 'request_store' #gem 'iconv' # markdown 转html gem 'redcarpet', '~> 3.4' diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index a8b3b4e1c..d3ce1e97a 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -327,7 +327,8 @@ class ApplicationController < ActionController::Base end def current_user - User.find_by_id 36401 + # User.current + User.find_by_id 1 end ## 默认输出json diff --git a/app/controllers/composes_controller.rb b/app/controllers/composes_controller.rb index 6d03a1444..6e4f02320 100644 --- a/app/controllers/composes_controller.rb +++ b/app/controllers/composes_controller.rb @@ -1,8 +1,19 @@ class ComposesController < ApplicationController before_action :require_login, except: [:index] + before_action :find_compose, except: [:index, :new,:create] def index - + @order_type = params[:order] || "created_at" + @search_name = params[:search] + composes = Compose.compose_includes + if @search_name.present? + composes = composes.where("title like ?", "%#{@search_name}%") + end + composes = composes.order("#{@order_type} desc") + @page = params[:page] || 1 + @limit = params[:limit] || 15 + @composes_size = composes.size + @composes = composes.page(@page).per(@limit) end def new @@ -12,20 +23,19 @@ class ComposesController < ApplicationController def create ActiveRecord::Base.transaction do begin - compose_params = params[:compose] @compose = Compose.new(compose_params.merge(user_id: current_user.id)) if @compose.save ComposeUser.create!(user_id: current_user.id, compose_id: @compose.id, is_manager: 1) normal_status(0,"组织创建成功") else - normal_status(-1,"组织创建失败") + error_messages = @compose.errors.messages[:title][0] + normal_status(-1,"组织创建失败:#{error_messages}") end rescue Exception => e tip_exception("#{e}") raise ActiveRecord::Rollback end end - end def edit @@ -33,14 +43,42 @@ class ComposesController < ApplicationController end def update - + if @compose.update_attributes(compose_params) + normal_status(0,"组织更新成功") + else + error_messages = @compose.errors.messages[:title][0] + normal_status(-1,"组织更新失败:#{error_messages}") + end end def destroy - + if @compose.destroy + normal_status(0,"组织删除成功") + else + normal_status(-1,"组织删除失败,请稍后重试") + end end def show + compose_projects = @compose&.compose_projects&.pluck(:project_id) + if compose_projects.size > 0 + @compose_projects = Project.where(id: compose_projects) + else + end end + + private + + def compose_params + params.require(:compose).permit(:user_id, :title, :description, :show_mode, :compose_mode, :compose_users_count, :compose_projects_count) + end + + def find_compose + @compose = Compose.find(params[:id]) + unless @compose.present? + normal_status(-1, "组织不存在") + end + end + end \ No newline at end of file diff --git a/app/models/compose.rb b/app/models/compose.rb index 9bcfb5449..30e1aaec0 100644 --- a/app/models/compose.rb +++ b/app/models/compose.rb @@ -3,4 +3,8 @@ class Compose < ApplicationRecord has_many :compose_projects has_many :compose_users + validates :title, presence: {message: "组织名称不能为空"}, uniqueness: {message: "组织名称已存在"} + + scope :compose_includes, ->{includes(:compose_projects, :compose_users, :user)} + end diff --git a/app/views/composes/edit.json.jbuilder b/app/views/composes/edit.json.jbuilder new file mode 100644 index 000000000..a68396037 --- /dev/null +++ b/app/views/composes/edit.json.jbuilder @@ -0,0 +1 @@ +json.extract! @compose, :id, :title,:description,:show_mode,:compose_mode, :compose_users_count, :compose_projects_count diff --git a/app/views/composes/index.json.jbuilder b/app/views/composes/index.json.jbuilder new file mode 100644 index 000000000..3f8b626bd --- /dev/null +++ b/app/views/composes/index.json.jbuilder @@ -0,0 +1,13 @@ +json.composes_count @composes_size +json.per_page @limit + +if @composes_size > 0 + json.composes do + json.array! @composes do |compose| + json.extract! compose, :id, :title,:description,:show_mode,:compose_mode, :compose_users_count, :compose_projects_count + json.created_at format_time(compose.created_at) + end + end +else + json.composes [] +end \ No newline at end of file diff --git a/app/views/composes/show.json.jbuilder b/app/views/composes/show.json.jbuilder new file mode 100644 index 000000000..e69de29bb