diff --git a/src/pages/room/[id].tsx b/src/pages/room/[id].tsx index 748a851..401e339 100644 --- a/src/pages/room/[id].tsx +++ b/src/pages/room/[id].tsx @@ -121,6 +121,8 @@ const RoomBody: React.FC = () => { useEffect(() => { window.addEventListener("beforeunload", () => channel.presence.leave()); return () => { + localStorage.removeItem(`${roomId}_story_name`); + localStorage.removeItem(`${roomId}_room_scale`); window.removeEventListener("beforeunload", () => channel.presence.leave() ); @@ -131,8 +133,16 @@ const RoomBody: React.FC = () => { // Init story name useEffect(() => { if (sessionData && roomFromDb) { - setStoryNameText(roomFromDb.storyName || ""); - setRoomScale(roomFromDb.scale || "ERROR"); + setStoryNameText( + localStorage.getItem(`${roomId}_story_name`) || + roomFromDb.storyName || + "" + ); + setRoomScale( + localStorage.getItem(`${roomId}_room_scale`) || + roomFromDb.scale || + "ERROR" + ); } }, [roomFromDb, sessionData]); @@ -367,7 +377,13 @@ const RoomBody: React.FC = () => { placeholder="Scale (Comma Separated)" className="input input-bordered m-auto" value={roomScale} - onChange={(event) => setRoomScale(event.target.value)} + onChange={(event) => { + setRoomScale(event.target.value); + localStorage.setItem( + `${roomId}_room_scale`, + event.target.value + ); + }} /> @@ -377,7 +393,13 @@ const RoomBody: React.FC = () => { placeholder="Story Name" className="input input-bordered m-auto" value={storyNameText} - onChange={(event) => setStoryNameText(event.target.value)} + onChange={(event) => { + setStoryNameText(event.target.value); + localStorage.setItem( + `${roomId}_story_name`, + event.target.value + ); + }} />
diff --git a/src/server/api/routers/vote.ts b/src/server/api/routers/vote.ts index 3c49f60..7264fbc 100644 --- a/src/server/api/routers/vote.ts +++ b/src/server/api/routers/vote.ts @@ -9,6 +9,7 @@ import { deleteFromCache, } from "redicache-ts"; import { env } from "~/env.mjs"; +import { Vote } from "@prisma/client"; const client = cacheClient(env.REDIS_URL); @@ -36,6 +37,35 @@ export const voteRouter = createTRPCRouter({ return votesCount; } }), + getAllByRoomId: protectedProcedure + .input(z.object({ roomId: z.string() })) + .query(async ({ ctx, input }) => { + const cachedResult = await fetchFromCache( + client, + env.APP_ENV, + `kv_votes_${input.roomId}` + ); + + if (cachedResult) { + return cachedResult; + } else { + const votesByRoomId = await ctx.prisma.vote.findMany({ + where: { + roomId: input.roomId, + }, + }); + + await writeToCache( + client, + env.APP_ENV, + `kv_votes_${input.roomId}`, + JSON.stringify(votesByRoomId), + 69 + ); + + return votesByRoomId; + } + }), set: protectedProcedure .input(z.object({ value: z.string(), roomId: z.string() })) .mutation(async ({ ctx, input }) => { @@ -71,6 +101,7 @@ export const voteRouter = createTRPCRouter({ if (vote) { await deleteFromCache(client, env.APP_ENV, `kv_votecount_admin`); + await deleteFromCache(client, env.APP_ENV, `kv_votes_${input.roomId}`); await publishToChannel(`${vote.roomId}`, "VOTE_UPDATE", "UPDATE"); }