evyos-frontend-development/backend/src/models/user.model.ts

74 lines
1.9 KiB
TypeScript

import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { ObjectType, Field, ID } from '@nestjs/graphql';
import { Document, Types } from 'mongoose';
import { Base } from '@/models/base.model';
import { Person } from '@/models/person.model';
import { generateResetToken } from '@/lib/generateToken';
@ObjectType()
export class CollectionToken {
@Field()
defaultSelection: string;
@Field(() => [String])
selectedBuildIDS: string[];
@Field(() => [String])
selectedCompanyIDS: string[];
}
@ObjectType()
@Schema({ timestamps: true })
export class User extends Base {
@Field(() => ID)
_id: string;
@Field({ nullable: true })
@Prop({ required: false, default: '' })
avatar?: string;
@Field({ nullable: true })
@Prop({ default: () => new Date(Date.now() + 30 * 24 * 60 * 60 * 1000) })
expiresAt?: Date;
@Field({ nullable: true })
@Prop({ required: false, default: () => generateResetToken().hashedToken })
resetToken?: string;
@Field({ nullable: true })
@Prop({ required: false, default: '' })
password?: string;
@Field(() => [String], { nullable: 'itemsAndList' })
@Prop({ type: [String], default: [], validate: [(val: string[]) => val.length <= 3, 'History can have max 3 items'] })
history?: string[];
@Field()
@Prop({ required: true })
tag: string;
@Field()
@Prop({ required: true, unique: true })
email: string;
@Field()
@Prop({ required: true, unique: true })
phone: string;
@Field(() => CollectionToken)
@Prop({ type: CollectionToken, default: () => ({ defaultSelection: '', selectedBuildIDS: [], selectedCompanyIDS: [] }) })
collectionTokens: CollectionToken;
@Field(() => ID)
@Prop({ type: Types.ObjectId, ref: Person.name, required: true })
person: Types.ObjectId;
}
export type UserDocument = User & Document;
export const UserSchema = SchemaFactory.createForClass(User);