refactor: rename isNumberFrom1To100 to percentageSchema

This commit is contained in:
P. Reis 2024-07-25 15:06:50 -03:00
parent f3d521356d
commit 882f8009dc
5 changed files with 39 additions and 33 deletions

22
src/schema.test.ts Normal file
View file

@ -0,0 +1,22 @@
import { assertEquals } from '@std/assert';
import { percentageSchema } from '@/schema.ts';
Deno.test('Value is any percentage from 1 to 100', () => {
assertEquals(percentageSchema.safeParse('latvia' as unknown).success, false);
assertEquals(percentageSchema.safeParse(1.5).success, false);
assertEquals(percentageSchema.safeParse(Infinity).success, false);
assertEquals(percentageSchema.safeParse('Infinity').success, false);
assertEquals(percentageSchema.safeParse('0').success, false);
assertEquals(percentageSchema.safeParse(0).success, false);
assertEquals(percentageSchema.safeParse(-1).success, false);
assertEquals(percentageSchema.safeParse('-10').success, false);
assertEquals(percentageSchema.safeParse([]).success, false);
assertEquals(percentageSchema.safeParse(undefined).success, false);
for (let i = 1; i < 100; i++) {
assertEquals(percentageSchema.safeParse(String(i)).success, true);
}
assertEquals(percentageSchema.safeParse('1e1').success, true);
});

View file

@ -38,4 +38,14 @@ const booleanParamSchema = z.enum(['true', 'false']).transform((value) => value
/** Schema for `File` objects. */
const fileSchema = z.custom<File>((value) => value instanceof File);
export { booleanParamSchema, decode64Schema, fileSchema, filteredArray, hashtagSchema, safeUrlSchema };
const percentageSchema = z.coerce.number().int().gte(1).lte(100);
export {
booleanParamSchema,
decode64Schema,
fileSchema,
filteredArray,
hashtagSchema,
percentageSchema,
safeUrlSchema,
};

View file

@ -1,22 +0,0 @@
import { assertEquals } from '@std/assert';
import { isNumberFrom1To100 } from '@/utils.ts';
Deno.test('Value is any number from 1 to 100', () => {
assertEquals(isNumberFrom1To100('latvia'), false);
assertEquals(isNumberFrom1To100(1.5), false);
assertEquals(isNumberFrom1To100(Infinity), false);
assertEquals(isNumberFrom1To100('Infinity'), false);
assertEquals(isNumberFrom1To100('0'), false);
assertEquals(isNumberFrom1To100(0), false);
assertEquals(isNumberFrom1To100(-1), false);
assertEquals(isNumberFrom1To100('-10'), false);
assertEquals(isNumberFrom1To100([]), false);
assertEquals(isNumberFrom1To100(undefined), false);
for (let i = 1; i < 100; i++) {
assertEquals(isNumberFrom1To100(String(i)), true);
}
assertEquals(isNumberFrom1To100('1e1'), true);
});

View file

@ -93,17 +93,12 @@ function isURL(value: unknown): boolean {
return z.string().url().safeParse(value).success;
}
function isNumberFrom1To100(value: unknown): boolean {
return z.coerce.number().int().gte(1).lte(100).safeParse(value).success;
}
export {
bech32ToPubkey,
dedupeEvents,
eventAge,
findTag,
isNostrId,
isNumberFrom1To100,
isURL,
type Nip05,
nostrDate,

View file

@ -1,9 +1,10 @@
import { Conf } from '@/config.ts';
import { NSchema as n, NStore } from '@nostrify/nostrify';
import { isNumberFrom1To100, nostrNow } from '@/utils.ts';
import { Storages } from '@/storages.ts';
import { AdminSigner } from '@/signers/AdminSigner.ts';
import { Conf } from '@/config.ts';
import { handleEvent } from '@/pipeline.ts';
import { NSchema as n, NStore } from '@nostrify/nostrify';
import { nostrNow } from '@/utils.ts';
import { percentageSchema } from '@/schema.ts';
import { Storages } from '@/storages.ts';
type Pubkey = string;
type ExtraMessage = string;
@ -29,7 +30,7 @@ export async function getZapSplits(store: NStore, pubkey: string): Promise<Ditto
for (const tag of event.tags) {
if (
tag[0] === 'p' && n.id().safeParse(tag[1]).success &&
isNumberFrom1To100(tag[2])
percentageSchema.safeParse(tag[2]).success
) {
zapSplits[tag[1]] = { amount: Number(tag[2]), message: tag[3] };
}