Skip to content

Commit

Permalink
Major improvements and add new pages.
Browse files Browse the repository at this point in the history
Signed-off-by: Aliwoto <aminnimaj@gmail.com>
  • Loading branch information
ALiwoto committed Aug 23, 2024
1 parent b635c73 commit 9519dd2
Show file tree
Hide file tree
Showing 28 changed files with 1,121 additions and 33 deletions.
Binary file modified public/favicon.ico
Binary file not shown.
Binary file added public/favicon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/logo192.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/logo512.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
31 changes: 29 additions & 2 deletions src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,16 @@ import { CurrentAppTranslation } from './translations/appTranslation';
import apiClient from './apiClient';
import Login from './pages/loginPage';
import CreateUserPage from './pages/createUserPage';
import Dashboard from './pages/dashboardPage';
import DashboardPage from './pages/dashboardPage';
import SearchUserPage from './pages/searchUserPage';
import UserInfoPage from './pages/userInfoPage';
import { Box, CircularProgress, Typography } from '@mui/material';
import CreateTopicPage from './pages/createTopicPage';
import SearchTopicPage from './pages/searchTopicPage';
import ConfirmAccountRedirectPage from './pages/confirmAccountRedirectPage';
import CreateCoursePage from './pages/createCoursePage';
import CourseInfoPage from './pages/courseInfoPage';
import SearchCoursePage from './pages/searchCoursePage';

