דלג לתוכן הראשי

סביבת פיתוח מקומית

מסמך זה מתאר כיצד להקים סביבת פיתוח מלאה (Server, Client, Mobile) על המחשב האישי.

דרישות קדם (Prerequisites)

הכנת התשתית (Infrastructure)

אנו משתמשים ב-Docker Compose כדי להריץ את שירותי הליבה (MongoDB, Redis, Mosquitto).

  1. בתיקייה הראשית של הפרויקט, הרץ:
    docker-compose up -d
    פקודה זו תרים את השירותים הבאים:
    • MongoDB: פורט 27017
    • Redis: פורט 6380
    • Mosquitto (MQTT): פורט 1883 (רגיל) ו-9001 (WebSockets)
    • Nginx & Grafana: (אופציונלי, לניטור)

הגדרת משתני סביבה (.env)

יש ליצור קבצי .env לפי התבניות בתיקיות השונות:

Server NestJS (server-nest/.env)

DATABASE_URL=mongodb://root:MONGO_ROOT_PASSWORD@localhost:27017/bt-management?authSource=admin
REDIS_URL=redis://:REDIS_PASSWORD@localhost:6380
JWT_SECRET=YOUR_SECRET_KEY
MQTT_BROKER_URL=mqtt://localhost:1883

Client (client/.env)

REACT_APP_API_URL=http://localhost:5000/api

Mobile (GabaiSmart/.env)

EXPO_PUBLIC_API_URL=http://192.168.1.X:5000  # הכתובת ה-IP המקומית של המחשב שלך
EXPO_PUBLIC_SOCKET_URL=ws://192.168.1.X:5000

הרצת הפרויקטים

1. שרת (Server NestJS)

cd server-nest
npm install
npx prisma generate # יצירת ה-Client של הפריזמה
npm run start:dev # הרצה במצב Watch

השרת יעלה בכתובת: http://localhost:5000 תיעוד API (Swagger): http://localhost:5000/api/docs

2. לקוח (Client React)

cd client
npm install
npm start

האפליקציה תפתח ב: http://localhost:3000

3. מובייל (GabaiSmart React Native)

cd GabaiSmart
npm install
npm run android # להרצה על אימולטור או מכשיר מחובר

פקודות שימושיות

  • Prisma Studio: צפייה וניהול ה-DB בממשק גרפי.
    cd server-nest && npx prisma studio
  • Type Check: בדיקת טייפים בכל הפרויקט.
    npm run typecheck:all

Workflows ונהלים

  • Commit Checklist: לפני דחיפת קוד, ודא שהרצת typecheck ואין שגיאות לינטר.
  • DTOs: השתמש תמיד ב-nestjs-zod ליצירת DTOs.
  • Migrations: ב-MongoDB אין מיגרציות SQL קלאסיות, אך יש להריץ db push אם משנים את הסכמה באופן משמעותי לפעמים (למרות שפריזמה-מונגו גמיש).
  • Multi-Tenancy: אסור להוסיף ידנית where: { userId } בקונטרולר רגיל. ה-Middleware עושה זאת אוטומטית.