- const rate = {
- type: 'dislike' as 'dislike',
- videoId: video.id,
- accountId: byAccount.id
+ const url = getVideoDislikeActivityPubUrl(byActor, video)
+
+ const existingRate = await AccountVideoRateModel.loadByAccountAndVideoOrUrl(byAccount.id, video.id, url)
+ if (existingRate && existingRate.type === 'dislike') return
+
+ await video.increment('dislikes', { transaction: t })
+
+ if (existingRate && existingRate.type === 'like') {
+ await video.decrement('likes', { transaction: t })