Vipps Donations #33

Merged
olaven merged 18 commits from vipps-demo into main 2024-08-24 16:55:08 +00:00
3 changed files with 36 additions and 19 deletions
Showing only changes of commit b3ff744f4d - Show all commits

View File

@ -10,7 +10,7 @@ async function initialFetch(options: { id: string }): Promise<Series | null> {
if (!series) {
return null;
}
const stored = storage.write(series);
const stored = storage.writeSeries(series);
if (!stored) {
console.error(`Failed to store series ${options.id}`);
return null;
@ -50,7 +50,7 @@ async function updateFetch(existingSeries: Series): Promise<UpdatedSeries | Seri
episodes: episodesSortedDescending,
};
const updateSuccessful = await storage.write(updated);
const updateSuccessful = await storage.writeSeries(updated);
if (!updateSuccessful) {
console.log(`Failed to update series ${existingSeries.id}`);
return null;
@ -76,7 +76,7 @@ function isSeriesFromStorageNew(
}
async function getSeries(options: { id: string }): Promise<Series | null> {
const seriesFromStorage = await storage.read(options);
const seriesFromStorage = await storage.readSeries(options);
/**
* We don't have the feed in storage,

View File

@ -4,18 +4,18 @@ import { testUtils } from "./test-utils.ts";
Deno.test("can store a series", async () => {
const series = testUtils.generateSeries();
await storage.write(series);
await storage.writeSeries(series);
const readSeries = await storage.read(series);
const readSeries = await storage.readSeries(series);
assertEquals(readSeries, series);
});
Deno.test("can retrieve a series", async () => {
const series = testUtils.generateSeries();
await storage.write(series);
await storage.writeSeries(series);
const readSeries = await storage.read(series);
const readSeries = await storage.readSeries(series);
assertEquals(readSeries, series);
});

View File

@ -18,26 +18,43 @@ export type Series = {
episodes: Episode[];
};
export type VippsAgreement = {
id: string;
agreementId: string;
userEmail: string;
createdAt: Date;
revokedAt: Date | null;
};
const kv = await Deno.openKv();
function seriesKey(series: { id: string }) {
return ["series", series.id];
type Identifiable = { id: string };
type Collection = "series" | "vipps-agreements";
function read<T extends Identifiable>(collection: Collection) {
return async function (series: Identifiable) {
const key = [collection, series.id];
const read = await kv.get(key);
return read.value as T | null;
};
}
async function readSeries(options: { id: string }): Promise<Series | null> {
const { id } = options;
const key = seriesKey({ id });
const read = await kv.get<Series>(key);
return read.value;
}
async function writeSeries(series: Series): Promise<boolean> {
const key = seriesKey(series);
const stored = await kv.set(key, series);
function write<T extends Identifiable>(collection: Collection) {
return async function (entity: T) {
const key = [collection, entity.id];
const stored = await kv.set(key, entity);
return stored.ok;
};
}
const readSeries = read<Series>("series");
const writeSeries = write<Series>("series");
const readVippsAgreement = read<VippsAgreement>("vipps-agreements");
const writeVippsAgreement = write<VippsAgreement>("vipps-agreements");
export const storage = {
readSeries,
writeSeries,
readVippsAgreement,
writeVippsAgreement,
};