discourse-import_scripts/goss-destroydeletedposts.rb

84 lines
2.7 KiB
Ruby

# Federated Computer, Inc.
# David Sainty <saint@federated.computer> 2024 A.D.
# Gossamer Threads to Discourse -- CleanUp Script
# v0.4 Go back to simpler use of MySQL2
require 'mysql2'
require 'active_record'
# require 'concurrent-ruby'
require File.expand_path("../../../../config/environment", __FILE__)
require File.expand_path("../../../../script/import_scripts/base", __FILE__)
class GossamerForumsDestroyDeletedPosts < ImportScripts::Base
def initialize
super
begin
# Initialize MySQL client to connect to Gossamer Forums database
@mysql_client = Mysql2::Client.new(
host: "slowtwitch.northend.network",
username: "admin",
password: "yxnh93Ybbz2Nm8#mp28zCVv",
database: "slowtwitch"
)
rescue Mysql2::Error => e
puts "Error connecting to MySQL: #{e.message}"
exit 1
end
end
# Define a method to find a post by custom field
def find_post_by_custom_field(post_id)
puts "DestroyDeletedPosts: Searching for post with original_gossamer_id: #{post_id}"
post_custom_field = PostCustomField.find_by(name: 'original_gossamer_id', value: post_id.to_s)
if post_custom_field
post = post_custom_field.post
puts "DestroyDeletedPosts: Found post with id: #{post.id}"
post
else
puts "DestroyDeletedPosts: No post found with original_gossamer_id: #{post_id}"
nil
end
end
# Define the method to delete posts based on the Gossamer Forums flag
def destroy_deleted_posts_from_gossamer_with_user(username)
# Query the user ID from the legacy MySQL database
user_result = @mysql_client.query("SELECT user_id FROM gforum_User WHERE user_username = '#{username}' LIMIT 1")
user_id_row = user_result.first
if user_id_row.nil?
puts "DiscourseDeletedPosts: No user found with username: #{username}"
return
end
user_id = user_id_row['user_id']
# Find all posts marked as deleted by the given user
posts_result = @mysql_client.query("SELECT post_id FROM gforum_Post WHERE post_deleted = 1 AND user_id_fk = #{user_id}")
posts_result.each do |legacy_post|
post_id = legacy_post['post_id']
# Look for the post in Discourse by custom field
post = find_post_by_custom_field(post_id)
if post
puts "DestroyDeletedPosts: Mock-Deleting post with id: #{post.id}"
# post.destroy
end
end
end
def perform_deleted_destroy
puts "Destroy Deleted Posts beginning!"
# destroy_deleted_posts_from_gossamer
destroy_deleted_posts_from_gossamer_with_user('spudone')
puts "Destroy Deleted Posts complete!"
end
end
GossamerForumsDestroyDeletedPosts.new.perform_deleted_destroy