Docs
System Design
System Architecture

System Architecture

Sys Arch

The system architecture is the bedrock of our system which outlines how the system runs as a whole and how components are interconnected. A system architecture diagram is a graphical representation of the components and connections within a system. It helps us understand the system and to communicate its structure to clients. They can also be used to identify potential issues and to plan for future changes and updates to the system.

Designing a good system architecture is crucial because it determines the performance, scalability, and reliability of the application. A poorly designed architecture can result in slow performance, limited scalability, and frequent downtime. It can also make it difficult to maintain and update the application over time. By contrast, a well-designed architecture can help to ensure that the application is fast, reliable, and scalable. It can also make it easier to add new features and update the system as needed.

Our system is roughly divided into three layers: the presentation layer, the business layer, and the data layer.

  • The presentation layer is responsible for the user interface and how the application is presented to the user. It handles user input and output, displaying information to the user and receiving input from them. The presentation layer is also responsible for enforcing the logic and rules associated with the user interface. For our presentation layer, we use React.js and its associated libraries to build an engaging and easy-to-use UI.

  • The business layer, also known as the logic or service layer, contains the application's core functionality. It handles the processing of incoming requests, the execution of business logic, and the generation of responses. The business layer is responsible for managing the application's data, performing calculations, and making decisions based on user input. For our business layer, we use NextAuth to securely and efficiently authenticate users before gaining access to the system. For data query or modification requests, we take advantage of GraphQL and Apollo GraphQL resolver to make these operations type-safe and efficient. Then we use PrismaDB to funnel those requests into the database and translate them automatically into SQL queries. For lecturer registration notification emails, we use SendGrid to send admin emails. The advantage of using SendGrid is that it provides a reliable and efficient way to send email notifications for lecturer registration. It ensures that the notifications are delivered to the intended recipients and can also provide delivery and engagement metrics

  • The data layer is responsible for managing the application's data, including storage, retrieval, and modification. It provides access to the application's data through a set of interfaces and APIs that can be used by the business layer. The data layer is responsible for ensuring the integrity and security of the data, as well as managing how the data is accessed and modified. For our data layer, we use one database to store all the data we need and our schema can be found in the previous section. Our database provider is PostgreSQL, a reliable, robust, and high-performance open-source application.