Files
sprint/packages/backend/src/db/queries/subscriptions.ts
2026-01-28 18:31:34 +00:00

78 lines
2.0 KiB
TypeScript

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));
}