fix: unlike noop stale struct + likes floor at 0

- unlike noop now reloads tweet from DB (same fix as like noop from prev loop)
- decrement_likes uses GREATEST(likes - 1, 0) to prevent negative counts
- add fix_plan.md to track remaining work

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-12 19:51:56 -04:00
parent 4c67f38fa3
commit df8bc97bd2
2 changed files with 27 additions and 2 deletions

View File

@@ -148,7 +148,7 @@ defmodule Mixer.Posts.Tweet do
decrement_likes(tweet, context.actor)
{:noop, _like} ->
{:ok, tweet}
Ash.get(__MODULE__, tweet.id, authorize?: false)
{:error, error} ->
{:error, error}
@@ -166,7 +166,7 @@ defmodule Mixer.Posts.Tweet do
update :decrement_likes do
accept []
require_atomic? false
change atomic_update(:likes, expr(likes - 1))
change atomic_update(:likes, expr(fragment("GREATEST(? - 1, 0)", likes)))
end
end