diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index d35741c61..d93f0a5bd 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -132,7 +132,6 @@ class CoursesController < ApplicationController tip_exception(404, "找不到资源") if video.blank? tip_exception(403, "...") unless (video.user_id == current_user.id || current_user.admin_or_business?) video.destroy! - AliyunVod::Service.delete_video([video.uuid]) rescue nil end render_ok diff --git a/app/controllers/users/videos_controller.rb b/app/controllers/users/videos_controller.rb index 04e483a6b..04cf26e04 100644 --- a/app/controllers/users/videos_controller.rb +++ b/app/controllers/users/videos_controller.rb @@ -26,7 +26,6 @@ class Users::VideosController < Users::BaseController return render_error('该状态下不能删除视频') unless video.pending? video.destroy! - AliyunVod::Service.delete_video([video.uuid]) rescue nil render_ok end @@ -60,8 +59,6 @@ class Users::VideosController < Users::BaseController video.destroy! - AliyunVod::Service.delete_video([video.uuid]) rescue nil - render_ok end diff --git a/app/controllers/weapps/courses_controller.rb b/app/controllers/weapps/courses_controller.rb index c4dde41e0..2a375a7fb 100644 --- a/app/controllers/weapps/courses_controller.rb +++ b/app/controllers/weapps/courses_controller.rb @@ -1,4 +1,6 @@ class Weapps::CoursesController < Weapps::BaseController + include CustomSortable + before_action :require_login before_action :set_course, except: [:create, :check_invite_code] before_action :user_course_identity, except: [:basic_info, :create, :check_invite_code] diff --git a/app/models/video.rb b/app/models/video.rb index 02cccd8f1..3fbeb676b 100644 --- a/app/models/video.rb +++ b/app/models/video.rb @@ -1,6 +1,13 @@ class Video < ApplicationRecord include AASM + alias_method :hard_destroy, :destroy + default_scope -> { where(delete_state: nil) } + scope :deleted, -> { unscope(where: :delete_state).where.not(delete_state: nil) } + + BEGIN_DELETE = 1 # 标记软删除 + FINISH_DELETE = 2 # 视频资源完成删除 + # 标准视频转码组 NORMAL_TRANSCODE_GROUP_ID = 'a0277c5c0c7458458e171b0cee6ebf5e' @@ -41,4 +48,17 @@ class Video < ApplicationRecord def video_play_duration (play_duration / (60*60.0)).ceil end + + def destroy + run_callbacks(:destroy) do + if persisted? + update_column(:delete_state, Video::BEGIN_DELETE) + AliyunVod::Service.delete_video([self.uuid]) + end + + @destroyed = true + end + freeze + end + end \ No newline at end of file diff --git a/app/services/videos/dispatch_callback_service.rb b/app/services/videos/dispatch_callback_service.rb index 149009c96..6bfb9f70d 100644 --- a/app/services/videos/dispatch_callback_service.rb +++ b/app/services/videos/dispatch_callback_service.rb @@ -23,6 +23,8 @@ class Videos::DispatchCallbackService < ApplicationService when 'StreamTranscodeComplete' then # 转码完成 return if video.play_url.present? video.update!(play_url: params['FileUrl'], transcoded: true) + when 'DeleteMediaComplete' #完成云端视频删除 + video.update_column(:delete_state, Video::FINISH_DELETE) end rescue => ex diff --git a/app/views/homework_commons/works_list.json.jbuilder b/app/views/homework_commons/works_list.json.jbuilder index 4faea3474..7c51432d0 100644 --- a/app/views/homework_commons/works_list.json.jbuilder +++ b/app/views/homework_commons/works_list.json.jbuilder @@ -123,6 +123,7 @@ elsif @homework.homework_type == "group" || @homework.homework_type == "normal" json.student_works @student_works.each do |work| if @is_evaluation json.(work, :id, :work_status, :update_time) + json.user_comment_count @homework_detail_manual.comment_status > 2 && work.work_status > 0 ? work.user_comment_num : 0 json.student_score work_score_format(anon_comments(@current_user, work.id).last.try(:score), false, true) # json.student_comment_count anon_comments(@current_user, work.id).count diff --git a/app/views/weapps/courses/course_videos.json.jbuilder b/app/views/weapps/courses/course_videos.json.jbuilder index e14e4f5d8..bca028c47 100644 --- a/app/views/weapps/courses/course_videos.json.jbuilder +++ b/app/views/weapps/courses/course_videos.json.jbuilder @@ -1,4 +1,4 @@ json.count @count json.videos @videos do |video| - json.partial! 'users/videos/video', locals: { video: video.video } + json.partial! 'users/videos/video', locals: { video: video } end \ No newline at end of file diff --git a/db/migrate/20200310080919_add_delete_state_to_video.rb b/db/migrate/20200310080919_add_delete_state_to_video.rb new file mode 100644 index 000000000..a6854620a --- /dev/null +++ b/db/migrate/20200310080919_add_delete_state_to_video.rb @@ -0,0 +1,6 @@ +class AddDeleteStateToVideo < ActiveRecord::Migration[5.2] + def change + add_column :videos, :delete_state, :integer + add_index :videos, :delete_state + end +end diff --git a/public/react/src/modules/courses/Video/MoveBox.js b/public/react/src/modules/courses/Video/MoveBox.js index 44cf097bd..bb68eff7b 100644 --- a/public/react/src/modules/courses/Video/MoveBox.js +++ b/public/react/src/modules/courses/Video/MoveBox.js @@ -53,12 +53,21 @@ class MoveBox extends Component{ video_ids:[id], new_category_id:selectSubId }).then(result=>{ + if(result){ + const { setMoveVisible , successFunc , updataleftNavfun} = this.props; updataleftNavfun && updataleftNavfun(); setMoveVisible && setMoveVisible(false); successFunc && successFunc(); - } + + try { + this.props.showNotification(result.data.message); + }catch (e) { + + } + + } }).catch(error=>{ console.log(error); }) @@ -69,7 +78,7 @@ class MoveBox extends Component{ const { data , selectSubId } = this.state; let list = data && data.course_second_categories && data.course_second_categories.length>0?data.course_second_categories:undefined; - + return(