From 1f0c1d50339af3ca0c282c38aa17be67ad7055b9 Mon Sep 17 00:00:00 2001 From: SrGooglo Date: Thu, 24 Apr 2025 06:10:50 +0000 Subject: [PATCH] Fix websocket to websockets global variable references to support ng --- .../posts/classes/posts/methods/create.js | 8 ++- .../posts/classes/posts/methods/delete.js | 4 +- .../classes/posts/methods/deletePollVote.js | 46 ++++++------ .../posts/classes/posts/methods/update.js | 4 +- .../posts/classes/posts/methods/votePoll.js | 2 +- packages/server/services/posts/log.txt | 0 .../server/services/posts/posts.service.js | 13 ++-- .../posts/routes/posts/[post_id]/data/get.js | 18 ++--- .../posts/routes/posts/[post_id]/delete.js | 41 +++++------ .../routes/posts/[post_id]/replies/get.js | 20 +++--- .../posts/[post_id]/toggle_like/post.js | 20 +++--- .../posts/[post_id]/toggle_save/post.js | 20 +++--- .../routes/posts/[post_id]/update/put.js | 2 +- .../[post_id]/vote_poll/[option_id]/delete.js | 20 +++--- .../[post_id]/vote_poll/[option_id]/post.js | 20 +++--- .../posts/routes/posts/feed/global/get.js | 26 +++---- .../posts/routes/posts/feed/timeline/get.js | 26 +++---- .../services/posts/routes/posts/liked/get.js | 18 ++--- .../services/posts/routes/posts/new/post.js | 2 +- .../services/posts/routes/posts/saved/get.js | 18 ++--- .../routes/posts/trending/[trending]/get.js | 2 +- .../posts/routes/posts/trendings/get.js | 72 +++++++++---------- .../posts/routes/posts/user/[user_id]/get.js | 20 +++--- 23 files changed, 214 insertions(+), 208 deletions(-) create mode 100644 packages/server/services/posts/log.txt diff --git a/packages/server/services/posts/classes/posts/methods/create.js b/packages/server/services/posts/classes/posts/methods/create.js index 0b91c36f..a469a177 100644 --- a/packages/server/services/posts/classes/posts/methods/create.js +++ b/packages/server/services/posts/classes/posts/methods/create.js @@ -89,11 +89,15 @@ export default async (payload = {}, req) => { // broadcast post to all users if (visibility === "public") { - global.websocket.senders.toTopic("realtime:feed", "post:new", result[0]) + global.websockets.senders.toTopic( + "realtime:feed", + "post:new", + result[0], + ) } if (visibility === "private") { - const userSockets = await global.websocket.find.clientsByUserId( + const userSockets = await global.websockets.find.clientsByUserId( post.user_id, ) diff --git a/packages/server/services/posts/classes/posts/methods/delete.js b/packages/server/services/posts/classes/posts/methods/delete.js index 4895be6f..246b166c 100644 --- a/packages/server/services/posts/classes/posts/methods/delete.js +++ b/packages/server/services/posts/classes/posts/methods/delete.js @@ -42,7 +42,7 @@ export default async (payload = {}) => { // broadcast post to all users if (post.visibility === "public") { - global.websocket.senders.toTopic( + global.websockets.senders.toTopic( "realtime:feed", "post:delete", post_id, @@ -50,7 +50,7 @@ export default async (payload = {}) => { } if (post.visibility === "private") { - const userSockets = await global.websocket.find.clientsByUserId( + const userSockets = await global.websockets.find.clientsByUserId( post.user_id, ) diff --git a/packages/server/services/posts/classes/posts/methods/deletePollVote.js b/packages/server/services/posts/classes/posts/methods/deletePollVote.js index 05125a2c..182a80f4 100644 --- a/packages/server/services/posts/classes/posts/methods/deletePollVote.js +++ b/packages/server/services/posts/classes/posts/methods/deletePollVote.js @@ -1,33 +1,33 @@ import { VotePoll } from "@db_models" export default async (payload = {}) => { - if (!payload.user_id) { - throw new OperationError(400, "Missing user_id") - } + if (!payload.user_id) { + throw new OperationError(400, "Missing user_id") + } - if (!payload.post_id) { - throw new OperationError(400, "Missing post_id") - } + if (!payload.post_id) { + throw new OperationError(400, "Missing post_id") + } - if (!payload.option_id) { - throw new OperationError(400, "Missing option_id") - } + if (!payload.option_id) { + throw new OperationError(400, "Missing option_id") + } - let vote = await VotePoll.find({ - user_id: payload.user_id, - post_id: payload.post_id, - option_id: payload.option_id, - }) + let vote = await VotePoll.find({ + user_id: payload.user_id, + post_id: payload.post_id, + option_id: payload.option_id, + }) - if (!vote) { - throw new OperationError(404, "Poll vote not found") - } + if (!vote) { + throw new OperationError(404, "Poll vote not found") + } - await VotePoll.deleteOne({ - _id: vote._id - }) + await VotePoll.deleteOne({ + _id: vote._id, + }) - global.websocket.io.of("/").emit(`post.poll.vote.deleted`, vote) + global.websockets.io.of("/").emit(`post.poll.vote.deleted`, vote) - return vote -} \ No newline at end of file + return vote +} diff --git a/packages/server/services/posts/classes/posts/methods/update.js b/packages/server/services/posts/classes/posts/methods/update.js index 26e3b891..ccb94b31 100644 --- a/packages/server/services/posts/classes/posts/methods/update.js +++ b/packages/server/services/posts/classes/posts/methods/update.js @@ -37,7 +37,7 @@ export default async (post_id, update) => { }) if (post.visibility === "public") { - global.websocket.senders.toTopic( + global.websockets.senders.toTopic( "realtime:feed", `post:update`, result[0], @@ -45,7 +45,7 @@ export default async (post_id, update) => { } if (post.visibility === "private") { - const userSockets = await global.websocket.find.clientsByUserId( + const userSockets = await global.websockets.find.clientsByUserId( post.user_id, ) diff --git a/packages/server/services/posts/classes/posts/methods/votePoll.js b/packages/server/services/posts/classes/posts/methods/votePoll.js index 61290fcc..6660e721 100644 --- a/packages/server/services/posts/classes/posts/methods/votePoll.js +++ b/packages/server/services/posts/classes/posts/methods/votePoll.js @@ -51,7 +51,7 @@ export default async (payload = {}) => { post = (await stage({ posts: post, for_user_id: payload.user_id }))[0] if (post.visibility === "public") { - global.websocket.senders.toTopic("realtime:feed", `post:update`, post) + global.websockets.senders.toTopic("realtime:feed", `post:update`, post) } return { diff --git a/packages/server/services/posts/log.txt b/packages/server/services/posts/log.txt new file mode 100644 index 00000000..e69de29b diff --git a/packages/server/services/posts/posts.service.js b/packages/server/services/posts/posts.service.js index 90e9ae25..013ca605 100644 --- a/packages/server/services/posts/posts.service.js +++ b/packages/server/services/posts/posts.service.js @@ -1,5 +1,5 @@ -//import { Server } from "../../../../linebridge/server/src" -import { Server } from "linebridge" +import { Server } from "../../../../linebridge/server/src" +//import { Server } from "linebridge" import DbManager from "@shared-classes/DbManager" import RedisClient from "@shared-classes/RedisClient" @@ -10,10 +10,11 @@ import SharedMiddlewares from "@shared-middlewares" export default class API extends Server { static refName = "posts" - static useEngine = "hyper-express-ng" - static enableWebsockets = true - - static listen_port = process.env.HTTP_LISTEN_PORT ?? 3001 + //static useEngine = "hyper-express-ng" + static websockets = true + static listenPort = process.env.HTTP_LISTEN_PORT ?? 3001 + // static useMiddlewares = ["logs"] + static bypassCors = true middlewares = { ...SharedMiddlewares, diff --git a/packages/server/services/posts/routes/posts/[post_id]/data/get.js b/packages/server/services/posts/routes/posts/[post_id]/data/get.js index 760b6b82..43e6e4bd 100644 --- a/packages/server/services/posts/routes/posts/[post_id]/data/get.js +++ b/packages/server/services/posts/routes/posts/[post_id]/data/get.js @@ -1,13 +1,13 @@ import Posts from "@classes/posts" export default { - middlewares: ["withOptionalAuthentication"], - fn: async (req, res) => { - const result = await Posts.data({ - post_id: req.params.post_id, - for_user_id: req.auth?.session?.user_id, - }) + useMiddlewares: ["withOptionalAuthentication"], + fn: async (req, res) => { + const result = await Posts.data({ + post_id: req.params.post_id, + for_user_id: req.auth?.session?.user_id, + }) - return result - } -} \ No newline at end of file + return result + }, +} diff --git a/packages/server/services/posts/routes/posts/[post_id]/delete.js b/packages/server/services/posts/routes/posts/[post_id]/delete.js index fe1315c5..968933e8 100644 --- a/packages/server/services/posts/routes/posts/[post_id]/delete.js +++ b/packages/server/services/posts/routes/posts/[post_id]/delete.js @@ -1,27 +1,28 @@ import PostClass from "@classes/posts" import { Post } from "@db_models" + export default { - middlewares: ["withAuthentication"], - fn: async (req, res) => { - // check if post is owned or if is admin - const post = await Post.findById(req.params.post_id).catch(() => { - return false - }) + useMiddlewares: ["withAuthentication"], + fn: async (req, res) => { + // check if post is owned or if is admin + const post = await Post.findById(req.params.post_id).catch(() => { + return false + }) - if (!post) { - throw new OperationError(404, "Post not found") - } + if (!post) { + throw new OperationError(404, "Post not found") + } - const user = await req.auth.user() + const user = await req.auth.user() - if (post.user_id.toString() !== user._id.toString()) { - if (!user.roles.includes("admin")) { - throw new OperationError(403, "You cannot delete this post") - } - } + if (post.user_id.toString() !== user._id.toString()) { + if (!user.roles.includes("admin")) { + throw new OperationError(403, "You cannot delete this post") + } + } - return await PostClass.delete({ - post_id: req.params.post_id - }) - } -} \ No newline at end of file + return await PostClass.delete({ + post_id: req.params.post_id, + }) + }, +} diff --git a/packages/server/services/posts/routes/posts/[post_id]/replies/get.js b/packages/server/services/posts/routes/posts/[post_id]/replies/get.js index 059837e5..1464df63 100644 --- a/packages/server/services/posts/routes/posts/[post_id]/replies/get.js +++ b/packages/server/services/posts/routes/posts/[post_id]/replies/get.js @@ -1,13 +1,13 @@ import PostClass from "@classes/posts" export default { - middlewares: ["withOptionalAuthentication"], - fn: async (req) => { - return await PostClass.replies({ - post_id: req.params.post_id, - for_user_id: req.auth?.session.user_id, - trim: req.query.trim, - limit: req.query.limit - }) - } -} \ No newline at end of file + useMiddlewares: ["withOptionalAuthentication"], + fn: async (req) => { + return await PostClass.replies({ + post_id: req.params.post_id, + for_user_id: req.auth?.session.user_id, + trim: req.query.trim, + limit: req.query.limit, + }) + }, +} diff --git a/packages/server/services/posts/routes/posts/[post_id]/toggle_like/post.js b/packages/server/services/posts/routes/posts/[post_id]/toggle_like/post.js index 5b80505f..ec766a59 100644 --- a/packages/server/services/posts/routes/posts/[post_id]/toggle_like/post.js +++ b/packages/server/services/posts/routes/posts/[post_id]/toggle_like/post.js @@ -1,14 +1,14 @@ import Posts from "@classes/posts" export default { - middlewares: ["withAuthentication"], - fn: async (req, res) => { - const result = await Posts.toggleLike({ - post_id: req.params.post_id, - user_id: req.auth.session.user_id, - to: req.body?.to, - }) + useMiddlewares: ["withAuthentication"], + fn: async (req, res) => { + const result = await Posts.toggleLike({ + post_id: req.params.post_id, + user_id: req.auth.session.user_id, + to: req.body?.to, + }) - return result - } -} \ No newline at end of file + return result + }, +} diff --git a/packages/server/services/posts/routes/posts/[post_id]/toggle_save/post.js b/packages/server/services/posts/routes/posts/[post_id]/toggle_save/post.js index 2bf106f7..84692f10 100644 --- a/packages/server/services/posts/routes/posts/[post_id]/toggle_save/post.js +++ b/packages/server/services/posts/routes/posts/[post_id]/toggle_save/post.js @@ -1,14 +1,14 @@ import Posts from "@classes/posts" export default { - middlewares: ["withAuthentication"], - fn: async (req, res) => { - const result = await Posts.toggleSave({ - post_id: req.params.post_id, - user_id: req.auth.session.user_id, - to: req.body?.to, - }) + useMiddlewares: ["withAuthentication"], + fn: async (req, res) => { + const result = await Posts.toggleSave({ + post_id: req.params.post_id, + user_id: req.auth.session.user_id, + to: req.body?.to, + }) - return result - } -} \ No newline at end of file + return result + }, +} diff --git a/packages/server/services/posts/routes/posts/[post_id]/update/put.js b/packages/server/services/posts/routes/posts/[post_id]/update/put.js index 1cdd9439..c8449589 100644 --- a/packages/server/services/posts/routes/posts/[post_id]/update/put.js +++ b/packages/server/services/posts/routes/posts/[post_id]/update/put.js @@ -15,7 +15,7 @@ const MaxStringsLengths = { } export default { - middlewares: ["withAuthentication"], + useMiddlewares: ["withAuthentication"], fn: async (req) => { let update = {} diff --git a/packages/server/services/posts/routes/posts/[post_id]/vote_poll/[option_id]/delete.js b/packages/server/services/posts/routes/posts/[post_id]/vote_poll/[option_id]/delete.js index 0f70d3a6..73d02493 100644 --- a/packages/server/services/posts/routes/posts/[post_id]/vote_poll/[option_id]/delete.js +++ b/packages/server/services/posts/routes/posts/[post_id]/vote_poll/[option_id]/delete.js @@ -1,14 +1,14 @@ import Posts from "@classes/posts" export default { - middlewares: ["withAuthentication"], - fn: async (req) => { - const result = await Posts.deleteVotePoll({ - user_id: req.auth.session.user_id, - post_id: req.params.post_id, - option_id: req.params.option_id, - }) + useMiddlewares: ["withAuthentication"], + fn: async (req) => { + const result = await Posts.deleteVotePoll({ + user_id: req.auth.session.user_id, + post_id: req.params.post_id, + option_id: req.params.option_id, + }) - return result - } -} \ No newline at end of file + return result + }, +} diff --git a/packages/server/services/posts/routes/posts/[post_id]/vote_poll/[option_id]/post.js b/packages/server/services/posts/routes/posts/[post_id]/vote_poll/[option_id]/post.js index f4fe61ac..c53495dc 100644 --- a/packages/server/services/posts/routes/posts/[post_id]/vote_poll/[option_id]/post.js +++ b/packages/server/services/posts/routes/posts/[post_id]/vote_poll/[option_id]/post.js @@ -1,14 +1,14 @@ import Posts from "@classes/posts" export default { - middlewares: ["withAuthentication"], - fn: async (req) => { - const result = await Posts.votePoll({ - user_id: req.auth.session.user_id, - post_id: req.params.post_id, - option_id: req.params.option_id, - }) + useMiddlewares: ["withAuthentication"], + fn: async (req) => { + const result = await Posts.votePoll({ + user_id: req.auth.session.user_id, + post_id: req.params.post_id, + option_id: req.params.option_id, + }) - return result - } -} \ No newline at end of file + return result + }, +} diff --git a/packages/server/services/posts/routes/posts/feed/global/get.js b/packages/server/services/posts/routes/posts/feed/global/get.js index 102eec4a..52eebad2 100644 --- a/packages/server/services/posts/routes/posts/feed/global/get.js +++ b/packages/server/services/posts/routes/posts/feed/global/get.js @@ -1,19 +1,19 @@ import Posts from "@classes/posts" export default { - middlewares: ["withOptionalAuthentication"], - fn: async (req, res) => { - const payload = { - limit: req.query?.limit, - trim: req.query?.trim, - } + useMiddlewares: ["withOptionalAuthentication"], + fn: async (req, res) => { + const payload = { + limit: req.query?.limit, + trim: req.query?.trim, + } - if (req.auth) { - payload.user_id = req.auth.session.user_id - } + if (req.auth) { + payload.user_id = req.auth.session.user_id + } - const result = await Posts.globalTimeline(payload) + const result = await Posts.globalTimeline(payload) - return result - } -} \ No newline at end of file + return result + }, +} diff --git a/packages/server/services/posts/routes/posts/feed/timeline/get.js b/packages/server/services/posts/routes/posts/feed/timeline/get.js index a5bfaa19..99d96263 100644 --- a/packages/server/services/posts/routes/posts/feed/timeline/get.js +++ b/packages/server/services/posts/routes/posts/feed/timeline/get.js @@ -1,19 +1,19 @@ import Posts from "@classes/posts" export default { - middlewares: ["withOptionalAuthentication"], - fn: async (req, res) => { - const payload = { - limit: req.query?.limit, - trim: req.query?.trim, - } + useMiddlewares: ["withOptionalAuthentication"], + fn: async (req, res) => { + const payload = { + limit: req.query?.limit, + trim: req.query?.trim, + } - if (req.auth) { - payload.user_id = req.auth.session.user_id - } + if (req.auth) { + payload.user_id = req.auth.session.user_id + } - const result = await Posts.timeline(payload) + const result = await Posts.timeline(payload) - return result - } -} \ No newline at end of file + return result + }, +} diff --git a/packages/server/services/posts/routes/posts/liked/get.js b/packages/server/services/posts/routes/posts/liked/get.js index e70c49c3..a6f1540c 100644 --- a/packages/server/services/posts/routes/posts/liked/get.js +++ b/packages/server/services/posts/routes/posts/liked/get.js @@ -1,12 +1,12 @@ import Posts from "@classes/posts" export default { - middlewares: ["withAuthentication"], - fn: async (req) => { - return await Posts.getLiked({ - trim: req.query.trim, - limit: req.query.limit, - user_id: req.auth.session.user_id - }) - } -} \ No newline at end of file + useMiddlewares: ["withAuthentication"], + fn: async (req) => { + return await Posts.getLiked({ + trim: req.query.trim, + limit: req.query.limit, + user_id: req.auth.session.user_id, + }) + }, +} diff --git a/packages/server/services/posts/routes/posts/new/post.js b/packages/server/services/posts/routes/posts/new/post.js index 24739265..bb6357c2 100644 --- a/packages/server/services/posts/routes/posts/new/post.js +++ b/packages/server/services/posts/routes/posts/new/post.js @@ -1,7 +1,7 @@ import Posts from "@classes/posts" export default { - middlewares: ["withAuthentication"], + useMiddlewares: ["withAuthentication"], fn: async (req, res) => { const result = await Posts.create( { diff --git a/packages/server/services/posts/routes/posts/saved/get.js b/packages/server/services/posts/routes/posts/saved/get.js index 02391afe..a4c804e6 100644 --- a/packages/server/services/posts/routes/posts/saved/get.js +++ b/packages/server/services/posts/routes/posts/saved/get.js @@ -1,12 +1,12 @@ import Posts from "@classes/posts" export default { - middlewares: ["withAuthentication"], - fn: async (req) => { - return await Posts.getSaved({ - trim: req.query.trim, - limit: req.query.limit, - user_id: req.auth.session.user_id - }) - } -} \ No newline at end of file + useMiddlewares: ["withAuthentication"], + fn: async (req) => { + return await Posts.getSaved({ + trim: req.query.trim, + limit: req.query.limit, + user_id: req.auth.session.user_id, + }) + }, +} diff --git a/packages/server/services/posts/routes/posts/trending/[trending]/get.js b/packages/server/services/posts/routes/posts/trending/[trending]/get.js index 753b9302..a6836da6 100644 --- a/packages/server/services/posts/routes/posts/trending/[trending]/get.js +++ b/packages/server/services/posts/routes/posts/trending/[trending]/get.js @@ -2,7 +2,7 @@ import { Post } from "@db_models" import stage from "@classes/posts/methods/stage" export default { - middlewares: ["withOptionalAuthentication"], + useMiddlewares: ["withOptionalAuthentication"], fn: async (req) => { const { limit, trim } = req.query diff --git a/packages/server/services/posts/routes/posts/trendings/get.js b/packages/server/services/posts/routes/posts/trendings/get.js index 1301f38b..b8b76ee7 100644 --- a/packages/server/services/posts/routes/posts/trendings/get.js +++ b/packages/server/services/posts/routes/posts/trendings/get.js @@ -5,41 +5,41 @@ const maxDaysOld = 30 const maxHashtags = 5 export default async (req) => { - // fetch all posts that contain in message an #, with a maximun of 5 diferent hashtags - const startDate = DateTime.local().minus({ days: maxDaysOld }).toISO() + // fetch all posts that contain in message an #, with a maximun of 5 diferent hashtags + const startDate = DateTime.local().minus({ days: maxDaysOld }).toISO() - const trendings = await Post.aggregate([ - { - $match: { - message: { $regex: /#/gi }, - created_at: { $gte: startDate } - } - }, - { - $project: { - hashtags: { - $regexFindAll: { - input: "$message", - regex: /#[a-zA-Z0-9_]+/g - } - } - } - }, - { $unwind: "$hashtags" }, - { - $project: { - hashtag: { $substr: ["$hashtags.match", 1, -1] } - } - }, - { - $group: { - _id: "$hashtag", - count: { $sum: 1 } - } - }, - { $sort: { count: -1 } }, - { $limit: maxHashtags } - ]) + const trendings = await Post.aggregate([ + { + $match: { + message: { $regex: /#/gi }, + created_at: { $gte: startDate }, + }, + }, + { + $project: { + hashtags: { + $regexFindAll: { + input: "$message", + regex: /#[a-zA-Z0-9_]+/g, + }, + }, + }, + }, + { $unwind: "$hashtags" }, + { + $project: { + hashtag: { $substr: ["$hashtags.match", 1, -1] }, + }, + }, + { + $group: { + _id: "$hashtag", + count: { $sum: 1 }, + }, + }, + { $sort: { count: -1 } }, + { $limit: maxHashtags }, + ]) - return trendings.map(({ _id, count }) => ({ hashtag: _id, count })); -} \ No newline at end of file + return trendings.map(({ _id, count }) => ({ hashtag: _id, count })) +} diff --git a/packages/server/services/posts/routes/posts/user/[user_id]/get.js b/packages/server/services/posts/routes/posts/user/[user_id]/get.js index 61c102ec..f29b3986 100644 --- a/packages/server/services/posts/routes/posts/user/[user_id]/get.js +++ b/packages/server/services/posts/routes/posts/user/[user_id]/get.js @@ -1,13 +1,13 @@ import Posts from "@classes/posts" export default { - middlewares: ["withOptionalAuthentication"], - fn: async (req, res) => { - return await Posts.fromUserId({ - skip: req.query.skip, - trim: req.query.trim, - user_id: req.params.user_id, - for_user_id: req.auth?.session?.user_id, - }) - } -} \ No newline at end of file + useMiddlewares: ["withOptionalAuthentication"], + fn: async (req, res) => { + return await Posts.fromUserId({ + skip: req.query.skip, + trim: req.query.trim, + user_id: req.params.user_id, + for_user_id: req.auth?.session?.user_id, + }) + }, +}