refactor: zap amount parsed with zod, change zapped_by fields name
This commit is contained in:
parent
7474c1b288
commit
22dbddb5d3
|
@ -545,6 +545,7 @@ const zapController: AppController = async (c) => {
|
||||||
const zappedByController: AppController = async (c) => {
|
const zappedByController: AppController = async (c) => {
|
||||||
const id = c.req.param('id');
|
const id = c.req.param('id');
|
||||||
const store = await Storages.db();
|
const store = await Storages.db();
|
||||||
|
const amountSchema = z.coerce.number().int().nonnegative().catch(0);
|
||||||
|
|
||||||
const events: DittoEvent[] = (await store.query([{ kinds: [9735], '#e': [id], limit: 100 }])).map((event) => {
|
const events: DittoEvent[] = (await store.query([{ kinds: [9735], '#e': [id], limit: 100 }])).map((event) => {
|
||||||
const zapRequest = event.tags.find(([name]) => name === 'description')?.[1];
|
const zapRequest = event.tags.find(([name]) => name === 'description')?.[1];
|
||||||
|
@ -560,17 +561,13 @@ const zappedByController: AppController = async (c) => {
|
||||||
|
|
||||||
const results = (await Promise.all(
|
const results = (await Promise.all(
|
||||||
events.map(async (event) => {
|
events.map(async (event) => {
|
||||||
const amount = event.tags.find(([name]) => name === 'amount')?.[1];
|
const amount = amountSchema.parse(event.tags.find(([name]) => name === 'amount')?.[1]);
|
||||||
const onlyDigits = /^\d+$/;
|
|
||||||
if (!amount || !onlyDigits.test(amount)) return;
|
|
||||||
|
|
||||||
const comment = event?.content ?? '';
|
const comment = event?.content ?? '';
|
||||||
|
|
||||||
const account = event?.author ? await renderAccount(event.author) : await accountFromPubkey(event.pubkey);
|
const account = event?.author ? await renderAccount(event.author) : await accountFromPubkey(event.pubkey);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
zap_comment: comment,
|
comment,
|
||||||
zap_amount: Number(amount),
|
amount,
|
||||||
account,
|
account,
|
||||||
};
|
};
|
||||||
}),
|
}),
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
import { NostrEvent, NStore } from '@nostrify/nostrify';
|
import { NostrEvent, NStore } from '@nostrify/nostrify';
|
||||||
import { Kysely, UpdateObject } from 'kysely';
|
import { Kysely, UpdateObject } from 'kysely';
|
||||||
|
|
||||||
import { SetRequired } from 'type-fest';
|
import { SetRequired } from 'type-fest';
|
||||||
|
import { z } from 'zod';
|
||||||
|
|
||||||
import { DittoTables } from '@/db/DittoTables.ts';
|
import { DittoTables } from '@/db/DittoTables.ts';
|
||||||
import { findQuoteTag, findReplyTag, getTagSet } from '@/utils/tags.ts';
|
import { findQuoteTag, findReplyTag, getTagSet } from '@/utils/tags.ts';
|
||||||
import { Conf } from '@/config.ts';
|
import { Conf } from '@/config.ts';
|
||||||
|
@ -140,19 +141,20 @@ async function handleEvent9735(kysely: Kysely<DittoTables>, event: NostrEvent):
|
||||||
const id = event.tags.find(([name]) => name === 'e')?.[1];
|
const id = event.tags.find(([name]) => name === 'e')?.[1];
|
||||||
if (!id) return;
|
if (!id) return;
|
||||||
|
|
||||||
let amount = '0';
|
const amountSchema = z.coerce.number().int().nonnegative().catch(0);
|
||||||
|
let amount = 0;
|
||||||
try {
|
try {
|
||||||
const zapRequest = JSON.parse(event.tags.find(([name]) => name === 'description')?.[1]!) as NostrEvent;
|
const zapRequest = JSON.parse(event.tags.find(([name]) => name === 'description')?.[1]!) as NostrEvent;
|
||||||
amount = zapRequest.tags.find(([name]) => name === 'amount')?.[1]!;
|
amount = amountSchema.parse(zapRequest.tags.find(([name]) => name === 'amount')?.[1]);
|
||||||
|
if (amount <= 0) return;
|
||||||
} catch {
|
} catch {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (amount === '0' || !amount || (/^\d+$/).test(amount) === false) return;
|
|
||||||
|
|
||||||
await updateEventStats(
|
await updateEventStats(
|
||||||
kysely,
|
kysely,
|
||||||
id,
|
id,
|
||||||
({ zaps_amount }) => ({ zaps_amount: Math.max(0, zaps_amount + Number(amount)) }),
|
({ zaps_amount }) => ({ zaps_amount: Math.max(0, zaps_amount + amount) }),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue