Skip to content

Architecture

Musa Azeem edited this page Oct 22, 2023 · 22 revisions

Deployment

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.

Languages and Frameworks

  • 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.

Packages / Build Managers

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)

Teammate Programming Roles

  • Front-end: (Primary) Musa Azeem, (Secondaries)
  • Back-end: (Primary) _______, (Secondaries) Mitchell Jonker, Musa Azeem
  • Database: (Primary) Mitchell, (Secondaries) _______

URL Space (Page URLs)

REST API

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.

SQL Schema / Model

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.

SQL Views

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.

Design Milestone Views (Imbedded from other page)

Clone this wiki locally