PERF: Avoid hitting DB when fetching draft sequence of bot user.

This commit is contained in:
Guo Xiang Tan 2020-05-12 13:56:24 +08:00
parent 39a2d90e0f
commit d301af39bd
No known key found for this signature in database
GPG Key ID: FBD110179AAC1F20
2 changed files with 17 additions and 3 deletions

View File

@ -23,6 +23,8 @@ class DraftSequence < ActiveRecord::Base
user_id = user
user_id = user.id unless user.is_a?(Integer)
return nil if user_id < 0
# perf critical path
r, _ = DB.query_single('select sequence from draft_sequences where user_id = ? and draft_key = ?', user_id, key)
r.to_i

View File

@ -5,9 +5,16 @@ require 'rails_helper'
describe DraftSequence do
fab!(:user) { Fabricate(:user) }
it 'should produce next sequence for a key' do
expect(DraftSequence.next!(user, 'test')).to eq 1
expect(DraftSequence.next!(user, 'test')).to eq 2
describe '.next' do
it 'should produce next sequence for a key' do
expect(DraftSequence.next!(user, 'test')).to eq 1
expect(DraftSequence.next!(user, 'test')).to eq 2
end
it 'should not produce next sequence for non-human user' do
user.id = -99999
2.times { expect(DraftSequence.next!(user, 'test')).to eq(0) }
end
end
describe '.current' do
@ -15,6 +22,11 @@ describe DraftSequence do
expect(DraftSequence.current(user, 'test')).to eq 0
end
it 'should return nil for non-human user' do
user.id = -99999
expect(DraftSequence.current(user, 'test')).to eq(nil)
end
it 'should return the right sequence' do
expect(DraftSequence.next!(user, 'test')).to eq(1)
expect(DraftSequence.current(user, 'test')).to eq(1)