mirror of
https://github.com/discourse/discourse.git
synced 2025-05-24 03:36:18 +08:00
FIX: Constraint error when inserting the same topic group twice
If that happens, update the value instead of raising an error.
This commit is contained in:
@ -49,6 +49,11 @@ class TopicGroup < ActiveRecord::Base
|
|||||||
|
|
||||||
query += 'AND NOT(tag.group_id IN (:already_updated_groups))' unless updated_group_ids.length.zero?
|
query += 'AND NOT(tag.group_id IN (:already_updated_groups))' unless updated_group_ids.length.zero?
|
||||||
|
|
||||||
|
query += <<~CONFLICT
|
||||||
|
ON CONFLICT(topic_id, group_id)
|
||||||
|
DO UPDATE SET last_read_post_number = :post_number, created_at = :now, updated_at = :now
|
||||||
|
CONFLICT
|
||||||
|
|
||||||
DB.exec(
|
DB.exec(
|
||||||
query,
|
query,
|
||||||
user_id: user.id, topic_id: topic_id, post_number: post_number, now: DateTime.now, already_updated_groups: updated_group_ids
|
user_id: user.id, topic_id: topic_id, post_number: post_number, now: DateTime.now, already_updated_groups: updated_group_ids
|
||||||
|
@ -81,5 +81,12 @@ describe TopicGroup do
|
|||||||
expect(created_topic_group.last_read_post_number).to eq new_post_number
|
expect(created_topic_group.last_read_post_number).to eq new_post_number
|
||||||
expect(created_topic_group2.last_read_post_number).to eq topic2.highest_post_number
|
expect(created_topic_group2.last_read_post_number).to eq topic2.highest_post_number
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "will not raise an error if a topic group already exists" do
|
||||||
|
TopicGroup.create_topic_group(user, @topic.id, 3, [])
|
||||||
|
expect(TopicGroup.find_by(group: group, topic: @topic).last_read_post_number).to eq(3)
|
||||||
|
TopicGroup.create_topic_group(user, @topic.id, 10, [])
|
||||||
|
expect(TopicGroup.find_by(group: group, topic: @topic).last_read_post_number).to eq(10)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Reference in New Issue
Block a user