uploaded files to manage MongoDB database
This commit is contained in:
parent
c0c0085294
commit
8809c06912
2 changed files with 112 additions and 0 deletions
33
scripts/database/management/management.JS
Normal file
33
scripts/database/management/management.JS
Normal file
|
@ -0,0 +1,33 @@
|
|||
const Mongoose = require(`mongoose`);
|
||||
const CustomErrors = require(`../utilities/errors.JS`);
|
||||
|
||||
class DBManagement {
|
||||
/*
|
||||
Begin the connection.
|
||||
|
||||
@param {string} DOMAIN the domain
|
||||
@param {string} DBNAME the database name
|
||||
*/
|
||||
constructor (DOMAIN, DBNAME) {
|
||||
const throwError = (ERROR) => {throw ERROR;};
|
||||
|
||||
this[`state`] = Mongoose.connect(`mongodb://${DOMAIN}/${(DBNAME) ? DBNAME : ""}`, { useNewUrlParser: true, useUnifiedTopology: true }).then((CONNECTION) => {
|
||||
this[`connection`] = CONNECTION.connection;
|
||||
console.log(`Connection successful.`);
|
||||
}).catch(throwError);
|
||||
};
|
||||
|
||||
/*
|
||||
Establish the schema and collection. The result is stored in `this.#status`.
|
||||
|
||||
@param {string} COLLECTION the name of the collection
|
||||
@param {object} SCHEMA the scehma
|
||||
*/
|
||||
configure (COLLECTION, SCHEMA) {
|
||||
this[`schema`] = new Mongoose.Schema(SCHEMA);
|
||||
this[`collection`] = COLLECTION;
|
||||
this.state.then(() => {this.model = this[`connection`].model(`URL`, this[`schema`]);})
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = DBManagement;
|
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