// src/models/user.ts // Copyright (C) 2026 Robert Colbert // All Rights Reserved import { Schema, model } from "mongoose"; import { IUser, IUserFlags } from "@gadget/api"; import { nanoid } from "nanoid"; export const UserFlagsSchema = new Schema( { 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({ _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("User", UserSchema); export default User; (async () => { await User.syncIndexes(); })();