TimShiftApp, çalışan personelin:
- İşe giriş / çıkış işlemleri,
- Görev tipi ve envanter yönetimi,
- İzin süreçleri,
- Günlük puantaj ve mesai takibi,
- Yetki kontrollü panel erişimi,
- Gelişmiş loglama ve dinamik ayar yönetimi
işlemlerini merkezi ve güvenli bir backend altyapısıyla yönetmeyi hedefler.
- Dil & Platform: Node.js + Express.js (ESM modüller)
- Veritabanı: MySQL (Sequelize ORM)
- Kimlik Doğrulama: JWT + Blacklist + Session DB
- Yetkilendirme: Role & Permission tabanlı
- Loglama: Modül & Action bazlı, Queue sistemli log kaydı
- Dosya Yapısı: SRP prensipli modül bazlı dizilim
- Postman Testleri: Otomatik token, session bazlı
├─cli/ # Seeder ve helper CLI script'leri
├─frontend/ # Frontend (Reactjs + TailwindCss + Lucide Icons)
├─backend/ # Backend Rest Api (Node.js + Express)
| ├─ config/ # DB bağlantı ayarları
| ├── controllers/ # HTTP request işleyicileri
| ├── helpers/
| ├── middleware/ # auth, permission, log, vb. middleware'ler
| ├── models/ # Sequelize modelleri (Admin, Role, Session, vb.)
| ├── resources/ # API response serializer'ları
| ├── routes/ # Modül bazlı route tanımları
| ├── services/ # İş mantığı soyutlamaları
| ├── app.js # Express app tanımı
| └── server.js # Sunucu ayağa kaldırma noktası
├─.env.example # Ortam değişkenleri
├─package.json # Paket yönetimi
└─vite.config.js # Vite yapılandırma dosyası (frontend, backend ve env yapılandırması uygulandı.)
"dependencies": {
"bcryptjs": "^3.0.2",
"cors": "^2.8.5",
"dotenv": "^16.5.0",
"express": "^5.1.0",
"jsonwebtoken": "^9.0.2",
"mysql2": "^3.14.1",
"react": "^19.1.0",
"react-dom": "^19.1.0",
"sequelize": "^6.37.7"
},
"devDependencies": {
"@eslint/js": "^9.25.0",
"@tailwindcss/vite": "^4.1.6",
"@types/react": "^19.1.2",
"@types/react-dom": "^19.1.2",
"@vitejs/plugin-react": "^4.4.1",
"eslint": "^9.25.0",
"eslint-plugin-react-hooks": "^5.2.0",
"eslint-plugin-react-refresh": "^0.4.19",
"globals": "^16.0.0",
"tailwindcss": "^4.1.6",
"vite": "^6.3.5"
}
"scripts": {
"dev": "vite",
"build": "vite build",
"lint": "eslint .",
"preview": "vite preview",
"dev:backend": "node backend/server.js",
"dev:frontend": "vite --config vite.config.js",
"db:init": "node cli/init-db.js",
"add:admin": "node cli/add-admin.js",
"session:clear": "node cli/clear-tokens.js",
"seed:definitions": "node cli/init-definitions.js",
"seed:config": "node cli/init-system-config.js",
"seed:roles": "node cli/init-roles.js",
"seed:permissions": "node cli/init-permissions.js",
"seed:role-permissions": "node cli/init-role-permissions.js"
},
- JWT tabanlı token üretilir
BlacklistTokentablosuyla logout işlemleri takip edilirSessiontablosuyla kullanıcı başına oturum kaydı tutulur- Aynı kullanıcıya yeniden token verilmez, kalan süreyle geri dönülür
{
"token": "eyJhbGci...",
"reused": true,
"message": "Oturumunuz zaten açık. Kalan süreniz: 26 dk"
}- Roller (
Role) ve yetkiler (Permission) ayrı tablolarda tutulur AdminRole,RolePermissionpivot tablolarıyla ilişkilendirilir- Route’lar
permissionMiddlewareile korunur - Her işlem öncesi
authenticateTokençalışır
- Tüm veri değiştiren işlemler
logActivityMiddlewareile otomatik loglanır - Loglar:
ActivityLogtablosunda tutulur - Log mesajları:
logMessages.jsiçinden şablonlarla üretilir - Middleware async queue ile çalışır
| Yöntem | Route | Açıklama |
|---|---|---|
| POST | /auth/login | Giriş yap |
| POST | /auth/logout | Oturumu sonlandır |
| GET | /auth/me | Aktif kullanıcı bilgisi |
| Yöntem | Route | Permission |
|---|---|---|
| GET | /personnel | personnel.view |
| POST | /personnel | personnel.create |
| PUT | /personnel/:id | personnel.update |
| DELETE | /personnel/:id | personnel.delete |
| Yöntem | Route | Permission |
|---|---|---|
| GET | /definitions/:type | definition.view |
| POST | /definitions | definition.create |
| PUT | /definitions/:id | definition.update |
| DELETE | /definitions/:id | definition.delete |
| Yöntem | Route | Permission |
|---|---|---|
| GET | /system-config | config.view |
| PUT | /system-config | config.update |
npm run db:init # DB tablolarını oluşturur
npm run seed:roles # Rol tanımlarını ekler
npm run seed:permissions # Yetkileri ekler
npm run seed:role-permissions # Rol-yetki eşlemelerini yapar
npm run add:admin # Terminalden yeni admin ekler- Frontend React entegrasyonu (Token yönetimi, UI yetki bazlı görünüm)
- Tanım / Ayar ekranlarının dinamik panelden yönetimi
- Log kayıtlarının admin panelde listelenmesi
- Excel ile toplu personel import / export
- Oturum sonlandırma (aktif session listeleme & kill)
- Cron tabanlı veritabanı yedekleme & kuyruk kontrol
Bu backend sistem hem geliştirici dostu, hem de kurumsal uygulamalara hazır mimariyle inşa edilmiştir.
Her login, her hareket ve her yetki kontrollü adım loglanır, kontrol edilir ve sistem tarafından izlenir 🔐