Adds email approval & Postmark integration for negotiations

Enables users to approve and send negotiation emails directly via Postmark after configuring a server token in settings. Introduces new debt statuses ("approved", "sent"), UI for token management, and approval/rejection flows. Refactors notifications to use a modern toast library, adjusts dashboard status filters, and updates DB schema for new flows.

Empowers compliant, user-controlled negotiation and automated email delivery.
This commit is contained in:
2025-06-07 18:48:07 -03:00
parent 7f70ec880f
commit 0c6f72761d
15 changed files with 1392 additions and 197 deletions

View File

@@ -0,0 +1,14 @@
/*
# Add Postmark Server Token
1. Changes
- Add postmark_server_token column to user_profiles table
- This will be used for sending approved emails
*/
-- Add postmark_server_token to user_profiles
ALTER TABLE user_profiles
ADD COLUMN IF NOT EXISTS postmark_server_token text;
-- Add comment for documentation
COMMENT ON COLUMN user_profiles.postmark_server_token IS 'Postmark server token for sending approved negotiation emails';

View File

@@ -0,0 +1,18 @@
-- Add postmark_server_token to user_profiles table
ALTER TABLE user_profiles
ADD COLUMN IF NOT EXISTS postmark_server_token TEXT;
-- Update debts table status constraint to include 'sent'
ALTER TABLE debts
DROP CONSTRAINT IF EXISTS debts_status_check;
ALTER TABLE debts
ADD CONSTRAINT debts_status_check
CHECK (status IN ('received', 'negotiating', 'sent', 'settled', 'failed', 'opted_out'));
-- Create index on postmark_server_token for faster lookups
CREATE INDEX IF NOT EXISTS idx_user_profiles_postmark_token
ON user_profiles(user_id) WHERE postmark_server_token IS NOT NULL;
-- Add comment for documentation
COMMENT ON COLUMN user_profiles.postmark_server_token IS 'Postmark server token for sending negotiation emails';

View File

@@ -0,0 +1,7 @@
-- Add 'approved' status to debts table
ALTER TABLE debts
DROP CONSTRAINT IF EXISTS debts_status_check;
ALTER TABLE debts
ADD CONSTRAINT debts_status_check
CHECK (status IN ('received', 'negotiating', 'approved', 'sent', 'settled', 'failed', 'opted_out'));