Untitled

 avatar
unknown
plain_text
a year ago
1.6 kB
86
Indexable
CREATE OR REPLACE FUNCTION public.update_user_subscription() RETURNS TRIGGER AS $$
DECLARE
    customer_id text;
    user_email text;
    latest_invoice_status text;
BEGIN
    BEGIN
        customer_id := NEW.customer;  -- Stripe customer ID
        SELECT email INTO user_email FROM stripe.customers WHERE id = customer_id;

        SELECT status INTO latest_invoice_status FROM stripe.invoices
        WHERE customer = customer_id
        ORDER BY created DESC
        LIMIT 1;

        -- Insert a log entry for debugging (this part also fails)
        INSERT INTO public.debug_log(message) VALUES ('Function triggered. Customer: ' || customer_id || ', Status: ' || latest_invoice_status);

        IF latest_invoice_status = 'paid' THEN
            UPDATE public.user_profiles SET subscribed = TRUE
            WHERE user_id = (SELECT id FROM auth.users WHERE email = user_email);
        ELSE
            UPDATE public.user_profiles SET subscribed = FALSE
            WHERE user_id = (SELECT id FROM auth.users WHERE email = user_email);
        END IF;

        RETURN NEW;
    EXCEPTION WHEN OTHERS THEN
        -- Insert exception info into debug_log for debugging (not doing anything)
        INSERT INTO public.debug_log(message) VALUES ('Error occurred: ' || SQLERRM);
        RETURN NULL;
    END;
END;
$$ LANGUAGE plpgsql;

DROP TRIGGER IF EXISTS update_subscription_status ON stripe.invoices;
CREATE TRIGGER update_subscription_status
AFTER INSERT OR UPDATE ON stripe.invoices
FOR EACH ROW
EXECUTE FUNCTION public.update_user_subscription();
Editor is loading...
Leave a Comment