The Clinic Management System is a Spring Bootβbased application that simplifies patient, doctor, appointment, and prescription management. It features secure JWT authentication, PostgreSQL database integration, PDF reporting, and email notifications. Designed with a multi-layered architecture and CI/CD pipelines, it provides a scalable, professional solution for modern healthcare operations.
Backend
- Java 21+ β’ Spring Boot (Web, Security, Validation, Mail, Data JPA)
- JWT (Authentication & Authorization)
- PostgreSQL
- OpenAPI/Swagger β’ OpenPDF (PDF reports)
Architecture & Quality
- Layered architecture (Controller β Service β Repository β Entity/DTO)
- MapStruct/Manual mappers, Global exception handling
- JUnit 5, Mockito, Testcontainers (opsiyonel), JaCoCo coverage
DevOps
- GitHub Actions (CI/CD) β’ Docker & Docker Compose
- Doxygen/Javadoc β’ Pre-commit hooks
Frontend
- React + Vite + TypeScript
- Tailwind CSS
cmd cd C:\Users\yagiz\Desktop\Project\clinic-management-system\clinic-management-app mvn spring-boot:run
Swagger UI: http://localhost:8080/swagger-ui.html
The frontend is a React + Vite app. During development it runs on http://localhost:5173.
CMD
cd C:\Users\yagiz\Desktop\Project\clinic-management-system\frontend npm run dev
Open http://localhost:5173/ in your browser.
Below are example panels from the Clinic Management System frontend (React + Vite):
View daily appointments, approve/cancel them, and create prescriptions

Book appointments, check statuses, and view prescriptions

The frontend depends on the Spring Boot backend running on http://localhost:8080.
If the backend is not running, pages that rely on API calls (patients, doctors, appointments, etc.) will fail.
clinic-management-system/
βββ clinic-management-app/ # Backend (Spring Boot) + Frontend (React)
β βββ docs/ # UML diagrams, coverage badges, guides
β β βββ class-diagram.(puml|png|svg|pdf)
β β βββ component-diagram.(puml|png|svg)
β β βββ deployment-diagram.(puml|png|svg)
β β βββ sequence-*.puml # Sequence diagrams
β β βββ use-case-diagram.(puml|png|svg)
β β
β βββ src/main/java/com/yagiz/clinic/
β β βββ common/ # Mail, PDF, SMS services
β β βββ controller/ # REST Controllers (Patient, Doctor, etc.)
β β βββ dto/ # DTOs and CreateRequest objects
β β βββ exception/ # Global exception handling
β β βββ mapper/ # MapStruct/Manual mappers
β β βββ model/ # Entities + enums (User, Doctor, Patientβ¦)
β β βββ notification/ # NotificationLog entity
β β βββ repository/ # Spring Data JPA repositories
β β βββ security/ # Spring Security + JWT auth
β β βββ service/ # Services + implementations
β β βββ ClinicApp.java # Main Spring Boot Application
β β
β βββ src/test/java/com/yagiz/clinic/
β β βββ appointment_tests/
β β βββ doctor_tests/
β β βββ patient_tests/
β β βββ prescription_tests/
β β βββ controller_tests/
β β βββ jwt_tests/
β β βββ impl_tests/
β β βββ exception_and_notification_tests/
β β βββ security_tests/
β β βββ user_tests/
β β
β βββ frontend/ # React + Vite + Tailwind UI
β β βββ src/
β β β βββ assets/ # Images, logos, screenshots
β β β βββ components/ # Reusable UI components
β β β βββ hooks/ # Custom React hooks
β β β βββ lib/ # API handlers
β β β βββ pages/ # Admin, Doctor, Patient, Auth
β β β βββ routes/ # Route guards, role-based routing
β β β βββ App.tsx # Main App
β β β βββ index.css # Global styles
β β βββ package.json, vite.config.ts, tsconfig.json
β β βββ tailwind.config.cjs, eslint.config.js
β β
β βββ Dockerfile
β βββ docker-compose.yaml
β βββ pom.xml
β βββ mvnw, mvnw.cmd
β
βββ LICENSE
βββ README.md
βββ Doxyfile # Doxygen configuration
βββ scripts/ # Helper scripts (batch/shell)
βββ 1-configure-git-hooks.bat
βββ 2-create-git-ignore.bat
βββ 3-install-package-manager.bat
βββ update-submodules.bat
### Start backend
```bat
cd C:\Users\yagiz\Desktop\Project\clinic-management-system\clinic-management-app
mvn spring-boot:run
## π **Demo Accounts (by role)**
> Use these demo credentials on the frontend login screen.
> **Note:** These are sample accounts for demo/testing only.
| Role | Username | Password |
|---------|----------------|------------|
| ADMIN | **yagizemre** | **615308..** |
| PATIENT | **yagizemre08**| **340635..** |
| DOCTOR | **yagiz1234** | **123456..** |
---
## π **Using Swagger (JWT) & Downloading a Prescription PDF**
1) **Get a JWT token**
- Open Swagger UI: `http://localhost:8080/swagger-ui/index.html`
- Use `/api/auth/login` with one of the accounts above to obtain a token.
- Click **Authorize** (top-right) β paste your token as:
```
Bearer <your-jwt-token>
```
- Example (redacted) token format:
```
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ5YWdpemVtcmUiIiwicm9sZSI6IkFETUlOIi...
```














