feat(models): extend claim with Claim and Comment
This commit is contained in:
1 parent
4015436e50
commit
6a702a1ece
5 files changed
+156
No files matched your search
@@ -0,0 +1,22 @@
|
||||
class Claim < Prism::Orm::Model
|
||||
# counter_cache keeps Post#claims_count (and therefore
|
||||
# Post#giveaway_remaining/#giveaway_sold_out?) O(1) to read - the whole
|
||||
# point of ClaimsController#create locking the post first is to make that
|
||||
# read-then-decide safe under concurrency, which would be undermined if
|
||||
# the read itself required walking every Claim row instead.
|
||||
belongs_to :post, counter_cache: true
|
||||
belongs_to :user
|
||||
|
||||
# Not a user-facing "unclaim" - a claim has no destroy action anywhere in
|
||||
# this app (see ClaimsController, create-only). Paranoid purely so
|
||||
# Post#acts_as_paranoid's `dependent: :destroy` cascade (see the model)
|
||||
# soft-deletes a giveaway's claims along with a trashed post instead of
|
||||
# erasing the record of who already won a slot, and #restore(recursive:
|
||||
# true) brings them back - same shape as Comment/Like.
|
||||
acts_as_paranoid
|
||||
|
||||
# One claim per user per post - see the unique index on [:post_id,
|
||||
# :user_id] in the create_claims migration for the same rule enforced at
|
||||
# the Store level too, inside whatever transaction the insert runs in.
|
||||
validates :user_id, presence: true, uniqueness: { scope: :post_id }
|
||||
end
|
||||
Reference in new issue
Block a user