gadget/gadget-code/src/models/user.ts
2026-05-01 14:47:18 -04:00

36 lines
1.2 KiB
TypeScript

// src/models/user.ts
// Copyright (C) 2026 Robert Colbert <rob.colbert@openplatform.us>
// All Rights Reserved
import { Schema, model } from "mongoose";
import { IUser, IUserFlags } from "@gadget/api";
import { nanoid } from "nanoid";
export const UserFlagsSchema = new Schema<IUserFlags>(
{
isEmailVerified: { type: Boolean, default: false, required: true },
isAdmin: { type: Boolean, default: false, required: true },
isTest: { type: Boolean, default: false, required: true },
isBanned: { type: Boolean, default: false, required: true },
},
{ _id: false },
);
export const UserSchema = new Schema<IUser>({
_id: { type: String, default: () => nanoid() },
email: { type: String, required: true },
email_lc: { type: String, required: true, lowercase: true, unique: true },
passwordSalt: { type: String, required: true, select: false },
password: { type: String, required: true, select: false },
displayName: { type: String, minlength: 3, maxlength: 30, required: true },
flags: { type: UserFlagsSchema, required: true },
});
export const User = model<IUser>("User", UserSchema);
export default User;
(async () => {
await User.syncIndexes();
})();