Skip to content

Architecture

CyberneticMedic edited this page Oct 21, 2024 · 48 revisions

Languages, Frameworks, Libraries, and APIs

Our app will be written in JavaScript using the react native framework. Some of the libraries that we plan on using include: react-native-maps (to display a map), axios (to fetch information from external APIs), react, react-native, and react-native-async-storage (to maintain the data that is processed and use in the app). There will also be using expo-router to deal with navigation throughout the app (how the user moves between screens). We will be using Firebase to help authenticate the users on the account (firebase authentication and to help save information relating to individual user accounts (firestore). We are going to be accessing classes.sc.edu, and treat it like an API, to pull information relating to available classes and the information about them (professor, class times, class locations, etc.). Lastly we will be using node package manager (npm) as our package manager throughout the project.

Release

The app is going to be released via expo.dev for testing. This allows the testers to access the full app using Expo Go (mobile app on their phones). There will be a QR code and link that can be used for testing (and we'll include this QR code in our build instructions)

Virtual Machines

Virtual machines will be used throughout the development process. When we want to see how the app works on an IOS device, an iphone may be used, or a iPhone emulator can be used. If working on a windows computer, a MacOS virtual machine will be used to run the iPhone emulator (since X-Code is only available on macs). The same is true for android testing, where android device emulators will be used to test the app, however android phones may also be used if desired.

Roles

  • Ryan: Developing the staff directory page, the professor information page, and the login/register/forgot password pages
  • Johnny: Developing the main schedule page, the add course page/components, and the add course search results view, as well as assisting with the login/register/forgot password pages
  • Issac: Developing the map page to be filled with waypoints, locations, search features, and navigation/favorite features
  • Chloe: Developing the map page to be filled with waypoints, locations, search features, and navigation/favorite features
  • Jacob: Developing the settings pages, favorite locations page, and other backend development relating to Firestore

Although we will have our own pages that we will be responsible for, as we go to develop we will likely do peer coding where we can ask for help from others as we are introduced to new issues and bugs


Model

Login Prompt View

Course

  • courseSubject: String
  • courseNumber: int
  • courseSection: String
  • courseName: String
  • courseInstructors: [String]
  • courseMeetings: [String]

Location

  • name: String
  • latitude: double
  • longitude: double
  • latitudeDelta: int
  • longitudeDelta: int
  • visibility: boolean

User

  • email String
  • password String
  • user_UID String
  • courseSchedule [course]
  • favoriteLocations [location]

Settings will be stored as follows:

  • a accessibility (boolean)
  • a favoriteLocations ([location])
  • a notifications ([boolean])
  • a privacySecurity ([boolean])

Views

To maintain the neatness of the wiki, the views are on their own relevant pages. Please select the links below to view the views for each individual page


Schema

We will be using Firebase for our backend database. Our database will be made up of:

users, a user will have:

  • an email (String)
  • a password (String)
  • a user_UID (String) - Primary Key
  • a courseSchedule ([course CRN])
  • some favoriteLocations ([location])
  • and some previousLocations for recently accessed locations ([location])

A courseSchedule will be an array of courses. A course is made up of:

  • user_UID (String) - Foreign Key
  • a courseSubject (String)
  • a courseNumber (int)
  • a courseSection (String)
  • a courseName (String)
  • CRN (int) - Primary Key
  • some courseInstructors ([String])
  • courseMeetings ([String])
  • and a notification (boolean)

For our map functionality, we need a list of locations. A location is made up of:

  • a name (String)
  • a favoriteStatus (boolean)
  • a latitude (double)
  • a longitude (double)
  • a latitudeDelta (int)
  • and a longitudeDelta (int)

Settings will be stored as follows:

  • a accessibility (boolean)
  • a favoriteLocations ([location])
  • a notifications ([boolean])
  • a privacySecurity ([boolean])

Potential Queries

There will be a few potential queries that'll be needed for proper functionality of our app:

  • When a user logs in, both their email and password must be looked up to ensure an account within the database exists with these two values
  • Once logged in:
    • When the Main Schedule Page is accessed, the corresponding courseSchedule for the user must be looked up and displayed
    • When the Map Page is accessed, the corresponding favoriteLocations and previousLocations lists must be looked up and displayed
    • When the favorite locations are accessed in settings, locations will be pulled from the database

Clone this wiki locally