Skip to content

Software Design

This page includes a short description of the overall architecture style of the system, its high-level system components, and their logical (what data they exchange) and control (how they invoke each other) dependencies. Mostly described using diagrams.

Architecture Diagram

A NextJS-Django stack built on Docker and hosted on Cybera. The frontend will be statically built, the django server will be running on a separate container. The server will be running the business and persistence layers. The DB is postgres and will be a docker volume attached to the Django container. In addition emails will be sent through Sendgrid. The frontend will communicate with the backend using REST in JSON (header + body) format.

Arch

UML Class Diagram

This is an ER diagram of the app. There are two main types of accounts, Admin and User. User can follow 0 or many companies. They also have attributes attached to the user and can be extended upon like a mentor. Users can also have badges. Admin manages users, activities and scholarships.

path finder Diagram

Sequence Diagrams

Multiple sequence diagrams depicting the most important scenarios. There is a diagram for each major user: Students, Organizations, Mentors and Admin.

Sequence

Figma Prototype User interface

Figma Board

API Documentation

API documentation is available at http://api.platform.pathfinder.test/docs/ / http://[2605:fd00:4:1001:f816:3eff:fe17:6af6]:8000/docs/

Requirement Traceability Matrix

Requirement Description Related US Test Case File Location Test Result
Fetch Resources U.S. 6.01 resources/tests.py Pass
Filter Resources U.S. 6.02 tests/resources.test.jsx Pass
Edit Profile U.S. 1.02 cypress/e2e/editProfile.cy.js Pass
Badge System U.S. 4.01 app/test_badges.py Pass
Display Badge U.S. 4.02 tests/badges.test.jsx Pass
Fetch Opportunity U.S. 2.02 opportunity/tests.py Pass
Explore Opportunity U.S. 2.02 tests/job-view-page.test.jsx Pass
Opportunity Details U.S. 2.02 tests/oportunityDetail.test.jsx Pass
Fetch Project-based learning U.S. 5.02 activities/tests.py Pass
Fetch Scholarship U.S. 5.01/5.02 scholarships/tests.py Pass
Fetch Mentors U.S. 3.01 mentor/tests.py Pass
Explore Mentors U.S. 3.01 tests/mentorList.test.jsx Pass
View Calendar U.S. 2.05/2.06 tests/calendar.test.jsx Pass
Login U.S. 1.01 tests/login.test.jsx Pass
Register U.S. 1.01 tests/register.test.jsx Pass
View Project-based learning U.S. 5.02 tests/activity-view-page.test.jsx Pass

UI Design Principles

  1. Visibility of System Status: When user clicks on the filtering buttons/searching with keywords, the website presents the corresponding feedback to the user immediately; when user goes to different page, the details and information of that page is displayed immediately
  2. Match Between the System and the Real World: the wordings and icons used in the website all match the real-world conventions and self explanatory. For example, the icon for the Opportunities tab is a briefcase icon
  3. User Control and Freedom: There are go back buttons across all the pages. For example, if the user misclicked on applying a job, they can click on the back button and go back to the job description instead of forcing them to apply the job. There is also a navigation bar appears on every page that users can use to navigate back to a certain page. Users can edit their profile if they entered something incorrectly and cancel job application if they applied accientally
  4. Consistency and Standards: The layout for each page is consistent, a navigation bar is displayed across the website. Each page usually comes with a search bar at the top of the screen, main information section in the middle and filtering options on the right. The wording is also consistent. We use plural terms for items that can have multiple instances, and when clicking on a single item, we use the singular form
  5. Error Prevention: We prevent users from submitting the form if they didn't fill in the mandatory fields. For example, if the user is trying to apply a job without filling any application detail, and error message will tell the user that application detail cannot be empty
  6. Recognition Rather than Recall: Users can always refer to the profile page to see the information they filled in and the username of the login user is displayed all the time. The navigation bar allows users to go to different pages without memorizing the steps to do so. The available filtering options are also displayed
  7. Flexibility and Efficiency of Use: Provided navigation bar for users to quickly access certain page, or they can simply click on go back buttons to go back to the last page they was on
  8. Aesthetic and Minimalist Design: The current interfaces are clean, everything displayed on each page is relevant and needed. For example, it only displays resources and their corresponding filtering options on the resources page
  9. Help Users Recognize, Diagnose, and Recover from Errors: All the error messages are expressed in plain language with no error codes and indicate the problem and solution. For example, if the user forgot to fill in certain field on the profile edit page, it will show an error "Please fill in the mandatory field" and highlights the missed field
  10. Help and Documentation: In our login/profile/job application pages, we have hints text displayed on each input field telling the users what is expected in each form

