AIMS (Academic Information Management System)

This is a project for the Software Architecture subject at the National University of Colombia.

It uses a layered architecture with multiple microservices, and different technologies.

This project was created with the intention of being a platform for the management of academic information, where students and teachers can interact with the system easily offering a diverse set of services.

Members

Name Email Github
David Esteban Hernandez Gomez davhernandezgo@unal.edu.co DavidHernandez2001
Josué David Briceño Urquijo jbriceno@unal.edu.co jdbu2002
Juan Diego Ramírez Lemos jramirezle@unal.edu.co Judirale13
Santiago Rodríguez Vallejo sarodriguezva@unal.edu.co sarodriguezva
Santiago Sánchez Mora sansanchezmo@unal.edu.co sansanchezmo
Sebastian Garnica Quiroz sgarnicaq@unal.edu.co SGman98

How to run

Prerequisites

Run

Clone the repository and run the following command to get the submodules:

git submodule update --init --recursive

Create the ssl certificates running the following command in the security folder:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout aims.key -out aims.crt -config aims.conf

Then run the following command to start the project:

docker-compose up -d --build

This will run:
6 containers for databases
7 containers for microservices
1 container for the api-gateway
1 container for the message broker
1 container for the web application
2 containers for the reverse proxies (one for the web application and one for the api-gateway)
1 container for the ldap and 1 for phpldapadmin
1 container for the interface
In total 21 containers

Each part of the project have a different git repository with its own documentation and deployment instructions and files.

Layers

Data Layer

It contains all the databases needed for the project.

Database Type
account-db MySQL 🐬
college-db MySQL 🐬
enrollment-db PostgreSQL 🐘
grading-db MongoDB 🍃
profile-db MongoDB 🍃
subject-db MySQL 🐬

There is an initial script with some data in the corresponding logic folder, the file is called init.sql.

Logic Layer

It contains all the microservices, each one uses the corresponding database, and exposes a REST API to interact with the data.

Microservice Language Framework Repository
account-ms JavaScript 📜 Express 🚀 Link
college-ms Java Spring Boot 🍃 Link
enrollment-ms Java Spring Boot 🍃 Link
grading-ms Rust 🦀 Rocket 🚀 Link
profile-ms Python 🐍 Flask 🌶️ Link
schedule-ms Go 🐹 Gin 🍸 Link
subject-ms Java Spring Boot 🍃 Link

The schedule microservices uses the same database as the enrollment microservice. enrollment-ms is for mutations and schedule-ms is for queries.

Integration Layer

It contains the API Gateway, this gateway connects all the microservices and exposes a single API using the GraphQL query language, and the Apollo Server.

Microservice Language Framework Repository
ag TypeScript 📜 Express 🚀 Link

The connection with the grading microservice uses a queue message broker, in this case RabbitMQ.

Presentation (App) Layer

In this layer, we have the web application and the mobile application.

Application Language Framework Repository
web TypeScript 📜 Angular 🍃 Link
mobile Dart 🎯 Flutter 🎯 Link

To run the mobile application, you need to install Flutter and run the following command in the apps/mobile folder:

flutter run

Security Layer

In this layer, we have 2 proxies, one for the web application and one for the API gateway.

.. Technology
web-app-proxy Nginx 🐳
api-gateway-proxy Nginx 🐳
account-ldap OpenLDAP 🐳
phpldapadmin phpLDAPadmin 🐳

Interoperability Layer

In this layer, we have the interface it exposes a SOAP API with the getSubjects functionality.

.. Technology
interface Javascript 📜 Node.js 🐳 SOAP 🐳