ארכיטקטורת Client (React/Vite)
אפליקציית ה-Client בנויה עם React, Vite ו-TypeScript. היא משתמשת ב-Redux Toolkit (RTK) לניהול מצב וב-RTK Query לשליפת נתונים.
מבנה מבוסס תכונות (Feature-Based)
אנו מארגנים את הקוד לפי תחומים עסקיים (Features) במקום לפי סוג טכני.
נתיב: src/features/{feature-name}
כל תיקיית תכונה בדרך כלל מכילה:
components/: רכיבי React ספציפיים לתכונה זו.hooks/: Hooks מותאמים אישית.types/: ממשקי TypeScript/סכמות Zod.*Api.ts: הזרקת נקודות קצה של RTK Query.index.ts: API ציבורי של התכונה.
דוגמאות: auth, synagogue, devices, notifications.
RTK Query ופיצול קוד
אנו משתמשים בדפוס "Empty Split API" יחיד כדי לאפשר פיצול קוד.
- Base API:
src/store/api/btManagementApi.ts. - Feature API: כל תכונה מזריקה את נקודות הקצה שלה ל-API הבסיסי.
דוגמה (tfilaTimeApi.ts):
import { btManagementApi } from '../../store/api/btManagementApi';
export const tfilaTimeApi = btManagementApi.injectEndpoints({
endpoints: (builder) => ({
getTfilaTimes: builder.query<TfilaTime[], void>({
query: () => '/tfila-times',
providesTags: ['TfilaTime'],
}),
// ...
}),
});
רכיבי UI
- ספרייה: Material UI (MUI) v5.
- ערכת נושא: ערכת נושא מותאמת אישית התומכת ב-RTL (עברית).
- טפסים:
react-hook-formמשולב עם אימות Zod. - גרפים:
rechartsלאנליטיקה.
אימות
אימות מבוסס JWT מטופל ב-src/features/auth. הטוקן מאוחסן ב-localStorage ומוזרק לכל כותרת בקשה דרך ה-prepareHeaders של RTK Query.