64 lines
1.6 KiB
JavaScript
64 lines
1.6 KiB
JavaScript
import OrderedObject from "./OrderedObject.js"
|
|
|
|
export default class Members extends OrderedObject {
|
|
|
|
add(newMember) {
|
|
console.log("adding ", newMember)
|
|
let id = `MEMBER-${newMember.email}`
|
|
if(this.validate(id, newMember)) {
|
|
try {
|
|
super.add(id, newMember)
|
|
} catch(e) {
|
|
console.error(e)
|
|
throw e
|
|
}
|
|
} else {
|
|
throw new global.ServerError(400, "Invalid Member Data!");
|
|
}
|
|
}
|
|
|
|
validate(id, node) {
|
|
let idTraits = {
|
|
firstWord: "MEMBER"
|
|
}
|
|
|
|
let fields = [
|
|
"firstName",
|
|
"lastName",
|
|
"email",
|
|
"password"
|
|
]
|
|
|
|
let checkID = () => {
|
|
let split = id.split("-")
|
|
return (
|
|
split[0] === idTraits.firstWord
|
|
&& split[1].includes("@")
|
|
&& split[1].includes(".")
|
|
)
|
|
}
|
|
let idres = checkID()
|
|
if(!idres) {
|
|
console.log("id failed: ", id)
|
|
return false
|
|
}
|
|
|
|
let checkFields = () => {
|
|
for(let i = 0; i < fields.length; i++) {
|
|
if(!node[fields[i]]) {
|
|
throw new Error(`Member ${node.email} is missing trait ${fields[i]}`)
|
|
return false
|
|
} else {
|
|
return true
|
|
}
|
|
}
|
|
}
|
|
let fieldres = checkFields()
|
|
if(!fieldres) {
|
|
console.log("fields failed")
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|
|
} |