Skip to content
Snippets Groups Projects
Verified Commit e18e2567 authored by Dorian Koch's avatar Dorian Koch
Browse files

remove DummyBackend

parent d40ca422
Branches
Tags
1 merge request!14fix layout shift, improve footer, add timetable, housekeeping
import { basePath } from "../../basepath";
import { ApiError } from "./ApiError";
import DummyBackend from "./DummyBackend";
import type {
GetStatusResponse,
......@@ -62,7 +61,7 @@ export const OBJECT_TYPES = [
"permission",
];
export type Backend = BackendImpl | DummyBackend;
export type Backend = BackendImpl;
export class BackendImpl {
private csrfToken?: string;
......
import { basePath } from "../../basepath";
import type {
AuthenticationFsmpiRequest,
AuthenticationFsmpiResponse,
AuthenticationPasswordRequest,
AuthenticationStartOAuthRequest,
AuthenticationStartOAuthResponse,
AuthenticationStatusRequest,
AuthenticationStatusResponse,
PutFeedbackNewRequest,
GetFeedbackRequest,
GetFeedbackResponse,
ChapterSuggestionRequest,
CreateConfiguredObjectRequest,
CreateConfiguredObjectResponse,
GetStatusResponse,
GetChangelogRequest,
GetChangelogResponse,
GetConfigurationResponse,
GetCourseLectureResponse,
GetCourseResponse,
GetCoursesResponse,
GetHomepageResponse,
GetJobsRequest,
GetJobsResponse,
GetMySettingsResponse,
GetNewConfigurationResponse,
GetSorterLogResponse,
GetUsersResponse,
JobActionRequest,
ModifyManyObjectsRequest,
SearchResponse,
UpdateConfiguredObjectRequest,
UpdateMySettingsRequest,
id_string,
int,
} from "./api_v1_types";
export class DummyBackend {
public isPrivileged = false;
assetUrl(): string {
return "https://video.fsmpi.rwth-aachen.de/files";
}
staticUrl(): string {
return window.location.origin + basePath + "/static";
}
// Dummy data for each endpoint
private dummyStatusData: GetStatusResponse = {
status: "available",
is_debug: true,
server_name: "dummy",
announcements: [
{
id: 1,
type: "info",
visibility: "only_main_page",
text: "Dummy announcement 1",
},
{
id: 2,
type: "warning",
visibility: "all_pages",
text: "Dummy announcement 2",
},
],
};
private dummyHomepageData: GetHomepageResponse = {
featured: [
{
type: "plain",
title: "Wir suchen: sample text!",
text: `Wir brauchen mehr sample text!
Möchtest du etwas tun, damit es frischen sampletext von deiner sampletext gibt? Du hast die freie Wahl: Zwischen sampletext, sampletext, Live-sampletext, sampletext von Sachen im Hintergrund (sampletextWeb, sampletextGUI, …) und mehr finden wir mit Sicherheit etwas interessantes für dich.
Wenn du mitmachen möchtest, schreib uns eine E-Mail an sampletext@sampletext.de - wir freuen uns auf dich!`,
},
{
type: "image",
title: "Featured Lecture",
image_url: "http://example.com/featured-lecture.jpg",
},
{
type: "lecture",
title: "Latest Lecture",
lecture: {
id: 2001,
course_id: 102,
title: "Advanced Topics in Dummy Data",
speaker: "Prof. Example",
location: "Lecture Hall 1",
time: "2024-04-02T14:00:00",
duration: 90,
description: "A deep dive into advanced dummy data techniques.",
thumbnail_url: "http://example.com/lecture-thumbnail.jpg",
no_recording: false,
livestream_planned: true,
authentication_methods: ["public"],
allow_embed: true,
// chapters and media_sources can be added as needed
},
},
{
type: "course_list",
title: "Popular Courses",
courses: [
103,
// More courses can be added here
],
},
],
upcoming_lectures: [
{
id: 3001,
course_id: 104,
title: "Upcoming Lecture on Dummy Data",
speaker: "Dr. Future",
location: "Virtual",
time: "2024-04-10T11:00:00",
duration: 45,
description: "An upcoming lecture discussing future trends in dummy data.",
thumbnail_url: "http://example.com/upcoming-lecture.jpg",
no_recording: false,
livestream_planned: false,
authentication_methods: ["public"],
allow_embed: true,
// chapters and media_sources can be added as needed
},
// More upcoming lectures can be added here
],
new_lectures: [
{
id: 4001,
course_id: 105,
title: "New Lecture on Dummy Data Analysis",
speaker: "Prof. Analyzer",
location: "Auditorium",
time: "2024-04-05T09:30:00",
duration: 60,
description: "A new lecture focusing on analyzing dummy data.",
thumbnail_url: "http://example.com/new-lecture.jpg",
no_recording: true,
livestream_planned: false,
authentication_methods: ["public"],
allow_embed: true,
// chapters and media_sources can be added as needed
},
// More new lectures can be added here
],
courses_context: {
"102": {
id: 102,
id_string: "course-102",
full_name: "Intermediate Dummy Data",
short_name: "Dummy 102",
semester: "2024ss",
organizer: "Dr. Intermediate",
topic: "Data Science",
description: "Intermediate level concepts in dummy data creation.",
show_chapters_on_course: false,
default_authentication_methods: ["public"],
// lectures can be added as needed
},
"103": {
id: 103,
id_string: "course-103",
full_name: "Dummy Data for Experts",
short_name: "Dummy Expert",
semester: "2024ss",
organizer: "Prof. Advanced",
topic: "Advanced Data",
description: "An expert-level course in dummy data creation.",
show_chapters_on_course: true,
default_authentication_methods: ["rwth", "moodle"],
// lectures can be added as needed
},
"104": {
id: 104,
id_string: "course-104",
full_name: "Dummy Data for Beginners",
short_name: "Dummy Beginner",
semester: "2024ss",
organizer: "Prof. Beginner",
topic: "Data Science",
description: "A beginner-level course in dummy data creation.",
show_chapters_on_course: true,
default_authentication_methods: ["public"],
// lectures can be added as needed
},
"105": {
id: 105,
id_string: "course-105",
full_name: "Dummy Data Analysis",
short_name: "Dummy Analysis",
semester: "2024ss",
organizer: "Prof. Analyzer",
topic: "Data Science",
description: "A course focusing on analyzing dummy data.",
show_chapters_on_course: true,
default_authentication_methods: ["public"],
// lectures can be added as needed
},
},
};
private dummyCoursesData: GetCoursesResponse = {
courses: {
"course-101": {
id: 101,
id_string: "course-101",
full_name: "Introduction to Dummy Data",
short_name: "Dummy 101",
semester: "2024ss",
organizer: "Dr. Example",
topic: "Data Science",
description: "A course about creating dummy data.",
show_chapters_on_course: true,
default_authentication_methods: ["public"],
},
// Add more dummy courses if needed
},
};
private dummyCourseData: GetCourseResponse = {
id: 101,
id_string: "course-101",
full_name: "Introduction to Dummy Data",
short_name: "Dummy 101",
semester: "2024ss",
organizer: "Dr. Example",
topic: "Data Science",
description: "A course about creating dummy data.",
show_chapters_on_course: true,
default_authentication_methods: ["public"],
lectures: [
// Add dummy lectures data here
],
};
private dummyLectureData: GetCourseLectureResponse = {
lecture: {
id: 1001,
course_id: 101,
title: "Lecture on Dummy Data Creation",
speaker: "Dr. Example",
location: "Online",
time: "2024-04-01T10:00:00",
duration: 60,
description: "An introductory lecture on creating dummy data.",
thumbnail_url: "http://example.com/thumbnail.jpg",
no_recording: false,
livestream_planned: false,
authentication_methods: ["public"],
allow_embed: true,
// chapters and media_sources can be added as needed
},
};
private authenticationFsmpiResponse: AuthenticationFsmpiResponse = {};
private authenticationStartOAuthResponse: AuthenticationStartOAuthResponse = {
verification_url: "https://example.com/verify",
};
private authenticationStatusResponse: AuthenticationStatusResponse = {
authenticated_methods: ["fsmpi", "password"],
in_progress_authentication: "rwth",
is_lecture_authenticated: true,
};
setCsrfToken(csrfToken?: string): void {
// Do nothing
}
getStatus(): Promise<GetStatusResponse> {
return Promise.resolve(this.dummyStatusData);
}
getHomepage(): Promise<GetHomepageResponse> {
return Promise.resolve(this.dummyHomepageData);
}
getCourses(): Promise<GetCoursesResponse> {
return Promise.resolve(this.dummyCoursesData);
}
getCourse(course_id: int | id_string, include_lectures?: boolean): Promise<GetCourseResponse> {
// Return a dummy course based on the course_id and include_lectures flag
return Promise.resolve(this.dummyCourseData);
}
getCourseLecture(course_id: int, lecture_id: int): Promise<GetCourseLectureResponse> {
// Return a dummy lecture based on the course_id and lecture_id
return Promise.resolve(this.dummyLectureData);
}
authenticatePassword(request: AuthenticationPasswordRequest): Promise<{}> {
// Return a promise resolving to the mock response
return Promise.resolve({});
}
authenticateFsmpi(request: AuthenticationFsmpiRequest): Promise<AuthenticationFsmpiResponse> {
// Return a promise resolving to the mock response
return Promise.resolve(this.authenticationFsmpiResponse);
}
startAuthentication(
request: AuthenticationStartOAuthRequest,
): Promise<AuthenticationStartOAuthResponse> {
// Return a promise resolving to the mock response
return Promise.resolve(this.authenticationStartOAuthResponse);
}
getAuthenticationStatus(
request?: AuthenticationStatusRequest,
): Promise<AuthenticationStatusResponse> {
// Return a promise resolving to the mock response
return Promise.resolve(this.authenticationStatusResponse);
}
putNewFeedback(req: PutFeedbackNewRequest): Promise<{}> {
return Promise.reject("Not implemented");
}
getFeedback(req: GetFeedbackRequest): Promise<GetFeedbackResponse> {
return Promise.reject("Not implemented");
}
logout(): Promise<void> {
// Return a promise resolving to the mock response
return Promise.resolve();
}
getOMConfiguration(object_type: string, object_id: int): Promise<GetConfigurationResponse> {
return Promise.reject("Not implemented");
}
getNewOMConfiguration(object_type: string): Promise<GetNewConfigurationResponse> {
return Promise.reject("Not implemented");
}
createOMObject(
object_type: string,
request: CreateConfiguredObjectRequest,
): Promise<CreateConfiguredObjectResponse> {
return Promise.reject("Not implemented");
}
updateOMObject(
object_type: string,
object_id: int,
request: UpdateConfiguredObjectRequest,
): Promise<{}> {
return Promise.reject("Not implemented");
}
modifyManyOMObjects(request: ModifyManyObjectsRequest): Promise<{}> {
return Promise.reject("Not implemented");
}
deleteOMObject(object_type: string, object_id: int): Promise<{}> {
return Promise.reject("Not implemented");
}
suggestChapter(lecture_id: int, request: ChapterSuggestionRequest): Promise<{}> {
return Promise.reject("Not implemented");
}
importRWTHOnlineCourse(rwth_course_id: int): Promise<string> {
return Promise.reject("Not implemented");
}
getChangelog(req: GetChangelogRequest): Promise<GetChangelogResponse> {
return Promise.reject("Not implemented");
}
search(query: string): Promise<SearchResponse> {
return Promise.reject("Not implemented");
}
getSorterLog(): Promise<GetSorterLogResponse> {
return Promise.reject("Not implemented");
}
deleteSorterErrorLog(log_id: int): Promise<{}> {
return Promise.reject("Not implemented");
}
getUsers(): Promise<GetUsersResponse> {
return Promise.reject("Not implemented");
}
getMySettings(): Promise<GetMySettingsResponse> {
return Promise.reject("Not implemented");
}
updateMySettings(request: UpdateMySettingsRequest): Promise<{}> {
return Promise.reject("Not implemented");
}
getJobs(req: GetJobsRequest): Promise<GetJobsResponse> {
return Promise.reject("Not implemented");
}
deleteJob(id: int): Promise<{}> {
return Promise.reject("Not implemented");
}
jobAction(id: int, action: JobActionRequest["action"]): Promise<{}> {
return Promise.reject("Not implemented");
}
// Special method for language files
getLanguageFile(lang: string): Promise<Record<string, string>> {
return fetch(`${this.staticUrl()}/lang/${lang}.json`)
.then((res) => {
if (!res.ok) {
throw new Error(`Cannot load language ${lang}. Status: ${res.status}`);
}
return res.json();
})
.catch((error) => {
console.error(`Exception while loading language ${lang}:`, error);
return {};
});
}
}
export default DummyBackend;
import { BackendImpl } from "@/api/Backend";
import DummyBackend from "@/api/DummyBackend";
import { createContext, useContext, useState } from "react";
import type React from "react";
const BackendContext = createContext<BackendImpl | DummyBackend>(new DummyBackend());
const BackendContext = createContext<BackendImpl>(new BackendImpl());
export function RealBackendProvider({ children }: { children: React.ReactNode }) {
const USE_DUMMY =
typeof process.env.NEXT_PUBLIC_DUMMY_BACKEND === "string" &&
process.env.NEXT_PUBLIC_DUMMY_BACKEND === "true";
let [state, _] = useState(() => (USE_DUMMY ? new DummyBackend() : new BackendImpl()));
let [state, _] = useState(() => new BackendImpl());
return <BackendContext.Provider value={state}>{children}</BackendContext.Provider>;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment