alepha
Version:
Easy-to-use modern TypeScript framework for building many kind of applications.
52 lines (40 loc) • 1.34 kB
text/typescript
import { type Static, z } from "alepha";
import { $entity, db, sql } from "alepha/orm";
export const DEFAULT_USER_REALM_NAME = "default";
export const users = $entity({
name: "users",
schema: z.object({
id: db.primaryKey(z.uuid()),
version: db.version(),
createdAt: db.createdAt(),
updatedAt: db.updatedAt(),
realm: db.default(z.text(), DEFAULT_USER_REALM_NAME),
username: z
.shortText({
minLength: 3,
maxLength: 30,
// pattern is handled at the realm settings level
})
.optional(),
email: z.string().meta({ format: "email" }).optional(),
phoneNumber: z.e164().optional(),
roles: db.default(z.array(z.string()), []),
firstName: z.string().optional(),
lastName: z.string().optional(),
picture: z.string().optional(),
enabled: db.default(z.boolean(), true),
emailVerified: db.default(z.boolean(), false),
lastLoginAt: z.datetime().optional(),
organizationId: db.organization(),
}),
indexes: [
{
expressions: (self) => [self.realm, sql`LOWER(${self.username})`],
unique: true,
name: "users_realm_username_lower_idx",
},
{ columns: ["realm", "email"], unique: true },
{ columns: ["realm", "phoneNumber"], unique: true },
],
});
export type UserEntity = Static<typeof users.schema>;