mirror of
https://github.com/jakejarvis/sofa.git
synced 2026-08-29 03:55:38 -04:00
drizzle-orm/bun-sqlite is fully synchronous — all queries return values directly, not promises. Remove await from all db calls, drop async from functions that no longer need it, simplify Promise.all patterns that wrapped sync operations, and fix setSetting() which was missing .run() (previously masked by await triggering execution via thenable). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
56 lines
1.4 KiB
TypeScript
56 lines
1.4 KiB
TypeScript
import { and, eq } from "drizzle-orm";
|
|
import { db } from "@/lib/db/client";
|
|
import { availabilityOffers, titles } from "@/lib/db/schema";
|
|
import { getWatchProviders } from "@/lib/tmdb/client";
|
|
|
|
export async function refreshAvailability(titleId: string) {
|
|
const title = db.select().from(titles).where(eq(titles.id, titleId)).get();
|
|
if (!title) return;
|
|
|
|
const data = await getWatchProviders(title.tmdbId, title.type);
|
|
const us = data.results?.US;
|
|
if (!us) return;
|
|
|
|
const now = new Date();
|
|
const offerTypes = ["flatrate", "rent", "buy", "free", "ads"] as const;
|
|
|
|
// Delete existing offers for this title+region
|
|
db.delete(availabilityOffers)
|
|
.where(
|
|
and(
|
|
eq(availabilityOffers.titleId, titleId),
|
|
eq(availabilityOffers.region, "US"),
|
|
),
|
|
)
|
|
.run();
|
|
|
|
for (const offerType of offerTypes) {
|
|
const providers = us[offerType];
|
|
if (!providers) continue;
|
|
|
|
for (const p of providers) {
|
|
db.insert(availabilityOffers)
|
|
.values({
|
|
titleId,
|
|
region: "US",
|
|
providerId: p.provider_id,
|
|
providerName: p.provider_name,
|
|
logoPath: p.logo_path,
|
|
offerType,
|
|
link: us.link ?? null,
|
|
lastFetchedAt: now,
|
|
})
|
|
.onConflictDoNothing()
|
|
.run();
|
|
}
|
|
}
|
|
}
|
|
|
|
export function getAvailability(titleId: string) {
|
|
return db
|
|
.select()
|
|
.from(availabilityOffers)
|
|
.where(eq(availabilityOffers.titleId, titleId))
|
|
.all();
|
|
}
|