user can join
This commit is contained in:
@@ -2,6 +2,7 @@ import fs from 'fs/promises';
|
|||||||
import chalk from 'chalk';
|
import chalk from 'chalk';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import {nodeModels, edgeModels} from './model/import.js'
|
import {nodeModels, edgeModels} from './model/import.js'
|
||||||
|
import Edge from "./model/edge.js"
|
||||||
|
|
||||||
export default class Database {
|
export default class Database {
|
||||||
|
|
||||||
@@ -20,18 +21,27 @@ export default class Database {
|
|||||||
let key = eValues[i].constructor.name
|
let key = eValues[i].constructor.name
|
||||||
this[key] = eValues[i]
|
this[key] = eValues[i]
|
||||||
}
|
}
|
||||||
|
this.edge = new Edge()
|
||||||
this.loadData()
|
this.loadData()
|
||||||
}
|
}
|
||||||
|
|
||||||
addNode(id, node) {
|
getNextIndex(model) {
|
||||||
|
return model.indices[1] - model.indices[0] + 1
|
||||||
|
}
|
||||||
|
|
||||||
|
addNode(prefix, node) {
|
||||||
try {
|
try {
|
||||||
let type = id.split("-")[0]
|
let model = nodeModels[prefix]
|
||||||
let model = nodeModels[type[0] + type.slice(1).toLowerCase()]
|
|
||||||
if(model) {
|
if(model) {
|
||||||
|
let toAdd = {
|
||||||
|
id: this.getNextIndex(model),
|
||||||
|
...node,
|
||||||
|
}
|
||||||
|
if(!toAdd.created) toAdd.created = global.currentTime()
|
||||||
let schema = model.schema
|
let schema = model.schema
|
||||||
let result = schema.safeParse(node)
|
let result = schema.safeParse(toAdd)
|
||||||
if(result.success) {
|
if(result.success) {
|
||||||
this.nodes[model.indices[1]] = node
|
this.nodes[model.indices[1]] = toAdd
|
||||||
model.indices[1]++;
|
model.indices[1]++;
|
||||||
} else {
|
} else {
|
||||||
console.error(result.error)
|
console.error(result.error)
|
||||||
@@ -45,15 +55,21 @@ export default class Database {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
addEdge(id, edge) {
|
addEdge(prefix, edge) {
|
||||||
try {
|
try {
|
||||||
let type = id.split("-")[0]
|
let type = prefix
|
||||||
let model = edgeModels[type]
|
let model = edgeModels[type]
|
||||||
if(model) {
|
if(model) {
|
||||||
|
let toAdd = {
|
||||||
|
id: model.indices[1] - model.indices[0] + 1,
|
||||||
|
...edge
|
||||||
|
}
|
||||||
|
if(!toAdd.created) toAdd.created = global.currentTime()
|
||||||
|
console.log(toAdd)
|
||||||
let schema = model.schema
|
let schema = model.schema
|
||||||
let result = schema.safeParse(edge)
|
let result = schema.safeParse(toAdd)
|
||||||
if(result.success) {
|
if(result.success) {
|
||||||
this.edges[model.indices[1]] = edge
|
this.edges[model.indices[1]] = toAdd
|
||||||
model.indices[1]++;
|
model.indices[1]++;
|
||||||
} else {
|
} else {
|
||||||
console.error(result.error)
|
console.error(result.error)
|
||||||
@@ -81,7 +97,7 @@ export default class Database {
|
|||||||
for(let i=0; i<entries.length; i++) {
|
for(let i=0; i<entries.length; i++) {
|
||||||
let entry = entries[i]
|
let entry = entries[i]
|
||||||
let id = entry[0]; let node = entry[1];
|
let id = entry[0]; let node = entry[1];
|
||||||
this.addNode(id, node)
|
this.addNode(id.split("-")[0], node)
|
||||||
}
|
}
|
||||||
|
|
||||||
let edges = dbJson["edges"];
|
let edges = dbJson["edges"];
|
||||||
@@ -89,7 +105,7 @@ export default class Database {
|
|||||||
for(let i=0; i<edgeEntries.length; i++) {
|
for(let i=0; i<edgeEntries.length; i++) {
|
||||||
let entry = edgeEntries[i]
|
let entry = edgeEntries[i]
|
||||||
let id = entry[0]; let node = entry[1];
|
let id = entry[0]; let node = entry[1];
|
||||||
this.addEdge(id, node)
|
this.addEdge(id.split("-")[0], node)
|
||||||
}
|
}
|
||||||
|
|
||||||
setInterval(() => {
|
setInterval(() => {
|
||||||
|
|||||||
@@ -1,27 +1,11 @@
|
|||||||
import { z } from 'zod';
|
|
||||||
|
|
||||||
export default class Edge {
|
export default class Edge {
|
||||||
schema = z.object({
|
add(n) {
|
||||||
id: z.number(),
|
let toPrefix = n.to.split("-")[0]
|
||||||
from: z.string(),
|
let fromPrefix = n.from.split("-")[0]
|
||||||
to: z.string(),
|
let type = n.type
|
||||||
created: z.string()
|
let prefix = `${fromPrefix}_${type}_${toPrefix}`
|
||||||
})
|
|
||||||
.strict()
|
|
||||||
|
|
||||||
save(n, id) {
|
global.db.addEdge(prefix, n)
|
||||||
let result = this.schema.safeParse(n)
|
|
||||||
if(result.success) {
|
|
||||||
try {
|
|
||||||
super.add(id, n)
|
|
||||||
} catch(e) {
|
|
||||||
console.error(e)
|
|
||||||
throw e
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
console.error(result.error)
|
|
||||||
throw new global.ServerError(400, "Invalid Member Data!");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
getByFrom(fromID) {
|
getByFrom(fromID) {
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ export default class MEMBER_IN_NETWORK {
|
|||||||
|
|
||||||
schema = z.object({
|
schema = z.object({
|
||||||
id: z.number(),
|
id: z.number(),
|
||||||
|
type: z.string(),
|
||||||
from: z.string(),
|
from: z.string(),
|
||||||
to: z.string(),
|
to: z.string(),
|
||||||
created: z.string()
|
created: z.string()
|
||||||
|
|||||||
@@ -22,12 +22,12 @@ let eIndices = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export let nodeModels = {
|
export let nodeModels = {
|
||||||
Member: new Member(nIndices.MEMBER),
|
MEMBER: new Member(nIndices.MEMBER),
|
||||||
Network: new Network(nIndices.NETWORK),
|
NETWORK: new Network(nIndices.NETWORK),
|
||||||
Title: new Title(nIndices.TITLE),
|
TITLE: new Title(nIndices.TITLE),
|
||||||
Payment: new Payment(nIndices.PAYMENT),
|
PAYMENT: new Payment(nIndices.PAYMENT),
|
||||||
Post: new Post(nIndices.POST),
|
POST: new Post(nIndices.POST),
|
||||||
Conversation: new Conversation(nIndices.CONVERSATION),
|
CONVERSATION: new Conversation(nIndices.CONVERSATION),
|
||||||
DM: new DM(nIndices.DM),
|
DM: new DM(nIndices.DM),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import argon2 from 'argon2';
|
import argon2 from 'argon2';
|
||||||
import { z } from 'zod';
|
import { z } from 'zod';
|
||||||
|
|
||||||
export default class Member {
|
export default class Member {
|
||||||
prefix = "MEMBER"
|
prefix = "MEMBER"
|
||||||
indices = null
|
indices = null
|
||||||
|
|
||||||
@@ -9,47 +9,34 @@ export default class Member {
|
|||||||
this.indices = indices
|
this.indices = indices
|
||||||
}
|
}
|
||||||
|
|
||||||
addressSchema = z.object({
|
|
||||||
address1: z.string(),
|
|
||||||
address2: z.string().optional(),
|
|
||||||
zip: z.string().regex(/^\d{5}(-\d{4})?$/),
|
|
||||||
state: z.string(),
|
|
||||||
city: z.string()
|
|
||||||
})
|
|
||||||
schema = z.object({
|
schema = z.object({
|
||||||
id: z.number(),
|
id: z.number(),
|
||||||
email: z.string().email(),
|
email: z.string().email(),
|
||||||
firstName: z.string(),
|
firstName: z.string(),
|
||||||
lastName: z.string(),
|
lastName: z.string(),
|
||||||
password: z.string(),
|
password: z.string(),
|
||||||
joined: z.string(),
|
created: z.string()
|
||||||
address: this.addressSchema.optional()
|
|
||||||
})
|
})
|
||||||
|
|
||||||
isHashed = (s) => {return s.startsWith("$argon2")}
|
isHashed = (s) => {return s.startsWith("$argon2")}
|
||||||
|
|
||||||
save(member) {
|
async add(newMember, network = null) {
|
||||||
let id = `${this.prefix}-${member.id}`
|
|
||||||
let result = this.schema.safeParse(member)
|
|
||||||
if(result.success) {
|
|
||||||
try {
|
|
||||||
global.db.addNode(id, member)
|
|
||||||
} catch(e) {
|
|
||||||
console.error(e)
|
|
||||||
throw e
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
console.error("Failed parsing member: ", result.error)
|
|
||||||
throw new global.ServerError(400, "Invalid Member Data!: ");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async add(newMember) {
|
|
||||||
const hash = await argon2.hash(newMember.password);
|
const hash = await argon2.hash(newMember.password);
|
||||||
newMember.password = hash
|
newMember.password = hash
|
||||||
newMember.joined = global.currentTime()
|
|
||||||
newMember.id = this.indices[1] - 1
|
try {
|
||||||
this.save(newMember)
|
global.db.addNode(this.prefix, newMember)
|
||||||
|
if(network) {
|
||||||
|
global.db.edge.add({
|
||||||
|
type: "IN",
|
||||||
|
from: `${this.prefix}-${global.db.getNextIndex(this)}`,
|
||||||
|
to: "NETWORK-1"
|
||||||
|
})
|
||||||
|
}
|
||||||
|
} catch(e) {
|
||||||
|
console.error(e)
|
||||||
|
throw new global.ServerError(400, "Failed to add member!");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
get(id) {
|
get(id) {
|
||||||
|
|||||||
@@ -13,7 +13,8 @@ export default class Network {
|
|||||||
name: z.string(),
|
name: z.string(),
|
||||||
apps: z.array(z.string()),
|
apps: z.array(z.string()),
|
||||||
logo: z.string(),
|
logo: z.string(),
|
||||||
abbreviation: z.string()
|
abbreviation: z.string(),
|
||||||
|
created: z.string()
|
||||||
})
|
})
|
||||||
.strict()
|
.strict()
|
||||||
|
|
||||||
|
|||||||
@@ -79,8 +79,9 @@ class Server {
|
|||||||
}
|
}
|
||||||
|
|
||||||
newUserSubmission = async (req, res) => {
|
newUserSubmission = async (req, res) => {
|
||||||
|
const { network } = req.query;
|
||||||
try {
|
try {
|
||||||
await db.members.add(req.body)
|
await db.members.add(req.body, network)
|
||||||
global.db.saveData()
|
global.db.saveData()
|
||||||
return res.status(200).json({});
|
return res.status(200).json({});
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
class SignupForm extends Shadow {
|
class SignupForm extends Shadow {
|
||||||
|
|
||||||
errorMessage = "Error signing up. Please try again later or email samuel@sun.museum if the problem persists."
|
errorMessage = "Error signing up. Please try again later or email samuel@sun.museum if the problem persists."
|
||||||
successMessage = "Success! You may now log in."
|
successMessage = `Success! You may now <a style="color: black; text-decoration: underline" href="/login">log in</a>.`
|
||||||
|
|
||||||
inputStyles(el) {
|
inputStyles(el) {
|
||||||
return el
|
return el
|
||||||
@@ -69,14 +69,6 @@ class SignupForm extends Shadow {
|
|||||||
"lastName": data.lastName,
|
"lastName": data.lastName,
|
||||||
"password": data.password
|
"password": data.password
|
||||||
}
|
}
|
||||||
let address = {
|
|
||||||
"address1": data.address1,
|
|
||||||
"address2": data.address2,
|
|
||||||
"zip": data.zip,
|
|
||||||
"state": data.state,
|
|
||||||
"city": data.city
|
|
||||||
}
|
|
||||||
newMember.address = address
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const response = await fetch(window.location.pathname + window.location.search, {
|
const response = await fetch(window.location.pathname + window.location.search, {
|
||||||
@@ -89,11 +81,11 @@ class SignupForm extends Shadow {
|
|||||||
|
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
$("#signupMessage").style.display = "block"
|
$("#signupMessage").style.display = "block"
|
||||||
$("#signupMessage").innerText = this.errorMessage
|
$("#signupMessage").innerHTML = this.errorMessage
|
||||||
throw new Error(`HTTP error! status: ${response.status}`);
|
throw new Error(`HTTP error! status: ${response.status}`);
|
||||||
} else {
|
} else {
|
||||||
$("#signupMessage").style.display = "block"
|
$("#signupMessage").style.display = "block"
|
||||||
$("#signupMessage").innerText = this.successMessage
|
$("#signupMessage").innerHTML = this.successMessage
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
|||||||
Reference in New Issue
Block a user