How typeitorg/boero-api works
Purpose and runtime
Boero is a secure, multi-institution backend for academic and administrative management. It is a Java 21 / Spring Boot 4 REST service, started by src/main/java/ar/edu/utn/frvm/typeit/boero_api/BoeroApiApplication.java. HTTP controllers are the application entry points; there is no frontend in this repository.
Domain boundaries
Three bounded areas organize the system:
• Institutional management: institutions, people, students/guardians, addresses, and geographic reference data. Core model: src/main/java/ar/edu/utn/frvm/typeit/boero_api/institutional/entities/Institution.java, src/main/java/ar/edu/utn/frvm/typeit/boero_api/institutional/entities/Person.java.
• Authentication: separate institutional-user and platform-account identities, sessions, JWTs, refresh tokens, login/logout, and account administration. src/main/java/ar/edu/utn/frvm/typeit/boero_api/auth/controllers/AuthController.java, src/main/java/ar/edu/utn/frvm/typeit/boero_api/auth/services/JwtService.java.
• Authorization: roles, permissions, institution-scoped person assignments, and platform roles. src/main/java/ar/edu/utn/frvm/typeit/boero_api/authorization/entities/Role.java, src/main/java/ar/edu/utn/frvm/typeit/boero_api/authorization/services/AuthorizationService.java.
Request and security flow
Requests enter controllers, cross request logging and Spring Security, then invoke use-case services and JPA repositories. src/main/java/ar/edu/utn/frvm/typeit/boero_api/security/config/SecurityConfig.java establishes the security boundary; src/main/java/ar/edu/utn/frvm/typeit/boero_api/auth/filters/JwtAuthenticationFilter.java parses JWT credentials into a principal. Public-route policy is centralized in src/main/java/ar/edu/utn/frvm/typeit/boero_api/security/config/PublicRoutes.java.
Authenticated operations are guarded declaratively by permission, platform-role, and institution-access annotations. AOP aspects resolve effective authority and enforce tenant context before protected service/controller execution: src/main/java/ar/edu/utn/frvm/typeit/boero_api/authorization/security/PermissionAuthorizationAspect.java, src/main/java/ar/edu/utn/frvm/typeit/boero_api/authorization/security/InstitutionAccessAspect.java.
Identity and session lifecycle
Institutional and platform authentication use distinct user-details services and token/session entities. Login creates access and refresh credentials; refresh-token rotation/replay protection and session revocation limit token reuse; logout revokes sessions/tokens. Key stages are src/main/java/ar/edu/utn/frvm/typeit/boero_api/auth/services/LoginUseCase.java, src/main/java/ar/edu/utn/frvm/typeit/boero_api/auth/services/RefreshTokenUseCase.java, and src/main/java/ar/edu/utn/frvm/typeit/boero_api/auth/services/SessionRevocationService.java.
Tenant-aware institutional operations
Platform controllers administer institutions and cross-platform people; institutional controllers operate within the caller’s institution. Use cases contain business transitions such as institution provisioning/status changes and person CRUD, while repository interfaces isolate persistence. src/main/java/ar/edu/utn/frvm/typeit/boero_api/institutional/controllers/PlatformInstitutionController.java, src/main/java/ar/edu/utn/frvm/typeit/boero_api/institutional/services/CreateInstitutionUseCase.java, src/main/java/ar/edu/utn/frvm/typeit/boero_api/institutional/interfaces/InstitutionRepository.java.
Persistence, cache, and infrastructure
PostgreSQL is the durable store, schema-managed with Flyway migrations in src/main/resources/db/migration/. JPA auditing and UUIDv7 identity support are configured under src/main/java/ar/edu/utn/frvm/typeit/boero_api/config/JpaAuditingConfig.java. Redis supports caching, including authorization snapshots and token-related state; cache policy is rooted in src/main/java/ar/edu/utn/frvm/typeit/boero_api/config/CacheConfig.java.
Docker Compose supplies local service infrastructure via compose.yaml; the image build entry is Dockerfile. Environment-specific Spring configuration lives in src/main/resources/application-dev.properties, src/main/resources/application-staging.properties, and src/main/resources/application-prod.properties.
Cross-cutting API behavior
Controllers exchange request/response payloads rather than entities. Validation occurs at the API boundary; application/domain exceptions are converted to consistent HTTP error payloads by src/main/java/ar/edu/utn/frvm/typeit/boero_api/common/exceptions/GlobalExceptionHandler.java. Request logging is implemented by src/main/java/ar/edu/utn/frvm/typeit/boero_api/common/logging/RequestLoggingFilter.java.
Main entry points: AuthController.java Auth controller · PlatformInstitutionController.java Platform institution controller · SecurityConfig.java Security boundary · AuthorizationService.java Authorization service
Components 24
HTTP & Security
- Auth controller
src/main/java/ar/edu/utn/frvm/typeit/boero_api/auth/controllers/AuthController.java - Platform institution controller
src/main/java/ar/edu/utn/frvm/typeit/boero_api/institutional/controllers/PlatformInstitutionController.java - Request logging
src/main/java/ar/edu/utn/frvm/typeit/boero_api/common/logging/RequestLoggingFilter.java - Security boundary
src/main/java/ar/edu/utn/frvm/typeit/boero_api/security/config/SecurityConfig.java - Public route policy
src/main/java/ar/edu/utn/frvm/typeit/boero_api/security/config/PublicRoutes.java - JWT authentication · Builds the request principal from JWT credentials.
src/main/java/ar/edu/utn/frvm/typeit/boero_api/auth/filters/JwtAuthenticationFilter.java - HTTP error mapping
src/main/java/ar/edu/utn/frvm/typeit/boero_api/common/exceptions/GlobalExceptionHandler.java
Identity & Authorization
- Login use case · Issues access and refresh credentials for distinct identity types.
src/main/java/ar/edu/utn/frvm/typeit/boero_api/auth/services/LoginUseCase.java - Refresh token use case · Rotates refresh tokens and detects replay.
src/main/java/ar/edu/utn/frvm/typeit/boero_api/auth/services/RefreshTokenUseCase.java - Session revocation · Revokes sessions and associated token state on logout.
src/main/java/ar/edu/utn/frvm/typeit/boero_api/auth/services/SessionRevocationService.java - JWT service
src/main/java/ar/edu/utn/frvm/typeit/boero_api/auth/services/JwtService.java - Authorization service · Resolves roles, permissions, assignments, and platform roles.
src/main/java/ar/edu/utn/frvm/typeit/boero_api/authorization/services/AuthorizationService.java - Permission enforcement
src/main/java/ar/edu/utn/frvm/typeit/boero_api/authorization/security/PermissionAuthorizationAspect.java - Institution access enforcement · Enforces tenant context for protected operations.
src/main/java/ar/edu/utn/frvm/typeit/boero_api/authorization/security/InstitutionAccessAspect.java - Roles and permissions
src/main/java/ar/edu/utn/frvm/typeit/boero_api/authorization/entities/Role.java
Institutional Domain
- Institution provisioning · Creates institutions and manages status transitions.
src/main/java/ar/edu/utn/frvm/typeit/boero_api/institutional/services/CreateInstitutionUseCase.java - Institution model
src/main/java/ar/edu/utn/frvm/typeit/boero_api/institutional/entities/Institution.java - People model · Supports people, students, guardians, and institutional identities.
src/main/java/ar/edu/utn/frvm/typeit/boero_api/institutional/entities/Person.java - Institution repository
src/main/java/ar/edu/utn/frvm/typeit/boero_api/institutional/interfaces/InstitutionRepository.java
Persistence & Cache
- PostgreSQL
- Flyway migrations
- Redis · Stores authorization snapshots and token-related state.
- Cache policy
src/main/java/ar/edu/utn/frvm/typeit/boero_api/config/CacheConfig.java
Other components
- Spring Boot application · Java 21 REST service bootstrap.
src/main/java/ar/edu/utn/frvm/typeit/boero_api/BoeroApiApplication.java
Connections 29
- Spring Boot application → Request logging: starts HTTP pipeline
- Request logging → Security boundary: logs requests before security
- Security boundary → Public route policy: applies public-route rules
- Security boundary → JWT authentication: installs authentication filter
- JWT authentication → JWT service: validates JWT
- Security boundary → Auth controller: routes authenticated/public requests
- Security boundary → Platform institution controller: routes protected requests
- Auth controller → Login use case: login
- Auth controller → Refresh token use case: refresh
- Auth controller → Session revocation: logout
- Login use case → JWT service: issues access token
- Refresh token use case → JWT service: issues rotated access token
- Login use case → Redis: records token/session state
- Refresh token use case → Redis: checks rotation state
- Session revocation → Redis: invalidates token state
- Platform institution controller → Permission enforcement: protected by permission annotations
- Platform institution controller → Institution access enforcement: protected by institution scope
- Permission enforcement → Authorization service: resolves effective authority
- Institution access enforcement → Authorization service: checks tenant assignment
- Authorization service → Roles and permissions: uses roles and permissions
- Authorization service → Redis: uses authorization snapshots
- Platform institution controller → Institution provisioning: invokes provisioning
- Institution provisioning → Institution model: creates and changes
- Institution provisioning → Institution repository: persists through
- Institution repository → PostgreSQL: JPA persistence
- Flyway migrations → PostgreSQL: manages schema
- Cache policy → Redis: configures caching
- Auth controller → HTTP error mapping: maps failures
- Platform institution controller → HTTP error mapping: maps failures