From 88448c723621b298b00ee5dd79de093387ae4029 Mon Sep 17 00:00:00 2001 From: cocococosti Date: Mon, 7 Mar 2022 14:50:38 -0400 Subject: [PATCH] Adding support for User Stats import to the generic importer --- .DS_Store | Bin 0 -> 10244 bytes app/.DS_Store | Bin 0 -> 6148 bytes app/assets/.DS_Store | Bin 0 -> 6148 bytes app/assets/javascripts/.DS_Store | Bin 0 -> 6148 bytes public/.DS_Store | Bin 0 -> 6148 bytes public/images/.DS_Store | Bin 0 -> 6148 bytes public/images/emoji/.DS_Store | Bin 0 -> 6148 bytes script/bulk_import/generic_bulk.rb | 59 +++++++++++++++++++++++++---- 8 files changed, 52 insertions(+), 7 deletions(-) create mode 100644 .DS_Store create mode 100644 app/.DS_Store create mode 100644 app/assets/.DS_Store create mode 100644 app/assets/javascripts/.DS_Store create mode 100644 public/.DS_Store create mode 100644 public/images/.DS_Store create mode 100644 public/images/emoji/.DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..2a06c1efb54f603504c78d5ce096ccc951d938b8 GIT binary patch literal 10244 zcmeHMU1%It6h1e*Yy;X@@TL0Vv?(H#s_BDh6}zS@MX4AGDAFI2&8FMZ-Oifs1`4Iw z2MY>5rBExTHPAklLSL%S5z!}6XdisC4YZ{NUkd8G-#Pcr%$b>;m=__)9hfa>iG-#IQX@)|u>e4hFhn=N4ySETUn+rf)BUo~1w}pcvzn!@!+>}3IGRUuSN0(R8w2Y(R(lLx?U8582`Z*t=IUM;l z)`#bVYNs70Op2p4A0nANBWP!yPRS_pc<#dQX==k6?-E5LS-u8#YsPD?+aASS|0O43 zzTTX4KLXIA5?FVrqxIZ+x^p)1Xl}3Vy#3Vo_hl?yp4Kn#)p$Gpcx>_NJl{1Q(SefS ziAUoFb0dHD?A$5gDMp^g%X>8*nH9#XxaaIBvYQ&!?5my2`Zf09U^K!`wV@dl#b_Sp z-3jI~gr`0|YoA_x5Z%|f-G?7PJa|VmmK=?j^=TaXXo_*lzzNakQ@XE2ci+=Kjd!3C z_cPAbn1lQ&TqFIfK;JgzQWMWY27BL8V5j^V|DF5Wu6}k_`kRSK=66v{iU$dg5}v=~ z8Kt*(FN1;eXzW*)o{z>j_9m!#Zwim!9k$glJ+l@LUHT>QXuQvFAAaeveV;HM^0d-< zuf|(Aw9I&$WQFO;8g??HbnDX_`3Q|ax!UY~dtS88w4-?xM`=Fv^~=ns0zO!eMfDjy z=a#~7G3(b{ejK|MttF{8G?Stj&EuQjw^$y$7SCbqJLz{5J@YqzR##-Lc7Dxc+T4xi zKqe-c2}LoQ2R*mSJj%f7;2B71Vcu+}d>a4DFCIkrajw>2kYD4PPx`j)E=|5HD0OY z)|q+qlfUM|^cT|ymsVDQTESa6_G|2Czk8z*uQREbq|Ze$n#YHiWxfH*A6@~kfLFjP zumKg|iULQ#`~Pnj|Nmct{KYHa75INDV9K@0+Bo{=_SSQ~upv NVZ~9p4%*1||38>eMkfFO literal 0 HcmV?d00001 diff --git a/app/.DS_Store b/app/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..c6dd253a5480eddb00bc9ce7ed5e18213ed0bd6d GIT binary patch literal 6148 zcmeHKOG*Pl5UtW611`)m%U*ba++Ymj3E}}_j2I+g0@1DXNxXT+YCOnxbvK^gwChbzp}%P2 zyPwFlZ1KC5o%bJI-M{Sm*KO0xSM413>S_6Y_WJR5u^+SeHD=CGQCZH zHziiVKrryn7|=m8Z6^3AKU?=ck7sSdm|;*Dm#ILYcP;@~a32{Jr}-0g#MO@3kX2|e Q>A<)M6hdMO1`fc$CkKQug8%>k literal 0 HcmV?d00001 diff --git a/app/assets/.DS_Store b/app/assets/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..647eb62ed2cf769e7590b47dbe5b2593a46ec1f4 GIT binary patch literal 6148 zcmeHKOKJl#43*j}2C~UAOD}qX&3fboZ`9VKqn4xL2_O5s6C3=NIuaY}-SNdeB zpP|!2DTGoake_Tzvgg6r77_9IW;G%j5K#dYWHCBKhC8PY%((~ToMS^vx}pne=(;1( zUmTLX_vw=6w1s}$|7LwQnl9_Ak!=qrPxoJYR&`k}*7X7&MRk1l{IGjG`ObUw1MlYi zeHTZ!Go*EK2AlzBz!`7`e#HRpY>}d`=&dv03^)UC49NKqpn}mbDdwXCO)dd|@{G;` zTWSf335L-yDPjh~8Vb}+aca_2AqL^#sK%qX*tG6+1>i-^W?4#&>2)j{E`?D*sVtZI&zK- e^Q6uPvEdgDlcHpi@f;5Hhd?I88)sk-47>nz@;KQ5 literal 0 HcmV?d00001 diff --git a/app/assets/javascripts/.DS_Store b/app/assets/javascripts/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..f3310109918ae4ef3461b4a2236e0c10468ec799 GIT binary patch literal 6148 zcmeHKu};G<5Iv^_rGlXg5~KNqY)CAj3SZC@0w3DwRo8cvFQ!6^q%r;nSx@*+vbSuw_J`1Z2*S-!uXw|S;p zdM@VG&YgXO<>-*Eky%Ppx}@CpO3E-=X0yuo==S06H{W`$(f9q=^M}o~b?v;UGTz3& zp7+Vwi1QW^2801&U{@JH&1MM?97-z;2m`{viUGbKG?X#+XdK$B1C4zG0J|_-L7(3e z9HTwP9*slHK$Hswx=`hx7|MmiuDxIE(KvMBr0mXE$M3BC3q{%8Vb|83RP0b%VL%vI zXQ1PTeXjo(?eG8fAQ=e*!oa^`Ky{O0GQcPK+S>RyuC*FEg0irmakvUW$ChIFaw$HB aT7g}22N-)a4q<`FkAS5?8e!m18TbLnHDbpA literal 0 HcmV?d00001 diff --git a/public/.DS_Store b/public/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..7e67e88fadcc91d066bc830c36deea8b4e8521f2 GIT binary patch literal 6148 zcmeHKu};H44E2==3M^G8#`^(=4s>D&Rgl=bGL#ZjkP;;l>Yfka1K8kK5aJ8EGcoZK z@O-w~CZS?OsIn#ByZG#j^Dc^GB66d7Iw0y1Q5VYC*~jpM@H%TtI%?rX7xuWJ`)oEC zUl)1V@;1YNWPs0Zm+mO1E1FT`{M^IAMRPqbl4P0{Q`o!1#bf{FBm0_a@phhf4;f@uLs$c zF<=aA6$36x#>oheq_ws6a9nFWbOL2zze;c!f=MXF@a0l`1Puba=Ls-YtOQ|!*pEP< L!3JaCPZ{_IT_#fs literal 0 HcmV?d00001 diff --git a/public/images/.DS_Store b/public/images/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..dc1589872b27ed03588888810649da9a4340de9d GIT binary patch literal 6148 zcmeH~OG*SW5QeL?g$5VS(q)d|+#n7;g6p|}jN_AOdO&6$yqS0fmo7bse?3&94ekb! zDoFl3s?yybbdn+>o^4lCq6rbTD55Nl5tHH3sXcdYpsZ`$t#77_%c0+lEb}*qi2m(Q1 zrvz|ji?xTQQ3rt_5ClF6$o`N}M6+u#)vW`SrT|d6MysJMxrD?d*X&wMF#}@@g<2?k zioq6+@#KElwU}Bsu_qtwPyR?=Sf7sdle!aU)2M?$5U2_4TX!Po{~W)}Xp&!tL@x*g zfqzDTn{Ls~@KJuY{`fpOYZJ-^ikSEnX~58~E&=GsK60#+HlL&ozwBB}Wfd9MaA;fv M6i8G-UomA?j<~(O_z~>}g-YeGP)LvviB2LE z{sfg;b!}#&OTJa^;Hu}&twjo$4%aa!;_e|^$wF?yBLed^%V0MG0Ef5?i6qGoESNad44;G$-CPetBxx!gEF*B`?QIEH}MM@AD>J{m|QQ9 zpJT2~?=ji6kFxkEUDJ|HopLl~sW|qcz9Z%;M@=3N2QM)XBj4oEI>MgcV?BOq*t6NP z0}5U56mSYS1wIwv^}$19^fg8b<Y9+>+> NK+51cr@*f&@Bx^0`Zxdp literal 0 HcmV?d00001 diff --git a/script/bulk_import/generic_bulk.rb b/script/bulk_import/generic_bulk.rb index 0c773f8c2e..17072f9941 100644 --- a/script/bulk_import/generic_bulk.rb +++ b/script/bulk_import/generic_bulk.rb @@ -23,14 +23,15 @@ class BulkImport::Generic < BulkImport::Base end def execute - import_categories - import_users - import_user_emails + # import_categories + # import_users + # import_user_emails #import_single_sign_on_records - import_topics - import_posts - import_topic_allowed_users - import_likes + # import_topics + # import_posts + # import_topic_allowed_users + # import_likes + import_user_stats end def import_categories @@ -229,6 +230,50 @@ class BulkImport::Generic < BulkImport::Base end end + def import_user_stats + puts "Importing user stats..." + + users = @db.execute(<<~SQL) + WITH posts_counts AS (SELECT COUNT(p.id) as count, p.user_id FROM posts p GROUP BY p.user_id), + topic_counts AS (SELECT COUNT(t.id) as count, t.user_id FROM topics t GROUP BY t.user_id), + first_post AS (SELECT MIN(p.created_at) as created_at, p.user_id FROM posts p GROUP BY p.user_id ORDER BY p.created_at ASC) + SELECT u.id as user_id, u.created_at, pc.count as posts, tc.count as topics, fp.created_at as first_post + FROM users u + JOIN posts_counts pc ON u.id = pc.user_id + JOIN topic_counts tc ON u.id = tc.user_id + JOIN first_post fp on u.id = fp.user_id + SQL + + create_user_stats(users) do |row| + user = { + imported_id: row["user_id"], + imported_user_id: row["user_id"], + new_since: to_datetime(row["created_at"]), + post_count: row["posts"], + topic_count: row["topics"], + first_post_created_at: to_datetime(row["first_post"]) + } + + likes_received = @db.execute(<<~SQL) + SELECT COUNT(l.id) as likes_received FROM likes l join posts p on l.post_id = p.id WHERE p.user_id = #{row["user_id"]} + SQL + + if likes_received + user[:likes_received] = row["likes_received"] + end + + likes_given = @db.execute(<<~SQL) + SELECT COUNT(l.id) as likes_given FROM likes l WHERE l.user_id = #{row["user_id"]} + SQL + + if likes_given + user[:likes_given] = row["likes_given"] + end + + user + end + end + def create_connection(path) sqlite = SQLite3::Database.new(path, results_as_hash: true) sqlite.busy_timeout = 60000 # 60 seconds