v0.2 Address where due to import issues there are some stray PostCustomField records for Posts that do not exist.

This commit is contained in:
David Sainty 2024-09-11 15:04:17 +10:00
parent a85d33d1e3
commit e18a7602a8

View File

@ -1,7 +1,7 @@
# Federated Computer, Inc. # Federated Computer, Inc.
# David Sainty <saint@federated.computer> 2024 A.D. # David Sainty <saint@federated.computer> 2024 A.D.
# Gossamer Threads to Discourse -- Soft Deletion of Marked-As-Deleted Posts # Gossamer Threads to Discourse -- Soft Deletion of Marked-As-Deleted Posts
# v0.1 Move from destroy to soft deletion. # v0.2 Address where due to import issues there are some stray PostCustomField records for Posts that do not exist.
require 'mysql2' require 'mysql2'
require 'active_record' require 'active_record'
@ -46,19 +46,20 @@ class GossamerForumsSoftDelDeletedPosts < ImportScripts::Base
# Soft delete the post, whether topic post (OP) or reply post # Soft delete the post, whether topic post (OP) or reply post
def soft_delete_post(post, deleted_by_id) def soft_delete_post(post, deleted_by_id)
if post.deleted_at.nil? if post.deleted_at.nil?
# Get the post's owner and topic information # # Get the post's owner and topic information
user = User.find_by(id: post.user_id) # Fetch user details # user = User.find_by(id: post.user_id) # Fetch user details
topic = Topic.find_by(id: post.topic_id) # Fetch topic details # topic = Topic.find_by(id: post.topic_id) # Fetch topic details
# Display post, user, and topic information # # Display post, user, and topic information
puts "DELETING POST: SoftDelDeletedPosts: Soft deleting post with id: #{post.id}" # puts "DELETING POST: SoftDelDeletedPosts: Soft deleting post with id: #{post.id}"
puts " - Post owner: #{user.username} (ID: #{user.id})" # puts " - Post owner: #{user.username} (ID: #{user.id})"
puts " - Topic title: '#{topic.title}' (Topic ID: #{topic.id})" # puts " - Topic title: '#{topic.title}' (Topic ID: #{topic.id})"
# Perform the soft delete by updating the fields # Perform the soft delete by updating the fields
## post.deleted_at = Time.now ## post.deleted_at = Time.now
## post.deleted_by_id = deleted_by_id ## post.deleted_by_id = deleted_by_id
## post.save ## post.save
puts "... actual deleted_at step"
### post.update(deleted_at: Time.now, deleted_by_id: deleted_by_id) ### post.update(deleted_at: Time.now, deleted_by_id: deleted_by_id)
else else
puts "SoftDelDeletedPosts: Post with id: #{post.id} is already soft deleted." puts "SoftDelDeletedPosts: Post with id: #{post.id} is already soft deleted."
@ -145,14 +146,47 @@ end
posts_result.each do |legacy_post| posts_result.each do |legacy_post|
post_id = legacy_post['post_id'] post_id = legacy_post['post_id']
# Look for the post in Discourse by custom field # # Look for the post in Discourse by custom field
post = find_post_by_custom_field(post_id) # post = find_post_by_custom_field(post_id)
#
# if post
# # Soft delete only the individual post (whether topic post / OP or a reply post)
# soft_delete_post(post, deleted_by_id)
# end
soft_del_all_deleted_posts_by_custom_field(post_id, deleted_by_id)
end
end
# Define a method to find all posts by the original Gossamer Forums post ID and soft delete them
def soft_del_all_deleted_posts_by_custom_field(post_id, deleted_by_id)
puts "SoftDelDeletedPosts: Searching for all posts with original_gossamer_id: #{post_id}"
# Find all PostCustomField records with the given Gossamer Forums post_id
post_custom_fields = PostCustomField.where(name: 'original_gossamer_id', value: post_id.to_s)
if post_custom_fields.any?
post_custom_fields.each do |post_custom_field|
post = post_custom_field.post
if post if post
# Soft delete only the individual post (whether topic post / OP or a reply post) # Get the post's owner and topic information
user = User.find_by(id: post.user_id) # Fetch user details
topic = Topic.find_by(id: post.topic_id) # Fetch topic details
# Display post, user, and topic information
puts "DELETING POST: SoftDelDeletedPosts: Soft deleting post with id: #{post.id}"
puts " - Post owner: #{user.username} (ID: #{user.id})"
puts " - Topic title: '#{topic.title}' (Topic ID: #{topic.id})"
# Soft delete the post if not already deleted
soft_delete_post(post, deleted_by_id) soft_delete_post(post, deleted_by_id)
else
puts "SoftDelDeletedPosts: Found PostCustomField with no corresponding post (ID: #{post_custom_field.id})"
end end
end end
else
puts "SoftDelDeletedPosts: No PostCustomField records found with original_gossamer_id: #{post_id}"
end
end end