Files
formbricks/packages/database/zod/users.ts
Piyush Gupta 41d60c8a02 chore: custom avatar removal (#6408)
Co-authored-by: pandeymangg <anshuman.pandey9999@gmail.com>
2025-08-14 10:17:05 +00:00

87 lines
2.3 KiB
TypeScript

import { OrganizationRole, User } from "@prisma/client";
import { z } from "zod";
import { extendZodWithOpenApi } from "zod-openapi";
import { ZUserEmail, ZUserName } from "../../types/user";
extendZodWithOpenApi(z);
const ZNoBillingOrganizationRoles = z.enum(
Object.values(OrganizationRole).filter((role) => role !== OrganizationRole.billing) as [
OrganizationRole,
...OrganizationRole[],
]
);
export type TNoBillingOrganizationRoles = z.infer<typeof ZNoBillingOrganizationRoles>;
export const ZUser = z.object({
id: z.string().cuid2().openapi({
description: "The ID of the user",
}),
createdAt: z.coerce.date().openapi({
description: "The date and time the user was created",
example: "2021-01-01T00:00:00.000Z",
}),
updatedAt: z.coerce.date().openapi({
description: "The date and time the user was last updated",
example: "2021-01-01T00:00:00.000Z",
}),
lastLoginAt: z.coerce.date().openapi({
description: "The date and time the user last logged in",
example: "2021-01-01T00:00:00.000Z",
}),
isActive: z.boolean().openapi({
description: "Whether the user is active",
example: true,
}),
name: ZUserName.openapi({
description: "The name of the user",
example: "John Doe",
}),
email: ZUserEmail.openapi({
description: "The email of the user",
example: "example@example.com",
}),
role: ZNoBillingOrganizationRoles.openapi({
description: "The role of the user in the organization",
example: OrganizationRole.member,
}),
teams: z
.array(z.string())
.optional()
.openapi({
description: "The list of teams the user is a member of",
example: ["team1", "team2"],
}),
}) satisfies z.ZodType<
Omit<
User,
| "emailVerified"
| "twoFactorSecret"
| "twoFactorEnabled"
| "backupCodes"
| "password"
| "identityProvider"
| "identityProviderAccountId"
| "memberships"
| "accounts"
| "groupId"
| "invitesCreated"
| "invitesAccepted"
| "objective"
| "notificationSettings"
| "locale"
| "surveys"
| "teamUsers"
| "role" //doesn't satisfy the type because we remove the billing role
| "deprecatedRole"
>
>;
ZUser.openapi({
ref: "user",
description: "A user",
});
export type TUser = z.infer<typeof ZUser>;