post-completion flow: survey, referral program, review ask
- Migration 081: referral_codes, referral_uses, exit_surveys tables - API: POST /api/v1/survey, POST /api/v1/referral/check, GET /api/v1/referral/:email - Worker: completion_emails.py — sends completion + 24h follow-up (survey + referral) - Survey page: /survey/?order=X&rating=N — star rating, feedback, Google review ask - Referral: REF-FIRSTNAME codes, $25 credit per referred order, no limit - Low ratings (1-3 stars) trigger Telegram alert for admin follow-up - Cron: every 15 minutes
This commit is contained in:
parent
6b20ba7f08
commit
ad3d189b2b
6 changed files with 655 additions and 0 deletions
47
api/migrations/081_referral_and_survey.sql
Normal file
47
api/migrations/081_referral_and_survey.sql
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
-- Referral codes and survey responses for post-completion flow
|
||||
|
||||
-- Referral codes (one per customer)
|
||||
CREATE TABLE IF NOT EXISTS referral_codes (
|
||||
id SERIAL PRIMARY KEY,
|
||||
code TEXT NOT NULL UNIQUE, -- e.g. REF-MARKADAMS
|
||||
customer_email TEXT NOT NULL,
|
||||
customer_name TEXT,
|
||||
credit_cents INTEGER DEFAULT 2500, -- $25 credit
|
||||
times_used INTEGER DEFAULT 0,
|
||||
total_earned_cents INTEGER DEFAULT 0,
|
||||
balance_cents INTEGER DEFAULT 0, -- unused credit
|
||||
created_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_referral_codes_email ON referral_codes(customer_email);
|
||||
CREATE INDEX IF NOT EXISTS idx_referral_codes_code ON referral_codes(code);
|
||||
|
||||
-- Referral usage tracking
|
||||
CREATE TABLE IF NOT EXISTS referral_uses (
|
||||
id SERIAL PRIMARY KEY,
|
||||
referral_code TEXT NOT NULL REFERENCES referral_codes(code),
|
||||
referred_order TEXT NOT NULL, -- order_number of the new customer's order
|
||||
referred_email TEXT NOT NULL,
|
||||
credit_cents INTEGER DEFAULT 2500,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- Exit survey responses
|
||||
CREATE TABLE IF NOT EXISTS exit_surveys (
|
||||
id SERIAL PRIMARY KEY,
|
||||
order_number TEXT NOT NULL,
|
||||
customer_email TEXT NOT NULL,
|
||||
rating INTEGER CHECK (rating BETWEEN 1 AND 5),
|
||||
feedback TEXT,
|
||||
would_recommend BOOLEAN,
|
||||
review_link_clicked BOOLEAN DEFAULT FALSE,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_exit_surveys_order ON exit_surveys(order_number);
|
||||
|
||||
-- Track which completion emails have been sent (prevent duplicates)
|
||||
ALTER TABLE compliance_orders
|
||||
ADD COLUMN IF NOT EXISTS completion_email_sent_at TIMESTAMPTZ,
|
||||
ADD COLUMN IF NOT EXISTS followup_email_sent_at TIMESTAMPTZ,
|
||||
ADD COLUMN IF NOT EXISTS referral_code TEXT;
|
||||
Loading…
Add table
Add a link
Reference in a new issue