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 new file mode 100644 index 000000000..6e4f02320 --- /dev/null +++ b/app/controllers/composes_controller.rb @@ -0,0 +1,84 @@ +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 + + end + + def create + ActiveRecord::Base.transaction do + begin + @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 + 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 + + 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 new file mode 100644 index 000000000..30e1aaec0 --- /dev/null +++ b/app/models/compose.rb @@ -0,0 +1,10 @@ +class Compose < ApplicationRecord + belongs_to :user + 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/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 8ed7e3b6e..5b90d6311 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -161,6 +161,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/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 diff --git a/config/routes.rb b/config/routes.rb index 47c4f5bd2..162e2ba15 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..f57248419 --- /dev/null +++ b/db/migrate/20191220085352_create_compose_projects.rb @@ -0,0 +1,13 @@ +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] + 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