import { Model, InferAttributes, InferCreationAttributes, CreationOptional, NonAttribute, ModelStatic } from "vr-migrations"; import type { Device } from "./device.models"; import type { Payment } from "./payment.models"; import type { SecurityClearance } from "./securityClearance.models"; import type { Contact } from "./contact.models"; import { Ban } from "./ban.models"; import { Suspension } from "./suspension.models"; import { DevicePaymentPlan } from "./devicePaymentPlan.models"; export interface DeletionStatus { deleted: boolean; deletedAt?: Date | null; deletedBy?: string | null; reason?: string | null; } export declare const GENDER_OPTIONS: readonly ["male", "female", "N/A"]; export type Gender = (typeof GENDER_OPTIONS)[number]; export interface UserAttributes { id: string; firstName: string; lastName: string; jacketId?: string | null; password?: string | null; securityClearanceId: string; plateNumber?: string | null; gender?: Gender; birthDate?: number | null; birthMonth?: number | null; birthYear?: number | null; primaryContactId: string | null; isActive: boolean; forgotPassword: boolean; isDeactivated: boolean; deactivatedAt: Date | null; lastLoginAt: Date | null; tokenVersion: number; deletion: DeletionStatus; createdAt: Date; payments?: Payment[]; securityClearance?: SecurityClearance; primaryContact?: Contact; contacts?: Contact[]; bans?: Ban[]; suspensions?: Suspension[]; devices?: Device[]; registeredBy?: string | null; } export interface UserCreationAttributes extends Omit { id?: string; isActive?: boolean; forgotPassword?: boolean; isDeactivated?: boolean; tokenVersion?: number; primaryContactId?: string | null; } export declare class User extends Model, InferCreationAttributes> implements UserAttributes { id: CreationOptional; firstName: string; lastName: string; jacketId: CreationOptional; password: CreationOptional; securityClearanceId: string; plateNumber: CreationOptional; gender: CreationOptional; birthDate: CreationOptional; birthMonth: CreationOptional; birthYear: CreationOptional; primaryContactId: CreationOptional; isActive: CreationOptional; forgotPassword: CreationOptional; isDeactivated: CreationOptional; deactivatedAt: CreationOptional; lastLoginAt: CreationOptional; tokenVersion: CreationOptional; deletion: CreationOptional; readonly createdAt: CreationOptional; payments?: NonAttribute; paymentPlans?: NonAttribute; securityClearance?: NonAttribute; primaryContact?: NonAttribute; contacts?: NonAttribute; bans?: NonAttribute; suspensions?: NonAttribute; registeredBy?: CreationOptional; static initialize(sequelize: any): void; static associate(models: Record>): void; softDelete(deletedBy: string, reason?: string): Promise; updateLastLogin(): Promise; deactivate(): Promise; activate(): Promise; getPrimaryVerifiedContact(): Promise; hasVerifiedContactType(type: "EMAIL" | "PHONE" | "WHATSAPP"): Promise; getBirthDate(): Date | null; getAge(): number | null; } export type UserModel = typeof User;