# Federated Computer, Inc. # David Sainty 2024 A.D. # Gossamer Threads to Discourse -- CleanUp Script # v0.2 Fix class definition require 'mysql2' require 'active_record' # require 'concurrent-ruby' require File.expand_path("../../../../config/environment", __FILE__) class LegacyPost < ActiveRecord::Base self.table_name = 'gforums_Post' end class LegacyUser < ActiveRecord::Base self.table_name = 'gforums_User' end class GossamerForumsDestroyDeletedPosts # 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) Rails.logger.info("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 Rails.logger.info("DestroyDeletedPosts: Found post with id: #{post.id}") post else Rails.logger.warn("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 # Connect to the legacy MySQL database ActiveRecord::Base.establish_connection( adapter: 'mysql2', host: 'slowtwitch.northend.network', database: 'slowtwitch', username: 'admin', password: 'yxnh93Ybbz2Nm8#mp28zCVv' ) # Find all posts marked as deleted in the legacy database LegacyPost.where(post_deleted: 1).find_each do |legacy_post| # Look for the post in Discourse by custom field post = find_post_by_custom_field(legacy_post.post_id) if post Rails.logger.info("DestroyDeletedPosts: Deleting post with id: #{post.id}") # post.destroy end end end # Define the method to delete posts based on the Gossamer Forums flag def destroy_deleted_posts_from_gossamer_with_user(username) # Connect to the legacy MySQL database ActiveRecord::Base.establish_connection( adapter: 'mysql2', host: 'slowtwitch.northend.network', database: 'slowtwitch', username: 'admin', password: 'yxnh93Ybbz2Nm8#mp28zCVv' ) # Find the user ID for the given username user = LegacyUser.find_by(username: username) if user.nil? Rails.logger.warn("DestroyDeletedPosts: No user found with username: #{username}") return end # Find all posts marked as deleted in the legacy database LegacyPost.where(post_deleted: 1, user_id: user.id).find_each do |legacy_post| # Look for the post in Discourse by custom field post = find_post_by_custom_field(legacy_post.post_id) if post Rails.logger.info("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