const App: React.FC = () => {
const [isLoggedIn, setIsLoggedIn] = useState<boolean>(apiClient.isLoggedIn());
Expand Down Expand Up @@ -73,7 +76,7 @@ const App: React.FC = () => {
/>
<Route
path="/dashboard"
element={isLoggedIn ? <Dashboard /> : <Navigate to="/login" />}
element={isLoggedIn ? <DashboardPage /> : <Navigate to="/login" />}
/>
<Route
path="/createUser"
Expand All @@ -95,6 +98,30 @@ const App: React.FC = () => {
path="/searchTopic"
element={apiClient.canSearchTopics() ? <SearchTopicPage /> : <Navigate to="/dashboard" />}
/>
<Route
path="/createCourse"
element={apiClient.canCreateTopics() ? <CreateCoursePage /> : <Navigate to="/dashboard" />}
/>
<Route
path="/courseInfo"
element={apiClient.canCreateTopics() ? <CourseInfoPage /> : <Navigate to="/dashboard" />}
/>
<Route
path="/searchCourse"
element={apiClient.canSearchTopics() ? <SearchCoursePage /> : <Navigate to="/dashboard" />}
/>
<Route
path="/createExam"
element={apiClient.canCreateTopics() ? <CreateCoursePage /> : <Navigate to="/dashboard" />}
/>
<Route
path="/examInfo"
element={apiClient.canCreateTopics() ? <CreateCoursePage /> : <Navigate to="/dashboard" />}
/>
<Route
path="/searchExam"
element={apiClient.canSearchTopics() ? <SearchTopicPage /> : <Navigate to="/dashboard" />}
/>
<Route path="*" element={<Navigate to={isLoggedIn ? "/dashboard" : "/login"} />} />
</Routes>
</Router>
Expand Down
195 changes: 194 additions & 1 deletion src/api/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,8 @@ export const APIErrorCode = {
ErrCodeGivenExamNotFound: 2151,
ErrCodeAccountAlreadyConfirmed: 2152,
ErrCodeEmailAlreadyExists: 2153,
ErrCodeTopicNameExists: 2154
ErrCodeTopicNameExists: 2154,
ErrCodeTopicNotFound: 2155
} as const;

export type APIErrorCode = typeof APIErrorCode[keyof typeof APIErrorCode];
Expand Down Expand Up @@ -543,6 +544,12 @@ export interface CreateCourseData {
* @memberof CreateCourseData
*/
'course_name'?: string;
/**
*
* @type {number}
* @memberof CreateCourseData
*/
'topic_id'?: number;
}
/**
*
Expand Down Expand Up @@ -574,6 +581,12 @@ export interface CreateCourseResult {
* @memberof CreateCourseResult
*/
'course_name'?: string;
/**
*
* @type {string}
* @memberof CreateCourseResult
*/
'created_at'?: string;
}
/**
*
Expand Down Expand Up @@ -930,6 +943,93 @@ export interface DeleteTopicV1200Response {
*/
'success'?: boolean;
}
/**
*
* @export
* @interface EditCourseData
*/
export interface EditCourseData {
/**
*
* @type {string}
* @memberof EditCourseData
*/
'course_description'?: string;
/**
*
* @type {number}
* @memberof EditCourseData
*/
'course_id'?: number;
/**
*
* @type {string}
* @memberof EditCourseData
*/
'course_name'?: string;
}
/**
*
* @export
* @interface EditCourseResult
*/
export interface EditCourseResult {
/**
*
* @type {string}
* @memberof EditCourseResult
*/
'added_by'?: string;
/**
*
* @type {string}
* @memberof EditCourseResult
*/
'course_description'?: string;
/**
*
* @type {number}
* @memberof EditCourseResult
*/
'course_id'?: number;
/**
*
* @type {string}
* @memberof EditCourseResult
*/
'course_name'?: string;
/**
*
* @type {string}
* @memberof EditCourseResult
*/
'created_at'?: string;
}
/**
*
* @export
* @interface EditCourseV1200Response
*/
export interface EditCourseV1200Response {
/**
*
* @type {EndpointError}
* @memberof EditCourseV1200Response
*/
'error'?: EndpointError;
/**
*
* @type {EditCourseResult}
* @memberof EditCourseV1200Response
*/
'result'?: EditCourseResult;
/**
*
* @type {boolean}
* @memberof EditCourseV1200Response
*/
'success'?: boolean;
}
/**
*
* @export
Expand Down Expand Up @@ -2155,6 +2255,18 @@ export interface SearchCourseData {
* @memberof SearchCourseData
*/
'course_name'?: string;
/**
*
* @type {number}
* @memberof SearchCourseData
*/
'limit'?: number;
/**
*
* @type {number}
* @memberof SearchCourseData
*/
'offset'?: number;
}
/**
*
Expand Down Expand Up @@ -2663,6 +2775,49 @@ export const CourseApiAxiosParamCreator = function (configuration?: Configuratio



localVarHeaderParameter['Content-Type'] = 'application/json';

setSearchParams(localVarUrlObj, localVarQueryParameter);
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
localVarRequestOptions.data = serializeDataIfNeeded(data, localVarRequestOptions, configuration)

return {
url: toPathString(localVarUrlObj),
options: localVarRequestOptions,
};
},
/**
* Allows a user to edit a course.
* @summary Edit a course
* @param {string} authorization Authorization token
* @param {EditCourseData} data Data needed to edit a course
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
editCourseV1: async (authorization: string, data: EditCourseData, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
// verify required parameter 'authorization' is not null or undefined
assertParamExists('editCourseV1', 'authorization', authorization)
// verify required parameter 'data' is not null or undefined
assertParamExists('editCourseV1', 'data', data)
const localVarPath = `/api/v1/course/edit`;
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}

const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;

if (authorization != null) {
localVarHeaderParameter['Authorization'] = String(authorization);
}



localVarHeaderParameter['Content-Type'] = 'application/json';

setSearchParams(localVarUrlObj, localVarQueryParameter);
Expand Down Expand Up @@ -2915,6 +3070,20 @@ export const CourseApiFp = function(configuration?: Configuration) {
const localVarOperationServerBasePath = operationServerMap['CourseApi.createCourseV1']?.[localVarOperationServerIndex]?.url;
return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
},
/**
* Allows a user to edit a course.
* @summary Edit a course
* @param {string} authorization Authorization token
* @param {EditCourseData} data Data needed to edit a course
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async editCourseV1(authorization: string, data: EditCourseData, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<EditCourseV1200Response>> {
const localVarAxiosArgs = await localVarAxiosParamCreator.editCourseV1(authorization, data, options);
const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
const localVarOperationServerBasePath = operationServerMap['CourseApi.editCourseV1']?.[localVarOperationServerIndex]?.url;
return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
},
/**
* Allows a user to get information about a course by its id.
* @summary Get course information
Expand Down Expand Up @@ -3006,6 +3175,17 @@ export const CourseApiFactory = function (configuration?: Configuration, basePat
createCourseV1(authorization: string, data: CreateCourseData, options?: any): AxiosPromise<CreateCourseV1200Response> {
return localVarFp.createCourseV1(authorization, data, options).then((request) => request(axios, basePath));
},
/**
* Allows a user to edit a course.
* @summary Edit a course
* @param {string} authorization Authorization token
* @param {EditCourseData} data Data needed to edit a course
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
editCourseV1(authorization: string, data: EditCourseData, options?: any): AxiosPromise<EditCourseV1200Response> {
return localVarFp.editCourseV1(authorization, data, options).then((request) => request(axios, basePath));
},
/**
* Allows a user to get information about a course by its id.
* @summary Get course information
Expand Down Expand Up @@ -3084,6 +3264,19 @@ export class CourseApi extends BaseAPI {
return CourseApiFp(this.configuration).createCourseV1(authorization, data, options).then((request) => request(this.axios, this.basePath));
}

/**
* Allows a user to edit a course.
* @summary Edit a course
* @param {string} authorization Authorization token
* @param {EditCourseData} data Data needed to edit a course
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof CourseApi
*/
public editCourseV1(authorization: string, data: EditCourseData, options?: RawAxiosRequestConfig) {
return CourseApiFp(this.configuration).editCourseV1(authorization, data, options).then((request) => request(this.axios, this.basePath));
}

/**
* Allows a user to get information about a course by its id.
* @summary Get course information
Expand Down
Loading

0 comments on commit 9519dd2

Please sign in to comment.