This commit is contained in:
Franjo Mindek
2025-09-18 11:42:49 +02:00
parent 054c1f8dc5
commit 3f463fb202
155 changed files with 4138 additions and 2994 deletions

View File

@@ -1,9 +1,12 @@
import { type User } from 'wasp/entities';
import { faker } from '@faker-js/faker';
import type { PrismaClient } from '@prisma/client';
import { getSubscriptionPaymentPlanIds, SubscriptionStatus } from '../../payment/plans';
import { faker } from "@faker-js/faker";
import type { PrismaClient } from "@prisma/client";
import { type User } from "wasp/entities";
import {
getSubscriptionPaymentPlanIds,
SubscriptionStatus,
} from "../../payment/plans";
type MockUserData = Omit<User, 'id'>;
type MockUserData = Omit<User, "id">;
/**
* This function, which we've imported in `app.db.seeds` in the `main.wasp` file,
@@ -11,7 +14,9 @@ type MockUserData = Omit<User, 'id'>;
* For more info see: https://wasp.sh/docs/data-model/backends#seeding-the-database
*/
export async function seedMockUsers(prismaClient: PrismaClient) {
await Promise.all(generateMockUsersData(50).map((data) => prismaClient.user.create({ data })));
await Promise.all(
generateMockUsersData(50).map((data) => prismaClient.user.create({ data })),
);
}
function generateMockUsersData(numOfUsers: number): MockUserData[] {
@@ -21,14 +26,17 @@ function generateMockUsersData(numOfUsers: number): MockUserData[] {
function generateMockUserData(): MockUserData {
const firstName = faker.person.firstName();
const lastName = faker.person.lastName();
const subscriptionStatus = faker.helpers.arrayElement<SubscriptionStatus | null>([
...Object.values(SubscriptionStatus),
null,
]);
const subscriptionStatus =
faker.helpers.arrayElement<SubscriptionStatus | null>([
...Object.values(SubscriptionStatus),
null,
]);
const now = new Date();
const createdAt = faker.date.past({ refDate: now });
const timePaid = faker.date.between({ from: createdAt, to: now });
const credits = subscriptionStatus ? 0 : faker.number.int({ min: 0, max: 10 });
const credits = subscriptionStatus
? 0
: faker.number.int({ min: 0, max: 10 });
const hasUserPaidOnStripe = !!subscriptionStatus || credits > 3;
return {
email: faker.internet.email({ firstName, lastName }),
@@ -38,8 +46,14 @@ function generateMockUserData(): MockUserData {
credits,
subscriptionStatus,
lemonSqueezyCustomerPortalUrl: null,
paymentProcessorUserId: hasUserPaidOnStripe ? `cus_test_${faker.string.uuid()}` : null,
datePaid: hasUserPaidOnStripe ? faker.date.between({ from: createdAt, to: timePaid }) : null,
subscriptionPlan: subscriptionStatus ? faker.helpers.arrayElement(getSubscriptionPaymentPlanIds()) : null,
paymentProcessorUserId: hasUserPaidOnStripe
? `cus_test_${faker.string.uuid()}`
: null,
datePaid: hasUserPaidOnStripe
? faker.date.between({ from: createdAt, to: timePaid })
: null,
subscriptionPlan: subscriptionStatus
? faker.helpers.arrayElement(getSubscriptionPaymentPlanIds())
: null,
};
}

View File

@@ -1,14 +1,16 @@
import { HttpError } from 'wasp/server';
import * as z from 'zod';
import { HttpError } from "wasp/server";
import * as z from "zod";
export function ensureArgsSchemaOrThrowHttpError<Schema extends z.ZodType>(
schema: Schema,
rawArgs: unknown
rawArgs: unknown,
): z.infer<Schema> {
const parseResult = schema.safeParse(rawArgs);
if (!parseResult.success) {
console.error(parseResult.error);
throw new HttpError(400, 'Operation arguments validation failed', { errors: parseResult.error.errors });
throw new HttpError(400, "Operation arguments validation failed", {
errors: parseResult.error.errors,
});
} else {
return parseResult.data;
}