mirror of
https://github.com/domfelipe/mika-agent-assist.git
synced 2026-08-07 10:16:43 +00:00
Changes
Co-authored-by: domfelipe <53182096+domfelipe@users.noreply.github.com>
This commit is contained in:
parent
e8d75c7896
commit
13b3951a1e
2 changed files with 111 additions and 1 deletions
|
|
@ -97,6 +97,33 @@ export type Database = {
|
||||||
}
|
}
|
||||||
Relationships: []
|
Relationships: []
|
||||||
}
|
}
|
||||||
|
paddle_webhook_events: {
|
||||||
|
Row: {
|
||||||
|
environment: string
|
||||||
|
event_type: string
|
||||||
|
id: string
|
||||||
|
paddle_event_id: string
|
||||||
|
payload: Json | null
|
||||||
|
processed_at: string
|
||||||
|
}
|
||||||
|
Insert: {
|
||||||
|
environment: string
|
||||||
|
event_type: string
|
||||||
|
id?: string
|
||||||
|
paddle_event_id: string
|
||||||
|
payload?: Json | null
|
||||||
|
processed_at?: string
|
||||||
|
}
|
||||||
|
Update: {
|
||||||
|
environment?: string
|
||||||
|
event_type?: string
|
||||||
|
id?: string
|
||||||
|
paddle_event_id?: string
|
||||||
|
payload?: Json | null
|
||||||
|
processed_at?: string
|
||||||
|
}
|
||||||
|
Relationships: []
|
||||||
|
}
|
||||||
plans: {
|
plans: {
|
||||||
Row: {
|
Row: {
|
||||||
created_at: string
|
created_at: string
|
||||||
|
|
@ -154,6 +181,7 @@ export type Database = {
|
||||||
full_name: string
|
full_name: string
|
||||||
id: string
|
id: string
|
||||||
onboarding_completed: boolean
|
onboarding_completed: boolean
|
||||||
|
paddle_customer_id: string | null
|
||||||
phone: string | null
|
phone: string | null
|
||||||
stripe_customer_id: string | null
|
stripe_customer_id: string | null
|
||||||
updated_at: string
|
updated_at: string
|
||||||
|
|
@ -166,6 +194,7 @@ export type Database = {
|
||||||
full_name?: string
|
full_name?: string
|
||||||
id: string
|
id: string
|
||||||
onboarding_completed?: boolean
|
onboarding_completed?: boolean
|
||||||
|
paddle_customer_id?: string | null
|
||||||
phone?: string | null
|
phone?: string | null
|
||||||
stripe_customer_id?: string | null
|
stripe_customer_id?: string | null
|
||||||
updated_at?: string
|
updated_at?: string
|
||||||
|
|
@ -178,6 +207,7 @@ export type Database = {
|
||||||
full_name?: string
|
full_name?: string
|
||||||
id?: string
|
id?: string
|
||||||
onboarding_completed?: boolean
|
onboarding_completed?: boolean
|
||||||
|
paddle_customer_id?: string | null
|
||||||
phone?: string | null
|
phone?: string | null
|
||||||
stripe_customer_id?: string | null
|
stripe_customer_id?: string | null
|
||||||
updated_at?: string
|
updated_at?: string
|
||||||
|
|
@ -215,8 +245,13 @@ export type Database = {
|
||||||
created_at: string
|
created_at: string
|
||||||
current_period_end: string | null
|
current_period_end: string | null
|
||||||
current_period_start: string | null
|
current_period_start: string | null
|
||||||
|
environment: string
|
||||||
id: string
|
id: string
|
||||||
|
paddle_customer_id: string | null
|
||||||
|
paddle_subscription_id: string | null
|
||||||
plan_id: string | null
|
plan_id: string | null
|
||||||
|
price_id: string | null
|
||||||
|
product_id: string | null
|
||||||
status: string
|
status: string
|
||||||
stripe_subscription_id: string | null
|
stripe_subscription_id: string | null
|
||||||
updated_at: string
|
updated_at: string
|
||||||
|
|
@ -228,8 +263,13 @@ export type Database = {
|
||||||
created_at?: string
|
created_at?: string
|
||||||
current_period_end?: string | null
|
current_period_end?: string | null
|
||||||
current_period_start?: string | null
|
current_period_start?: string | null
|
||||||
|
environment?: string
|
||||||
id?: string
|
id?: string
|
||||||
|
paddle_customer_id?: string | null
|
||||||
|
paddle_subscription_id?: string | null
|
||||||
plan_id?: string | null
|
plan_id?: string | null
|
||||||
|
price_id?: string | null
|
||||||
|
product_id?: string | null
|
||||||
status: string
|
status: string
|
||||||
stripe_subscription_id?: string | null
|
stripe_subscription_id?: string | null
|
||||||
updated_at?: string
|
updated_at?: string
|
||||||
|
|
@ -241,8 +281,13 @@ export type Database = {
|
||||||
created_at?: string
|
created_at?: string
|
||||||
current_period_end?: string | null
|
current_period_end?: string | null
|
||||||
current_period_start?: string | null
|
current_period_start?: string | null
|
||||||
|
environment?: string
|
||||||
id?: string
|
id?: string
|
||||||
|
paddle_customer_id?: string | null
|
||||||
|
paddle_subscription_id?: string | null
|
||||||
plan_id?: string | null
|
plan_id?: string | null
|
||||||
|
price_id?: string | null
|
||||||
|
product_id?: string | null
|
||||||
status?: string
|
status?: string
|
||||||
stripe_subscription_id?: string | null
|
stripe_subscription_id?: string | null
|
||||||
updated_at?: string
|
updated_at?: string
|
||||||
|
|
@ -270,7 +315,10 @@ export type Database = {
|
||||||
[_ in never]: never
|
[_ in never]: never
|
||||||
}
|
}
|
||||||
Functions: {
|
Functions: {
|
||||||
[_ in never]: never
|
has_active_subscription: {
|
||||||
|
Args: { check_env?: string; user_uuid: string }
|
||||||
|
Returns: boolean
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Enums: {
|
Enums: {
|
||||||
[_ in never]: never
|
[_ in never]: never
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,62 @@
|
||||||
|
-- Migrar tabela subscriptions para o formato Paddle
|
||||||
|
ALTER TABLE public.subscriptions
|
||||||
|
ADD COLUMN IF NOT EXISTS paddle_subscription_id text,
|
||||||
|
ADD COLUMN IF NOT EXISTS paddle_customer_id text,
|
||||||
|
ADD COLUMN IF NOT EXISTS product_id text,
|
||||||
|
ADD COLUMN IF NOT EXISTS price_id text,
|
||||||
|
ADD COLUMN IF NOT EXISTS environment text NOT NULL DEFAULT 'sandbox';
|
||||||
|
|
||||||
|
-- Índices
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_subscriptions_paddle_id
|
||||||
|
ON public.subscriptions(paddle_subscription_id)
|
||||||
|
WHERE paddle_subscription_id IS NOT NULL;
|
||||||
|
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_subscriptions_user_id ON public.subscriptions(user_id);
|
||||||
|
|
||||||
|
-- Constraint única (user_id, environment) para upsert idempotente do webhook
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_subscriptions_user_env
|
||||||
|
ON public.subscriptions(user_id, environment);
|
||||||
|
|
||||||
|
-- Adicionar paddle_customer_id ao profiles (substitui stripe_customer_id conceitualmente)
|
||||||
|
ALTER TABLE public.profiles
|
||||||
|
ADD COLUMN IF NOT EXISTS paddle_customer_id text;
|
||||||
|
|
||||||
|
-- Função utilitária para checar assinatura ativa
|
||||||
|
CREATE OR REPLACE FUNCTION public.has_active_subscription(
|
||||||
|
user_uuid uuid,
|
||||||
|
check_env text DEFAULT 'live'
|
||||||
|
)
|
||||||
|
RETURNS boolean
|
||||||
|
LANGUAGE sql
|
||||||
|
STABLE
|
||||||
|
SECURITY DEFINER
|
||||||
|
SET search_path = public
|
||||||
|
AS $$
|
||||||
|
SELECT EXISTS (
|
||||||
|
SELECT 1 FROM public.subscriptions
|
||||||
|
WHERE user_id = user_uuid
|
||||||
|
AND environment = check_env
|
||||||
|
AND status IN ('active', 'trialing')
|
||||||
|
AND (current_period_end IS NULL OR current_period_end > now())
|
||||||
|
);
|
||||||
|
$$;
|
||||||
|
|
||||||
|
-- Trigger updated_at na subscriptions
|
||||||
|
DROP TRIGGER IF EXISTS update_subscriptions_updated_at ON public.subscriptions;
|
||||||
|
CREATE TRIGGER update_subscriptions_updated_at
|
||||||
|
BEFORE UPDATE ON public.subscriptions
|
||||||
|
FOR EACH ROW
|
||||||
|
EXECUTE FUNCTION public.update_updated_at_column();
|
||||||
|
|
||||||
|
-- Tabela de eventos de webhook (idempotência) — renomeando conceitualmente para paddle
|
||||||
|
CREATE TABLE IF NOT EXISTS public.paddle_webhook_events (
|
||||||
|
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||||
|
paddle_event_id text NOT NULL UNIQUE,
|
||||||
|
event_type text NOT NULL,
|
||||||
|
environment text NOT NULL,
|
||||||
|
payload jsonb,
|
||||||
|
processed_at timestamptz NOT NULL DEFAULT now()
|
||||||
|
);
|
||||||
|
|
||||||
|
ALTER TABLE public.paddle_webhook_events ENABLE ROW LEVEL SECURITY;
|
||||||
|
-- Sem políticas: apenas service_role acessa
|
||||||
Loading…
Add table
Add a link
Reference in a new issue