Restoran yönetim sistemi için geliştirilmiş kapsamlı bir REST API.
- Kullanıcı Yönetimi: Kayıt, giriş, rol tabanlı yetkilendirme
- Çoklu Firma Desteği: Her firma için izole edilmiş veriler ve kullanıcılar
- Masa Yönetimi: Masaları ekleme, düzenleme, durum takibi
- Menü Yönetimi: Kategoriler, ürünler, fiyatlar
- Sipariş Yönetimi: Sipariş oluşturma, takip, güncelleme
- Ödeme İşlemleri: Sipariş ödemesi, fatura oluşturma
- Stok Takibi: Malzeme yönetimi, ürün-malzeme ilişkisi, stok hareketi
- Bildirim Sistemi: Önemli olaylar için bildirim oluşturma
- Node.js - Sunucu tarafı JavaScript çalışma ortamı
- Express - Web framework
- MongoDB - NoSQL veritabanı
- Mongoose - MongoDB için ODM (Object Document Mapper)
- JWT - JSON Web Token tabanlı kimlik doğrulama
- bcrypt - Şifre hashleme
- Node.js (v14+)
- MongoDB (yerel veya Atlas)
- Projeyi klonlayın:
git clone https://github.com/melihcnz/restoran-api.git
cd restoran-api- Bağımlılıkları yükleyin:
npm install.envdosyası oluşturun:
cp .env.example .env-
.envdosyasındaki değişkenleri kendi ortamınıza göre düzenleyin. -
Uygulamayı başlatın:
# Geliştirme modu
npm run dev
# Üretim modu
npm startProjenin kök dizininde bir .env dosyası oluşturun ve aşağıdaki değişkenleri ayarlayın:
# Server port
PORT=5000
# MongoDB Connection
# Local MongoDB
# MONGODB_URI=mongodb://localhost:27017/restoran-api
# MongoDB Atlas
MONGODB_URI=mongodb+srv://username:password@clustername.mongodb.net/?retryWrites=true&w=majority&appName=RestoranApi
# JWT Configuration
JWT_SECRET=your_jwt_secret_key
JWT_EXPIRES_IN=30d
# API Configuration
NODE_ENV=development
# NODE_ENV=production
# CORS Configuration
CORS_ORIGIN=*
Not:
- Gerçek ortama geçerken
JWT_SECRETdeğerini karmaşık ve güvenli bir değer ile değiştirin.- MongoDB Atlas kullanıyorsanız,
username,passwordveclusternamedeğerlerini kendi bilgilerinizle değiştirin.
Bu API, çoklu firma (multi-tenant) mimarisi ile tasarlanmıştır. Bu yapı şunları sağlar:
- Her firma kendi veri tabanında izole edilmiş şekilde çalışır
- Kullanıcılar belirli bir firmaya atanır ve sadece kendi firmasının verilerine erişebilir
- Süper yöneticiler tüm firmaların verilerini yönetebilir
- Kullanıcı-Firma İlişkisi: Her kullanıcı bir firmaya bağlıdır
- Veri İzolasyonu: Kategoriler, ürünler, masalar, siparişler, malzemeler ve stok verileri firma bazında ayrılmıştır
- Rol Tabanlı Erişim: Firma içinde farklı roller (admin, personel, kullanıcı) tanımlanabilir
- Merkezi Yönetim: Süper yöneticiler tüm firmaları ve kullanıcılarını yönetebilir
-
Kimlik Doğrulama
POST /api/auth/register- Kullanıcı kaydıPOST /api/auth/login- Kullanıcı girişi
-
Firmalar
GET /api/companies- Tüm firmaları listele (süper admin)POST /api/companies- Yeni firma oluştur (süper admin)PUT /api/companies/:id- Firma bilgilerini güncelleDELETE /api/companies/:id- Firmayı sil
-
Kullanıcılar
GET /api/users- Tüm kullanıcıları listeleGET /api/users/:id- Belirli bir kullanıcıyı getirPUT /api/users/:id- Kullanıcı bilgilerini güncelleDELETE /api/users/:id- Kullanıcıyı sil
-
Kategoriler
GET /api/categories- Tüm kategorileri listelePOST /api/categories- Yeni kategori oluşturPUT /api/categories/:id- Kategori güncelleDELETE /api/categories/:id- Kategori sil
-
Ürünler
GET /api/products- Tüm ürünleri listeleGET /api/products/:id- Belirli bir ürünü getirPOST /api/products- Yeni ürün oluşturPUT /api/products/:id- Ürün güncelleDELETE /api/products/:id- Ürün sil
-
Masalar
GET /api/tables- Tüm masaları listeleGET /api/tables/:id- Belirli bir masayı getirPOST /api/tables- Yeni masa oluşturPUT /api/tables/:id- Masa güncelleDELETE /api/tables/:id- Masa sil
-
Siparişler
GET /api/orders- Tüm siparişleri listeleGET /api/orders/:id- Belirli bir siparişi getirPOST /api/orders- Yeni sipariş oluşturPUT /api/orders/:id- Sipariş güncelleDELETE /api/orders/:id- Sipariş sil
-
Malzemeler
GET /api/ingredients- Tüm malzemeleri listeleGET /api/ingredients/:id- Belirli bir malzemeyi getirPOST /api/ingredients- Yeni malzeme oluşturPUT /api/ingredients/:id- Malzeme güncelleDELETE /api/ingredients/:id- Malzeme silGET /api/ingredients/low-stock- Kritik stok seviyesindeki malzemeleri getirPOST /api/ingredients/:id/stock-entry- Stok girişi yap
-
Ürün-Malzeme İlişkisi
GET /api/product-ingredients/product/:productId- Ürünün malzemelerini getirGET /api/product-ingredients/ingredient/:ingredientId- Malzemeyi kullanan ürünleri getirPOST /api/product-ingredients- Ürüne malzeme eklePUT /api/product-ingredients/:id- Ürün-malzeme ilişkisini güncelleDELETE /api/product-ingredients/:id- Ürün-malzeme ilişkisini sil
-
Stok İşlemleri
GET /api/stock/report- Stok raporu alPOST /api/stock/check-availability- Sipariş için stok uygunluğunu kontrol etPOST /api/stock/update-for-order/:orderId- Sipariş için stok güncelleGET /api/stock/history- Stok hareketlerini listeleGET /api/stock/history/:ingredientId- Belirli bir malzemenin stok geçmişini listele
Stok takip sistemi, restoran içindeki malzemelerin stok seviyelerini takip etmek ve sipariş süreçleriyle entegre çalışmak üzere tasarlanmıştır. Sistem şu şekilde çalışır:
-
Malzemelerin Tanımlanması: Her malzeme için ad, birim, maliyet, minimum stok seviyesi gibi bilgiler tanımlanır.
-
Ürün-Malzeme İlişkisi: Menüdeki her ürün için kullanılan malzemeler ve miktarları tanımlanır.
-
Otomatik Stok Düşümü: Siparişler tamamlandığında, siparişteki ürünlerin malzeme ihtiyaçları hesaplanır ve stoktan otomatik olarak düşülür.
-
Stok Kontrolleri: Yeni bir sipariş oluşturulurken, gerekli malzemelerin stokta olup olmadığı kontrol edilebilir.
-
Stok Raporları: Mevcut stok durumu, kritik stok seviyesindeki malzemeler ve stok hareketleri raporlanabilir.
-
Bildirimler: Malzeme stok seviyesi kritik seviyenin altına düştüğünde bildirim gönderilir.
Örnek bir iş akışı:
- Sistem yöneticisi, "Dana Kıyma" malzemesini 5kg stok ile tanımlar.
- "Köfte" ürününe, her porsiyon için 200g "Dana Kıyma" kullanımı tanımlanır.
- Müşteri 2 porsiyon köfte sipariş eder ve sipariş tamamlanır.
- Sistem otomatik olarak 400g "Dana Kıyma" stoktan düşer (2 porsiyon × 200g).
- Kalan stok miktarı 4.6kg olarak güncellenir.
- Eğer stok kritik seviyenin altına düşerse, ilgili personele bildirim gönderilir.
MIT
Melih Canaz - mcanaz1234@gmail.com