Fix like/dislike federation
authorChocobozzz <me@florianbigard.com>
Thu, 1 Aug 2019 12:26:49 +0000 (14:26 +0200)
committerChocobozzz <me@florianbigard.com>
Thu, 1 Aug 2019 12:26:49 +0000 (14:26 +0200)
server/lib/activitypub/process/process-dislike.ts
server/lib/activitypub/process/process-like.ts

index c46180617414f426b8c798a7bb8c49fa4ce3c38d..f06269f8b13f68f41cb14f2392d99e846879569c 100644 (file)
@@ -34,19 +34,20 @@ async function processDislike (activity: ActivityCreate | ActivityDislike, byAct
     const existingRate = await AccountVideoRateModel.loadByAccountAndVideoOrUrl(byAccount.id, video.id, url)
     if (existingRate && existingRate.type === 'dislike') return
 
-    await AccountVideoRateModel.create({
-      type: 'dislike' as 'dislike',
-      videoId: video.id,
-      accountId: byAccount.id,
-      url
-    }, { transaction: t })
-
     await video.increment('dislikes', { transaction: t })
 
     if (existingRate && existingRate.type === 'like') {
       await video.decrement('likes', { transaction: t })
     }
 
+    const rate = existingRate || new AccountVideoRateModel()
+    rate.type = 'dislike'
+    rate.videoId = video.id
+    rate.accountId = byAccount.id
+    rate.url = url
+
+    await rate.save({ transaction: t })
+
     if (video.isOwned()) {
       // Don't resend the activity to the sender
       const exceptions = [ byActor ]
index 5b2ab4b6614a4e25b0666586672f689706b10a48..bba54a19b1e8de893b2efb960909afc75c166915 100644 (file)
@@ -34,19 +34,20 @@ async function processLikeVideo (byActor: ActorModel, activity: ActivityLike) {
     const existingRate = await AccountVideoRateModel.loadByAccountAndVideoOrUrl(byAccount.id, video.id, url)
     if (existingRate && existingRate.type === 'like') return
 
-    await AccountVideoRateModel.create({
-      type: 'like' as 'like',
-      videoId: video.id,
-      accountId: byAccount.id,
-      url
-    }, { transaction: t })
-
-    await video.increment('likes', { transaction: t })
-
     if (existingRate && existingRate.type === 'dislike') {
       await video.decrement('dislikes', { transaction: t })
     }
 
+    await video.increment('likes', { transaction: t })
+
+    const rate = existingRate || new AccountVideoRateModel()
+    rate.type = 'like'
+    rate.videoId = video.id
+    rate.accountId = byAccount.id
+    rate.url = url
+
+    await rate.save({ transaction: t })
+
     if (video.isOwned()) {
       // Don't resend the activity to the sender
       const exceptions = [ byActor ]