UNPKG

pl4y-data-library

Version:

This library contains the dtos, enums, schemas, and other data objects needed in the pl4y ecosystem.

150 lines 4.98 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.UserSchema = void 0; const mongoose = __importStar(require("mongoose")); const user_status_enum_1 = require("../enums/user-status.enum"); const roles_enum_1 = require("../enums/roles.enum"); const session_location_enum_1 = require("../enums/session-location.enum"); const user_types_enum_1 = require("../enums/user-types.enum"); exports.UserSchema = new mongoose.Schema({ first_name: { type: String, required: [true, "First name is required"], trim: true, minlength: [2, "First name must be at least 2 characters long"], maxlength: [50, "First name cannot exceed 50 characters"], }, last_name: { type: String, required: [true, "Last name is required"], trim: true, minlength: [2, "Last name must be at least 2 characters long"], maxlength: [50, "Last name cannot exceed 50 characters"], }, email: { type: String, required: [true, "Email is required"], unique: true, match: [/^\S+@\S+\.\S+$/, "Email format is invalid"], lowercase: true, trim: true, }, phone: { type: String, match: [/^\d{10,15}$/, "Phone number must be between 10 to 15 digits"], }, picture: { type: String, match: [/^(http|https):\/\/[^\s$.?#].[^\s]*$/, "Invalid URL format"], }, password: { type: String, required: [true, "Password is required"], minlength: [6, "Password must be at least 6 characters long"], }, isAdmin: { type: Boolean, default: false, }, hasShippingAddress: { type: Boolean, default: false, }, status: { type: String, enum: { values: [user_status_enum_1.UserStatus.ACTIVE, user_status_enum_1.UserStatus.PENDING, user_status_enum_1.UserStatus.SUSPENDED, user_status_enum_1.UserStatus.CANCELLED], message: "Invalid status", }, default: user_status_enum_1.UserStatus.ACTIVE, }, role: { type: String, enum: { values: [roles_enum_1.Role.ADMIN, roles_enum_1.Role.OWNER, roles_enum_1.Role.MANAGER, roles_enum_1.Role.USER, roles_enum_1.Role.GUEST], message: "Invalid role", }, default: roles_enum_1.Role.USER, }, refreshToken: { type: String, }, balance: { type: Number, default: 0, min: [0, "Balance cannot be negative"], }, tenantId: { type: String, required: [true, "Tenant ID is required"], }, membership: { type: String, default: "basic", enum: { values: ["basic", "premium", "gold"], message: "Invalid membership type", }, }, billingAddress: { type: mongoose.Schema.Types.ObjectId, ref: "Address", }, shippingAddress: { type: mongoose.Schema.Types.ObjectId, ref: "Address", }, session_location: { type: String, enum: { values: [session_location_enum_1.SessionLocation.ONLINE, session_location_enum_1.SessionLocation.ONSITE], message: "Invalid session location", }, default: session_location_enum_1.SessionLocation.ONLINE, }, parentId: { type: String, ref: "User", }, rate: { type: Number, default: 0, min: [0, "Rate cannot be negative"], }, userType: { type: String, enum: { values: [user_types_enum_1.UserType.PARENT, user_types_enum_1.UserType.TEACHER, user_types_enum_1.UserType.CHILD], message: "Invalid user type", }, default: user_types_enum_1.UserType.PARENT, }, }, { timestamps: true, toJSON: { virtuals: true }, toObject: { virtuals: true }, }); //# sourceMappingURL=user.schema.js.map