From 66d6168a31f32b91031e81aaae6dab7f0fe4d986 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=98=99=E2=97=A6=20The=20Tablet=20=E2=9D=80=20GamerGirla?= =?UTF-8?q?ndCo=20=E2=97=A6=E2=9D=A7?= Date: Tue, 3 Oct 2023 00:46:57 -0400 Subject: [PATCH] refactor(server/utils): add transformer for regular chapter objects this transforms a story object into a slightly different object to be served by the api. notable differences are the `totalChapters` field and the removal of the `chapters` array. `chapters` is then replaced by a `currentChapter` object, representing the currently "selected" chapter, with an added `text` field --- lib/server/dbHelpers/chapterTransformer.ts | 31 ++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 lib/server/dbHelpers/chapterTransformer.ts diff --git a/lib/server/dbHelpers/chapterTransformer.ts b/lib/server/dbHelpers/chapterTransformer.ts new file mode 100644 index 0000000..f10fb7c --- /dev/null +++ b/lib/server/dbHelpers/chapterTransformer.ts @@ -0,0 +1,31 @@ +import { H3Event, EventHandlerRequest } from "h3"; +import { GridFSBucket } from "mongodb"; +import mongoose, { Document } from "mongoose"; +import { stringifyStream } from "~/lib/functions"; +import { IStory } from "~/models/stories"; +import { IChapter } from "~/models/stories/chapter"; +import getBucket from "../storyHelpers/getBucket"; + +export default async function ( + story: Document & IStory, + event: H3Event, +) { + const finObj: any = story.toObject(); + const cloned: any & { chapters: IChapter[] } = { ...finObj }; + delete finObj.chapters; + const bucket = getBucket(); + let ds = bucket.openDownloadStreamByName( + `/stories/${cloned.chapters[event.context.chapterIndex || 0].id}.txt`, + ); + let stream = await stringifyStream(ds); + finObj.currentChapter = { + ...cloned.chapters[event.context.chapterIndex || 0], + text: stream + .replace(/\n/g, "
") + .replace(/

/gm, "

") + .replace(/

 <\/p>/gm, "") + .replace(/

<\/p>/gm, ""), + }; + finObj.totalChapters = story.chapters.length; + return finObj; +}