Skip to content

Commit

Permalink
feat: ✨ changed error response to success flag (#134)
Browse files Browse the repository at this point in the history
  • Loading branch information
jordany33 authored Apr 24, 2024
1 parent f29fe67 commit 4bbd53d
Show file tree
Hide file tree
Showing 5 changed files with 12 additions and 11 deletions.
3 changes: 1 addition & 2 deletions apps/api/src/routes/v1/graphql/lib.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import type { BaseContext, HTTPGraphQLResponse } from "@apollo/server";
import type { IFieldResolver } from "@graphql-tools/utils";
import { isErrorResponse } from "@peterportal-api/types";
import type { RawResponse } from "@peterportal-api/types";
import { GraphQLError } from "graphql/error";

Expand Down Expand Up @@ -58,7 +57,7 @@ export const proxyRestApi =
};
});

if (isErrorResponse(data)) {
if (!data.success) {
throw new GraphQLError(data.message, {
extensions: {
code: data.error.toUpperCase().replace(" ", "_"),
Expand Down
8 changes: 4 additions & 4 deletions libs/lambda/src/response.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ export function createOKResult<T>(
): APIGatewayProxyResult {
const statusCode = 200;
const timestamp = createTimestamp();
const response: Response<T> = { statusCode, timestamp, requestId, payload };
const response: Response<T> = { statusCode, timestamp, requestId, payload, success: true };
const headers = { ...responseHeaders };

try {
Expand Down Expand Up @@ -89,12 +89,12 @@ export function createErrorResult(
e instanceof Error
? `${e.name}: ${e.message}`
: typeof e === "string"
? e
: "An unknown error has occurred. Please try again.";
? e
: "An unknown error has occurred. Please try again.";

const error = httpErrorCodes[statusCode as keyof typeof httpErrorCodes];

const body: ErrorResponse = { timestamp, requestId, statusCode, error, message };
const body: ErrorResponse = { timestamp, requestId, statusCode, error, message, success: false };

logger.error(`${body.statusCode} ${body.error}: ${body.message}`);

Expand Down
1 change: 0 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@
},
"packageManager": "[email protected]",
"engines": {
"node": "20",
"pnpm": "8"
}
}
6 changes: 5 additions & 1 deletion packages/types/types/response.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ export type Response<T> = BaseResponse & {
* The payload returned by the REST API.
*/
payload: T;

success: true;
};

/**
Expand All @@ -39,6 +41,8 @@ export type ErrorResponse = BaseResponse & {
* The detailed error message.
*/
message: string;

success: false;
};

/**
Expand All @@ -54,4 +58,4 @@ export type RawResponse<T> = Response<T> | ErrorResponse;
* ``ErrorResponse`` or a ``Response<T>``.
* @param r The object to test.
*/
export const isErrorResponse = <T>(r: RawResponse<T>): r is ErrorResponse => "error" in r;
export const isErrorResponse = <T>(r: RawResponse<T>): r is ErrorResponse => r.success == false;
5 changes: 2 additions & 3 deletions packages/websoc-fuzzy-search/setup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
import { normalize } from "node:path";
import { gzipSync } from "node:zlib";

import { isErrorResponse } from "@peterportal-api/types";
import type { Course, Instructor, RawResponse } from "@peterportal-api/types";
import fetch from "cross-fetch";
import pluralize from "pluralize";
Expand Down Expand Up @@ -219,7 +218,7 @@ async function main() {
console.time("Data fetched in");
const coursesRes = await fetch("https://api-next.peterportal.org/v1/rest/courses/all");
const coursesJson: RawResponse<Course[]> = await coursesRes.json();
if (isErrorResponse(coursesJson)) throw new Error("Could not fetch courses from API.");
if (!coursesJson.success) throw new Error("Could not fetch courses from API.");
coursesJson.payload.forEach(
({ id, department, departmentName, courseNumber, geList, courseLevel, school, title }) => {
d.courses[id] = {
Expand All @@ -235,7 +234,7 @@ async function main() {
);
const instructorsRes = await fetch("https://api-next.peterportal.org/v1/rest/instructors/all");
const instructorsJson: RawResponse<Instructor[]> = await instructorsRes.json();
if (isErrorResponse(instructorsJson)) throw new Error("Could not fetch instructors from API.");
if (!instructorsJson.success) throw new Error("Could not fetch instructors from API.");
instructorsJson.payload.forEach(({ ucinetid, shortenedName, name, schools, department }) => {
d.instructors[ucinetid] = {
ucinetid,
Expand Down

0 comments on commit 4bbd53d

Please sign in to comment.