Skip to content

Latest commit

 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Hotel Media Management Service

Bu proje, oteller için geliştirilmiş, yüksek performanslı ve güvenli bir medya yönetim sistemidir. Kullanıcıların (otellerin) görsellerini kategorize etmesine, sürükle-bırak ile sıralamasına ve optimize ederek bulutta saklamasına olanak tanır.

🚀 Özellikler

  • Çok Katmanlı Mimari: Frontend (React) ve Backend (Node.js/Express) olarak ayrılmış yapı.
  • Görsel Optimizasyonu: Backend tarafında sharp kullanılarak tüm görseller otomatik olarak WebP formatına çevrilir, maksimum 2000px genişliğe yeniden boyutlandırılır ve sıkıştırılır (%80 kalite).
  • Güvenli Depolama (RLS): Supabase Storage ve Database üzerinde Row Level Security (RLS) politikaları ile her otelin verisi tamamen izole edilir.
  • Kategori Yönetimi: Görselleri kategorilere ayırma, dinamik filtreleme ve Kategori Kapak Resmi belirleme.
  • Gelişmiş Sıralama: Sürükle-bırak ile yapılan sıralamalar kalıcı olarak veritabanına kaydedilir.
  • Toplu İşlemler: Çoklu dosya yükleme, toplu silme, kategoriye taşıma ve toplu seçim araçları.
  • Performans: Görsel listelerinde Lazy Loading (Tembel Yükleme) zorunlu tutulmuştur.
  • Atomic İşlemler: Veritabanı ve Storage işlemleri senkronize çalışır; biri başarısız olursa diğeri geri alınır (Rollback).
  • Etiket Sistemi: Görsellere etiket ekleme ve yönetme.
  • Gelişmiş Filtreleme: Aynı anda birden fazla kategori seçimi.
  • Metadata Analizi: Yüklenen görsellerin boyut ve format bilgilerinin otomatik saklanması.

🛠 Teknolojiler

Backend

  • Node.js & Express: API sunucusu.
  • TypeScript: Tip güvenliği.
  • Supabase: PostgreSQL Veritabanı, Auth (Kimlik Doğrulama) ve Storage.
  • Sharp: Görsel işleme kütüphanesi.

Frontend

  • React & Vite: Hızlı geliştirme ortamı.
  • TypeScript: Tip güvenliği.
  • Tailwind CSS: Modern UI tasarımı.
  • dnd-kit: Sürükle bırak işlemleri.

⚙️ Kurulum ve Geliştirme Ortamı

Projeyi yerel makinenizde çalıştırmak için aşağıdaki adımları izleyin.

1. Ön Hazırlıklar

  • Node.js (v18+)
  • Supabase Hesabı ve Projesi

2. Depoyu Klonlayın

git clone https://github.com/kullaniciadi/hotel-media-service.git
cd hotel-media-service

3. Backend Kurulumu

cd backend
npm install

.env dosyasını oluşturun (.env.example dosyasından kopyalayabilirsiniz):

PORT=3000
SUPABASE_URL=https://your-project.supabase.co
# DİKKAT: RLS Bypass için 'service_role' anahtarı gereklidir.
SUPABASE_SERVICE_ROLE_KEY=eyJh... (Supabase > Settings > API > Service Role Secret)

# Geliştirme Modu İçin Sabit Test ID (Dev Auth Bypass)
# Bu UUID, geliştirme sırasında tüm işlemlerin yapılacağı sanal otel ID'sidir.
TEST_HOTEL_ID=4676d4d3-a6c9-45f7-ac6b-9a720f07eef1

Backend'i başlatın:

npm run dev

(Sunucu 3000 portunda çalışmaya başlayacaktır. Konsolda "Using TEST_HOTEL_ID" uyarısını görmelisiniz.)

4. Frontend Kurulumu

cd ../frontend
npm install

.env dosyasını oluşturun:

VITE_API_URL=http://localhost:3000/api
# Geliştirme ortamında Anon Key yeterlidir, backend bypass yapar.
VITE_SUPABASE_ANON_KEY=eyJh... (Supabase > Settings > API > Anon Public)

Frontend'i başlatın:

npm run dev

(Uygulama http://localhost:5173 adresinde açılacaktır.)


🛡️ Geliştirme Modu ve Auth Bypass (RLS Test User)

Geliştirme sürecini hızlandırmak için Geliştirme Modunda (Development Mode) özel bir kimlik doğrulama bypass mekanizması bulunur.

  1. Backend Konfigürasyonu: NODE_ENV=development olduğunda, authMiddleware gerçek bir JWT token doğrulaması yapmak yerine, isteği otomatik olarak TEST_HOTEL_ID kullanıcısı adına yapılmış gibi kabul eder.
  2. Service Role Kullanımı: Backend, veritabanı ile konuşurken SUPABASE_SERVICE_ROLE_KEY kullanır. Bu, Supabase'in RLS kurallarını backend tarafında aşarak, geliştiricinin TEST_HOTEL_ID adına özgürce okuma/yazma yapabilmesini sağlar.
  3. Frontend Davranışı: Frontend tarafında giriş yapmanıza gerek yoktur. Sistem otomatik olarak "Anonim" anahtar ile istek atar ve Backend bu isteği "Test Kullanıcısı" olarak işler.

⚠️ ÖNEMLİ GÜVENLİK NOTU: SUPABASE_SERVICE_ROLE_KEY ve Auth Bypass mekanizması SADECE geliştirme ortamında (NODE_ENV=development) çalışır. Canlı ortamda (Production) bu mekanizma devre dışı kalır ve gerçek JWT doğrulaması zorunlu hale gelir.

📂 Proje Yapısı

hotel-media-service/
├── backend/            # API Sunucusu
│   ├── config/         # Supabase ayarları
│   ├── controllers/    # İş mantığı (Image, Category)
│   ├── middleware/     # Auth ve Upload kontrolleri
│   ├── routes/         # API rotaları
│   └── index.ts        # Giriş noktası
│
└── frontend/           # React Uygulaması
    ├── src/
    │   ├── api/        # Axios istemcisi
    │   ├── components/ # Reusable UI (MediaGrid, UploadZone)
    │   ├── hooks/      # State yönetimi (useMediaLibrary)
    │   ├── services/   # API servisleri
    │   └── pages/      # Sayfalar

📝 Lisans

Bu proje MIT lisansı ile lisanslanmıştır.

About

Hotel Media Management Service

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages