# bonifacho/sintesis_backend architecture

> Architecture diagram of the GitHub repository bonifacho/sintesis_backend, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/bonifacho/sintesis_backend
- Repository: https://github.com/bonifacho/sintesis_backend

## Overview

SÍNTESIS is a Flask LMS API. Clients use its security endpoints to register, authenticate, and manage identity and access; academic endpoints manage groups, enrollment, course content, assessments, and learner progress. Routes delegate domain work to services, which use repositories for database access. The README documents broader academic capabilities than the sampled excerpts; those are represented at the domain-module level without asserting unsampled internal call details.

Main entry points: [`app/__init__.py`](https://github.com/bonifacho/sintesis_backend/blob/main/app/__init__.py) (Flask app), [`app/core_security/routes.py`](https://github.com/bonifacho/sintesis_backend/blob/main/app/core_security/routes.py) (Security routes), [`app/core_security/services.py`](https://github.com/bonifacho/sintesis_backend/blob/main/app/core_security/services.py) (Security service), [`app/core_academic/routes.py`](https://github.com/bonifacho/sintesis_backend/blob/main/app/core_academic/routes.py) (Academic routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["API foundation"]
  node_factory["Flask app<br/>[__init__.py]"]
  node_extensions["Flask extensions<br/>[extensions.py]"]
end

subgraph group_security["Identity and access"]
  node_security_routes["Security routes<br/>[routes.py]"]
  node_security_service["Security service<br/>[services.py]"]
  node_security_repo["Security repository<br/>[repositories.py]"]
  node_security_models["Security models<br/>[models.py]"]
  node_role_guard["Role guard<br/>[decorators.py]"]
  node_jwt_blocklist["JWT revocation check<br/>[extensions.py]"]
end

subgraph group_academic["Learning domain"]
  node_academic_routes["Academic routes<br/>[routes.py]"]
  node_academic_service["Academic service<br/>[services.py]"]
  node_academic_repo["Academic repository<br/>[repositories.py]"]
  node_academic_models["Academic models<br/>[models.py]"]
end

subgraph group_data["Persistence"]
  node_database[("SQL database")]
end

node_client(("API client"))
node_email["Email delivery"]

node_client -->|"sends HTTP"| node_factory
node_factory -->|"initializes"| node_extensions
node_factory -->|"registers blueprint"| node_security_routes
node_factory -->|"registers blueprint"| node_academic_routes
node_security_routes -->|"returns JSON"| node_client
node_academic_routes -->|"returns JSON"| node_client
node_security_routes -->|"calls"| node_security_service
node_security_routes -->|"uses access guard"| node_role_guard
node_role_guard -->|"verifies JWT"| node_extensions
node_security_service -->|"queries and persists"| node_security_repo
node_security_repo -->|"reads and writes"| node_database
node_extensions -->|"checks token status"| node_jwt_blocklist
node_jwt_blocklist -->|"looks up revoked token"| node_database
node_security_service -.->|"would send reset instructions"| node_email
node_academic_routes -->|"calls"| node_academic_service
node_academic_service -->|"queries and persists"| node_academic_repo
node_academic_repo -->|"reads and writes"| node_database

click node_factory "https://github.com/bonifacho/sintesis_backend/blob/main/app/__init__.py"
click node_extensions "https://github.com/bonifacho/sintesis_backend/blob/main/app/extensions.py"
click node_security_routes "https://github.com/bonifacho/sintesis_backend/blob/main/app/core_security/routes.py"
click node_security_service "https://github.com/bonifacho/sintesis_backend/blob/main/app/core_security/services.py"
click node_security_repo "https://github.com/bonifacho/sintesis_backend/blob/main/app/core_security/repositories.py"
click node_security_models "https://github.com/bonifacho/sintesis_backend/blob/main/app/core_security/models.py"
click node_role_guard "https://github.com/bonifacho/sintesis_backend/blob/main/app/utils/decorators.py"
click node_jwt_blocklist "https://github.com/bonifacho/sintesis_backend/blob/main/app/extensions.py"
click node_academic_routes "https://github.com/bonifacho/sintesis_backend/blob/main/app/core_academic/routes.py"
click node_academic_service "https://github.com/bonifacho/sintesis_backend/blob/main/app/core_academic/services.py"
click node_academic_repo "https://github.com/bonifacho/sintesis_backend/blob/main/app/core_academic/repositories.py"
click node_academic_models "https://github.com/bonifacho/sintesis_backend/blob/main/app/core_academic/models.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_factory,node_extensions,node_client toneBlue
class node_security_routes,node_security_service,node_security_repo,node_security_models,node_role_guard,node_jwt_blocklist toneAmber
class node_academic_routes,node_academic_service,node_academic_repo,node_academic_models toneMint
class node_database toneRose
class node_email toneIndigo
```

## Components

### API foundation

- [Flask app](https://github.com/bonifacho/sintesis_backend/blob/main/app/__init__.py): `app/__init__.py`
- [Flask extensions](https://github.com/bonifacho/sintesis_backend/blob/main/app/extensions.py): `app/extensions.py`

### Identity and access

- [Security routes](https://github.com/bonifacho/sintesis_backend/blob/main/app/core_security/routes.py): `app/core_security/routes.py`
- [Security service](https://github.com/bonifacho/sintesis_backend/blob/main/app/core_security/services.py): `app/core_security/services.py`
- [Security repository](https://github.com/bonifacho/sintesis_backend/blob/main/app/core_security/repositories.py): `app/core_security/repositories.py`
- [Security models](https://github.com/bonifacho/sintesis_backend/blob/main/app/core_security/models.py): `app/core_security/models.py`
- [Role guard](https://github.com/bonifacho/sintesis_backend/blob/main/app/utils/decorators.py): `app/utils/decorators.py`
- [JWT revocation check](https://github.com/bonifacho/sintesis_backend/blob/main/app/extensions.py): `app/extensions.py`

### Learning domain

- [Academic routes](https://github.com/bonifacho/sintesis_backend/blob/main/app/core_academic/routes.py): `app/core_academic/routes.py`
- [Academic service](https://github.com/bonifacho/sintesis_backend/blob/main/app/core_academic/services.py): `app/core_academic/services.py`
- [Academic repository](https://github.com/bonifacho/sintesis_backend/blob/main/app/core_academic/repositories.py): `app/core_academic/repositories.py`
- [Academic models](https://github.com/bonifacho/sintesis_backend/blob/main/app/core_academic/models.py): `app/core_academic/models.py`

### Persistence

- **SQL database**

### Other components

- **API client**
- **Email delivery**

## Connections

- API client → Flask app: sends HTTP
- Flask app → Flask extensions: initializes
- Flask app → Security routes: registers blueprint
- Flask app → Academic routes: registers blueprint
- Security routes → API client: returns JSON
- Academic routes → API client: returns JSON
- Security routes → Security service: calls
- Security routes → Role guard: uses access guard
- Role guard → Flask extensions: verifies JWT
- Security service → Security repository: queries and persists
- Security repository → SQL database: reads and writes
- Flask extensions → JWT revocation check: checks token status
- JWT revocation check → SQL database: looks up revoked token
- Security service → Email delivery: would send reset instructions
- Academic routes → Academic service: calls
- Academic service → Academic repository: queries and persists
- Academic repository → SQL database: reads and writes
