- added all CRUD operations for Post model - add() also creates POST_BY_MEMBER and POST_FROM_NETWORK edges - delete() also deletes associated edges - delete() currently does not reallocate node/edge indices after deleting - will write the data to the db.json file and global.db.nodes
107 lines
3.0 KiB
JavaScript
107 lines
3.0 KiB
JavaScript
import { z } from 'zod';
|
|
|
|
const sendSchema = z.object({
|
|
forum: z.string(),
|
|
text: z.string(),
|
|
})
|
|
.strict()
|
|
|
|
const getSchema = z.object({
|
|
forum: z.string(),
|
|
by: z.string(),
|
|
authorId: z.number()
|
|
})
|
|
.strict()
|
|
|
|
const deleteSchema = z.object({
|
|
forum: z.string(),
|
|
id: z.number()
|
|
})
|
|
.strict()
|
|
|
|
const putSchema = z.object({
|
|
forum: z.string(),
|
|
id: z.number(),
|
|
text: z.string()
|
|
})
|
|
.strict()
|
|
|
|
export default class ForumHandler {
|
|
static async handleSend(msg, ws) {
|
|
try {
|
|
let postId = await global.db.posts.add(msg.text, msg.forum, ws.userEmail)
|
|
let newPost = global.db.posts.getByID(postId)
|
|
if (newPost) {
|
|
global.Socket.broadcast({
|
|
event: "new-post",
|
|
app: "FORUM",
|
|
forum: msg.forum,
|
|
msg: newPost
|
|
})
|
|
return {success: true}
|
|
} else {
|
|
return {success: false}
|
|
}
|
|
} catch(e) {
|
|
console.error(e)
|
|
}
|
|
}
|
|
|
|
static handleGet(msg) {
|
|
let data = global.db.posts.get(msg.forum, msg.by, msg.authorId)
|
|
return data
|
|
}
|
|
|
|
static async handleDelete(msg, ws) {
|
|
try {
|
|
await global.db.posts.delete(msg.id, msg.forum, ws.userEmail)
|
|
global.Socket.broadcast({
|
|
event: "deleted-post",
|
|
app: "FORUM",
|
|
forum: msg.forum,
|
|
msg: msg.id
|
|
})
|
|
return {success: true}
|
|
} catch(e) {
|
|
console.error(e)
|
|
return {success: false}
|
|
}
|
|
}
|
|
|
|
static async handlePut(msg, ws) {
|
|
try {
|
|
let editedPost = await global.db.posts.edit(msg.id, msg.text, ws.userEmail)
|
|
console.log(editedPost)
|
|
if (editedPost) {
|
|
global.Socket.broadcast({
|
|
event: "edited-post",
|
|
app: "FORUM",
|
|
forum: msg.forum,
|
|
msg: editedPost
|
|
})
|
|
}
|
|
return {success: true}
|
|
} catch(e) {
|
|
console.error(e)
|
|
return {success: false}
|
|
}
|
|
}
|
|
|
|
static async handle(operation, msg, ws) {
|
|
switch(operation) {
|
|
case "SEND":
|
|
if(!sendSchema.safeParse(msg).success) throw new Error("Incorrectly formatted Forum ws message!")
|
|
return await this.handleSend(msg, ws)
|
|
case "GET":
|
|
if(!getSchema.safeParse(msg).success) throw new Error("Incorrectly formatted Forum ws message!")
|
|
return this.handleGet(msg)
|
|
case "DELETE":
|
|
if(!deleteSchema.safeParse(msg).success) throw new Error("Incorrectly formatted Forum ws message!")
|
|
return this.handleDelete(msg, ws)
|
|
case "PUT":
|
|
if (!putSchema.safeParse(msg).success) throw new Error("Incorrectly formatted ws message!")
|
|
return this.handlePut(msg, ws)
|
|
}
|
|
|
|
}
|
|
} |