feat(models): extend claim with Claim and Comment

This commit is contained in:
dualfroz committed 2026-09-04 17:05:15 +02:00
1 parent 4015436e50
commit 6a702a1ece
5 files changed
+156

No files matched your search

+22
View File
@@ -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