نقل منتدى NodeBB باستخدام MongoDB إلى Discourse

تمكنت بطريقة ما من جعل دالة السكريبت تعمل بشكل صحيح.

إليك التغييرات التي أجريتها (بمساعدة بسيطة من Claude Code :slight_smile:)

 =>mongo.rb
   
   def posts(offset = 0, page_size = 1000)
      post_keys = mongo.find(_key: "posts:pid").skip(offset).limit(page_size).pluck(:value)
      post_keys
          .map { |pid| post(pid) }
          .compact  # <-- يسقط أي نتائج فارغة (معرفات المنشورات اليتيمة)
      post_keys.map { |post_key| post(post_key) }
    end

    def post(id)
    post = mongo.find(_key: "post:#{id}").first
    return nil if post.nil? # <-- التحقق من القيمة الفارغة
    post["timestamp"] = timestamp_to_date(post["timestamp"])
    if post["upvoted_by"] = mongo.find(_key: "pid:#{id}:upvote").first
        post["upvoted_by"] = mongo.find(_key: "pid:#{id}:upvote").first[:members]
      else
        post["upvoted_by"] = []
      end

      post["pid"] = post["pid"].to_s
      post["deleted"] = post["deleted"].to_s

      post
    end
	
=>nodebb.rb

 create_posts(posts, total: post_count, offset: offset) do |post|
        # تخطي إذا كان المنشور فارغًا
		# تخطي إذا كان merged_post
        next if post.nil?
        next if @merged_posts_map[post["pid"]]

        # تخطي إذا كان محذوفًا
        next if post["deleted"] == "1"

        raw = post["content"]
        post_id = "p#{post["pid"]}"

        next if raw.blank?
        topic = topic_lookup_from_imported_post_id("t#{post["tid"]}")

        unless topic
          puts "Topic with id #{post["tid"]} not found, skipping"
          next
        end	

يبدو أنه يعمل بالطريقة الصحيحة الآن.

على الرغم من أنني لا أعرف مدى صحة هذا من وجهة نظر البنية الداخلية لـ Discourse، إلا أنه يبدو أنه يعمل للوهلة الأولى.

أي اقتراحات للتحسين والتحسين هي موضع ترحيب كبير.

إعجاب واحد (1)