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
JavaScript
;
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