uploaded files to manage MongoDB database
This commit is contained in:
parent
c0c0085294
commit
8809c06912
2 changed files with 112 additions and 0 deletions
79
scripts/database/management/management_user.JS
Normal file
79
scripts/database/management/management_user.JS
Normal file
|
@ -0,0 +1,79 @@
|
|||
import CustomErrors from "../../utilities/errors.JS";
|
||||
|
||||
const DBManagement = require(`./management.JS`);
|
||||
const User = require(`../entry/user.JS`);
|
||||
const Hash = require(`../../utilities/hash.JS`);
|
||||
const Errors = require(`../../utilities/errors.JS`);
|
||||
|
||||
class UsersManagement extends DBManagement {
|
||||
constructor() {
|
||||
super(`localhost:27017`, `Activity-Tracker`);
|
||||
this.configure(`Users`, User.generateTemplate());
|
||||
};
|
||||
|
||||
/*
|
||||
Create a user. The ID will be automatically generated.
|
||||
|
||||
@param {string} USERNAME the user name
|
||||
@param {object} OPTIONS the account options
|
||||
@return {object} the user data
|
||||
*/
|
||||
async create(USERNAME, OPTIONS, done) {
|
||||
await this.state;
|
||||
|
||||
/*
|
||||
Check if a user has been created.
|
||||
|
||||
@return {object} the found user
|
||||
*/
|
||||
const checkMatch = async () => {
|
||||
let RESULTS = await this.match({"name": USERNAME}, 1);
|
||||
return ((RESULTS.length) ? RESULTS[0] : false)
|
||||
}
|
||||
|
||||
const createUser = async () => {
|
||||
let ID = await (new Hash(USERNAME)).convert(`String`);
|
||||
let CREATED = new User({'name': USERNAME.trim(), 'ID': ID});
|
||||
|
||||
let ENTRY = new this.model(CREATED);
|
||||
try {
|
||||
await ENTRY.save();
|
||||
} catch(ERROR) {
|
||||
throw new CustomErrors.DBProblem(ERROR.message);
|
||||
}
|
||||
|
||||
return (CREATED);
|
||||
}
|
||||
|
||||
if ((USERNAME) ? USERNAME.trim() : false) {
|
||||
let CURRENT = !(await checkMatch())
|
||||
CURRENT = (!CURRENT) ? createUser() : CURRENT;
|
||||
|
||||
return (CURRENT);
|
||||
};
|
||||
};
|
||||
|
||||
/*
|
||||
Find a user based on their corresponding details.
|
||||
|
||||
@param {object} CRITERIA the search criteria
|
||||
@param {number} SIZE the size of the search
|
||||
@return {object} the search results
|
||||
*/
|
||||
async match(CRITERIA = {}, SIZE) {
|
||||
await this.state;
|
||||
let RESULT = [];
|
||||
|
||||
if ((CRITERIA && CRITERIA instanceof Object) ? !Object.keys(CRITERIA).length : true) {
|
||||
RESULT = await this.model.find();
|
||||
} else if (CRITERIA instanceof Object) {
|
||||
RESULT = await this.model.find(CRITERIA);
|
||||
}
|
||||
|
||||
if (RESULT.length && (SIZE) ? (SIZE > 0 && SIZE < RESULT.length) : false) {
|
||||
RESULT = RESULT.slice(0,n);
|
||||
}
|
||||
|
||||
return RESULT;
|
||||
};
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue