📰 NewsHub - Haber & Blog Platformu
Modern, güvenli ve ölçeklenebilir bir haber platformu. Node.js, TypeScript, Express.js ve MongoDB kullanılarak geliştirilmiştir.
🔐 Kimlik Doğrulama & Yetkilendirme
JWT tabanlı REST API kimlik doğrulama
Session tabanlı EJS oturum yönetimi
Rol bazlı erişim kontrolü (User, Moderator, Admin)
Access Token (7 gün) ve Refresh Token (30 gün)
CryptoJS ile şifre hashleme
CRUD işlemleri (Oluştur, Oku, Güncelle, Sil)
Kategori bazlı filtreleme
Sayfalama (Pagination)
Görüntülenme sayacı
Resim yükleme (Multer)
Slug oluşturma
Haberlere yorum ekleme
Yorum silme (Admin veya yorum sahibi)
Yorum güncelleme
Sayfalanmış yorum listesi
Kullanıcı profili
Profil güncelleme
Şifre değiştirme
Kullanıcının haberleri
Dashboard (İstatistikler)
Kullanıcı yönetimi
Haber yönetimi
Rol düzenleme
Kullanıcı/Haber silme
Modern EJS template engine
Bootstrap 5 responsive tasarım
Dinamik carousel (Son 10 haber)
Kategori filtreleme
Glassmorphism tasarım efektleri
Font Awesome ikonları
Swagger UI entegrasyonu
Tüm endpoint'ler dokümante edilmiş
Erişim: http://localhost:3000/api-docs
TypeScript ile tip güvenliği
express-validator ile validation
Global error handler
Merkezi loglama
Session yönetimi
File upload (Multer)
MongoDB indexleme
Node.js (v18+)
MongoDB (v6+)
npm veya yarn
git clone https://github.com/your-username/newshub.git
cd newshub
3. Ortam Değişkenlerini Ayarlayın
.env dosyası oluşturun ve aşağıdaki değişkenleri ekleyin:
# Server Configuration
PORT = 3000
NODE_ENV = development
# Database Configuration
MONGODB_URI = mongodb://localhost:27017
DB_NAME = newshub
# Crypto Configuration (Şifreleme için)
CRYPTO_SECRET_KEY = UFYC634V78J6XI788G51K9444KL03637
# JWT Configuration (Token için)
JWT_SECRET = A7B9D4F2E8C1G5H3J6K8L0M9N2P4Q7R1S3T5U8V0W2X4Y6Z9
JWT_EXPIRES_IN = 7d
JWT_REFRESH_EXPIRES_IN = 30d
# Session Configuration (EJS oturum yönetimi için)
SESSION_SECRET = B8C0E5G7I9K2M4O6Q8S1U3W5Y7Z9A2C4E6G8I0K2M4O6Q8S0
# Windows
mongod
# Mac/Linux
sudo systemctl start mongod
Uygulama çalıştıktan sonra:
NewsHub/
├── src/
│ ├── config/
│ │ ├── db.ts # MongoDB bağlantısı
│ │ ├── cryptoJS.ts # Şifreleme fonksiyonları
│ │ └── swagger.ts # Swagger yapılandırması
│ ├── controllers/
│ │ ├── authController.ts # Kimlik doğrulama
│ │ ├── newsController.ts # Haber işlemleri
│ │ ├── commentController.ts # Yorum işlemleri
│ │ └── adminController.ts # Admin işlemleri
│ ├── middlewares/
│ │ ├── authMiddleware.ts # JWT doğrulama
│ │ ├── sessionAuthMiddleware.ts # Session doğrulama
│ │ ├── roleMiddleware.ts # Rol kontrolü
│ │ ├── uploadMiddleware.ts # Dosya yükleme
│ │ └── errorHandler.ts # Global hata yönetimi
│ ├── models/
│ │ ├── userModel.ts # Kullanıcı şeması
│ │ ├── newsModel.ts # Haber şeması
│ │ ├── commentModel.ts # Yorum şeması
│ │ └── result.ts # Response şablonu
│ ├── routes/
│ │ ├── authRoutes.ts # Auth endpoint'leri
│ │ ├── newsRoutes.ts # News endpoint'leri
│ │ ├── commentRoutes.ts # Comment endpoint'leri
│ │ ├── adminRoutes.ts # Admin endpoint'leri
│ │ └── viewRoutes.ts # View (EJS) route'ları
│ ├── utils/
│ │ ├── jwtUtility.ts # JWT fonksiyonları
│ │ ├── eRoles.ts # Rol enum'ları
│ │ └── AppError.ts # Custom error sınıfları
│ ├── validations/
│ │ ├── authValidator.ts # Auth validation
│ │ ├── newsValidator.ts # News validation
│ │ ├── commentValidator.ts # Comment validation
│ │ └── index.ts # Validation middleware
│ ├── app.ts # Express app yapılandırması
│ └── server.ts # Server başlatma
├── views/
│ ├── layouts/
│ │ └── main.ejs # Ana layout
│ ├── partials/
│ │ ├── header.ejs # Header
│ │ ├── footer.ejs # Footer
│ │ └── flash.ejs # Flash mesajları
│ ├── pages/
│ │ ├── home.ejs # Ana sayfa
│ │ ├── login.ejs # Giriş
│ │ ├── register.ejs # Kayıt
│ │ ├── profile.ejs # Profil
│ │ ├── news-detail.ejs # Haber detay
│ │ ├── create-news.ejs # Haber oluştur
│ │ ├── my-news.ejs # Haberlerim
│ │ └── admin.ejs # Admin paneli
│ └── errors/
│ ├── 404.ejs # 404 sayfası
│ ├── 403.ejs # 403 sayfası
│ └── 500.ejs # 500 sayfası
├── public/
│ ├── css/
│ │ └── style.css # Custom CSS
│ ├── js/
│ │ └── app.js # Client-side JS
│ └── images/ # Statik görseller
├── uploads/ # Yüklenen dosyalar
├── .env # Ortam değişkenleri
├── package.json
├── tsconfig.json
└── README.md
Authentication (/api/auth)
Metod
Endpoint
Açıklama
Yetki
POST
/register
Kullanıcı kaydı
Public
POST
/login
Kullanıcı girişi
Public
POST
/refresh
Token yenileme
Public
GET
/profile
Profil bilgileri
JWT
Metod
Endpoint
Açıklama
Yetki
GET
/
Tüm haberleri listele
Public
GET
/:id
Haber detayı
Public
GET
/my/news
Kendi haberlerim
JWT
POST
/
Yeni haber oluştur
JWT + Role
PUT
/:id
Haber güncelle
JWT + Owner
DELETE
/:id
Haber sil
JWT + Owner
Comments (/api/comments)
Metod
Endpoint
Açıklama
Yetki
GET
/news/:newsId
Haberin yorumları
Public
GET
/my-comments
Kendi yorumlarım
JWT
POST
/news/:newsId
Yorum ekle
JWT
PUT
/:id
Yorum güncelle
JWT + Owner
DELETE
/:id
Yorum sil
JWT + Admin/Owner
Metod
Endpoint
Açıklama
Yetki
GET
/dashboard
Dashboard istatistikleri
Admin
GET
/users
Tüm kullanıcılar
Admin
DELETE
/users/:id
Kullanıcı sil
Admin
PUT
/users/:id/role
Rol güncelle
Admin
GET
/news
Tüm haberler
Admin
DELETE
/news/:id
Haber sil
Admin
Sayfa
URL
Açıklama
Ana Sayfa
/
Haber listesi, carousel, filtreleme
Giriş
/login
Kullanıcı girişi
Kayıt
/register
Yeni kullanıcı kaydı
Profil
/profile
Kullanıcı profili
Haber Detay
/news/:id
Haber içeriği ve yorumlar
Haber Oluştur
/news/create
Yeni haber ekle (Mod+)
Haberlerim
/my-news
Kendi haberlerim
Admin Panel
/admin
Yönetim paneli (Admin)
Kayıt olabilir
Giriş yapabilir
Haber okuyabilir
Yorum yapabilir
Kendi yorumlarını silebilir
User yetkilerine ek olarak:
Haber oluşturabilir
Kendi haberlerini düzenleyebilir
Kendi haberlerini silebilir
Tüm yetkilere sahiptir
Tüm kullanıcıları yönetebilir
Tüm haberleri silebilir
Kullanıcı rollerini değiştirebilir
Tüm yorumları silebilir
# Tüm testleri çalıştır
npm test
# Test coverage
npm run test:coverage
Tüm input'lar express-validator ile doğrulanır
Validation hataları merkezi olarak yönetilir
Global error handler
Custom error sınıfları
Development/Production ortamına göre farklı response'lar
JWT token doğrulama
Session management
Rate limiting (opsiyonel)
Helmet.js (opsiyonel)
CORS yapılandırması
MongoDB indexleme
Pagination
Lazy loading (frontend)
{
_id : ObjectId ,
name : String ( 3 - 50 karakter ) ,
email : String ( unique , lowercase ) ,
password : String ( encrypted ) ,
role : Enum [ 'User' , 'Moderator' , 'Admin' ] ,
createdAt : Date ,
updatedAt : Date
}
{
_id : ObjectId ,
title : String ( 10 - 200 karakter ) ,
content : String ( 50 - 10000 karakter ) ,
category : Enum ,
slug : String ( unique ) ,
image : String ( URL ) ,
author : ObjectId ( ref : User ) ,
views : Number ( default : 0 ) ,
createdAt : Date ,
updatedAt : Date
}
comments
{
_id : ObjectId ,
content : String ( 1 - 1000 karakter ) ,
author : ObjectId ( ref : User ) ,
news : ObjectId ( ref : News ) ,
createdAt : Date ,
updatedAt : Date
}
Fork yapın
Feature branch oluşturun (git checkout -b feature/AmazingFeature)
Commit yapın (git commit -m 'Add some AmazingFeature')
Push edin (git push origin feature/AmazingFeature)
Pull Request oluşturun
Bu proje MIT lisansı altında lisanslanmıştır.