mirror of
https://github.com/rzmk/learnhouse.git
synced 2025-12-19 04:19:25 +00:00
fix: better error handling across the app
This commit is contained in:
parent
1ad8ee12b1
commit
186b0e8401
11 changed files with 66 additions and 96 deletions
|
|
@ -19,7 +19,7 @@ function ActivityPage(params: any) {
|
||||||
const orgslug = params.params.orgslug;
|
const orgslug = params.params.orgslug;
|
||||||
|
|
||||||
const { data: course, error: error_course } = useSWR(`${getAPIUrl()}courses/meta/course_${courseid}`, swrFetcher);
|
const { data: course, error: error_course } = useSWR(`${getAPIUrl()}courses/meta/course_${courseid}`, swrFetcher);
|
||||||
const { data: activity, error: error_activity } = useSWR(`${getAPIUrl()}trail/org_slug/${orgslug}/trail`, swrFetcher);
|
const { data: activity, error: error_activity } = useSWR(`${getAPIUrl()}activities/activity_${activityid}`, swrFetcher);
|
||||||
|
|
||||||
|
|
||||||
async function markActivityAsCompleteFront() {
|
async function markActivityAsCompleteFront() {
|
||||||
|
|
@ -31,7 +31,7 @@ function ActivityPage(params: any) {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{error_course && <p>Failed to load</p>}
|
{error_course && <p>Failed to load</p>}
|
||||||
{!course || !activity ? (
|
{!course && !activity ? (
|
||||||
<div>Loading...</div>
|
<div>Loading...</div>
|
||||||
) : (
|
) : (
|
||||||
<ActivityLayout>
|
<ActivityLayout>
|
||||||
|
|
@ -95,9 +95,8 @@ function ActivityPage(params: any) {
|
||||||
)}
|
)}
|
||||||
</ActivityMarkerWrapper>
|
</ActivityMarkerWrapper>
|
||||||
</CourseContent>
|
</CourseContent>
|
||||||
) : (
|
) : (<div></div>)}
|
||||||
<div>Loading...</div>
|
{error_activity && <p>Failed to load {error_activity.message}</p>}
|
||||||
)}
|
|
||||||
</ActivityLayout>
|
</ActivityLayout>
|
||||||
)}
|
)}
|
||||||
</>
|
</>
|
||||||
|
|
|
||||||
|
|
@ -5,15 +5,10 @@ export async function createActivity(data: any, chapter_id: any, org_id: any) {
|
||||||
data.content = {};
|
data.content = {};
|
||||||
// remove chapter_id from data
|
// remove chapter_id from data
|
||||||
delete data.chapterId;
|
delete data.chapterId;
|
||||||
|
|
||||||
|
|
||||||
const result: any = await fetch(`${getAPIUrl()}activities/?coursechapter_id=${chapter_id}&org_id=${org_id}`, RequestBody("POST", data))
|
const result = await fetch(`${getAPIUrl()}activities/?coursechapter_id=${chapter_id}&org_id=${org_id}`, RequestBody("POST", data));
|
||||||
.then((result) => result.json())
|
const res = await result.json();
|
||||||
.catch((error) => console.log("error", error));
|
return res;
|
||||||
|
|
||||||
console.log("result", result);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function createFileActivity(file: File, type: string, data: any, chapter_id: any) {
|
export async function createFileActivity(file: File, type: string, data: any, chapter_id: any) {
|
||||||
|
|
@ -29,27 +24,19 @@ export async function createFileActivity(file: File, type: string, data: any, ch
|
||||||
endpoint = `${getAPIUrl()}activities/video`;
|
endpoint = `${getAPIUrl()}activities/video`;
|
||||||
}
|
}
|
||||||
|
|
||||||
const result: any = await fetch(endpoint, RequestBodyForm("POST", formData))
|
const result: any = await fetch(endpoint, RequestBodyForm("POST", formData));
|
||||||
.then((result) => result.json())
|
const res = await result.json();
|
||||||
.catch((error) => console.log("error", error));
|
return res;
|
||||||
|
|
||||||
console.log("result", result);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getActivity(activity_id: any) {
|
export async function getActivity(activity_id: any) {
|
||||||
const result: any = await fetch(`${getAPIUrl()}activities/${activity_id}`, RequestBody("GET", null))
|
const result = await fetch(`${getAPIUrl()}activities/${activity_id}`, RequestBody("GET", null));
|
||||||
.then((result) => result.json())
|
const res = await result.json();
|
||||||
.catch((error) => console.log("error", error));
|
return res;
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function updateActivity(data: any, activity_id: any) {
|
export async function updateActivity(data: any, activity_id: any) {
|
||||||
const result: any = await fetch(`${getAPIUrl()}activities/${activity_id}`, RequestBody("PUT", data))
|
const result = await fetch(`${getAPIUrl()}activities/${activity_id}`, RequestBody("PUT", data));
|
||||||
.then((result) => result.json())
|
const res = await result.json();
|
||||||
.catch((error) => console.log("error", error));
|
return res;
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { RequestBody } from "@services/utils/ts/requests";
|
import { RequestBody, errorHandling } from "@services/utils/ts/requests";
|
||||||
import { getAPIUrl } from "@services/config/config";
|
import { getAPIUrl } from "@services/config/config";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -8,21 +8,18 @@ import { getAPIUrl } from "@services/config/config";
|
||||||
|
|
||||||
export async function startCourse(course_id: string, org_slug: string) {
|
export async function startCourse(course_id: string, org_slug: string) {
|
||||||
const result: any = await fetch(`${getAPIUrl()}trail/org_slug/${org_slug}/add_course/${course_id}`, RequestBody("POST", null))
|
const result: any = await fetch(`${getAPIUrl()}trail/org_slug/${org_slug}/add_course/${course_id}`, RequestBody("POST", null))
|
||||||
.then((result) => result.json())
|
const res = await errorHandling(result);
|
||||||
.catch((error) => console.log("error", error));
|
return res;
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function removeCourse(course_id: string, org_slug: string) {
|
export async function removeCourse(course_id: string, org_slug: string) {
|
||||||
const result: any = await fetch(`${getAPIUrl()}trail/org_slug/${org_slug}/remove_course/${course_id}`, RequestBody("POST", null))
|
const result: any = await fetch(`${getAPIUrl()}trail/org_slug/${org_slug}/remove_course/${course_id}`, RequestBody("POST", null))
|
||||||
.then((result) => result.json())
|
const res = await errorHandling(result);
|
||||||
.catch((error) => console.log("error", error));
|
return res;
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function markActivityAsComplete(org_slug: string, course_id: string, activity_id: string) {
|
export async function markActivityAsComplete(org_slug: string, course_id: string, activity_id: string) {
|
||||||
const result: any = await fetch(`${getAPIUrl()}trail/org_slug/${org_slug}/add_activity/course_id/${course_id}/activity_id/${activity_id}`, RequestBody("POST", null))
|
const result: any = await fetch(`${getAPIUrl()}trail/org_slug/${org_slug}/add_activity/course_id/${course_id}/activity_id/${activity_id}`, RequestBody("POST", null))
|
||||||
.then((result) => result.json())
|
const res = await errorHandling(result);
|
||||||
.catch((error) => console.log("error", error));
|
return res;
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { getAPIUrl } from "../config/config";
|
import { getAPIUrl } from "../config/config";
|
||||||
import { RequestBody } from "../utils/ts/requests";
|
import { RequestBody, errorHandling } from "@services/utils/ts/requests";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This file includes only POST, PUT, DELETE requests
|
This file includes only POST, PUT, DELETE requests
|
||||||
|
|
@ -7,14 +7,14 @@ import { RequestBody } from "../utils/ts/requests";
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export async function deleteCollection(collection_id: any) {
|
export async function deleteCollection(collection_id: any) {
|
||||||
return fetch(`${getAPIUrl()}collections/${collection_id}`, RequestBody("DELETE", null))
|
const result: any = await fetch(`${getAPIUrl()}collections/${collection_id}`, RequestBody("DELETE", null));
|
||||||
.then((result) => result.json())
|
const res = await errorHandling(result);
|
||||||
.catch((error) => console.log("error", error));
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a new collection
|
// Create a new collection
|
||||||
export async function createCollection(collection: any) {
|
export async function createCollection(collection: any) {
|
||||||
return fetch(`${getAPIUrl()}collections/`, RequestBody("POST", collection))
|
const result: any = await fetch(`${getAPIUrl()}collections/`, RequestBody("POST", collection));
|
||||||
.then((result) => result.json())
|
const res = await errorHandling(result);
|
||||||
.catch((error) => console.log("error", error));
|
return res;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { getAPIUrl } from "@services/config/config";
|
import { getAPIUrl } from "@services/config/config";
|
||||||
import { RequestBody, RequestBodyForm } from "@services/utils/ts/requests";
|
import { RequestBody, RequestBodyForm, errorHandling } from "@services/utils/ts/requests";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This file includes only POST, PUT, DELETE requests
|
This file includes only POST, PUT, DELETE requests
|
||||||
|
|
@ -7,23 +7,18 @@ import { RequestBody, RequestBodyForm } from "@services/utils/ts/requests";
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export async function getOrgCourses(org_id: number) {
|
export async function getOrgCourses(org_id: number) {
|
||||||
|
const result: any = await fetch(`${getAPIUrl()}courses/${org_id}/page/1/limit/10`, RequestBody("GET", null));
|
||||||
|
const res = await errorHandling(result);
|
||||||
return fetch(`${getAPIUrl()}courses/${org_id}/page/1/limit/10`, RequestBody("GET", null))
|
return res;
|
||||||
.then((result) => result.json())
|
|
||||||
.catch((error) => console.log("error", error));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getCourse(course_id: string) {
|
export async function getCourse(course_id: string) {
|
||||||
// todo : add course id to url
|
const result: any = await fetch(`${getAPIUrl()}courses/${course_id}`, RequestBody("GET", null));
|
||||||
return fetch(`${getAPIUrl()}courses/${course_id}`, RequestBody("GET", null))
|
const res = await errorHandling(result);
|
||||||
.then((result) => result.json())
|
return res;
|
||||||
.catch((error) => console.log("error", error));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export async function createNewCourse(org_id: string, course_body: any, thumbnail: any) {
|
export async function createNewCourse(org_id: string, course_body: any, thumbnail: any) {
|
||||||
|
|
||||||
// Send file thumbnail as form data
|
// Send file thumbnail as form data
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
formData.append("thumbnail", thumbnail);
|
formData.append("thumbnail", thumbnail);
|
||||||
|
|
@ -32,16 +27,13 @@ export async function createNewCourse(org_id: string, course_body: any, thumbnai
|
||||||
formData.append("mini_description", "course_body.mini_description");
|
formData.append("mini_description", "course_body.mini_description");
|
||||||
formData.append("public", "true");
|
formData.append("public", "true");
|
||||||
|
|
||||||
|
const result = await fetch(`${getAPIUrl()}courses/?org_id=${org_id}`, RequestBodyForm("POST", formData));
|
||||||
return fetch(`${getAPIUrl()}courses/?org_id=${org_id}`, RequestBodyForm("POST", formData))
|
const res = await errorHandling(result);
|
||||||
.then((result) => result.json())
|
return res;
|
||||||
.catch((error) => console.log("error", error));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function deleteCourseFromBackend(course_id: any) {
|
export async function deleteCourseFromBackend(course_id: any) {
|
||||||
|
const result: any = await fetch(`${getAPIUrl()}courses/${course_id}`, RequestBody("DELETE", null));
|
||||||
|
const res = await errorHandling(result);
|
||||||
return fetch(`${getAPIUrl()}courses/${course_id}`, RequestBody("DELETE", null))
|
return res;
|
||||||
.then((result) => result.json())
|
|
||||||
.catch((error) => console.log("error", error));
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { getAPIUrl } from "@services/config/config";
|
import { getAPIUrl } from "@services/config/config";
|
||||||
import { RequestBody } from "../utils/ts/requests";
|
import { RequestBody, errorHandling } from "@services/utils/ts/requests";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This file includes only POST, PUT, DELETE requests
|
This file includes only POST, PUT, DELETE requests
|
||||||
|
|
@ -7,19 +7,19 @@ import { RequestBody } from "../utils/ts/requests";
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export async function createNewOrganization(body: any) {
|
export async function createNewOrganization(body: any) {
|
||||||
return fetch(`${getAPIUrl()}orgs/`, RequestBody("POST", body))
|
const result = await fetch(`${getAPIUrl()}orgs/`, RequestBody("POST", body));
|
||||||
.then((result) => result.json())
|
const res = await errorHandling(result);
|
||||||
.catch((error) => console.log("error", error));
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function deleteOrganizationFromBackend(org_id: any) {
|
export async function deleteOrganizationFromBackend(org_id: any) {
|
||||||
return fetch(`${getAPIUrl()}orgs/${org_id}`, RequestBody("DELETE", null))
|
const result = await fetch(`${getAPIUrl()}orgs/${org_id}`, RequestBody("DELETE", null));
|
||||||
.then((result) => result.json())
|
const res = await errorHandling(result);
|
||||||
.catch((error) => console.log("error", error));
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getOrganizationContextInfo(org_slug: any) {
|
export async function getOrganizationContextInfo(org_slug: any) {
|
||||||
return fetch(`${getAPIUrl()}orgs/slug/${org_slug}`, RequestBody("GET", null))
|
const result = await fetch(`${getAPIUrl()}orgs/slug/${org_slug}`, RequestBody("GET", null));
|
||||||
.then((result) => result.json())
|
const res = await errorHandling(result);
|
||||||
.catch((error) => console.log("error", error));
|
return res;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,13 @@
|
||||||
import { getAPIUrl } from "@services/config/config";
|
import { getAPIUrl } from "@services/config/config";
|
||||||
import { RequestBody } from "@services/utils/ts/requests";
|
import { RequestBody, errorHandling } from "@services/utils/ts/requests";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This file includes only POST, PUT, DELETE requests
|
This file includes only POST, PUT, DELETE requests
|
||||||
GET requests are called from the frontend using SWR (https://swr.vercel.app/)
|
GET requests are called from the frontend using SWR (https://swr.vercel.app/)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export async function updateOrganization(org_id : string, data: any) {
|
export async function updateOrganization(org_id: string, data: any) {
|
||||||
const result: any = await fetch(`${getAPIUrl()}orgs/` + org_id, RequestBody("PUT", data))
|
const result: any = await fetch(`${getAPIUrl()}orgs/` + org_id, RequestBody("PUT", data));
|
||||||
.then((result) => result.json())
|
const res = await errorHandling(result);
|
||||||
.catch((error) => console.log("error", error));
|
return res;
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { getAPIUrl } from "@services/config/config";
|
import { getAPIUrl } from "@services/config/config";
|
||||||
import { RequestBody } from "@services/utils/ts/requests";
|
import { RequestBody, errorHandling } from "@services/utils/ts/requests";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This file includes only POST, PUT, DELETE requests
|
This file includes only POST, PUT, DELETE requests
|
||||||
|
|
@ -8,8 +8,6 @@ import { RequestBody } from "@services/utils/ts/requests";
|
||||||
|
|
||||||
export async function updatePassword(user_id : string, data: any) {
|
export async function updatePassword(user_id : string, data: any) {
|
||||||
const result: any = await fetch(`${getAPIUrl()}users/password/user_id/` + user_id, RequestBody("PUT", data))
|
const result: any = await fetch(`${getAPIUrl()}users/password/user_id/` + user_id, RequestBody("PUT", data))
|
||||||
.then((result) => result.json())
|
const res = await errorHandling(result);
|
||||||
.catch((error) => console.log("error", error));
|
return res;
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { getAPIUrl } from "@services/config/config";
|
import { getAPIUrl } from "@services/config/config";
|
||||||
import { RequestBody } from "@services/utils/ts/requests";
|
import { RequestBody, errorHandling } from "@services/utils/ts/requests";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This file includes only POST, PUT, DELETE requests
|
This file includes only POST, PUT, DELETE requests
|
||||||
|
|
@ -8,8 +8,6 @@ import { RequestBody } from "@services/utils/ts/requests";
|
||||||
|
|
||||||
export async function updateProfile(data: any) {
|
export async function updateProfile(data: any) {
|
||||||
const result: any = await fetch(`${getAPIUrl()}users/user_id/` + data.user_id, RequestBody("PUT", data))
|
const result: any = await fetch(`${getAPIUrl()}users/user_id/` + data.user_id, RequestBody("PUT", data))
|
||||||
.then((result) => result.json())
|
const res = await errorHandling(result);
|
||||||
.catch((error) => console.log("error", error));
|
return res;
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,7 @@ export const swrFetcher = async (url: string, body: any, router?: AppRouterInsta
|
||||||
if (router) {
|
if (router) {
|
||||||
denyAccessToUser(error, router);
|
denyAccessToUser(error, router);
|
||||||
}
|
}
|
||||||
|
throw error;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -288,7 +288,7 @@ async def verify_rights(request: Request, course_id: str, current_user: PublicUs
|
||||||
|
|
||||||
course = await courses.find_one({"course_id": course_id})
|
course = await courses.find_one({"course_id": course_id})
|
||||||
|
|
||||||
if current_user.user_id == "anonymous" and course["public"] == True:
|
if current_user.user_id == "anonymous" and course["public"] == True and action == "read":
|
||||||
return True
|
return True
|
||||||
|
|
||||||
if not course:
|
if not course:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue