Skip to content

jceballos29/Gradus

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Gradus

Plataforma de homologación académica para el Politécnico Internacional. Permite gestionar solicitudes de homologación de materias entre programas e instituciones, con portal estudiantil, portal de coordinadores y API REST.

Arquitectura

Monorepo con tres servicios independientes:

gradus/
├── apps/
│   ├── universitas/     # Portal académico (Next.js + Prisma + PostgreSQL)
│   ├── gradus/          # Frontend web (Next.js — en desarrollo)
│   └── gradus-api/      # API REST (ASP.NET Core 10 — Clean Architecture)
├── docs/                # Documentación del proyecto (índice en docs/README.md)
├── docker-compose.yml   # Infraestructura local (PostgreSQL + Redis)
└── init-databases.sh    # Inicialización de bases de datos

Servicios

Universitas — Portal Académico

apps/universitas/ · Puerto 3003

Portal para estudiantes y coordinadores. Gestiona instituciones, facultades, programas, pensums, materias e historial académico.

Stack: Next.js 16 · TypeScript · Prisma · PostgreSQL · Tailwind CSS v4 · shadcn/ui · Azure AD (Entra ID)

Funcionalidades:

  • Autenticación M2M con Azure AD / JWT (JWKS)
  • Portal del estudiante: historial académico, progreso por semestre
  • Portal del coordinador: gestión académica
  • Simulador de la API de UXXI (/ac_apipr/uxxiac_apipr/...) para pruebas del ACL de Gradus.API

Modelos principales: Institution → Faculty → Program → Pensum → Subject · Student · AcademicRecord · PartialGrade


Gradus Web — Frontend

apps/gradus/ · Puerto 3004

Frontend principal de la plataforma de homologación.

Stack: Next.js 16 · TypeScript · Tailwind CSS v4 · shadcn/ui · SignalR Client

Funcionalidades:

  • Autenticación con Azure AD y redirección basada en roles.
  • Conexión en tiempo real para notificaciones (SignalR).

Gradus.API — Backend

apps/gradus-api/ · Puerto 5002

API REST con Clean Architecture en 4 capas. Soporta el core de la plataforma de homologación.

Stack: .NET 10 · ASP.NET Core · C# · Entity Framework Core · MediatR · SignalR · QuestPDF

Funcionalidades:

  • Autenticación y Autorización JWT Bearer (Azure AD).
  • Arquitectura CQRS con MediatR.
  • Generación de documentos en formato PDF con QuestPDF.
  • WebSockets para notificaciones en tiempo real (SignalR).

Proyectos:

Capa Proyecto
Web / HTTP Gradus.API
Lógica de negocio Gradus.Application
Entidades de dominio Gradus.Domain
Datos / externos Gradus.Infrastructure

Infraestructura

Levantada con Docker Compose:

Servicio Imagen Puerto Base de datos
PostgreSQL postgres:18-alpine 5432 identity_db, universitas_db, gradus_db
Redis redis:8.4-alpine 6379

Inicio rápido

1. Variables de entorno

cp .env.example .env   # Ajustar POSTGRES_DB_PASSWORD

2. Infraestructura

docker compose up -d

3. Universitas

cd apps/universitas
cp .env.example .env.local   # Configurar Azure AD credentials
npm install
npx prisma migrate deploy
npx prisma db seed
npm run dev                   # http://localhost:3003

4. Gradus Web

cd apps/gradus
npm install
npm run dev                   # http://localhost:3004

5. Gradus.API

cd apps/gradus-api
dotnet restore

# Configurar secretos (evitar comitear contraseñas en appsettings.json)
# Puedes usar appsettings.Development.json o user-secrets:
dotnet user-secrets init --project Gradus.API
dotnet user-secrets set "ConnectionStrings:GradusDb" "Host=localhost;Port=5432;Database=gradus_db;Username=postgres;Password=secret" --project Gradus.API
dotnet user-secrets set "ConnectionStrings:Redis" "localhost:6379" --project Gradus.API
# Validación de tokens de usuario (Azure AD):
dotnet user-secrets set "AzureAd:TenantId" "<azure-tenant-id>" --project Gradus.API
dotnet user-secrets set "AzureAd:ClientId" "<azure-client-id>" --project Gradus.API
# Integración UXXI (modo "real" — en "simulator" no se necesitan):
dotnet user-secrets set "Uxxi:ClientId" "<uxxi-client-id>" --project Gradus.API
dotnet user-secrets set "Uxxi:ClientSecret" "<uxxi-client-secret>" --project Gradus.API
dotnet user-secrets set "MediatR:LicenseKey" "<mediatR-license-key>" --project Gradus.API

dotnet run --project Gradus.API   # http://localhost:5002

Variables de entorno

Raíz (.env)

Variable Descripción
POSTGRES_DB_PASSWORD Contraseña de PostgreSQL

Universitas (.env.local)

Variable Descripción
DATABASE_URL Connection string PostgreSQL
AZURE_AD_TENANT_ID Tenant ID de Azure AD
AZURE_AD_CLIENT_ID Client ID de la aplicación
SESSION_SECRET Secreto para sesiones

Documentación

Índice completo en docs/README.md. Organización por carpetas:

Carpeta Contenido
docs/fundacion/ Brief, plan técnico, tasks y esquemas de BD
docs/integracion-uxxi/ ⭐ Trabajo activo: análisis, plan de implementación, diseño del ACL y specs de UXXI (specs/)
docs/features/ Planes de funcionalidades y reportes de bugs
docs/guias/ Guías de setup y de trabajo con Claude
docs/auditoria/ Auditoría técnica externa

Tecnologías

Categoría Tecnología
Frontend Next.js 16, TypeScript, Tailwind CSS v4, shadcn/ui
Backend ASP.NET Core 10, C#, MediatR (CQRS)
ORM Prisma (Universitas), Entity Framework Core (Gradus)
Base de datos PostgreSQL 18
Caché Redis 8.4
Autenticación Azure AD / Entra ID, JWT
Contenedores Docker Compose
Tiempo Real SignalR (WebSockets)
Documentos QuestPDF

About

Ecosistema académico para homologaciones con Next.js, .NET, PostgreSQL y Azure AD (SSO + M2M).

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors