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
user_id = user.id unless user.is_a?(Integer) user_id = user.id unless user.is_a?(Integer)
return nil if user_id < 0
# perf critical path # perf critical path
r, _ = DB.query_single('select sequence from draft_sequences where user_id = ? and draft_key = ?', user_id, key) r, _ = DB.query_single('select sequence from draft_sequences where user_id = ? and draft_key = ?', user_id, key)
r.to_i r.to_i

View File

@ -5,9 +5,16 @@ require 'rails_helper'
describe DraftSequence do describe DraftSequence do
fab!(:user) { Fabricate(:user) } fab!(:user) { Fabricate(:user) }
it 'should produce next sequence for a key' do describe '.next' do
expect(DraftSequence.next!(user, 'test')).to eq 1 it 'should produce next sequence for a key' do
expect(DraftSequence.next!(user, 'test')).to eq 2 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 end
describe '.current' do describe '.current' do
@ -15,6 +22,11 @@ describe DraftSequence do
expect(DraftSequence.current(user, 'test')).to eq 0 expect(DraftSequence.current(user, 'test')).to eq 0
end 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 it 'should return the right sequence' do
expect(DraftSequence.next!(user, 'test')).to eq(1) expect(DraftSequence.next!(user, 'test')).to eq(1)
expect(DraftSequence.current(user, 'test')).to eq(1) expect(DraftSequence.current(user, 'test')).to eq(1)