mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-17 01:19:40 +02:00
Phase 3.A des feedback-rewards-and-identity-Plans. Direkter Reziprozitäts- Loop: User kriegt sofort etwas zurück fürs Mitwirken, Originalwunsch- Eulen werden beim Ship belohnt, Reagierer kriegen einen Anteil. mana-credits: - Neuer Endpoint POST /api/v1/internal/credits/grant + grantCredits() Service-Methode mit Idempotency via metadata.referenceId. - transaction_type-Enum erweitert um 'grant' (eigener Typ statt Mismatch mit 'refund'). - Migration 0001_grant_transaction_type.sql + partial-Index auf metadata->>'referenceId' für O(log n) Idempotency-Lookup. mana-analytics: - FeedbackService stempelt sofort +5 Credits beim createFeedback (top- level only, Replies bekommen nichts), wenn Mindest-20-Zeichen erfüllt und Rate-Limit (10/User/24h via feedback_grant_log) nicht überschritten. - adminUpdate triggert beim FRISCHEN Übergang nach 'completed': +500 Credits an Original-Wisher + +25 an alle, die mit 👍 oder 🚀 reagiert haben. Doppel-Pay strukturell unmöglich via referenceId (`<id>_shipped`, `<id>_reaction_<userId>`). - Founder-Whitelist via FEEDBACK_FOUNDER_USER_IDS env (verhindert Self-Reward). - Drop voteCount-Spalte (durch reactions/score seit 0002 ersetzt). - Migration 0003_grant_log_drop_vote_count.sql idempotent, lokal + prod eingespielt. Plan: docs/plans/feedback-rewards-and-identity.md (Phase 3.A-3.F). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
26 lines
865 B
PL/PgSQL
26 lines
865 B
PL/PgSQL
-- 0003_grant_log_drop_vote_count.sql
|
|
--
|
|
-- Phase 3.A.2 von docs/plans/feedback-rewards-and-identity.md.
|
|
--
|
|
-- 1. Mini-Tabelle feedback_grant_log als sliding-window Rate-Limit-
|
|
-- Counter für die Community-Credit-Grants (max 10/User/24h).
|
|
-- 2. Drop legacy vote_count column from user_feedback (Phase 3.F):
|
|
-- Reactions+score haben sie seit 0002 vollständig ersetzt.
|
|
--
|
|
-- Apply manually before next push:
|
|
-- psql "$DATABASE_URL" -f services/mana-analytics/drizzle/0003_grant_log_drop_vote_count.sql
|
|
|
|
BEGIN;
|
|
|
|
CREATE TABLE IF NOT EXISTS feedback.feedback_grant_log (
|
|
user_id text NOT NULL,
|
|
granted_at timestamptz NOT NULL DEFAULT now(),
|
|
reason text NOT NULL
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS feedback_grant_log_recent_idx
|
|
ON feedback.feedback_grant_log (user_id, granted_at);
|
|
|
|
ALTER TABLE feedback.user_feedback DROP COLUMN IF EXISTS vote_count;
|
|
|
|
COMMIT;
|