🏢 معماری پلتفرم املاک ۳D

System Architecture · Database Schema · API Flow · Tech Stack

🖥️ Client Layer

📱 Mobile App

  • React Native
  • عکاسی ۳۶۰ درجه
  • آپلود تور
  • جستجو و فیلتر

🌐 Web App

  • Next.js 14
  • پنل کاربری
  • پنل مشاور
  • Viewer 3D
  • داشبورد ادمین
⚡ API Layer

🔀 API Gateway

  • Nginx Reverse Proxy
  • Rate Limiting
  • SSL Termination
  • Load Balancing

🐍 FastAPI Backend

  • Auth (JWT)
  • Property API
  • Tour API
  • Payment API
  • Search API

🔴 Redis Cache

  • Session ها
  • نتایج جستجو
  • Rate limit counters
💾 Data Layer

🐘 PostgreSQL

  • کاربران
  • ملک‌ها
  • تورها
  • قراردادها
  • تراکنش‌ها

📦 MinIO Storage

  • عکس‌های ۳۶۰
  • فایل‌های تور
  • مدارک ملک
  • پروفایل کاربران

🔄 Background Jobs

  • Celery + Redis
  • پردازش تصاویر
  • ارسال SMS/Email
  • گزارش‌گیری
👤 users
PKidUUID
phoneVARCHAR UNIQUE
full_nameVARCHAR
roleENUM(owner,agent,buyer,admin)
national_idVARCHAR
avatar_urlTEXT
is_verifiedBOOLEAN
branch_idFKbranches
created_atTIMESTAMP
🏠 properties
PKidUUID
owner_idFKusers
agent_idFKusers
titleVARCHAR
typeENUM(sale,rent)
property_typeENUM(apartment,villa,...)
priceBIGINT
area_m2FLOAT
roomsINT
floorINT
lat / lngFLOAT
addressTEXT
statusENUM(active,sold,rented)
has_3d_tourBOOLEAN
created_atTIMESTAMP
🎥 tours_3d
PKidUUID
property_idFKproperties
created_byFKusers
statusENUM(processing,ready,failed)
viewer_urlTEXT
thumbnail_urlTEXT
total_scenesINT
created_atTIMESTAMP
🖼️ tour_scenes
PKidUUID
tour_idFKtours_3d
titleVARCHAR (اتاق خواب...)
image_urlTEXT (عکس ۳۶۰)
order_indexINT
hotspotsJSONB
📋 contracts
PKidUUID
property_idFKproperties
seller_idFKusers
buyer_idFKusers
agent_idFKusers
typeENUM(sale,rent)
final_priceBIGINT
commissionBIGINT
statusENUM(draft,signed,done)
signed_atTIMESTAMP
💰 transactions
PKidUUID
user_idFKusers
contract_idFKcontracts
amountBIGINT
typeENUM(commission,listing_fee)
gatewayVARCHAR (zarinpal)
ref_codeVARCHAR
statusENUM(pending,paid,failed)
🏢 branches
PKidUUID
nameVARCHAR
cityVARCHAR
addressTEXT
manager_idFKusers
lat / lngFLOAT
phoneVARCHAR
🔔 visits & leads
PKidUUID
property_idFKproperties
user_idFKusers
typeENUM(virtual_view,visit_request,call)
scheduled_atTIMESTAMP
statusENUM(pending,done,cancelled)

🔗 روابط اصلی

users 1:N properties (مالک)
users 1:N properties (مشاور)
properties 1:1 tours_3d
tours_3d 1:N tour_scenes
properties 1:N contracts
contracts 1:N transactions
branches 1:N users
properties 1:N visits & leads
1

📱 کاربر عکس ۳۶۰ می‌گیره

اپ موبایل با دوربین گوشی یا دوربین Insta360 عکس‌های هر اتاق رو می‌گیره. هر اتاق = یک Scene

2

⬆️ آپلود به سرور

عکس‌ها مستقیم به MinIO آپلود می‌شن. Backend یه tour_id جدید می‌سازه با status: processing

3

⚙️ پردازش Background

Celery worker عکس‌ها رو پردازش می‌کنه، tile‌های ۳۶۰ می‌سازه، hotspot‌های پیش‌فرض اضافه می‌کنه

4

✅ تور آماده

status به ready تغییر می‌کنه، viewer_url ساخته میشه، SMS به مالک ارسال میشه

5

👀 خریدار تور می‌بینه

Pannellum viewer توی مرورگر یا اپ لود میشه. خریدار بین اتاق‌ها می‌چرخه، درخواست بازدید حضوری میده

6

📋 قرارداد و پرداخت

مشاور قرارداد می‌نویسه، پورسانت از طریق زرین‌پال پرداخت میشه، ملک به status=sold/rented تغییر میکنه

بخش تکنولوژی چرا؟ جایگزین
Frontend Web Next.js 14Tailwind SEO عالی، سریع Nuxt.js
Mobile App React NativeExpo iOS + Android با یه کد Flutter
Backend API FastAPIPython سریع، async، راحت Node/Express
Database PostgreSQL JSONB برای hotspot، قوی MySQL
Cache Redis Session + cache سریع -
3D Viewer Pannellum رایگان، open source، سبک Marzipano
Storage MinIO self-hosted، بدون تحریم AWS S3
Background Jobs CeleryRedis پردازش عکس async RQ
Server HetznerDocker اروپا، ارزون، بی‌تحریم Contabo
Payment زرین‌پال ایرانی، API ساده IDPay
Auth JWTSMS OTP بدون پسورد، راحت -
SMS کاوه‌نگار ایرانی، ارزان ملی‌پیامک
Vibe Coding Cursor AIClaude سریع‌ترین روش توسعه Windsurf