EvalueTonSavoir/server/models/quiz.js

138 lines
3.8 KiB
JavaScript
Raw Normal View History

2024-03-29 20:08:34 -04:00
const { ObjectId } = require('mongodb');
class Quiz {
constructor(db) {
2024-10-02 14:30:53 -04:00
// console.log("Quiz constructor: db", db)
this.db = db;
}
2024-03-29 20:08:34 -04:00
async create(title, content, folderId, userId) {
await this.db.connect()
const conn = this.db.getConnection();
2024-03-29 20:08:34 -04:00
const quizCollection = conn.collection('files');
const existingQuiz = await quizCollection.findOne({ title: title, folderId: folderId, userId: userId })
if (existingQuiz) return null;
const newQuiz = {
folderId: folderId,
userId: userId,
title: title,
content: content,
created_at: new Date(),
updated_at: new Date()
}
const result = await quizCollection.insertOne(newQuiz);
return result.insertedId;
}
async getOwner(quizId) {
await this.db.connect()
const conn = this.db.getConnection();
2024-03-29 20:08:34 -04:00
const quizCollection = conn.collection('files');
const quiz = await quizCollection.findOne({ _id: new ObjectId(quizId) });
return quiz.userId;
}
async getContent(quizId) {
await this.db.connect()
const conn = this.db.getConnection();
2024-03-29 20:08:34 -04:00
const quizCollection = conn.collection('files');
const quiz = await quizCollection.findOne({ _id: new ObjectId(quizId) });
return quiz;
}
async delete(quizId) {
await this.db.connect()
const conn = this.db.getConnection();
2024-03-29 20:08:34 -04:00
const quizCollection = conn.collection('files');
const result = await quizCollection.deleteOne({ _id: new ObjectId(quizId) });
if (result.deletedCount != 1) return false;
return true;
}
async deleteQuizzesByFolderId(folderId) {
await this.db.connect();
const conn = this.db.getConnection();
2024-03-29 20:08:34 -04:00
const quizzesCollection = conn.collection('files');
// Delete all quizzes with the specified folderId
await quizzesCollection.deleteMany({ folderId: folderId });
}
async update(quizId, newTitle, newContent) {
await this.db.connect()
const conn = this.db.getConnection();
2024-03-29 20:08:34 -04:00
const quizCollection = conn.collection('files');
const result = await quizCollection.updateOne({ _id: new ObjectId(quizId) }, { $set: { title: newTitle, content: newContent } });
//Ne fonctionne pas si rien n'est chngé dans le quiz
//if (result.modifiedCount != 1) return false;
return true
}
async move(quizId, newFolderId) {
await this.db.connect()
const conn = this.db.getConnection();
2024-03-29 20:08:34 -04:00
const quizCollection = conn.collection('files');
const result = await quizCollection.updateOne({ _id: new ObjectId(quizId) }, { $set: { folderId: newFolderId } });
if (result.modifiedCount != 1) return false;
return true
}
async duplicate(quizId, userId) {
const sourceQuiz = await this.getContent(quizId);
let newQuizTitle = `${sourceQuiz.title}-copy`;
let counter = 1;
while (await this.quizExists(newQuizTitle, userId)) {
newQuizTitle = `${sourceQuiz.title}-copy(${counter})`;
counter++;
}
//console.log(newQuizTitle);
const newQuizId = await this.create(newQuizTitle, sourceQuiz.content,sourceQuiz.folderId, userId);
if (!newQuizId) {
throw new Error('Failed to create a duplicate quiz.');
}
return newQuizId;
}
async quizExists(title, userId) {
await this.db.connect();
const conn = this.db.getConnection();
2024-03-29 20:08:34 -04:00
const filesCollection = conn.collection('files');
const existingFolder = await filesCollection.findOne({ title: title, userId: userId });
return existingFolder !== null;
}
}
module.exports = Quiz;