From 54b26896d98f92b156e8b8bb264ec3e4a19cb977 Mon Sep 17 00:00:00 2001 From: Oliver Bryan Date: Wed, 28 Jan 2026 18:22:47 +0000 Subject: [PATCH] database query functions for stripe integration --- .../backend/src/db/queries/subscriptions.ts | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 packages/backend/src/db/queries/subscriptions.ts diff --git a/packages/backend/src/db/queries/subscriptions.ts b/packages/backend/src/db/queries/subscriptions.ts new file mode 100644 index 0000000..389213e --- /dev/null +++ b/packages/backend/src/db/queries/subscriptions.ts @@ -0,0 +1,80 @@ +import { Payment, Subscription } from "@sprint/shared"; +import { eq } from "drizzle-orm"; +import { db } from "../client"; + +export async function createSubscription(data: { + userId: number; + stripeCustomerId: string; + stripeSubscriptionId: string; + stripeSubscriptionItemId: string; + stripePriceId: string; + status: string; + quantity: number; + currentPeriodStart?: Date; + currentPeriodEnd?: Date; + trialEnd?: Date; +}) { + const [subscription] = await db + .insert(Subscription) + .values({ + ...data, + createdAt: new Date(), + updatedAt: new Date(), + }) + .returning(); + return subscription; +} + +export async function getSubscriptionByUserId(userId: number) { + const [subscription] = await db + .select() + .from(Subscription) + .where(eq(Subscription.userId, userId)); + return subscription; +} + +export async function getSubscriptionByStripeId(stripeSubscriptionId: string) { + const [subscription] = await db + .select() + .from(Subscription) + .where(eq(Subscription.stripeSubscriptionId, stripeSubscriptionId)); + return subscription; +} + +export async function updateSubscription( + id: number, + updates: Partial<{ + status: string; + stripePriceId: string; + currentPeriodStart: Date; + currentPeriodEnd: Date; + cancelAtPeriodEnd: boolean; + trialEnd: Date; + quantity: number; + }> +) { + const [subscription] = await db + .update(Subscription) + .set({ + ...updates, + updatedAt: new Date(), + }) + .where(eq(Subscription.id, id)) + .returning(); + return subscription; +} + +export async function createPayment(data: { + subscriptionId: number; + stripePaymentIntentId: string; + amount: number; + currency: string; + status: string; +}) { + const [payment] = await db.insert(Payment).values(data).returning(); + return payment; +} + +export async function deleteSubscription(id: number) { + await db.delete(Subscription).where(eq(Subscription.id, id)); +}