import bcrypt from "bcrypt"; import { adminModel, saltrounds } from '../models/admin.model' export class AdminService { static async find(filterObject) { try { const resultObject = await adminModel.findOne(filterObject).lean(); if (!resultObject) return { success: false, code: 404, error: "No Matching Result Found.", }; return { success: true, code: 200, result: resultObject, }; } catch (err) { console.log(`err.message`, err.message); return { success: false, code: 500, error: "Unexpected Error Happened.", }; } } static async get(filterObject) { try { const resultObject = await adminModel.findOne(filterObject).lean().select("-password"); if (!resultObject) return { success: false, code: 404, error: "No Matching Result Found.", }; return { success: true, code: 200, result: resultObject, }; } catch (err) { console.log(`err.message`, err.message); return { success: false, code: 500, error: "Unexpected Error Happened.", }; } } static async list(filterObject) { try { const resultArray = await adminModel .find(filterObject) .lean() .select("-password"); if (!resultArray) return { success: false, code: 404, error: "No Matching Result Found.", }; const count = await adminModel.countDocuments(filterObject); return { success: true, code: 200, result: resultArray, count, }; } catch (err) { console.log(`err.message`, err.message); return { success: false, code: 500, error: "Unexpected Error Happened.", }; } } static async create(formObject) { try { if (formObject.email) formObject.email = formObject.email.toLowerCase(); const resultObject = new adminModel(formObject); await resultObject.save(); if (!resultObject) return { success: false, code: 500, error: "Unexpected Error Happened.", }; return { success: true, code: 201, result: resultObject, }; } catch (err) { console.log(`err.message`, err.message); return { success: false, code: 500, error: "Unexpected Error Happened.", }; } } static async update(_id, formObject) { try { const existingObject = await this.find({ _id }); if (!existingObject.success) return { success: false, code: 404, error: "No Matching Result Found.", }; if (formObject.email) { formObject.email = formObject.email.toLowerCase(); const duplicate = await this.find({ email: formObject.email }); if ( duplicate.success && duplicate.result._id.toString() != existingObject.result._id.toString() ) return { success: false, error: "This Email is taken by another user", code: 409, }; } const resultObject = await adminModel.findByIdAndUpdate( { _id }, formObject ); if (!resultObject) return { success: false, code: 500, error: "Unexpected Error Happened.", }; return { success: true, code: 200, result: resultObject, }; } catch (err) { console.log(`err.message`, err.message); return { success: false, code: 500, error: "Unexpected Error Happened.", }; } } static async remove(_id) { try { const resultObject = await adminModel.findByIdAndDelete({ _id }); if (!resultObject) return { success: false, code: 404, error: "No Matching Result Found.", }; return { success: true, code: 200, result: "Deleted Successfully.", }; } catch (err) { console.log(`err.message`, err.message); return { success: false, code: 500, error: "Unexpected Error Happened.", }; } } static async comparePassword(emailString, passwordString) { try { emailString = emailString.toLowerCase(); const existingObject = await this.find({ email: emailString }); if (!existingObject.success) return { success: false, code: 404, error: "No Matching Result Found.", }; const matchingPasswords = await bcrypt.compare( passwordString, existingObject.result.password ); if (!matchingPasswords) return { success: false, code: 409, error: "Incorrect Password.", }; return { success: true, result: existingObject.result, code: 200, }; } catch (err) { console.log(`err.message`, err.message); return { success: false, code: 500, error: "Unexpected Error Happened.", }; } } static async resetPassword(emailString, newPasswordString) { try { emailString = emailString.toLowerCase(); const existingObject = await this.find({ email: emailString }); if (!existingObject.success) return { success: false, code: 404, error: "No Matching Result Found.", }; const hashedPassword = await bcrypt.hash(newPasswordString, saltrounds); const resultObject = await adminModel.findOneAndUpdate( { email: emailString }, { password: hashedPassword } ); if (!resultObject) return { success: false, code: 500, error: "Unexpected Error Happened.", }; return { success: true, code: 200, }; } catch (err) { console.log(`err.message`, err.message); return { success: false, code: 500, error: "Unexpected Error Happened.", }; } } }