2016-02-12 23:52:43 +08:00
|
|
|
namespace :data do
|
|
|
|
Rails.logger = Logger.new(STDOUT)
|
|
|
|
|
|
|
|
desc "Remove expired temporary files"
|
|
|
|
task clean_temp_files: :environment do
|
|
|
|
Rails.logger.info "Cleaning temporary files older than 3 days"
|
|
|
|
TempFile.where("created_at < ?", 3.days.ago).each do |tmp_file|
|
|
|
|
|
|
|
|
TempFile.transaction do
|
|
|
|
begin
|
|
|
|
tmp_file.destroy!
|
|
|
|
rescue Exception => e
|
|
|
|
Rails.logger.error "Failed to destroy temporary file #{tmp_file.id}: #{e}"
|
|
|
|
raise ActiveRecord::Rollback
|
|
|
|
else
|
|
|
|
Rails.logger.info "Temporary file ##{tmp_file.id} removed"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-07-21 19:11:15 +08:00
|
|
|
def destroy_users(users)
|
|
|
|
users.each do |user|
|
2016-02-12 23:52:43 +08:00
|
|
|
|
|
|
|
User.transaction do
|
|
|
|
begin
|
2017-01-27 17:39:57 +08:00
|
|
|
# Destroy user_team, and possibly team
|
|
|
|
if user.teams.count > 0
|
|
|
|
oids = user.teams.pluck(:id)
|
2016-07-21 19:11:15 +08:00
|
|
|
oids.each do |oid|
|
2017-01-27 17:39:57 +08:00
|
|
|
team = Team.find(oid)
|
|
|
|
user_team = user.user_teams.where(team: team).first
|
|
|
|
destroy_team = (team.users.count == 1 && team.created_by == user)
|
|
|
|
if !user_team.destroy(nil) then
|
2016-07-21 19:11:15 +08:00
|
|
|
raise Exception
|
|
|
|
end
|
2017-01-27 17:39:57 +08:00
|
|
|
team.destroy! if destroy_team
|
2016-07-21 19:11:15 +08:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-02-12 23:52:43 +08:00
|
|
|
user.destroy!
|
|
|
|
rescue Exception => e
|
|
|
|
Rails.logger.error "Failed to destroy unconfirmed user #{user.id}: #{e}"
|
|
|
|
raise ActiveRecord::Rollback
|
|
|
|
else
|
|
|
|
Rails.logger.info "Unconfirmed user ##{user.id} removed"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-07-21 19:11:15 +08:00
|
|
|
desc "Remove unconfirmed user accounts"
|
|
|
|
task clean_unconfirmed_users: :environment do
|
|
|
|
Rails.logger.info "Cleaning unconfirmed users"
|
|
|
|
|
|
|
|
# First, remove the users who signed up by themselves
|
|
|
|
users = User
|
|
|
|
.where(confirmed_at: nil)
|
|
|
|
.where.not(confirmation_token: nil)
|
|
|
|
.where(invitation_token: nil)
|
|
|
|
.where("created_at < ?", Devise.confirm_within.ago)
|
|
|
|
destroy_users(users)
|
|
|
|
|
|
|
|
# Now, remove users who were invited
|
|
|
|
users = User
|
|
|
|
.where(confirmed_at: nil)
|
|
|
|
.where(invitation_accepted_at: nil)
|
|
|
|
.where(confirmation_token: nil)
|
|
|
|
.where.not(invitation_token: nil)
|
|
|
|
.where("created_at < ?", Devise.invite_for.ago)
|
|
|
|
destroy_users(users)
|
|
|
|
end
|
|
|
|
|
2016-02-12 23:52:43 +08:00
|
|
|
desc "Remove temporary and obsolete data"
|
|
|
|
task clean: [:environment, :clean_temp_files, :clean_unconfirmed_users]
|
|
|
|
|
|
|
|
end
|