This project is designed to automate the work of the dean's office, enabling the management of student grades and performance analysis. The system provides an intuitive web interface for handling groups, students, teachers, subjects, and grades.
- User Roles: Regular users can only view data, while administrators have full access to modify records.
- Security: Authentication via JWT, passwords are securely stored using bcrypt hashing.
- Performance Analysis: Flexible filtering options for analyzing grades by students, groups, subjects, teachers, and academic years.
- Graphical Reports: Visualization of analysis results.
- Database Integrity: Ensures data consistency using constraints, transactions, and triggers.
- Language: Python
- Framework: FastAPI
- Database: PostgreSQL
- Migrations: Alembic
- Language: TypeScript
- Framework: React
- Build Tool: Vite
![photo](https://private-user-images.githubusercontent.com/116523390/408893894-622df7d3-fa29-4e6d-ab76-955bce6a7818.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk5Nzc5ODEsIm5iZiI6MTczOTk3NzY4MSwicGF0aCI6Ii8xMTY1MjMzOTAvNDA4ODkzODk0LTYyMmRmN2QzLWZhMjktNGU2ZC1hYjc2LTk1NWJjZTZhNzgxOC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjE5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxOVQxNTA4MDFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT00ZTY2Yjg2MDdiYzc4N2Y4MjM4N2QzOWQ2OGU0Njg2MGYzOTk4ZDUzOWNkYmJiODFlYjI3YjI2NjIwMTIzOTE1JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.MkjmOdjq73pV31z9Ni7JQXPFM7_EO8Pqu6QXDY49-b0)
- Python 3.10+
- Node.js 16+
- PostgreSQL
- Install dependencies:
pip install -r requirements.txt
- Configure database connection in the .env file:
DATABASE_URL=postgresql://user:password@localhost/dbname
- Apply migrations:
alembic upgrade head
- Start the server:
uvicorn main:app --reload
- Install dependencies:
npm install
2. Start the application:
npm run dev
This project provides a REST API for data management. Full documentation is available at:
http://localhost:8000/docs
- Login page
![photo](https://private-user-images.githubusercontent.com/116523390/408894376-7165f213-1ef1-4caf-85c1-9985a6e3f435.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk5Nzc5ODEsIm5iZiI6MTczOTk3NzY4MSwicGF0aCI6Ii8xMTY1MjMzOTAvNDA4ODk0Mzc2LTcxNjVmMjEzLTFlZjEtNGNhZi04NWMxLTk5ODVhNmUzZjQzNS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjE5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxOVQxNTA4MDFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0wMDUxNTc0NGQ2NDZmNTI0NjYxYjkzZWU2MGYyMmU4ZWNhODNmNGNiNzY0ZjJkYjJlM2E2MjNiZjljOTZkNmZhJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.yp0TwWo_IBhXca9M-hWk_B58DkxawiChQaDmYAh-i60)
- Analytics Section
![photo](https://private-user-images.githubusercontent.com/116523390/408894423-ce8d7d39-fbd6-4689-8b5f-a1e4706cce90.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk5Nzc5ODEsIm5iZiI6MTczOTk3NzY4MSwicGF0aCI6Ii8xMTY1MjMzOTAvNDA4ODk0NDIzLWNlOGQ3ZDM5LWZiZDYtNDY4OS04YjVmLWExZTQ3MDZjY2U5MC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjE5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxOVQxNTA4MDFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0xZjY0NGJkNTExZWIyZmNiZTVmODQyOTA4YTU2YzRhN2FhMzdmODgyNmI4ZDA0MzM2ZDk5OWUzMmE3YjkzMTY2JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.muHv7H-CJm6PUlQhF6dxCYGvQMyz9itStF83LMUC_U8)
- Groups section
![photo](https://private-user-images.githubusercontent.com/116523390/408894502-4d90a00c-c993-4d94-9547-2c723144862b.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk5Nzc5ODEsIm5iZiI6MTczOTk3NzY4MSwicGF0aCI6Ii8xMTY1MjMzOTAvNDA4ODk0NTAyLTRkOTBhMDBjLWM5OTMtNGQ5NC05NTQ3LTJjNzIzMTQ0ODYyYi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjE5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxOVQxNTA4MDFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT04OGU0MThkOGIwZWNmOTM2Y2NhMzJlMDQ3NTFlOWI1NGJmOWNlM2YzMzk3NDQ0MDM3ZjYzODIwMDc3YTk4MmI4JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.Nv1iIJFqdboxoDMOnUR8QQa6InyEAJc4h4AReD8dlmk)
- People section
![photo](https://private-user-images.githubusercontent.com/116523390/408894531-e30345d9-555a-46d0-8740-5b49f9f105c4.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk5Nzc5ODEsIm5iZiI6MTczOTk3NzY4MSwicGF0aCI6Ii8xMTY1MjMzOTAvNDA4ODk0NTMxLWUzMDM0NWQ5LTU1NWEtNDZkMC04NzQwLTViNDlmOWYxMDVjNC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjE5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxOVQxNTA4MDFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0wZWIyZjA1YTNkMzc0ZGY0ZDhkMDY1MzhiYjk0MDAyZDNjZTAzNGEwZTNiNTY2OTdlOTc0ODc0NzAwMjNjYjYwJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.C6tYI1OCv3-TfYvt3OWs_Wltbe_Mr__JuybCu9Ax0JA)
- Report example
![photo](https://private-user-images.githubusercontent.com/116523390/408894598-d8e90288-a7b5-4444-ab36-ed6b37bd6e7a.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk5Nzc5ODEsIm5iZiI6MTczOTk3NzY4MSwicGF0aCI6Ii8xMTY1MjMzOTAvNDA4ODk0NTk4LWQ4ZTkwMjg4LWE3YjUtNDQ0NC1hYjM2LWVkNmIzN2JkNmU3YS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjE5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxOVQxNTA4MDFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT01YWZkOWNkNGMyNzNiNTNmYWY3MzkzYjliNmE2YWM5MWY4ZGFhNDhkOWNiOTg0NjgzODEzMGJhMTlmZTRiNDY2JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9._Dx8UZJfKnbgTsrl_9p5LA4801fWbHjFRAadZAA5FOo)