-
Notifications
You must be signed in to change notification settings - Fork 1
Architecture
We will deploy our app on a physical Ubuntu 22.04 server running in the Valafar Lab. All component processes of the app will be started within an Ubuntu 22.04 docker container. We will write a docker file to automatically set up all environments required for the webapp and ensure the correct versions of all software are installed. The docker container will be automated to start whenever the server boots up using the docker daemon.
- Front-end: The React frontend will be served using the built-in
npx serve
script, and will be accessible on the server’s public IP for client traffic. - Back-end: The Flask backend will be deployed using the Gunicorn python http server.
- Database: The MySQL database will run locally using the open-source MySQL client.
- Frontend: React.js (JavaScript)
- Backend: Flask (Python)
- Database: mySQL (open-source SQL)
Our site will be an SPA, using the above languages. The backend will link to the database, and the front end will communicate with the backend via HTTP methods.
All packages and their versions required for our project will be maintained in Github using a requirement.r
file for the backend and the package.json
file for the frontend.
- Front-end: npm
- Back-end: virtual env
- Database: (n/a)
- Front-end: (Primary) Musa Azeem, (Secondaries)
- Back-end: (Primary) _______, (Secondaries) Mitchell Jonker, Musa Azeem
- Database: (Primary) Mitchell, (Secondaries) _______
- Login Page: /account/login
- Dashboard (Homepage): /dashboard
- Account Settings: /account
- My Evaluations Home: /evaluations
- My Evaluations Details: /evaluations/details
- Team Assessments: /assessments
- My Grants, Proposals, and Publications: /documents
- Department Analytics: /analytics
- Upload Data: /upload
- Default: /
- Will redirect user to
/dashboard
if they are logged in or/account/login
if they are not.
- Will redirect user to
Our Flask backend will implement a REST API to provide the frontend with access to the data and to process any data. All requests will contain authentication credentials (with user id) in the request headers to verify login status and access to sensitive data. The following HTTP requests will be handled by this API:
- /login (POST)
- /logout (POST)
- /get_course_data/<course_id> (GET)
- returns course data (student evaluations) for all semesters of the specified course
- /get_course_data_details/<course_id>// (GET)
- returns detailed course data for the specified course and semester
- /update_course_data (POST)
- allows users to manually update their course data for a semester
- /get_grant_info (GET)
- returns grant information for all grants that belong to the current user
- /update_grant_info (POST)
- manually updates grants using a CSV provided by the user
- /get_publication_info (GET)
- returns publication information for all of the current user's active publications
- /update_publication_info (POST)
- manually updates publications using a CSV provided by the user
- /get_team_evaluations (GET)
- returns team evaluation information. Checks the logged-in user's id to find out what data they have authority to access.
User Data Table:
- Username (primary key, varchar)
- email (varchar)
- password (varchar)
CourseData Table:
- id (primary key, int)
- course_id (varchar)
- course_section (varchar)
- number of students (int)
- student grade average (varchar)
- professor_rating (varchar)
- professor_name (varchar)
The above Schema breaks down and organizes the information necessary for our site. The greater majority of views will be derived from the Course Data Table, as that is the primary focus of the site. Certain views will be specific to a user's login credentials, as lower level users will only be able to see their evaluations.
My Evaluations View: SELECT * FROM CourseData WHERE professor_name == user_id
My Evaluations Detailed View: SELECT * FROM CourseData WHERE professor_name == <user_id> AND course_id = <selected_course>
Department Analytics Page View: SELECT * FROM CourseData
We do not expect the need to join any tables at this time.