Ok, thanks, we need to make more improvement. A new business logic appeared from the product team + a few moment we need to improve:
1. While we can have only 3 claim types: direct, ref, or convert ref into direct, now we also have different actions. Each of this action can have one of those claim types. I will provide you with those actions, corresponding claim type and description on what is this action and what cooldown does it have:
a. action: daily_tap, claim_type: direct. This type of action has a cooldown based on a streak (as we previously have: max(24 - streak, 8)) 
b. action: ref_points_acquire, claim_type: ref. This type of action has no cooldown because it generated automatically in FastAPI app when your referral claim his points.
c. action: ref_points_claim, claim_type: convert. This type of action has a cooldown based on a streak (as we previously have: max(24 - streak, 8)) 
d. action: daily_login, claim_type: direct. This action available to user once a day (UTC timezone) It gives user some amount of direct points and the cooldown calculation is basically as I've said - it should be available once a day UTC time, it means the cooldown is dynamic. If I claimed this action 23:59 UTC then cooldown will be 1 minute, if I claimed 00:01 - cooldown is 23 hours 59 minutes, etc.
e. action: lucky_ball_claim, claim_type: direct. This type of action is available to user each 4 days of his streak, so it basically has a cooldown of at least 72 hours + streak % 4 == 0
f. action: task_completed, claim_type: direct. This type of action has no cooldown as it is used for every user task. To make sure that user claimed each task only once, this action will use task_uuid as idempotency_key.

2. Idempotency key for each action per user (except task because task_uuid is used instead) should be generated and stored in DB and cache and propagated with updates after each claim. So FE could pass one of those keys(based on action) with each call to FastAPI app, so we don't need to make any additional calls to DB in FastAPI app and could just pass it to worker to handle it.

3. Any cooldown violation or idempotency key unique violation should be treated as idempotency, so this claim should be just skipped without any points or keys update as if it already was done.

4. Most likely worker will have multiple instances, so we need somehow to make sure that each worker will work with it's own partition of the topic due to sequencial messages partitioned by auth_user_uuid. Other wise we could have concurrent claims of same user because messages from same user that goes sequecially to one partition will be handled by different worker instances. We need this to prevent concurrency problems and dataloss.

5. Because we need to store current valid idempotency key per each action for each user, we can create new table to handle this. While claims event log could be separated from User. While claims even log will store user_uuid to maintain claims idempotency per user, we don't need it to be actually related to User model, as we need this uuid only to create some unique constraint in this evenlog to prevent false claims and double claims.

Please adjust our worker using those new improvements.