Accessibility

  • Existing colors on our website: black text, white & yellow background, blue & red buttons, blue, green and yellow tags
  • Colors pass contrast check(passed most tests): Black and White: 16.9, Yellow and Blue: 5.36:1, White and Blue: 5.14:1, Black and Green: 12.05:1, Black and Yellow: 13.71:1, Blue and Black: 11.65:1, Red and White: 5.03:1
  • Clear layout: each page have distinct sections which make it easy to locate informtion
  • Search bar & filters: able to find information efficiently
  • Navigation bar: easy to access different pages
  • Calendar: easy to view all the job, scholarship and activities in one place

SonarCube Results - Static Code Analysis

SonarCube

SonarQube is a code quality analysis tool that analyzes the source code and provides a report of the project. It analyzed Security, Reliability, Maintainability, Accepted Issues, Test Coverage, Code Duplications and Security Hotspots

  • Security: E because we kept the Django secret key inside settings.py for future maintaince
  • Reliability: E because we are building on top a brownfield project, so some of the code that we reused have some existing issues, mainly are issues like certain props are missing in props validation
  • Maintainability: A because there is no major maintainability issue and even though there are 2.6k open issues, they are something minor such as "remove this commented out code" and "remove the unused local variable"
  • Accepted Issues: 0 because we did not use SonarLint
  • Coverage: 0% test coverage because we used different kind of test tools like Django Test and Jest, and it did not capture our tests properly
  • Duplications: 11.6% duplicated lines across 55k lines of code so not really a big issue
  • Security Hotspots: E because it detected we hardcoded "password", but the password is only used for the tests

Job Description

Job Description is available on Git Repo.

User Manual

User Manual is available on Git Repo.

Deployment Instruction

Deployment Instruction is available on Git Repo.

Technology List

Backend

Django

High level Python web framework: https://www.djangoproject.com/

django rest framework

Toolkit for building Web APIs in django. Also provides api test functionality.: https://www.django-rest-framework.org/

djoser

Provides a set of Django Rest Framework views to handle basic authentication actions: https://pypi.org/project/djoser/

Sendgrid

Email delivery platform: https://sendgrid.com/

Swagger

Provides tools for API documentation: https://swagger.io/


Database

SQLite

Lightweight database that is suitable for development: https://www.sqlite.org/index.html

PostgreSQL

Powerful, open source object-relational database system, suitable for production: https://www.postgresql.org/


Frontend

Tailwind

Tailwind is a class based css framework: https://tailwindcss.com/

Jest

Jest is a testing framework for the frontend: https://jestjs.io/

Cypress

Cypress is an e2e testing framework: https://www.cypress.io/

NextJS

A react framework meant to be SSR but has options for static builds: https://nextjs.org/


Deployment

Cybera

Not-for-profit corporation responsible for the operation of Alberta's Optical Regional Advanced Network: https://www.cybera.ca/


DevOps

Docker

Docker is an container application to isolate and deploy applications: https://www.docker.com/

Docker compose

Extends Docker for running multi-container applications: https://docs.docker.com/compose/

traefik

Manages container networks: https://traefik.io/