El equipo decidio diseñar la arquitectura del proyecto en base a la arquitectura de microservicios. Para esto se creo un diagrama en donde se grafican los diferentes componentes del proyecto y como se comunican.
El proyecto fue dividido en una serie de componentes, los cuales son descriptos a continuacion:
Client Side
- Mobile App: sera la aplicacion para android con la que van a interactuar los usuarios, esta aplicacion sera desarrollada utilizando React Native como libreria principal y se comunicara con el server a travez de consultas HTTP.
- Backoffice App: funcionara como la aplicacion a ser usada por los administradores de la plataforma con el objetivo de monitorear y editar metadata de la plataforma (reglas, bloqueo de usuarios, registro de auditoria, entre otros). Para su desarrollo se utilizara React y se desplegara en GH Pages o Vercel.
- Metrics Dashboard: esta herramienta permitira a los administradores monitorear el desempeño de los servidores, en terminos de aplicacion (metricas de trafico, throughput, etc) y de infraestuctura (metricas de uso de cpu, memoria, etc), para esto se utilizara la plataforma Datadog.
Server Side
- Users: este microservicio se encargara del manejo del sistema de registro, autenticacion, y administracion de las cuentas de los usuarios.
- Courses: se encaragara de brindar la logica de negocio correspondiente a las funcionalidades de los cursos, las asignaciones o tareas, y la retroalimentacion (alumno-curso, profesor-alumno).
- Forum: su funcion sera administrar los foros pertenecientes a cada curso, brindando un servicio de discusion entre los usuarios dandoles la posibilidad de hacer preguntas y responderlas.
- Administration: este servicio sera utilizado por los administradores de la plataforma para la edicion de reglas y visualizacion del registro de auditoria.
- AI: este sera un servicio que tendra como objetivo recibir "prompts" y devolver una respuesta dada por un modelo de lenguaje generativo. Su implementacion esta sujeta a cambios, pero se planea el uso de un modelo de acceso publico.
- Notifications: sera el encargado de recibir pedidos de notificacion y despacharlas por el medio acorde (ya sea email, sms, o push notifications).
- API Gateway: sera un servicio intermediario entre las peticiones de los usuarios y los microservicios, permitiendo que el server side se muestre hacia el exterior como un solo servidor a pesar de estar dividido en distintos servicios.
Algunos de estos servicios utilizaran el lenguaje de programacion Go, junto con la libreria Gin-Gonic, y otros usaran Python junto con FastApi. A su vez estos seran desplegados utilizando Linode + Kuberenetes o alternativamente Heroku.
Databases
- Relacionales: Las bases de datos de Users y Courses seran relacionales y utilizaran el motor Postgres con el cloud provider Supabase.
- No Relacionales: Las bases de datos de Forum y Administration, y a su vez potencialmente AI y Notifications utilizaran MongoDB en el host MongoAtlas.
- Multi-Media: Los archivos multimedia, ya sean imagenes, pdf, entre otros, se almacenaran en Firebase Storage.
Como equipo se utilizara Github Projects para administrar las issues o tareas de cada integrante, para cada iteracion del desarrollo. Adicionalmente cada componente de la aplicacion tendra su propio repositorio, pero todos estaran bajo la misma organizacion de github.
