Skip to content

Repository files navigation

Vendly İleri Düzey Özellikler: Geliştirme ve Entegrasyon Planı

Proje Mimarisi Özeti

Projenin mevcut monorepo (Bun, Elysia.js, React/Vite, Prisma + PostgreSQL) yapısı göz önüne alınarak tasarlanmıştır.

  • Backend: Elysia.js + Bun
  • Frontend: React + Vite (veya Next.js)
  • Database: PostgreSQL + Prisma
  • Harici Servisler: OpenAI/Gemini (Sadece Moderasyon için), Leaflet veya Google Maps (Harita)

1. Kullanıcı Rolleri ve Kurumsal Hesap Yönetimi (RBAC)

Sistemin temelini oluşturan Rol Bazlı Erişim Kontrolü ile bireysel ve kurumsal kullanıcıların ayrıştırılması.

  • Veritabanı & Prisma:
    • Role Enum oluşturulması: ADMIN, USER, COMPANY.
    • User modeline role alanının eklenmesi (Default: USER).
    • Kurumsal hesaplar için CompanyProfile tablosu eklenmesi. userId verisi ile ilişkilendirilir. İçinde companyName (Şirket Adı), taxNumber (Vergi No), contactPerson (Yetkili Kişi), address gibi bilgiler bulunur.
  • Backend (Elysia.js):
    • /auth/register ucunda kayıt tipine göre Dinamik Validasyon (TypeBox). Kullanıcı rolünü COMPANY seçerse şirket bilgileri gereksinim haline gelir.
  • Frontend (React/Vite):
    • Kayıt (Register) formunda "Bireysel" ve "Kurumsal" iki sekme (Tab) sunulur. Form alanları role göre değişir.

2. Akıllı Filtre Sistemi (Etiket ve Skorlama)

Normal "fiyat/şehir" filtrelerinin ötesine geçerek kullanıcının ihtiyaçlarına (sessiz mahalle, öğrenciye uygun vb.) göre filtreleme yapmasını sağlar.

  • Backend & Veritabanı:
    • İlan (Ad) modeline tags (String Array) ve scores (JSONB) alanlarının eklenmesi. Örnek JSONB: {"studentFriendly": 0.95, "quietNeighborhood": 0.80}.
    • Gelen arama terimlerinin (örn. "öğrenciye uygun ev") tag'lere ve skorlara göre ORDER BY veya ağırlıklı hesaplama ile PostgreSQL üzerinden sıralanması.
  • Sezgisel (Heuristic) Skorlama:
    • İlan oluşturulurken seçilen özellikler (Örn: "Site içerisinde", "Otopark var", "Asansör var") backend tarafında belirli kurallar (ruleset) üzerinden puanlanır.
    • Örnek Kural: Oda sayısı >= 2 ve Site İçerisi = "Evet" ise "Aile İçin" skoru +0.4 artar; Üniversiteye yakınlık = "Evet" ise "Öğrenciye Uygun" alanı puanlanır.
    • Özel etiketler (tags) ilan sahibi tarafından arayüzde manuel çoklu seçim (multi-select) ile girilir.
  • Frontend:
    • Hızlı arama barında (Search Bar) "Akıllı Arama" seçeneği. Kullanıcı sadece metin yazar, backend ilgili skorlamaları kullanarak en uygun ilanları döndürür.

3. Harita Tabanlı Arama

Kullanıcıların ilanları interaktif bir harita üzerinde görmesi ve yarıçap (radius) bazlı filtreleme yapabilmesi.

  • Backend & Veritabanı:
    • İlan modeline latitude (Float) ve longitude (Float) eklenmesi.
    • PostgreSQL'de coğrafi sorgular için opsiyonel olarak PostGIS eklentisinin aktifleştirilmesi veya hafif sistemler için veritabanında "Haversine" formülü ile lokasyonlar arası mesafe hesabı yapan özel fonksiyon (veya raw query) yazılması.
    • Endpoint: GET /api/ads/map?lat=X&lng=Y&radius=10
  • Frontend:
    • react-leaflet (açık kaynak/ücretsiz) veya modern bir UI için mapbox/google maps entegrasyonu.
    • Kullanıcı haritada zoom ve pan yaptıkça (harita sınırları değiştikçe - onBoundsChange), sadece ekranda görünen alandaki ilanların fetch edilmesi.
    • Çok fazla ilan varsa harita tarafında Clustering (kümeleme) yapılması (örn. İstanbul üzerinde "500" yazan tek bir balon, yaklaştıkça ayrışır).

4. Güven Skoru Sistemi ve Dolandırıcılık Engelleme

Hem satıcıları hem de alıcıları derecelendiren mekanizma.

  • Veritabanı:
    • User modeline trustScore (Örn: max 100, default 50 ile başlar) eklenmesi.
    • Review, Report ve Verification (Kimlik onaylı mı?) tablolarının oluşturulması.
  • Değerlendirme Sistemi:
    • Pozitif Puan: Kimlik doğrulandı (+20), telefon doğrulandı (+10), ilanı başarıyla sattı (+5).
    • Negatif Puan: Çok sayıda şikayet aldı (-30), sahte ilan tespiti (-50).
  • Frontend UI:
    • Satıcı profilinde rozetler halinde güven skorunun gösterimi (Yeşil/Sarı/Kırmızı çubuklar veya Yüzdelik daire - Circular Progress).

