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