Spaces:
Running
Running
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(); | |
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.", | |
}; | |
} | |
} | |
} | |