User search and creation
This commit is contained in:
parent
5fa9e6efd6
commit
0458e11267
7 changed files with 109 additions and 42 deletions
|
@ -1,9 +1,88 @@
|
|||
const bodyParser = require(`body-parser`);
|
||||
|
||||
const CustomErrors = require(`./utilities/errors.JS`);
|
||||
const Messaging = require(`./utilities/messaging.JS`);
|
||||
|
||||
class DBManagement {};
|
||||
DBManagement.Activities = require(`./database/management/management_activity.JS`);
|
||||
DBManagement.Users = require(`./database/management/management_user.JS`);
|
||||
|
||||
class ResponseGenerator {};
|
||||
ResponseGenerator.Activities = require(`./response/activity.JS`);
|
||||
ResponseGenerator.Users = require(`./response/user.JS`);
|
||||
ResponseGenerator.Log = require(`./response/log.JS`);
|
||||
|
||||
class ExerciseTrackerAPI {
|
||||
constructor() {
|
||||
#paths = {
|
||||
"users": ["users"],
|
||||
"exercises": ["users/:_id/exercises"],
|
||||
"logs": ["users/:_id/logs"]
|
||||
}
|
||||
|
||||
constructor(INSTANCE) {
|
||||
this[`instance`] = INSTANCE;
|
||||
this[`instance`].use(bodyParser.json());
|
||||
this[`instance`].use(bodyParser.urlencoded({extended: true}));
|
||||
|
||||
const init_management = () => {
|
||||
this[`management`] = {};
|
||||
|
||||
Object.keys(DBManagement).forEach((DATABASE) => {
|
||||
this.management[DATABASE] = new DBManagement[DATABASE]();
|
||||
});
|
||||
this.manageUsers();
|
||||
};
|
||||
|
||||
init_management();
|
||||
}
|
||||
|
||||
/*
|
||||
Manage the users.
|
||||
*/
|
||||
manageUsers () {
|
||||
/*
|
||||
Create new users.
|
||||
*/
|
||||
const users_creation = async (REQUEST, RESPONSE) => {
|
||||
try {
|
||||
if (((REQUEST.body) ? Object.keys(REQUEST.body).length : false) ? Object.keys(REQUEST.body).includes(`username`) : false) {
|
||||
this.management[`Users`].create(REQUEST.body[`username`]).then((RESULT) => {
|
||||
let FORMATTED = (new ResponseGenerator.Users(RESULT)).format();
|
||||
RESPONSE.send(FORMATTED);
|
||||
})
|
||||
} else {
|
||||
throw new CustomErrors.Data.Missing(REQUEST.body);
|
||||
}
|
||||
} catch(ERR) {
|
||||
Messaging.exception(RESPONSE, ERR);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Search for all users.
|
||||
*/
|
||||
const users_display = (REQUEST, RESPONSE) => {
|
||||
try {
|
||||
let CRITERIA = (((REQUEST.query) ? Object.keys(REQUEST.query).length : false) || ((REQUEST.body) ? Object.keys(REQUEST.body).length : false)) ? (((REQUEST.body) ? Object.keys(REQUEST.body).length : false) ? REQUEST.body : REQUEST.query) : {};
|
||||
|
||||
this.management[`Users`].search(CRITERIA).then((RESULT) => {
|
||||
let FORMATTED = (new ResponseGenerator.Users(RESULT)).format();
|
||||
RESPONSE.send(FORMATTED);
|
||||
})
|
||||
} catch(ERR) {
|
||||
Messaging.exception(RESPONSE, ERR);
|
||||
}
|
||||
}
|
||||
|
||||
this.#paths[`users`].forEach((PATH) => {
|
||||
this[`instance`].get(`/api/${PATH}`, users_display)
|
||||
console.log(`User search is ready on ${PATH}.`);
|
||||
});
|
||||
|
||||
this.#paths[`users`].forEach((PATH) => {
|
||||
this[`instance`].post(`/api/${PATH}`, users_creation)
|
||||
console.log(`User creation is ready on ${PATH}.`);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,10 +1,13 @@
|
|||
const Entry = require(`./object.JS`);
|
||||
|
||||
class Activity extends Entry {
|
||||
username;
|
||||
description;
|
||||
duration;
|
||||
date;
|
||||
/*
|
||||
Default properties:
|
||||
username
|
||||
description
|
||||
duration
|
||||
date
|
||||
*/
|
||||
|
||||
constructor(PROPERTIES) {
|
||||
super(PROPERTIES);
|
||||
|
@ -21,15 +24,8 @@ class Activity extends Entry {
|
|||
"description": {"type": String},
|
||||
"date": {"type": Number},
|
||||
"duration": {"type": Number}
|
||||
}
|
||||
let TEST = new Activity();
|
||||
|
||||
// Verify that the schema is valid.
|
||||
Object.keys(SCHEMA).forEach((KEY) => {
|
||||
if (!Object.keys(TEST).includes(KEY)) {delete SCHEMA[KEY];};
|
||||
});
|
||||
|
||||
return (SCHEMA)
|
||||
};
|
||||
return (SCHEMA);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* An object to represent an entry in the database. */
|
||||
class Entry {
|
||||
constructor(PROPERTIES) {
|
||||
(PROPERTIES) ? Object.entries(PROPERTIES).forEach(([property, value]) => {
|
||||
(PROPERTIES && (Object.keys(PROPERTIES).length)) ? Object.entries(PROPERTIES).forEach(([property, value]) => {
|
||||
this[property] = value;
|
||||
}) : false;
|
||||
};
|
||||
|
|
|
@ -2,11 +2,13 @@ const Entry = require(`./object.JS`);
|
|||
const Hash = require(`../../utilities/hash.JS`);
|
||||
|
||||
class User extends Entry {
|
||||
// Default properties
|
||||
name;
|
||||
ID;
|
||||
activated = false;
|
||||
passcode;
|
||||
/*
|
||||
Default properties:
|
||||
name
|
||||
ID
|
||||
activated = false
|
||||
passcode
|
||||
*/
|
||||
#login = false;
|
||||
|
||||
constructor(PROPERTIES) {
|
||||
|
@ -40,15 +42,8 @@ class User extends Entry {
|
|||
"ID": {"type": String, "required": true, "unique": true, "dropDups": true},
|
||||
"activated": {"type": Boolean},
|
||||
"passcode": {"type": String}
|
||||
}
|
||||
let TEST = new User();
|
||||
|
||||
// Verify that the schema is valid.
|
||||
Object.keys(SCHEMA).forEach((KEY) => {
|
||||
if (!Object.keys(TEST).includes(KEY)) {delete SCHEMA[KEY];};
|
||||
});
|
||||
|
||||
return (SCHEMA)
|
||||
};
|
||||
return (SCHEMA);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -43,6 +43,7 @@ class DBManagement {
|
|||
let RESULT = [];
|
||||
|
||||
if ((CRITERIA && CRITERIA instanceof Object) ? !(Object.keys(CRITERIA).length) : true) {
|
||||
console.log(`Searching all...`);
|
||||
RESULT = await this.model.find();
|
||||
} else if (CRITERIA instanceof Object) {
|
||||
RESULT = await this.model.find(CRITERIA);
|
||||
|
|
|
@ -19,7 +19,7 @@ class UsersManagement extends DBManagement {
|
|||
@param {object} OPTIONS the account options
|
||||
@return {object} the user data
|
||||
*/
|
||||
async create(USERNAME, OPTIONS, done) {
|
||||
async create(USERNAME, OPTIONS) {
|
||||
await this.state;
|
||||
|
||||
/*
|
||||
|
@ -47,7 +47,7 @@ class UsersManagement extends DBManagement {
|
|||
}
|
||||
|
||||
if ((USERNAME) ? USERNAME.trim() : false) {
|
||||
let CURRENT = !(await checkMatch())
|
||||
let CURRENT = (await checkMatch())
|
||||
CURRENT = (!CURRENT) ? await createUser() : CURRENT;
|
||||
|
||||
return (CURRENT);
|
||||
|
|
|
@ -2,9 +2,6 @@
|
|||
Modify data returned by the database connector scripts. s
|
||||
*/
|
||||
class DBParser {
|
||||
mappings;
|
||||
data;
|
||||
|
||||
constructor(DATA = {}, MAPPINGS = {}) {
|
||||
this.data = DATA;
|
||||
this.mappings = MAPPINGS;
|
||||
|
@ -20,28 +17,27 @@ class DBParser {
|
|||
/*
|
||||
Map certain new keys to their orignal counterparts.
|
||||
*/
|
||||
const map = (ROW) => {
|
||||
function mapKeys (ORIGINAL = {}, MAPPINGS) {
|
||||
let RESULT = {};
|
||||
Object.entries(this.mappings).forEach(([NEW, OLD]) => {
|
||||
if (Object.keys(ROW).includes(OLD)) {
|
||||
RESULT[NEW] = (typeof ROW[OLD]).includes(`str`) ? ROW[OLD].trim() : ROW[OLD];
|
||||
}
|
||||
|
||||
Object.entries(MAPPINGS).forEach(([NEW, OLD]) => {
|
||||
RESULT[NEW] = (ORIGINAL[OLD] != null ? (typeof ORIGINAL[OLD]).includes(`str`) : false) ? ORIGINAL[OLD].trim() : ORIGINAL[OLD];
|
||||
});
|
||||
|
||||
return RESULT;
|
||||
};
|
||||
}
|
||||
|
||||
if (this.data instanceof Array) {
|
||||
ENTRIES = [];
|
||||
|
||||
(this.data.length) ? this.data.forEach((SELECTED) => {
|
||||
if (SELECTED) {
|
||||
let CLEANED = map(SELECTED);
|
||||
let CLEANED = mapKeys(SELECTED, this.mappings);
|
||||
(Object.keys(CLEANED).length) ? ENTRIES.push(CLEANED) : false;
|
||||
};
|
||||
}) : false;
|
||||
} else if (this.data && this.data instanceof Object) {
|
||||
ENTRIES = map(this.data);
|
||||
ENTRIES = mapKeys(this.data, this.mappings);
|
||||
};
|
||||
|
||||
this.cleaned = ENTRIES;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue