# cinnapea/ltnc_doansinhvien architecture

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

- Interactive diagram: https://gitdiagram.com/cinnapea/ltnc_doansinhvien
- Repository: https://github.com/cinnapea/ltnc_doansinhvien

## Overview

This is a multi-role student thesis management system: Spring Boot serves role-based web workflows, Rails exposes the academic CRUD API, and SQL Server is the shared persistent store. Admins manage accounts and monitor academic records; instructors create topics, approve registrations, supervise progress and submissions, and evaluate theses; students browse and register for topics, then work through thesis milestones and view results. The graph follows the README’s documented split architecture and major capabilities; sampled source confirms selected Spring-to-service and Rails controller behavior, but not every service call or database mapping.

Main entry points: [`src/main/java/com/webappfinal/final_webapp/controller`](https://github.com/cinnapea/ltnc_doansinhvien/tree/main/src/main/java/com/webappfinal/final_webapp/controller) (Web controllers), [`ruby_api/config/routes.rb`](https://github.com/cinnapea/ltnc_doansinhvien/blob/main/ruby_api/config/routes.rb) (API routes), [`ruby_api/app/controllers/api`](https://github.com/cinnapea/ltnc_doansinhvien/tree/main/ruby_api/app/controllers/api) (Thesis milestone APIs), [`src/main/java/com/webappfinal/final_webapp/repository`](https://github.com/cinnapea/ltnc_doansinhvien/tree/main/src/main/java/com/webappfinal/final_webapp/repository) (SQL repositories)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_spring["Spring web app"]
  node_web["Web controllers"]
  node_auth["Session and auth"]
  node_signup["Signup service<br/>[SignupService.java]"]
  node_dashboard["Dashboards"]
  node_profile["Profiles"]
  node_springservices["API services"]
  node_repositories["SQL repositories"]
end

subgraph group_rails["Rails API"]
  node_railsroutes["API routes<br/>[routes.rb]"]
  node_adminapi["Admin users API"]
  node_topicsapi["Topics API"]
  node_registrationsapi["Registrations API"]
  node_academicapi["Thesis milestone APIs"]
  node_railsmodels["Rails models"]
end

subgraph group_domain["Academic workflow"]
  node_users["Accounts and roles<br/>[NguoiDung.java]"]
  node_topics["Thesis topics<br/>[TheLoai.java]"]
  node_registrations["Topic registrations<br/>[DangKy.java]"]
  node_theses["Theses<br/>[DoAn.java]"]
  node_milestones["Progress and submissions<br/>[TienDo.java]"]
  node_evaluations["Evaluations<br/>[DanhGia.java]"]
end

subgraph group_persistence["Persistence"]
  node_sqlserver[("SQL Server")]
end

node_admin(("Admin"))
node_instructor(("Instructor"))
node_student(("Student"))

node_admin -->|"uses admin pages"| node_web
node_instructor -->|"uses instructor pages"| node_web
node_student -->|"uses student pages"| node_web
node_web -->|"checks sessions"| node_auth
node_web -->|"handles signup"| node_signup
node_web -->|"builds dashboards"| node_dashboard
node_web -->|"manages profiles"| node_profile
node_web -->|"requests academic data"| node_springservices
node_web -->|"reads user records"| node_repositories
node_auth -->|"checks credentials"| node_repositories
node_signup -->|"creates accounts"| node_repositories
node_profile -->|"reads and writes profiles"| node_repositories
node_springservices -->|"calls API"| node_railsroutes
node_railsroutes -->|"routes user requests"| node_adminapi
node_railsroutes -->|"routes topic requests"| node_topicsapi
node_railsroutes -->|"routes registration requests"| node_registrationsapi
node_railsroutes -->|"routes milestone requests"| node_academicapi
node_adminapi -->|"reads and writes users"| node_railsmodels
node_topicsapi -->|"reads and writes topics"| node_railsmodels
node_registrationsapi -->|"manages approvals"| node_railsmodels
node_academicapi -->|"manages academic records"| node_railsmodels
node_repositories -->|"reads and writes"| node_sqlserver
node_railsmodels -->|"persists records"| node_sqlserver
node_adminapi -->|"manages accounts"| node_users
node_topicsapi -->|"manages topics"| node_topics
node_registrationsapi -->|"approves or rejects"| node_registrations
node_academicapi -->|"serves thesis data"| node_theses
node_academicapi -->|"serves progress and submissions"| node_milestones
node_academicapi -->|"serves evaluations"| node_evaluations

click node_web "https://github.com/cinnapea/ltnc_doansinhvien/tree/main/src/main/java/com/webappfinal/final_webapp/controller"
click node_auth "https://github.com/cinnapea/ltnc_doansinhvien/blob/main/src/main/java/com/webappfinal/final_webapp/service/AuthSessionService.java"
click node_signup "https://github.com/cinnapea/ltnc_doansinhvien/blob/main/src/main/java/com/webappfinal/final_webapp/service/SignupService.java"
click node_dashboard "https://github.com/cinnapea/ltnc_doansinhvien/blob/main/src/main/java/com/webappfinal/final_webapp/service/DashboardService.java"
click node_profile "https://github.com/cinnapea/ltnc_doansinhvien/blob/main/src/main/java/com/webappfinal/final_webapp/service/ProfileService.java"
click node_springservices "https://github.com/cinnapea/ltnc_doansinhvien/tree/main/src/main/java/com/webappfinal/final_webapp/service"
click node_repositories "https://github.com/cinnapea/ltnc_doansinhvien/tree/main/src/main/java/com/webappfinal/final_webapp/repository"
click node_railsroutes "https://github.com/cinnapea/ltnc_doansinhvien/blob/main/ruby_api/config/routes.rb"
click node_adminapi "https://github.com/cinnapea/ltnc_doansinhvien/blob/main/ruby_api/app/controllers/api/admin/users_controller.rb"
click node_topicsapi "https://github.com/cinnapea/ltnc_doansinhvien/blob/main/ruby_api/app/controllers/api/the_loai_controller.rb"
click node_registrationsapi "https://github.com/cinnapea/ltnc_doansinhvien/blob/main/ruby_api/app/controllers/api/dang_ky_controller.rb"
click node_academicapi "https://github.com/cinnapea/ltnc_doansinhvien/tree/main/ruby_api/app/controllers/api"
click node_railsmodels "https://github.com/cinnapea/ltnc_doansinhvien/tree/main/ruby_api/app/models"
click node_users "https://github.com/cinnapea/ltnc_doansinhvien/blob/main/src/main/java/com/webappfinal/final_webapp/entity/NguoiDung.java"
click node_topics "https://github.com/cinnapea/ltnc_doansinhvien/blob/main/src/main/java/com/webappfinal/final_webapp/entity/TheLoai.java"
click node_registrations "https://github.com/cinnapea/ltnc_doansinhvien/blob/main/src/main/java/com/webappfinal/final_webapp/entity/DangKy.java"
click node_theses "https://github.com/cinnapea/ltnc_doansinhvien/blob/main/src/main/java/com/webappfinal/final_webapp/entity/DoAn.java"
click node_milestones "https://github.com/cinnapea/ltnc_doansinhvien/blob/main/src/main/java/com/webappfinal/final_webapp/entity/TienDo.java"
click node_evaluations "https://github.com/cinnapea/ltnc_doansinhvien/blob/main/src/main/java/com/webappfinal/final_webapp/entity/DanhGia.java"

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,node_auth,node_signup,node_dashboard,node_profile,node_springservices,node_repositories toneBlue
class node_railsroutes,node_adminapi,node_topicsapi,node_registrationsapi,node_academicapi,node_railsmodels toneAmber
class node_users,node_topics,node_registrations,node_theses,node_milestones,node_evaluations toneMint
class node_sqlserver toneRose
class node_admin,node_instructor,node_student toneIndigo
```

## Components

### Spring web app

- [Web controllers](https://github.com/cinnapea/ltnc_doansinhvien/tree/main/src/main/java/com/webappfinal/final_webapp/controller): `src/main/java/com/webappfinal/final_webapp/controller`
- [Session and auth](https://github.com/cinnapea/ltnc_doansinhvien/blob/main/src/main/java/com/webappfinal/final_webapp/service/AuthSessionService.java): `src/main/java/com/webappfinal/final_webapp/service/AuthSessionService.java`
- [Signup service](https://github.com/cinnapea/ltnc_doansinhvien/blob/main/src/main/java/com/webappfinal/final_webapp/service/SignupService.java): `src/main/java/com/webappfinal/final_webapp/service/SignupService.java`
- [Dashboards](https://github.com/cinnapea/ltnc_doansinhvien/blob/main/src/main/java/com/webappfinal/final_webapp/service/DashboardService.java): `src/main/java/com/webappfinal/final_webapp/service/DashboardService.java`
- [Profiles](https://github.com/cinnapea/ltnc_doansinhvien/blob/main/src/main/java/com/webappfinal/final_webapp/service/ProfileService.java): `src/main/java/com/webappfinal/final_webapp/service/ProfileService.java`
- [API services](https://github.com/cinnapea/ltnc_doansinhvien/tree/main/src/main/java/com/webappfinal/final_webapp/service): `src/main/java/com/webappfinal/final_webapp/service`
- [SQL repositories](https://github.com/cinnapea/ltnc_doansinhvien/tree/main/src/main/java/com/webappfinal/final_webapp/repository): `src/main/java/com/webappfinal/final_webapp/repository`

### Rails API

- [API routes](https://github.com/cinnapea/ltnc_doansinhvien/blob/main/ruby_api/config/routes.rb): `ruby_api/config/routes.rb`
- [Admin users API](https://github.com/cinnapea/ltnc_doansinhvien/blob/main/ruby_api/app/controllers/api/admin/users_controller.rb): `ruby_api/app/controllers/api/admin/users_controller.rb`
- [Topics API](https://github.com/cinnapea/ltnc_doansinhvien/blob/main/ruby_api/app/controllers/api/the_loai_controller.rb): `ruby_api/app/controllers/api/the_loai_controller.rb`
- [Registrations API](https://github.com/cinnapea/ltnc_doansinhvien/blob/main/ruby_api/app/controllers/api/dang_ky_controller.rb): `ruby_api/app/controllers/api/dang_ky_controller.rb`
- [Thesis milestone APIs](https://github.com/cinnapea/ltnc_doansinhvien/tree/main/ruby_api/app/controllers/api): `ruby_api/app/controllers/api`
- [Rails models](https://github.com/cinnapea/ltnc_doansinhvien/tree/main/ruby_api/app/models): `ruby_api/app/models`

### Academic workflow

- [Accounts and roles](https://github.com/cinnapea/ltnc_doansinhvien/blob/main/src/main/java/com/webappfinal/final_webapp/entity/NguoiDung.java): `src/main/java/com/webappfinal/final_webapp/entity/NguoiDung.java`
- [Thesis topics](https://github.com/cinnapea/ltnc_doansinhvien/blob/main/src/main/java/com/webappfinal/final_webapp/entity/TheLoai.java): `src/main/java/com/webappfinal/final_webapp/entity/TheLoai.java`
- [Topic registrations](https://github.com/cinnapea/ltnc_doansinhvien/blob/main/src/main/java/com/webappfinal/final_webapp/entity/DangKy.java): `src/main/java/com/webappfinal/final_webapp/entity/DangKy.java`
- [Theses](https://github.com/cinnapea/ltnc_doansinhvien/blob/main/src/main/java/com/webappfinal/final_webapp/entity/DoAn.java): `src/main/java/com/webappfinal/final_webapp/entity/DoAn.java`
- [Progress and submissions](https://github.com/cinnapea/ltnc_doansinhvien/blob/main/src/main/java/com/webappfinal/final_webapp/entity/TienDo.java): `src/main/java/com/webappfinal/final_webapp/entity/TienDo.java`
- [Evaluations](https://github.com/cinnapea/ltnc_doansinhvien/blob/main/src/main/java/com/webappfinal/final_webapp/entity/DanhGia.java): `src/main/java/com/webappfinal/final_webapp/entity/DanhGia.java`

### Persistence

- **SQL Server**

### Other components

- **Admin**
- **Instructor**
- **Student**

## Connections

- Admin → Web controllers: uses admin pages
- Instructor → Web controllers: uses instructor pages
- Student → Web controllers: uses student pages
- Web controllers → Session and auth: checks sessions
- Web controllers → Signup service: handles signup
- Web controllers → Dashboards: builds dashboards
- Web controllers → Profiles: manages profiles
- Web controllers → API services: requests academic data
- Web controllers → SQL repositories: reads user records
- Session and auth → SQL repositories: checks credentials
- Signup service → SQL repositories: creates accounts
- Profiles → SQL repositories: reads and writes profiles
- API services → API routes: calls API
- API routes → Admin users API: routes user requests
- API routes → Topics API: routes topic requests
- API routes → Registrations API: routes registration requests
- API routes → Thesis milestone APIs: routes milestone requests
- Admin users API → Rails models: reads and writes users
- Topics API → Rails models: reads and writes topics
- Registrations API → Rails models: manages approvals
- Thesis milestone APIs → Rails models: manages academic records
- SQL repositories → SQL Server: reads and writes
- Rails models → SQL Server: persists records
- Admin users API → Accounts and roles: manages accounts
- Topics API → Thesis topics: manages topics
- Registrations API → Topic registrations: approves or rejects
- Thesis milestone APIs → Theses: serves thesis data
- Thesis milestone APIs → Progress and submissions: serves progress and submissions
- Thesis milestone APIs → Evaluations: serves evaluations
