Skip to content
Ercan Labs
← Tüm işlerPLATFORM · Kendi ürünü · in-development

Emlak Platformu

İlan, ajans yönetimi, abonelik ve moderasyon tek platformda. Dört rol, tek veri modeli.

118
API endpoint
25
Prisma modeli
56
test dosyası
521
TS dosyası

Bu nasıl ölçüldü: Endpoint sayısı route dekoratörlerinden, modeller Prisma şemasından, test dosyaları *.test.ts/*.spec.ts kalıbından sayıldı.

Mimarirole gate on every endpoint
  1. CLIENTS
    • emlak_webNext.js
    • emlak_adminNext.js
  2. CONTRACT
    • packages/sharedtypes + client
  3. API
    • emlak_apiNestJS · 118 endpoints
  4. DATA
    • PostgreSQL25 models
    • Prismamigrations
İki istemci tek sözleşmeden besleniyor; alan adı değişince ikisi de aynı kaynaktan etkileniyor.

Problem

Emlak ilanı tek bir form değil. İlan sahibi, emlakçı, ajans ve alıcı aynı havuzda, farklı yetkilerle çalışıyor. İlanın yayına girmesi, danışmana atanması, kotadan düşmesi, moderasyondan geçmesi birbirine bağlı.

Müşteri teslimi değil, kendi ürünüm. Kapsamı müşteri talebi belirlemedi; "bunun bakımını iki yıl sonra kim yapacak" sorusu belirledi.

Kısıtlar

  • Dört rol, tek veri modeli: ilan sahibi, emlakçı, ajans yöneticisi, süper admin.
  • Arayüzde görünen her metin TR/EN; kod içindeki tanımlayıcılar İngilizce.
  • Abonelik ve kota kuralları ilan oluşturma akışına bağlı. Sonradan eklenen kontrol her yerde kaçak verir.

Mimari kararlar

01

Turborepo monorepo, üç uygulama tek sözleşme

emlak_api (NestJS), emlak_web (Next.js), emlak_admin; ortak tipler packages/shared içinde. API'nin alan adları değiştiğinde iki istemci aynı kaynaktan etkileniyor.

Bedeli: Monorepo araç zinciri (turbo, ortak tsconfig) kurulum ve CI maliyeti.

02

Veri modeli önce: 25 model, ilişki merkezli

İlanın durumu tek bir status alanına sıkıştırılmadı; yayın durumu, abonelik kotası ve moderasyon kararı ayrı ilişkiler. "İlan neden görünmüyor?" sorusu izlenebilir bir zincir oluyor.

Bedeli: Sorgu sayısı artıyor; karşılığında moderasyon geçmişi kaybolmuyor.

03

Yetki sınırda doğrulanıyor

Her endpoint role göre kapıdan geçiyor; admin paneli ayrı uygulama olduğu için süper admin yüzeyi web istemcisinin içinde taşınmıyor.

Bedeli: Ortak form mantığı iki kez yazılıyor.

04

Güvenlik iddiaları kodla kanıtlanıyor

Güvenlik dokümanındaki her madde dosya:satır ile işaretli ve uygulandı / kısmi / yok etiketli. Doküman "yapıldı" demiyor, nerede yapıldığını gösteriyor.

Bedeli: Doküman bakımı; karşılığında güvenlik iddiası denetlenebilir.

05

i18n ilk günden

Tüm kullanıcı metinleri çeviri anahtarından geliyor; TR varsayılan, EN ikinci.

Bedeli: Her metin iki yerde; karşılığında İngilizce sonradan "çeviri projesi" olmuyor.

Kanıt

  • API endpoint118
  • Prisma modeli25
  • Test dosyası56
  • TypeScript dosyası521 (api 312 · web 154 · admin 55)
  • Doküman12+ mimari/güvenlik/deploy belgesi

Bilinen sınırlar

  • Canlı ortam yükü ve gerçek kullanıcı davranışı ölçülmedi. Ürün kendi projem, kullanıcı sayısı iddiası yok.
  • Abonelik ödeme sağlayıcısı entegrasyonu ortam bağımlı; test kapsamı sandbox ile sınırlı.
  • Kaynak kodu özel repoda; bu yazı mühendislik anlatımıdır.

Ne öğrendim

Moderasyon bir buton değil, geçmiş tutuyor. "İlanı reddet" tek satır. "Neden reddedildi, kim ne zaman karar verdi, itiraz edildi mi" sorusu veri modeline bakıyor. Kararı ilanın üstüne yazmak kolay; bir ay sonra hesap sorulduğunda o alan hiçbir şey anlatmıyor.

Stack

NestJSNext.jsPrismaPostgreSQLTypeScriptDocker