user can join
This commit is contained in:
@@ -2,6 +2,7 @@ import fs from 'fs/promises';
|
||||
import chalk from 'chalk';
|
||||
import path from 'path';
|
||||
import {nodeModels, edgeModels} from './model/import.js'
|
||||
import Edge from "./model/edge.js"
|
||||
|
||||
export default class Database {
|
||||
|
||||
@@ -20,18 +21,27 @@ export default class Database {
|
||||
let key = eValues[i].constructor.name
|
||||
this[key] = eValues[i]
|
||||
}
|
||||
this.edge = new Edge()
|
||||
this.loadData()
|
||||
}
|
||||
|
||||
addNode(id, node) {
|
||||
getNextIndex(model) {
|
||||
return model.indices[1] - model.indices[0] + 1
|
||||
}
|
||||
|
||||
addNode(prefix, node) {
|
||||
try {
|
||||
let type = id.split("-")[0]
|
||||
let model = nodeModels[type[0] + type.slice(1).toLowerCase()]
|
||||
let model = nodeModels[prefix]
|
||||
if(model) {
|
||||
let toAdd = {
|
||||
id: this.getNextIndex(model),
|
||||
...node,
|
||||
}
|
||||
if(!toAdd.created) toAdd.created = global.currentTime()
|
||||
let schema = model.schema
|
||||
let result = schema.safeParse(node)
|
||||
let result = schema.safeParse(toAdd)
|
||||
if(result.success) {
|
||||
this.nodes[model.indices[1]] = node
|
||||
this.nodes[model.indices[1]] = toAdd
|
||||
model.indices[1]++;
|
||||
} else {
|
||||
console.error(result.error)
|
||||
@@ -45,15 +55,21 @@ export default class Database {
|
||||
}
|
||||
}
|
||||
|
||||
addEdge(id, edge) {
|
||||
addEdge(prefix, edge) {
|
||||
try {
|
||||
let type = id.split("-")[0]
|
||||
let type = prefix
|
||||
let model = edgeModels[type]
|
||||
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 result = schema.safeParse(edge)
|
||||
let result = schema.safeParse(toAdd)
|
||||
if(result.success) {
|
||||
this.edges[model.indices[1]] = edge
|
||||
this.edges[model.indices[1]] = toAdd
|
||||
model.indices[1]++;
|
||||
} else {
|
||||
console.error(result.error)
|
||||
@@ -81,7 +97,7 @@ export default class Database {
|
||||
for(let i=0; i<entries.length; i++) {
|
||||
let entry = entries[i]
|
||||
let id = entry[0]; let node = entry[1];
|
||||
this.addNode(id, node)
|
||||
this.addNode(id.split("-")[0], node)
|
||||
}
|
||||
|
||||
let edges = dbJson["edges"];
|
||||
@@ -89,7 +105,7 @@ export default class Database {
|
||||
for(let i=0; i<edgeEntries.length; i++) {
|
||||
let entry = edgeEntries[i]
|
||||
let id = entry[0]; let node = entry[1];
|
||||
this.addEdge(id, node)
|
||||
this.addEdge(id.split("-")[0], node)
|
||||
}
|
||||
|
||||
setInterval(() => {
|
||||
|
||||
@@ -1,27 +1,11 @@
|
||||
import { z } from 'zod';
|
||||
|
||||
export default class Edge {
|
||||
schema = z.object({
|
||||
id: z.number(),
|
||||
from: z.string(),
|
||||
to: z.string(),
|
||||
created: z.string()
|
||||
})
|
||||
.strict()
|
||||
add(n) {
|
||||
let toPrefix = n.to.split("-")[0]
|
||||
let fromPrefix = n.from.split("-")[0]
|
||||
let type = n.type
|
||||
let prefix = `${fromPrefix}_${type}_${toPrefix}`
|
||||
|
||||
save(n, id) {
|
||||
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!");
|
||||
}
|
||||
global.db.addEdge(prefix, n)
|
||||
}
|
||||
|
||||
getByFrom(fromID) {
|
||||
|
||||
@@ -10,6 +10,7 @@ export default class MEMBER_IN_NETWORK {
|
||||
|
||||
schema = z.object({
|
||||
id: z.number(),
|
||||
type: z.string(),
|
||||
from: z.string(),
|
||||
to: z.string(),
|
||||
created: z.string()
|
||||
|
||||
@@ -22,12 +22,12 @@ let eIndices = {
|
||||
}
|
||||
|
||||
export let nodeModels = {
|
||||
Member: new Member(nIndices.MEMBER),
|
||||
Network: new Network(nIndices.NETWORK),
|
||||
Title: new Title(nIndices.TITLE),
|
||||
Payment: new Payment(nIndices.PAYMENT),
|
||||
Post: new Post(nIndices.POST),
|
||||
Conversation: new Conversation(nIndices.CONVERSATION),
|
||||
MEMBER: new Member(nIndices.MEMBER),
|
||||
NETWORK: new Network(nIndices.NETWORK),
|
||||
TITLE: new Title(nIndices.TITLE),
|
||||
PAYMENT: new Payment(nIndices.PAYMENT),
|
||||
POST: new Post(nIndices.POST),
|
||||
CONVERSATION: new Conversation(nIndices.CONVERSATION),
|
||||
DM: new DM(nIndices.DM),
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import argon2 from 'argon2';
|
||||
import { z } from 'zod';
|
||||
|
||||
export default class Member {
|
||||
export default class Member {
|
||||
prefix = "MEMBER"
|
||||
indices = null
|
||||
|
||||
@@ -9,47 +9,34 @@ export default class Member {
|
||||
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({
|
||||
id: z.number(),
|
||||
email: z.string().email(),
|
||||
firstName: z.string(),
|
||||
lastName: z.string(),
|
||||
password: z.string(),
|
||||
joined: z.string(),
|
||||
address: this.addressSchema.optional()
|
||||
created: z.string()
|
||||
})
|
||||
|
||||
isHashed = (s) => {return s.startsWith("$argon2")}
|
||||
|
||||
save(member) {
|
||||
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) {
|
||||
async add(newMember, network = null) {
|
||||
const hash = await argon2.hash(newMember.password);
|
||||
newMember.password = hash
|
||||
newMember.joined = global.currentTime()
|
||||
newMember.id = this.indices[1] - 1
|
||||
this.save(newMember)
|
||||
|
||||
try {
|
||||
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) {
|
||||
|
||||
@@ -13,7 +13,8 @@ export default class Network {
|
||||
name: z.string(),
|
||||
apps: z.array(z.string()),
|
||||
logo: z.string(),
|
||||
abbreviation: z.string()
|
||||
abbreviation: z.string(),
|
||||
created: z.string()
|
||||
})
|
||||
.strict()
|
||||
|
||||
|
||||
@@ -79,8 +79,9 @@ class Server {
|
||||
}
|
||||
|
||||
newUserSubmission = async (req, res) => {
|
||||
const { network } = req.query;
|
||||
try {
|
||||
await db.members.add(req.body)
|
||||
await db.members.add(req.body, network)
|
||||
global.db.saveData()
|
||||
return res.status(200).json({});
|
||||
} catch(e) {
|
||||
|
||||
Reference in New Issue
Block a user