Better error handling

This commit is contained in:
Atridad Lahiji 2023-11-22 16:00:27 -07:00
parent f70a6393eb
commit df66277d30
No known key found for this signature in database
4 changed files with 44 additions and 9 deletions

View file

@ -26,6 +26,17 @@ export async function loader({ context, params, request }: LoaderFunctionArgs) {
}); });
} }
const room = await db.query.rooms.findFirst({
where: eq(rooms.id, roomId),
});
if (!room) {
return json("Room is Missing!", {
status: 404,
statusText: "BAD REQUEST!",
});
}
return eventStream(request.signal, function setup(send) { return eventStream(request.signal, function setup(send) {
async function handler() { async function handler() {
const roomFromDb = await db.query.rooms.findFirst({ const roomFromDb = await db.query.rooms.findFirst({

View file

@ -4,7 +4,7 @@ import { and, eq } from "drizzle-orm";
import { eventStream } from "remix-utils/sse/server"; import { eventStream } from "remix-utils/sse/server";
import { db } from "~/services/db.server"; import { db } from "~/services/db.server";
import { emitter } from "~/services/emitter.server"; import { emitter } from "~/services/emitter.server";
import { presence } from "~/services/schema"; import { presence, rooms } from "~/services/schema";
import { createId } from "@paralleldrive/cuid2"; import { createId } from "@paralleldrive/cuid2";
export async function loader({ context, params, request }: LoaderFunctionArgs) { export async function loader({ context, params, request }: LoaderFunctionArgs) {
@ -26,6 +26,17 @@ export async function loader({ context, params, request }: LoaderFunctionArgs) {
}); });
} }
const room = await db.query.rooms.findFirst({
where: eq(rooms.id, roomId),
});
if (!room) {
return json("Room is Missing!", {
status: 404,
statusText: "BAD REQUEST!",
});
}
const name = sessionClaims.name as string; const name = sessionClaims.name as string;
const image = sessionClaims.image as string; const image = sessionClaims.image as string;
const metadata = sessionClaims.metadata as { const metadata = sessionClaims.metadata as {

View file

@ -4,7 +4,7 @@ import { eq } from "drizzle-orm";
import { eventStream } from "remix-utils/sse/server"; import { eventStream } from "remix-utils/sse/server";
import { db } from "~/services/db.server"; import { db } from "~/services/db.server";
import { emitter } from "~/services/emitter.server"; import { emitter } from "~/services/emitter.server";
import { votes } from "~/services/schema"; import { rooms, votes } from "~/services/schema";
// Get Room List // Get Room List
export async function loader({ context, params, request }: LoaderFunctionArgs) { export async function loader({ context, params, request }: LoaderFunctionArgs) {
@ -26,6 +26,17 @@ export async function loader({ context, params, request }: LoaderFunctionArgs) {
}); });
} }
const room = await db.query.rooms.findFirst({
where: eq(rooms.id, roomId),
});
if (!room) {
return json("Room is Missing!", {
status: 404,
statusText: "BAD REQUEST!",
});
}
return eventStream(request.signal, function setup(send) { return eventStream(request.signal, function setup(send) {
async function handler() { async function handler() {
const votesByRoomId = await db.query.votes.findMany({ const votesByRoomId = await db.query.votes.findMany({

View file

@ -47,7 +47,9 @@ export default function Room() {
event: `${user?.id}-${params.roomId}`, event: `${user?.id}-${params.roomId}`,
}); });
let roomFromDbParsed = JSON.parse(roomFromDb!) as RoomResponse | undefined; let roomFromDbParsed = (roomFromDb ? JSON.parse(roomFromDb!) : undefined) as
| RoomResponse
| undefined;
let votesFromDbParsed = JSON.parse(votesFromDb!) as VoteResponse | undefined; let votesFromDbParsed = JSON.parse(votesFromDb!) as VoteResponse | undefined;
let presenceDateParsed = JSON.parse(presenceData!) as let presenceDateParsed = JSON.parse(presenceData!) as
| PresenceItem[] | PresenceItem[]
@ -124,7 +126,7 @@ export default function Room() {
}; };
const downloadLogs = () => { const downloadLogs = () => {
if (roomFromDb && votesFromDb) { if (roomFromDbParsed && votesFromDbParsed) {
const jsonObject = roomFromDbParsed?.logs const jsonObject = roomFromDbParsed?.logs
.map((item) => { .map((item) => {
return { return {
@ -206,16 +208,16 @@ export default function Room() {
// UI // UI
// ================================= // =================================
// Room is loading // Room is loading
if (!roomFromDbParsed) { if (roomFromDbParsed === null) {
return <LoadingIndicator />; return <LoadingIndicator />;
// Room has been loaded // Room has been loaded
} else { } else {
return roomFromDb ? ( return roomFromDb ? (
<div className="flex flex-col gap-4 text-center justify-center items-center"> <div className="flex flex-col gap-4 text-center justify-center items-center">
<div className="text-2xl">{roomFromDbParsed.roomName}</div> <div className="text-2xl">{roomFromDbParsed?.roomName}</div>
<div className="flex flex-row flex-wrap text-center justify-center items-center gap-1 text-md"> <div className="flex flex-row flex-wrap text-center justify-center items-center gap-1 text-md">
<div>ID:</div> <div>ID:</div>
<div>{roomFromDbParsed.id}</div> <div>{roomFromDbParsed?.id}</div>
<button> <button>
{copied ? ( {copied ? (
@ -233,7 +235,7 @@ export default function Room() {
<div className="card card-compact bg-base-100 shadow-xl"> <div className="card card-compact bg-base-100 shadow-xl">
<div className="card-body"> <div className="card-body">
<h2 className="card-title mx-auto"> <h2 className="card-title mx-auto">
Story: {roomFromDbParsed.storyName} Story: {roomFromDbParsed?.storyName}
</h2> </h2>
<ul className="p-0 flex flex-row flex-wrap justify-center items-center text-ceter gap-4"> <ul className="p-0 flex flex-row flex-wrap justify-center items-center text-ceter gap-4">
@ -304,7 +306,7 @@ export default function Room() {
</ul> </ul>
<div className="join md:btn-group-horizontal mx-auto"> <div className="join md:btn-group-horizontal mx-auto">
{roomFromDbParsed.scale?.split(",").map((scaleItem, index) => { {roomFromDbParsed?.scale?.split(",").map((scaleItem, index) => {
return ( return (
<button <button
key={index} key={index}