3. Architecture
Index
- Analysis
- Design
- Architecture
- Implementation
- DevOps
- License
- Deployment
3.1. Physical Architecture
The system is a Client-Server application running in a containerized environment.
The system is composed of four main parts:
- Client (frontend): a Single Page Application (SPA) built with Vue.js. It runs in the user’s
browser and works as a Progressive Web App (PWA). It communicates with the server using standard HTTP APIs.
- Server (backend): built with Node.js and TypeScript. It handles user requests, manages subscriptions,
and sends notifications.
- Data Provider (backend): a separate background worker built with Go. Its only job is to download and process
university data.
- Database: a MongoDB instance used by server backend service. The Node.js server writes it with classrooms and
activities data collected from data provider, and reads it to check for availability.
3.2. Logical Architecture
Within each specific Bounded Context, we applied Hexagonal Architecture principles to protect the Domain Model
from technological coupling. Each module is divided into three concentric layers:
- Domain layer (inner layer): contains Entities, Value Objects, and business invariants. It is entirely free of
external dependencies. This is where the interfaces (Ports) for external services are defined.
- Application layer (middle layer): contains Domain Services that implement the use cases. It coordinates the
data flow
using domain entities without knowing the details of the implementation.
- Infrastructure layer (outer layer): contains the concrete implementations of the interfaces defined in the
domain. This includes controllers, Repositories, and clients for third-party services.
Below is an example architecture diagram for the Core context.
