mirror of
https://github.com/discourse/discourse.git
synced 2025-05-22 03:51:07 +08:00
nodebb importer (#5842)
This commit is contained in:

committed by
Régis Hanol

parent
0800098f1a
commit
3287f47f07
109
script/import_scripts/nodebb/redis.rb
Normal file
109
script/import_scripts/nodebb/redis.rb
Normal file
@ -0,0 +1,109 @@
|
||||
require 'redis'
|
||||
|
||||
module NodeBB
|
||||
class Redis
|
||||
attr_reader :redis
|
||||
|
||||
def initialize(params)
|
||||
@redis = ::Redis.new(params)
|
||||
end
|
||||
|
||||
def groups
|
||||
group_keys = redis.zrange('groups:visible:createtime', 0, -1)
|
||||
|
||||
group_keys.map { |group_key| group(group_key) }
|
||||
end
|
||||
|
||||
def group(id)
|
||||
group = redis.hgetall("group:#{id}")
|
||||
group["createtime"] = timestamp_to_date(group["createtime"])
|
||||
group["member_ids"] = redis.zrange("group:#{id}:members", 0, -1)
|
||||
group["owner_ids"] = redis.smembers("group:#{id}:owners")
|
||||
|
||||
group
|
||||
end
|
||||
|
||||
def users
|
||||
user_keys = redis.zrange('users:joindate', 0, -1)
|
||||
|
||||
user_keys.map { |user_key| user(user_key) }
|
||||
end
|
||||
|
||||
def user(id)
|
||||
user = redis.hgetall("user:#{id}")
|
||||
|
||||
user["joindate"] = timestamp_to_date(user["joindate"])
|
||||
user["lastonline"] = timestamp_to_date(user["lastonline"])
|
||||
|
||||
user
|
||||
end
|
||||
|
||||
def categories
|
||||
category_keys = redis.zrange('categories:cid', 0, -1)
|
||||
|
||||
{}.tap do |categories|
|
||||
category_keys.each do |category_key|
|
||||
category = redis.hgetall("category:#{category_key}")
|
||||
|
||||
categories[category['cid']] = category
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def topics(offset = 0, page_size = 2000)
|
||||
# redis get keys inclusive
|
||||
# so we move the offset a bit to continue in the next item
|
||||
offset = offset + 1 unless offset == 0
|
||||
from = offset
|
||||
to = page_size + offset
|
||||
|
||||
topic_keys = redis.zrange('topics:tid', from, to)
|
||||
|
||||
topic_keys.map { |topic_key| topic(topic_key) }
|
||||
end
|
||||
|
||||
def topic(id)
|
||||
topic = redis.hgetall("topic:#{id}")
|
||||
|
||||
topic["lastposttime"] = timestamp_to_date(topic["lastposttime"])
|
||||
topic["timestamp"] = timestamp_to_date(topic["timestamp"])
|
||||
topic["mainpost"] = post(topic["mainPid"])
|
||||
|
||||
topic
|
||||
end
|
||||
|
||||
def topic_count
|
||||
redis.zcard('topics:tid')
|
||||
end
|
||||
|
||||
def posts(offset = 0, page_size = 2000)
|
||||
# redis get keys inclusive
|
||||
# so we move the offset a bit to continue in the next item
|
||||
offset = offset + 1 unless offset == 0
|
||||
from = offset
|
||||
to = page_size + offset
|
||||
|
||||
post_keys = redis.zrange('posts:pid', from, to)
|
||||
|
||||
post_keys.map { |post_key| post(post_key) }
|
||||
end
|
||||
|
||||
def post(id)
|
||||
post = redis.hgetall("post:#{id}")
|
||||
post["timestamp"] = timestamp_to_date(post["timestamp"])
|
||||
post["upvoted_by"] = redis.smembers("pid:#{id}:upvote")
|
||||
|
||||
post
|
||||
end
|
||||
|
||||
def post_count
|
||||
redis.zcard('posts:pid')
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def timestamp_to_date(createtime)
|
||||
Time.at(createtime[0..-4].to_i).utc if createtime
|
||||
end
|
||||
end
|
||||
end
|
Reference in New Issue
Block a user