refactor: add migration and nullable types for stripe_customer_id (refs #207)
Make stripe_customer_id NULLABLE via migration, clean up admin_override_* values to NULL, and update Subscription/SubscriptionResponse/UpdateSubscriptionData types in both backend and frontend. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -19,7 +19,7 @@ export type DonationStatus = 'pending' | 'succeeded' | 'failed' | 'canceled';
|
|||||||
export interface Subscription {
|
export interface Subscription {
|
||||||
id: string;
|
id: string;
|
||||||
userId: string;
|
userId: string;
|
||||||
stripeCustomerId: string;
|
stripeCustomerId: string | null;
|
||||||
stripeSubscriptionId?: string;
|
stripeSubscriptionId?: string;
|
||||||
tier: SubscriptionTier;
|
tier: SubscriptionTier;
|
||||||
billingCycle?: BillingCycle;
|
billingCycle?: BillingCycle;
|
||||||
@@ -74,7 +74,7 @@ export interface CreateSubscriptionRequest {
|
|||||||
export interface SubscriptionResponse {
|
export interface SubscriptionResponse {
|
||||||
id: string;
|
id: string;
|
||||||
userId: string;
|
userId: string;
|
||||||
stripeCustomerId: string;
|
stripeCustomerId: string | null;
|
||||||
stripeSubscriptionId?: string;
|
stripeSubscriptionId?: string;
|
||||||
tier: SubscriptionTier;
|
tier: SubscriptionTier;
|
||||||
billingCycle?: BillingCycle;
|
billingCycle?: BillingCycle;
|
||||||
@@ -118,7 +118,7 @@ export interface CreateTierVehicleSelectionRequest {
|
|||||||
|
|
||||||
// Service layer types
|
// Service layer types
|
||||||
export interface UpdateSubscriptionData {
|
export interface UpdateSubscriptionData {
|
||||||
stripeCustomerId?: string;
|
stripeCustomerId?: string | null;
|
||||||
stripeSubscriptionId?: string;
|
stripeSubscriptionId?: string;
|
||||||
tier?: SubscriptionTier;
|
tier?: SubscriptionTier;
|
||||||
billingCycle?: BillingCycle;
|
billingCycle?: BillingCycle;
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
-- Migration: Make stripe_customer_id NULLABLE
|
||||||
|
-- Removes the NOT NULL constraint that forced admin_override_ placeholder values.
|
||||||
|
-- Admin-set subscriptions (no Stripe billing) use NULL instead of sentinel strings.
|
||||||
|
-- PostgreSQL UNIQUE constraint allows multiple NULLs (SQL standard).
|
||||||
|
|
||||||
|
-- Drop NOT NULL constraint on stripe_customer_id
|
||||||
|
ALTER TABLE subscriptions ALTER COLUMN stripe_customer_id DROP NOT NULL;
|
||||||
|
|
||||||
|
-- Clean up existing admin_override_ placeholder values to NULL
|
||||||
|
UPDATE subscriptions SET stripe_customer_id = NULL
|
||||||
|
WHERE stripe_customer_id LIKE 'admin_override_%';
|
||||||
@@ -5,7 +5,7 @@ export type SubscriptionStatus = 'active' | 'past_due' | 'canceled' | 'unpaid';
|
|||||||
export interface Subscription {
|
export interface Subscription {
|
||||||
id: string;
|
id: string;
|
||||||
userId: string;
|
userId: string;
|
||||||
stripeCustomerId: string;
|
stripeCustomerId: string | null;
|
||||||
stripeSubscriptionId?: string;
|
stripeSubscriptionId?: string;
|
||||||
tier: SubscriptionTier;
|
tier: SubscriptionTier;
|
||||||
billingCycle?: BillingCycle;
|
billingCycle?: BillingCycle;
|
||||||
|
|||||||
Reference in New Issue
Block a user