diff --git a/app/controllers/claims_controller.rb b/app/controllers/claims_controller.rb new file mode 100644 index 000000000..d9959bafd --- /dev/null +++ b/app/controllers/claims_controller.rb @@ -0,0 +1,138 @@ +#coding=utf-8 +class ClaimsController < ApplicationController + # skip_before_action :verify_authenticity_token + protect_from_forgery with: :null_session + before_action :require_login, except: [:index] + before_action :set_issue + + def index + @user_claimed = 0 + @claims = @issue.claims.claim_includes.order("created_at desc") + + @claims.each do |claim| + if claim.user_id == current_user.id + @user_claimed = 1 + break + end + end + render file: 'app/views/claims/list.json.jbuilder' + end + + def create + @claim = Claim.find_by_sql(["select id from claims where issue_id=? and user_id=?",params[:issue_id], current_user.id]) + if @claim.present? + return normal_status(-1,"您已经声明过该易修") + end + + ActiveRecord::Base.transaction do + @claim = Claim.new(parse_issue_params(params)) + if @claim.save + @claims = @issue.claims.claim_includes.order("created_at desc") + @user_claimed = 1 + + journal_params = { + journalized_id: params[:issue_id], + journalized_type: "Issue", + user_id: current_user.id , + notes: "新建声明: #{params[:claim_note]}", + } + + journal = Journal.new(journal_params) + if journal.save + render file: 'app/views/claims/list.json.jbuilder' + else + normal_status(-1,"新建声明关联评论操作失败") + end + + else + normal_status(-1,"新建声明操作失败") + end + end + end + + def update + @claim = Claim.find_by_id(params[:claim_id]) + if @claim.blank? + return normal_status(-1,"易修不存在") + end + + if @claim.user_id != current_user.id + return normal_status(-1,"你不能更新别人的声明") + end + + ActiveRecord::Base.transaction do + if @claim.update_attribute(:note,params[:claim_note]) + @claims = @issue.claims.claim_includes.order("created_at desc") + @user_claimed = 1 + + journal_params = { + journalized_id: params[:issue_id], + journalized_type: "Issue", + user_id: current_user.id , + notes: "更新声明: #{params[:claim_note]}", + } + + journal = Journal.new(journal_params) + if journal.save + render file: 'app/views/claims/list.json.jbuilder' + else + normal_status(-1,"新建声明关联评论操作失败") + end + + else + normal_status(-1,"声明更新操作失败") + end + end + end + + def destroy + @claim = Claim.find_by_sql(["select id from claims where issue_id=? and user_id=?",params[:issue_id], current_user.id]) + if @claim.blank? + normal_status(-1,"您未曾声明过该易修") + else + @claim = @claim[0] + # 判断current user是否是claimer + ActiveRecord::Base.transaction do + if @claim.destroy + + @claims = @issue.claims.claim_includes.order("created_at desc") + @user_claimed = 0 + + journal_params = { + journalized_id: params[:issue_id], + journalized_type: "Issue", + user_id: current_user.id , + notes: "取消声明", + } + + journal = Journal.new(journal_params) + if journal.save + render file: 'app/views/claims/list.json.jbuilder' + else + normal_status(-1,"新建声明关联评论操作失败") + end + + else + normal_status(-1,"取消声明操作失败") + end + end + end + end + + private + def parse_issue_params(params) + { + issue_id: params[:issue_id], + user_id: current_user.id, + note: params[:claim_note], + } + end + + def set_issue + @issue = Issue.find_by_id(params[:issue_id]) + unless @issue.present? + normal_status(-1, "易修不存在") + end + end + +end \ No newline at end of file diff --git a/app/models/claim.rb b/app/models/claim.rb new file mode 100644 index 000000000..963b5f55a --- /dev/null +++ b/app/models/claim.rb @@ -0,0 +1,21 @@ +# == Schema Information +# +# Table name: claims +# +# id :integer not null, primary key +# issue_id :integer +# user_id :integer +# created_at :datetime not null +# updated_at :datetime not null +# note :text(65535) +# +# Indexes +# +# index_claims_on_issue_id (issue_id) +# index_claims_on_user_id (user_id) +# + +class Claim < ApplicationRecord + belongs_to :user, foreign_key: :user_id + scope :claim_includes, ->{includes(:user)} +end diff --git a/app/models/issue.rb b/app/models/issue.rb index c642e642b..26b598f04 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -64,6 +64,7 @@ class Issue < ApplicationRecord # has_many :memos has_many :journals, :as => :journalized, :dependent => :destroy has_many :journal_details, through: :journals + has_many :claims, :dependent => :destroy has_many :issue_tags_relates, dependent: :destroy has_many :issue_tags, through: :issue_tags_relates has_many :issue_times, dependent: :destroy diff --git a/app/views/claims/_claim_item.json.jbuilder b/app/views/claims/_claim_item.json.jbuilder new file mode 100644 index 000000000..67a8e4729 --- /dev/null +++ b/app/views/claims/_claim_item.json.jbuilder @@ -0,0 +1,7 @@ +json.user_name claimer.user.try(:show_real_name) +json.user_login claimer.user.try(:login) +json.user_picture url_to_avatar(claimer.user) +json.created_at time_from_now(claimer.created_at) +json.note_body claimer.note +json.claim_id claimer.id +json.visible false \ No newline at end of file diff --git a/app/views/claims/list.json.jbuilder b/app/views/claims/list.json.jbuilder new file mode 100644 index 000000000..b5fef6129 --- /dev/null +++ b/app/views/claims/list.json.jbuilder @@ -0,0 +1,7 @@ +json.partial! "commons/success" +json.currentUserclaimed @user_claimed +json.claimers do + json.array! @claims do |claimer| + json.partial! "claims/claim_item", claimer: claimer + end +end \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index d4e1ba1c5..78912d1ec 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -9,6 +9,7 @@ Rails.application.routes.draw do # 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/download/:id/:filename', to: 'attachments#show' @@ -145,6 +146,16 @@ Rails.application.routes.draw 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 diff --git a/db/migrate/20211115014133_create_claims.rb b/db/migrate/20211115014133_create_claims.rb new file mode 100644 index 000000000..a35f5608b --- /dev/null +++ b/db/migrate/20211115014133_create_claims.rb @@ -0,0 +1,11 @@ +ails db:migrateclass CreateClaims < ActiveRecord::Migration[5.2] + def change + create_table :claims do |t| + t.integer :issue_id + t.integer :user_id + t.timestamps + t.index :issue_id + t.index :user_id + end + end +end diff --git a/db/migrate/20211119135526_add_note_to_claim.rb b/db/migrate/20211119135526_add_note_to_claim.rb new file mode 100644 index 000000000..9a1a8e969 --- /dev/null +++ b/db/migrate/20211119135526_add_note_to_claim.rb @@ -0,0 +1,5 @@ +class AddNoteToClaim < ActiveRecord::Migration[5.2] + def change + add_column :claims, :note, :text + end +end