5. İlan Geçmişi (Şeffaflık)

Kullanıcının ilanın ne kadar süredir yayında olduğunu ve hangi fiyat dalgalanmalarından geçtiğini görmesi.

  • Veritabanı:
    • AdPriceHistory tablosu: id, adId, oldPrice, newPrice, changedAt.
    • İlanın ilk yayınlanma tarihi mevcut createdAt alanından veya publishedAt alanından çekilir.
  • Backend Mantığı:
    • Elysia üstündeki UPDATE ilan controller'ında fiyat değişikliği algılandığında veritabanında transaction kullanılarak history tablosuna da yeni bir kayıt atılır.
  • Frontend UI:
    • İlan detay sayfasında sade bir Çizgi Grafiği (Line Chart - recharts veya chart.js kullanılabilir) ile fiyatın zaman içindeki düşüşü/artışı gösterilir.

6. İlan Karşılaştırma

İlanları yan yana teknik ve karakteristik özellikleriyle kıyaslama yeteneği.

  • Frontend Global State:
    • Zustand, Redux veya React Context API kullanılarak global bir compareQueue state'i oluşturulur (maksimum 2 veya 3 ilan seçme kapasitesi).
  • Kullanıcı Deneyimi:
    • İlan kartlarında bir "Terazi / Kıyasla" butonu olur.
    • İlanlar seçildikçe ekranın altında sabit (sticky) bir bar açılır.
    • "Karşılaştır" denildiğinde /compare?ids=101,102 rotasına gidilir.
  • Sayfa Yapısı:
    • Yan yana sütunlarda (Flex veya CSS Grid) özellik metrikleri sıralanır (Fiyat, m², Oda Sayısı, Akıllı Filtre Skorları). Çakışan iyi özellikler yeşil renkle vurgulanır.

7. AI Destekli İlan Moderasyonu

Platformu temiz tutmak için ilanları yayına almadan önce yapay zekaya denetletme.

  • Akış Sistemi (Workflow):
    1. Kullanıcı ilanını oluşturur, veritabanına status: PENDING_REVIEW olarak düşer. Frontend kullanıcıya "İlanınız AI tarafından inceleniyor" mesajı gösterir.
    2. Backend, asenkron bir görev (veya BullMQ/RabbitMQ tarzı bir kuyruk ile) başlatır.
    3. İlan bilgileri bir LLM (Örn: OpenAI gpt-4o-mini) API'sine şu prompt ile yollanır: "Bu bir ev kiralama platformu ilanıdır. İçerikte hakaret, iletişim bilgisi manipülasyonu, sahte/spam bir açıklama var mı? Sonucu sadece 'APPROVED' veya 'REJECTED' olarak, yanına kısa bir sebep ekleyerek JSON formatında dön."
    4. Response APPROVED ise statü PUBLISHED yapılır. Aksi halde red sebebiyle REJECTED yapılır.
    5. Kullanıcıya WebSockets üzerinden anlık bildirim atılır.

Geliştirme Yol Haritası (Roadmap)

Aşama 1: Veritabanı ve Mimari Genişlemesi (Hafta 1)

  • Prisma şemasının güncellenmesi (Roller, CompanyProfile, latitude, longitude, tags, scores, trustScore, history tabloları).
  • Bireysel ve Kurumsal hesaba özgü kayıt akışının uçtan uca çalıştırılması.
  • Migrasyonların çalıştırılması ve TypeScript tiplerinin generate edilmesi.

Aşama 2: AI Otomasyonları (Hafta 2)

  • OpenAI API entegrasyonu için Elysia tarafında servislerin yazılması.
  • Akıllı filtreleme (Rule-based/Heuristic algoritma) ve AI Moderasyon mekanizmasının backend mantığının tamamlanması.

Aşama 3: Harita ve Arayüz Bileşenleri (Hafta 3)

  • Frontend tarafında react-leaflet veya google-maps kurulumu, MapView sekmesinin oluşturulması.
  • Karşılaştırma (Compare) arayüzünün global state'i ile beraber tasarlanması.
  • Fiyat geçmişi grafiklerinin (Line Chart) ilan detaylarına eklenmesi.

Aşama 4: Gerçek Zamanlı Revizeler ve Test (Hafta 4)

  • WebSockets entegrasyonunun (zaten varsa) AI onay sürecinde kullanıcıya bildirim atacak şekilde bağlanması.
  • Güven skoru logiğinin edge caselerinin test edilmesi (suni spam ataklarında AI ve scorun tepkisi).
  • Genel performans takibi (PostgreSQL limitleri ve harita pin clustering optimizasyonu).

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages