import db from '../config/db'; import bcrypt from 'bcrypt'; import AppError from '../middleware/AppError'; import { USER_ALREADY_EXISTS } from '../constants/errorCodes'; import { Folder } from './folder'; import { Image } from './image'; import { Quiz } from './quiz'; export class User { constructor(public email: string, public hashedPassword: string, public created_at?: Date, public _id?: string, public folders?: Array, public images?: Array, public quizzes?: Array) { this.email = email; this.hashedPassword = hashedPassword; this.created_at = created_at || new Date(); this.folders = folders || new Array(); this.images = images || new Array(); this.quizzes = quizzes || new Array(); } // async hashPassword(password: string): Promise { // return await bcrypt.hash(password, 10); // } // generatePassword(): string { // return Math.random().toString(36).slice(-8); // } // async verify(password: string, hash: string): Promise { // return await bcrypt.compare(password, hash); // } // async register(email: string, password: string): Promise { // await db.connect(); // const conn = db.getConnection(); // const userCollection = conn.collection('users'); // const existingUser = await userCollection.findOne({ email }); // if (existingUser) { // throw new AppError(USER_ALREADY_EXISTS); // } // const newUser = { // email, // password: await this.hashPassword(password), // created_at: new Date(), // }; // await userCollection.insertOne(newUser); // const folderTitle = 'Dossier par Défaut'; // const userId = newUser._id.toString(); // await Folders.create(folderTitle, userId); // // TODO: verif if inserted properly... // } // async login(email: string, password: string): Promise { // await db.connect(); // const conn = db.getConnection(); // const userCollection = conn.collection('users'); // const user = await userCollection.findOne({ email }); // if (!user) { // return false; // } // const passwordMatch = await this.verify(password, user.password); // if (!passwordMatch) { // return false; // } // return user; // } // async resetPassword(email: string): Promise { // const newPassword = this.generatePassword(); // return await this.changePassword(email, newPassword); // } // async changePassword(email: string, newPassword: string): Promise { // await db.connect(); // const conn = db.getConnection(); // const userCollection = conn.collection('users'); // const hashedPassword = await this.hashPassword(newPassword); // const result = await userCollection.updateOne({ email }, { $set: { password: hashedPassword } }); // if (result.modifiedCount !== 1) return null; // return newPassword; // } // async delete(email: string): Promise { // await db.connect(); // const conn = db.getConnection(); // const userCollection = conn.collection('users'); // const result = await userCollection.deleteOne({ email }); // if (result.deletedCount !== 1) return false; // return true; // } // async getId(email: string): Promise { // await db.connect(); // const conn = db.getConnection(); // const userCollection = conn.collection('users'); // const user = await userCollection.findOne({ email }); // if (!user) { // return false; // } // return user._id; // } }