# rayanechentouf/haasna_school architecture

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

- Interactive diagram: https://gitdiagram.com/rayanechentouf/haasna_school
- Repository: https://github.com/rayanechentouf/haasna_school

## Overview

ENT is a school-management portal for students, teachers, and administrative staff. Users sign in through the role-aware web app; its API serves role-specific dashboards and workflows for attendance, grades, homework, schedules, and administration, persisting school records in a relational database. The README also documents communications, reports, and data import/export. Sampled source confirms the API/router boundary, token-based login, client requests, search, and database setup; relationships among unsampled route families are shown only where the app's router registration or README supports them.

Main entry points: [`backend/app/main.py`](https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/main.py) (FastAPI app), [`backend/app/core/database.py`](https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/core/database.py) (DB sessions), [`frontend/src/App.jsx`](https://github.com/rayanechentouf/haasna_school/blob/main/frontend/src/App.jsx) (Role dashboards), [`backend/app/routes/auth.py`](https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/auth.py) (Authentication)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web application"]
  node_web_app["Role dashboards<br/>[App.jsx]"]
  node_web_login["Login/session<br/>[AuthContext.jsx]"]
  node_web_api["API client<br/>[client.js]"]
  node_web_search["Global search<br/>[GlobalSearch.jsx]"]
end

subgraph group_identity["Identity and access"]
  node_auth_routes["Authentication<br/>[auth.py]"]
  node_user_routes["Users and roles<br/>[users.py]"]
end

subgraph group_school["School operations"]
  node_student_routes["Student records<br/>[students.py]"]
  node_teacher_routes["Teacher records<br/>[teachers.py]"]
  node_class_routes["Classes and subjects<br/>[classes.py]"]
  node_attendance_routes["Attendance<br/>[attendance.py]"]
  node_justification_routes["Absence justifications"]
  node_schedule_routes["Timetables<br/>[schedules.py]"]
end

subgraph group_learning["Learning workflows"]
  node_grade_routes["Grades and exams<br/>[grades.py]"]
  node_homework_routes["Homework<br/>[homework.py]"]
  node_submission_routes["Submissions<br/>[submissions.py]"]
  node_remark_routes["Remarks<br/>[remarks.py]"]
end

subgraph group_platform["API and persistence"]
  node_dashboard_routes["Role dashboards<br/>[dashboard.py]"]
  node_report_routes["Reports and exports<br/>[reports.py]"]
  node_dataio_routes["Import and export"]
  node_search_routes["Search<br/>[search.py]"]
  node_settings_routes["School settings<br/>[school_settings.py]"]
  node_communication_routes["Communication<br/>[emails.py]"]
  node_notification_routes["Notifications<br/>[notifications.py]"]
  node_audit_routes["Audit logs<br/>[audit.py]"]
  node_api_app["FastAPI app<br/>[main.py]"]
  node_models["Domain models"]
  node_db_session["DB sessions<br/>[database.py]"]
  node_school_db[("Relational database")]
end

node_student_actor(("Student"))
node_teacher_actor(("Teacher"))
node_admin_actor(("Administrator"))

node_student_actor -->|"uses portal"| node_web_app
node_teacher_actor -->|"uses portal"| node_web_app
node_admin_actor -->|"uses portal"| node_web_app
node_web_app -->|"routes login"| node_web_login
node_web_login -->|"posts credentials"| node_auth_routes
node_web_login -->|"sets session"| node_web_app
node_web_app -->|"requests data"| node_web_api
node_web_api -->|"sends HTTP"| node_api_app
node_api_app -->|"dispatches"| node_auth_routes
node_api_app -->|"dispatches"| node_user_routes
node_api_app -->|"dispatches"| node_student_routes
node_api_app -->|"dispatches"| node_teacher_routes
node_api_app -->|"dispatches"| node_class_routes
node_api_app -->|"dispatches"| node_attendance_routes
node_api_app -->|"dispatches"| node_justification_routes
node_api_app -->|"dispatches"| node_schedule_routes
node_api_app -->|"dispatches"| node_grade_routes
node_api_app -->|"dispatches"| node_homework_routes
node_api_app -->|"dispatches"| node_submission_routes
node_api_app -->|"dispatches"| node_remark_routes
node_api_app -->|"dispatches"| node_dashboard_routes
node_api_app -->|"dispatches"| node_report_routes
node_api_app -->|"dispatches"| node_dataio_routes
node_api_app -->|"dispatches"| node_search_routes
node_api_app -->|"dispatches"| node_settings_routes
node_api_app -->|"dispatches"| node_communication_routes
node_api_app -->|"dispatches"| node_notification_routes
node_api_app -->|"dispatches"| node_audit_routes
node_web_search -->|"queries"| node_web_api
node_search_routes -->|"queries records"| node_models
node_auth_routes -->|"reads/writes users"| node_models
node_auth_routes -->|"opens session"| node_db_session
node_student_routes -->|"opens session"| node_db_session
node_teacher_routes -->|"opens session"| node_db_session
node_class_routes -->|"opens session"| node_db_session
node_attendance_routes -->|"opens session"| node_db_session
node_schedule_routes -->|"opens session"| node_db_session
node_grade_routes -->|"opens session"| node_db_session
node_homework_routes -->|"opens session"| node_db_session
node_dashboard_routes -->|"opens session"| node_db_session
node_search_routes -->|"opens session"| node_db_session
node_db_session -->|"connects"| node_school_db
node_models -->|"maps records"| node_school_db

click node_web_app "https://github.com/rayanechentouf/haasna_school/blob/main/frontend/src/App.jsx"
click node_web_login "https://github.com/rayanechentouf/haasna_school/blob/main/frontend/src/contexts/AuthContext.jsx"
click node_web_api "https://github.com/rayanechentouf/haasna_school/blob/main/frontend/src/api/client.js"
click node_web_search "https://github.com/rayanechentouf/haasna_school/blob/main/frontend/src/components/GlobalSearch.jsx"
click node_auth_routes "https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/auth.py"
click node_user_routes "https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/users.py"
click node_student_routes "https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/students.py"
click node_teacher_routes "https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/teachers.py"
click node_class_routes "https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/classes.py"
click node_attendance_routes "https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/attendance.py"
click node_justification_routes "https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/attendance_justifications.py"
click node_schedule_routes "https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/schedules.py"
click node_grade_routes "https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/grades.py"
click node_homework_routes "https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/homework.py"
click node_submission_routes "https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/submissions.py"
click node_remark_routes "https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/remarks.py"
click node_dashboard_routes "https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/dashboard.py"
click node_report_routes "https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/reports.py"
click node_dataio_routes "https://github.com/rayanechentouf/haasna_school/tree/main/backend/app/routes/data_io"
click node_search_routes "https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/search.py"
click node_settings_routes "https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/school_settings.py"
click node_communication_routes "https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/emails.py"
click node_notification_routes "https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/notifications.py"
click node_audit_routes "https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/audit.py"
click node_api_app "https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/main.py"
click node_models "https://github.com/rayanechentouf/haasna_school/tree/main/backend/app/models"
click node_db_session "https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/core/database.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_web_app,node_web_login,node_web_api,node_web_search toneBlue
class node_auth_routes,node_user_routes toneAmber
class node_student_routes,node_teacher_routes,node_class_routes,node_attendance_routes,node_justification_routes,node_schedule_routes toneMint
class node_grade_routes,node_homework_routes,node_submission_routes,node_remark_routes toneRose
class node_dashboard_routes,node_report_routes,node_dataio_routes,node_search_routes,node_settings_routes,node_communication_routes,node_notification_routes,node_audit_routes,node_api_app,node_models,node_db_session,node_school_db,node_student_actor,node_teacher_actor,node_admin_actor toneIndigo
```

## Components

### Web application

- [Role dashboards](https://github.com/rayanechentouf/haasna_school/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Login/session](https://github.com/rayanechentouf/haasna_school/blob/main/frontend/src/contexts/AuthContext.jsx): `frontend/src/contexts/AuthContext.jsx`
- [API client](https://github.com/rayanechentouf/haasna_school/blob/main/frontend/src/api/client.js): `frontend/src/api/client.js`
- [Global search](https://github.com/rayanechentouf/haasna_school/blob/main/frontend/src/components/GlobalSearch.jsx): `frontend/src/components/GlobalSearch.jsx`

### Identity and access

- [Authentication](https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/auth.py): `backend/app/routes/auth.py`
- [Users and roles](https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/users.py): `backend/app/routes/users.py`

### School operations

- [Student records](https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/students.py): `backend/app/routes/students.py`
- [Teacher records](https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/teachers.py): `backend/app/routes/teachers.py`
- [Classes and subjects](https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/classes.py): `backend/app/routes/classes.py`
- [Attendance](https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/attendance.py): `backend/app/routes/attendance.py`
- [Absence justifications](https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/attendance_justifications.py): `backend/app/routes/attendance_justifications.py`
- [Timetables](https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/schedules.py): `backend/app/routes/schedules.py`

### Learning workflows

- [Grades and exams](https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/grades.py): `backend/app/routes/grades.py`
- [Homework](https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/homework.py): `backend/app/routes/homework.py`
- [Submissions](https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/submissions.py): `backend/app/routes/submissions.py`
- [Remarks](https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/remarks.py): `backend/app/routes/remarks.py`

### API and persistence

- [Role dashboards](https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/dashboard.py): `backend/app/routes/dashboard.py`
- [Reports and exports](https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/reports.py): `backend/app/routes/reports.py`
- [Import and export](https://github.com/rayanechentouf/haasna_school/tree/main/backend/app/routes/data_io): `backend/app/routes/data_io`
- [Search](https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/search.py): `backend/app/routes/search.py`
- [School settings](https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/school_settings.py): `backend/app/routes/school_settings.py`
- [Communication](https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/emails.py): `backend/app/routes/emails.py`
- [Notifications](https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/notifications.py): `backend/app/routes/notifications.py`
- [Audit logs](https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/routes/audit.py): `backend/app/routes/audit.py`
- [FastAPI app](https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/main.py): `backend/app/main.py`
- [Domain models](https://github.com/rayanechentouf/haasna_school/tree/main/backend/app/models): `backend/app/models`
- [DB sessions](https://github.com/rayanechentouf/haasna_school/blob/main/backend/app/core/database.py): `backend/app/core/database.py`
- **Relational database**

### Other components

- **Student**
- **Teacher**
- **Administrator**

## Connections

- Student → Role dashboards: uses portal
- Teacher → Role dashboards: uses portal
- Administrator → Role dashboards: uses portal
- Role dashboards → Login/session: routes login
- Login/session → Authentication: posts credentials
- Login/session → Role dashboards: sets session
- Role dashboards → API client: requests data
- API client → FastAPI app: sends HTTP
- FastAPI app → Authentication: dispatches
- FastAPI app → Users and roles: dispatches
- FastAPI app → Student records: dispatches
- FastAPI app → Teacher records: dispatches
- FastAPI app → Classes and subjects: dispatches
- FastAPI app → Attendance: dispatches
- FastAPI app → Absence justifications: dispatches
- FastAPI app → Timetables: dispatches
- FastAPI app → Grades and exams: dispatches
- FastAPI app → Homework: dispatches
- FastAPI app → Submissions: dispatches
- FastAPI app → Remarks: dispatches
- FastAPI app → Role dashboards: dispatches
- FastAPI app → Reports and exports: dispatches
- FastAPI app → Import and export: dispatches
- FastAPI app → Search: dispatches
- FastAPI app → School settings: dispatches
- FastAPI app → Communication: dispatches
- FastAPI app → Notifications: dispatches
- FastAPI app → Audit logs: dispatches
- Global search → API client: queries
- Search → Domain models: queries records
- Authentication → Domain models: reads/writes users
- Authentication → DB sessions: opens session
- Student records → DB sessions: opens session
- Teacher records → DB sessions: opens session
- Classes and subjects → DB sessions: opens session
- Attendance → DB sessions: opens session
- Timetables → DB sessions: opens session
- Grades and exams → DB sessions: opens session
- Homework → DB sessions: opens session
- Role dashboards → DB sessions: opens session
- Search → DB sessions: opens session
- DB sessions → Relational database: connects
- Domain models → Relational database: maps records
