B. Architecture & organisation du code - uha-fr/endyear_2025_gr11_back GitHub Wiki
Architecture & organisation du code
Organisation du code
Le dossier PROJET-GIT contient une application constituΓ©e dβun serveur flask de modules dβanalyse, des bases de donnΓ©es et une interface utilisateur.
-
archeologist/ : API code-archeologist pour lβanalyse de dΓ©pots - service archeologist-db
-
archeologist-db/ : la base de donnΓ©es pour stocker les analyses faites par code-archeologist - service archeologist
-
backend/ : serveur API flask pour centraliser les traitements et flux de donnΓ©es - service api
-
- app/modules/ : appel des modules modules dβanalyse (archeologist)
-
- app/routes/ : routes pour recevoir des demandes depuis le frontend
-
- utils/ : fonctions utilitaires
-
-
data/ : les donnΓ©es Γ traiter, fournies par lβutilisateur (au format JSON)
-
db_init/ : scripts dβinitialisation des bases de donnΓ©es
-
frontend/ : interface utilisateur, mets en forme les donnΓ©es dβanalyse - service front
graph TD
A[PROJET-GIT]
A --> B{Fichiers racine}
B --> B1[README.md]
B --> B2[docker-compose.yml]
B --> B3[Dockerfile.flask]
B --> B4[projet_git.sh]
B --> B5[projet_git_exit.sh]
B --> B6[projet_git_reset.sh]
B --> B7[requirements.txt]
B --> B8[wait-for-it.sh]
A --> C[archeologist/]
C --> C1[requirements.txt]
C --> C2[backend/]
C2 --> C2_1[app.mjs]
C2 --> C2_2[Dockerfile.archeologist]
C2 --> C2_3[eslint.config.js]
C2 --> C2_4[package-lock.json]
C2 --> C2_5[package.json]
C2 --> C2_6[server.mjs]
C --> C3[frontend/]
C3 --> C3_1[index.html]
C3 --> C3_2[package-lock.json]
C3 --> C3_3[package.json]
C3 --> C3_4[vite.config.js]
C3 --> C3_5[public/]
C3 --> C3_6[src/]
C3_6 --> C3_6_1[App.vue]
C3_6 --> C3_6_2[main.js]
C3_6 --> C3_6_3[style.css]
C3_6 --> C3_6_4[components/]
C3_6_4 --> C3_6_4_1[AnalysisDashboard.vue]
C3_6_4 --> C3_6_4_2[CodebaseHeatmap.vue]
C3_6_4 --> C3_6_4_3[CommitActivityTimeline.vue]
C3_6_4 --> C3_6_4_4[CommitQA.vue]
C3_6_4 --> C3_6_4_5[CommitSummary.vue]
C3_6_4 --> C3_6_4_6[ContributorStatistics.vue]
C3_6_4 --> C3_6_4_7[DependencyGraph.vue]
C3_6_4 --> C3_6_4_8[FileChangeFrequency.vue]
C3_6_4 --> C3_6_4_9[IssueIntegration.vue]
C3_6_4 --> C3_6_4_10[SimilarCommits.vue]
C3_6 --> C3_6_5[store/]
C3_6_5 --> C3_6_5_1[analysis.js]
A --> D[archeologist-db/]
D --> D1[Dockerfile.archeologist-db]
A --> E[backend/]
E --> E1[Dockerfile.flask]
E --> E2[main.py]
E --> E3[requirements.txt]
E --> E4[app/]
E4 --> E4_1[__init__.py]
E4 --> E4_2[config.py]
E4 --> E4_3[modules/]
E4_3 --> E4_3_1[blame.py]
E4_3 --> E4_3_2[code_archeologist.py]
E4_3 --> E4_3_3[git_statistic.py]
E4_3 --> E4_3_4[gitstats.py]
E4_3 --> E4_3_5[notes_td.py]
E4_3 --> E4_3_6[repo_analyzer.py]
E4 --> E4_4[routes/]
E4_4 --> E4_4_1[analysis.py]
E4_4 --> E4_4_2[audit.py]
E4_4 --> E4_4_3[groups.py]
E4_4 --> E4_4_4[repositories_groups.py]
E4_4 --> E4_4_5[repositories_students.py]
E4_4 --> E4_4_6[stats.py]
E4_4 --> E4_4_7[students.py]
E4 --> E4_5[utils/]
E4_5 --> E4_5_1[database.py]
E4_5 --> E4_5_2[dir_manager.py]
E4_5 --> E4_5_3[json_to_db.py]
E4_5 --> E4_5_4[node_analyzer_client.py]
E --> E5[data/]
E5 --> E5_1[deadlines.json]
E5 --> E5_2[groups.json]
E5 --> E5_3[repositories.json]
E5 --> E5_4[students.json]
A --> F[data/]
F --> F1[deadlines.json]
F --> F2[groupes.json]
F --> F3[groups.json]
F --> F4[lestds.json]
F --> F5[repos.json]
F --> F6[repositories.json]
F --> F7[students.json]
F --> F8[tds.json]
A --> G[db_init/]
G --> G1[before_empty.sql]
G --> G2[before_modif.sql]
G --> G3[init-timescaledb.sql]
G --> G4[init.sql]
G --> G5[init_____aaaa.sql]
G --> G6[init_old_1.sql]
G --> G7[new.sql]
A --> H[frontend/]
H --> H1[Dockerfile.front]
H --> H2[package-lock.json]
H --> H3[package.json]
H --> H4[.env]
H --> H5[public/]
H5 --> H5_1[index.html]
H5 --> H5_2[manifest.json]
H --> H6[src/]
H6 --> H6_1[App.jsx]
H6 --> H6_2[index.jsx]
H6 --> H6_3[assets/]
H6 --> H6_4[components/]
H6_4 --> H6_4_1[AuditDisplay.jsx]
H6_4 --> H6_4_2[Dashboard.jsx]
H6_4 --> H6_4_3[GroupAnalysis.jsx]
H6_4 --> H6_4_4[GroupList.jsx]
H6_4 --> H6_4_5[StudentForm.jsx]
H6_4 --> H6_4_6[StudentList.jsx]
H6_4 --> H6_4_7[StudentProfile.jsx]
H6_4 --> H6_4_8[Toolbar.jsx]
H6 --> H6_5[graphs/]
H6_5 --> H6_5_1[BlameChartEvolution.jsx]
H6_5 --> H6_5_2[ClassScore.jsx]
H6_5 --> H6_5_3[CodeEvolution.jsx]
H6_5 --> H6_5_4[CommitActivityTimeline.jsx]
H6_5 --> H6_5_5[CommitsChart.jsx]
H6_5 --> H6_5_6[FileChangeFrequencyGraph.jsx]
H6_5 --> H6_5_7[HeatMapFileChanges.jsx]
H6 --> H6_6[scriptDB/]
H6_6 --> H6_6_1["gitanalyser(2).sql"]
H6 --> H6_7[style/]
H6_7 --> H6_7_1[App.css]
H6_7 --> H6_7_2[AuditResultsDisplay.css]
H6_7 --> H6_7_3[Dashboard.css]
H6_7 --> H6_7_4[Graphs.css]
H6_7 --> H6_7_5[GroupAnalysis.css]
H6_7 --> H6_7_6[GroupList.css]
H6_7 --> H6_7_7[MainComponents.css]
H6_7 --> H6_7_8[StudentList.css]
H6_7 --> H6_7_9[StudentProfile.css]
H6_7 --> H6_7_10[Toolbar.css]
H6 --> H6_8[utils/]
H6_8 --> H6_8_1[stringUtils.jsx]
A --> I[json_utils/]
I --> I1[deadlines.json]
βββ PROJET-GIT
βββ README.md
βββ docker-compose.yml
βββ Dockerfile.flask
βββ projet_git.sh
βββ projet_git_exit.sh
βββ projet_git_reset.sh
βββ requirements.txt
βββ wait-for-it.sh
βββ archeologist/
β βββ requirements.txt
β βββ backend/
β β βββ app.mjs
β β βββ Dockerfile.archeologist
β β βββ eslint.config.js
β β βββ package-lock.json
β β βββ package.json
β β βββ server.mjs
β βββ frontend/
β βββ index.html
β βββ package-lock.json
β βββ package.json
β βββ vite.config.js
β βββ public/
β βββ src/
β βββ App.vue
β βββ main.js
β βββ style.css
β βββ components/
β β βββ AnalysisDashboard.vue
β β βββ CodebaseHeatmap.vue
β β βββ CommitActivityTimeline.vue
β β βββ CommitQA.vue
β β βββ CommitSummary.vue
β β βββ ContributorStatistics.vue
β β βββ DependencyGraph.vue
β β βββ FileChangeFrequency.vue
β β βββ IssueIntegration.vue
β β βββ SimilarCommits.vue
β βββ store/
β βββ analysis.js
βββ archeologist-db/
β βββ Dockerfile.archeologist-db
βββ backend/
β βββ Dockerfile.flask
β βββ main.py
β βββ requirements.txt
β βββ app/
β β βββ __init__.py
β β βββ config.py
β β βββ modules/
β β β βββ blame.py
β β β βββ code_archeologist.py
β β β βββ git_statistic.py
β β β βββ gitstats.py
β β β βββ notes_td.py
β β β βββ repo_analyzer.py
β β βββ routes/
β β β βββ analysis.py
β β β βββ audit.py
β β β βββ groups.py
β β β βββ repositories_groups.py
β β β βββ repositories_students.py
β β β βββ stats.py
β β β βββ students.py
β β βββ utils/
β β βββ database.py
β β βββ dir_manager.py
β β βββ json_to_db.py
β β βββ node_analyzer_client.py
β βββ data/
β βββ deadlines.json
β βββ groups.json
β βββ repositories.json
β βββ students.json
βββ data/
β βββ deadlines.json
β βββ groupes.json
β βββ groups.json
β βββ lestds.json
β βββ repos.json
β βββ repositories.json
β βββ students.json
β βββ tds.json
βββ db_init/
β βββ before_empty.sql
β βββ before_modif.sql
β βββ init-timescaledb.sql
β βββ init.sql
β βββ init_____aaaa.sql
β βββ init_old_1.sql
β βββ new.sql
βββ frontend/
β βββ Dockerfile.front
β βββ package-lock.json
β βββ package.json
β βββ .env
β βββ public/
β β βββ index.html
β β βββ manifest.json
β βββ src/
β βββ App.jsx
β βββ index.jsx
β βββ assets/
β βββ components/
β β βββ AuditDisplay.jsx
β β βββ Dashboard.jsx
β β βββ GroupAnalysis.jsx
β β βββ GroupList.jsx
β β βββ StudentForm.jsx
β β βββ StudentList.jsx
β β βββ StudentProfile.jsx
β β βββ Toolbar.jsx
β βββ graphs/
β β βββ BlameChartEvolution.jsx
β β βββ ClassScore.jsx
β β βββ CodeEvolution.jsx
β β βββ CommitActivityTimeline.jsx
β β βββ CommitsChart.jsx
β β βββ FileChangeFrequencyGraph.jsx
β β βββ HeatMapFileChanges.jsx
β βββ scriptDB/
β β βββ gitanalyser(2).sql
β βββ style/
β β βββ App.css
β β βββ AuditResultsDisplay.css
β β βββ Dashboard.css
β β βββ Graphs.css
β β βββ GroupAnalysis.css
β β βββ GroupList.css
β β βββ MainComponents.css
β β βββ StudentList.css
β β βββ StudentProfile.css
β β βββ Toolbar.css
β βββ utils/
β βββ stringUtils.jsx
βββ json_utils/
βββ deadlines.json
Containers
Chaque service aura son container dΓ©diΓ© dans lequel seront copiΓ©s les fichiers qui lui sont relatif :
- projet-git-archeologist-1
- projet-git-archeologist-db
- projet-git-front-1
- projet-git-db-1
- projet-git-api-1
Pour y accΓ©der et effectuer des commandes dessus : docker exec -it projet-git-db-1 bash
Volumes
Les donnΓ©es persistantes seront stockΓ©es dans des volumes montΓ©e dans lβimage docker :
- projet-git-archeologist-data : donnΓ©es dβanalyses persistantes stockΓ©es dans archeologist-db. Accessibles depuis le service archeologist sur : /home/postgres/pgdata/data
- projet-git-mysql-data : donnΓ©es persistantes extraites des fichiers JSON fournies par lβutilisateur. Accessible depuis le service db sur : /var/lib/mysql
- projet-git-repo : stockage des clones des dΓ©pots analysΓ©s. Accessible depuis les services api et archeologist sur : /app/clones
- Audit automatique dβun dΓ©pΓ΄t Git(GitHub/GitLab) :
-
Nombre de commits, rΓ©partition par auteur, co-modifications.
-
Fichiers les plus modifiΓ©s.
-
ComplexitΓ© cyclomatique de chaque fichier.
-
Contributions en ligne (ajouts/suppressions).
-
Γvolution temporelle (graphique + deadline).
-
Rapport HTML complet GitStats.
- Statistiques de classe pour un ensemble de dΓ©pΓ΄ts dβΓ©tudiants :
-
Analyse TD par TD (commits le samedi, score, Γ lβheure ou non).
-
Score global par Γ©tudiant.
-
Tableaux et graphiques consolidΓ©s.
-
DΓ©tection de patterns de code communs entre tous les TDs.
-
IntΓ©gration API GitHub : branches, PR, issues, reviews, CI/CD.