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