Full-stack Spring Boot restoran idarəetmə platforması — müştəri tərəfi (menyu, onlayn sifariş, ödəniş, masa rezervasiyası) ilə tam funksional, təhlükəsizliyi təmin edilmiş admin idarəetmə panelini bir yerdə birləşdirir.
🔗 Canlı Demo: spring-boot-project-em4j.onrender.com
Bu layihə real bir restoran biznesi üçün hazırlanmış, istehsalata (production) yönləndirilmiş tam funksional bir tətbiqdir. Müştəri tərəfi (məhsul kataloqu, onlayn sifariş, ödəniş, masa rezervasiyası, əlaqə) admin idarəetmə paneli ilə tam inteqrasiya olunub və Spring Security ilə qorunur.
Layihə DTO/Entity ayrımı, servis-yönümlü arxitektura, verilənlər bazası səviyyəsində optimallaşdırılmış sorğular və CSRF-qorunmuş formalarla təhlükəsizlik yönümlü inkişaf prinsiplərinə əsaslanır.
- Məhsul kataloqu — Cloudinary üzərindən şəkil saxlama, kateqoriya/açar sözə görə case-insensitive axtarış
- Onlayn sifariş & səbət — sessiya-əsaslı səbət idarəetməsi
- Ödəniş inteqrasiyası — Portmanat ödəniş sistemi ilə HMAC-SHA256 imza doğrulaması,
transactionIdəsaslı callback emalı, idempotent status yeniləmə (PAID/FAILED) - Masa rezervasiyası — tarix/saat seçimi, restoran tutumuna (capacity) görə real-vaxt yoxlama, admin bildirişi
- Əlaqə formu — müştəri müraciətləri, avtomatik e-poçt bildirişi
- Dinamik statistika sayğacları — ana səhifədə real bazadan gələn müştəri/rezervasiya/məhsul sayları
| Modul | Ünvan | Funksionallıq |
|---|---|---|
| Dashboard | /admin |
Ümumi say göstəriciləri, modullara sürətli keçid |
| Məhsullar | /admin/products |
CRUD, şəkil yükləmə, axtarış |
| Müştərilər (CRM) | /admin/clients |
CRUD, validasiyalı forma, axtarış |
| Sifarişlər | /admin/orders |
Status izləmə və yeniləmə |
| Rezervasiyalar | /admin/reservations |
Status üzrə filtrasiya və yeniləmə |
| Əlaqə mesajları | /admin/contacts |
Daxil olan müraciətlərin siyahısı və silinməsi |
| Statistika | /admin/statistics |
Sifariş/rezervasiya statusu üzrə bölgü, ümumi gəlir |
| Kateqoriya | Texnologiya |
|---|---|
| Backend | Java 17, Spring Boot 3.5.4 |
| Verilənlər bazası | PostgreSQL (Neon), Spring Data JPA / Hibernate |
| Təhlükəsizlik | Spring Security (CSRF, BCrypt, rol-əsaslı icazələr) |
| Frontend | Thymeleaf, HTML5, CSS3, Bootstrap 5, JavaScript |
| Şəkil saxlama | Cloudinary |
| E-poçt | Brevo (HTTP API) |
| Ödəniş | Portmanat (HMAC-SHA256 imza doğrulaması) |
| Konteynerləşdirmə | Docker (çox mərhələli build) |
| Deployment | Render (backend), Neon (PostgreSQL) |
| Build aləti | Maven |
Qeyd: E-poçt xidməti əvvəlcə Gmail SMTP ilə işləyirdi, lakin Render-in pulsuz planı SMTP portlarına (587) çıxışı blokladığı üçün Brevo-nun HTTP API-sinə keçirilib.
src/main/java/com/myapp/myapp/
├── configs/ # Security, Cloudinary, ModelMapper konfiqurasiyaları
├── controllers/ # REST & MVC endpoint-lər (front + admin)
├── dtos/ # Data Transfer Object-lər (validasiya annotasiyaları ilə)
├── models/ # JPA Entity-lər və enum-lar
├── repositories/ # Spring Data JPA repository-ləri
└── services/ # Biznes məntiqi (interfeys + implementasiya)
src/main/resources/
├── templates/
│ ├── front/ # Müştəri tərəfi səhifələri (+ fragments/header, fragments/footer)
│ └── admin/ # Admin paneli (products, clients, orders, reservations, contacts, statistics)
└── static/assets/ # CSS, JS, şəkillər
- Bütün admin
POST/PUT/DELETEsorğuları CSRF token ilə qorunur. - Parollar BCrypt ilə hash-lənir, admin istifadəçisi verilənlər bazasında saxlanılır.
- Rol-əsaslı icazələr (
/admin/**yalnızROLE_ADMIN) Spring Security vasitəsilə tətbiq olunur. - Ödəniş callback-ləri HMAC-SHA256 imza doğrulaması ilə qorunur.
- Repo-nu klonla:
git clone https://github.com/ismayanar27-sys/spring-boot-project.git
cd spring-boot-project-
PostgreSQL-də yeni baza yarat.
-
Aşağıdakı environment variable-ları təyin et:
# Verilənlər bazası
DATABASE_URL=jdbc:postgresql://...
DATABASE_USERNAME=...
DATABASE_PASSWORD=...
# Cloudinary (şəkil saxlama)
CLOUDINARY_CLOUD_NAME=...
CLOUDINARY_API_KEY=...
CLOUDINARY_API_SECRET=...
# Brevo (e-poçt bildirişləri)
BREVO_API_KEY=...
ADMIN_EMAIL=...
# Portmanat (ödəniş, könüllü — boş buraxıla bilər)
PORTMANAT_MERCHANT_ID=...
PORTMANAT_SECRET_KEY=...
PORTMANAT_SECRET_KEYtəyin olunmasa, ödəniş callback-inin imza doğrulaması development rejimində avtomatik keçir (yalnız lokal test üçün uyğundur, production-da mütləq təyin edilməlidir).
-
Admin istifadəçisi verilənlər bazasında (
userscədvəlində) saxlanılır vəCustomUserDetailsServicevasitəsilə oxunur — ilkin admin hesabını birbaşa bazada yaratmaq lazımdır. -
Tətbiqi işə sal:
./mvnw spring-boot:runTətbiq http://localhost:8080 ünvanında açılacaq.
docker build -t restoran-app .
docker run -p 8080:8080 --env-file .env restoran-app- Real Portmanat production sertifikatı ilə tam inteqrasiya
- Əlaqə/statistika modullarına e-poçt export funksiyası
- Sosial media (Instagram/Facebook) real linklərin əlavə olunması
Bu layihə MIT Lisenziyası altında paylaşılır — sərbəst istifadə, dəyişdirmə və paylaşma hüququ verir, müəllif hüququ bildirişinin qorunması şərti ilə. Ətraflı üçün LICENSE faylına bax.
Anar İsmayılov — Full Stack Developer (Java / Spring Boot) 📧 ismayanar27@gmail.com