ארכיטקטורה
סקירת המערכת, מודל הנתונים, התמיכה בריבוי מטבעות ומודל האימות.
סקירת המערכת
ממשק בדפדפן --> אפליקציית Next.js --> Postgres (RLS)
| ^
v |
שירות אימות ------------+
^
|
לקוחות תוכנה דרך API Gateway
^
|
תהליך רקע (איסוף שערי חליפין) -----
חמישה רכיבים, מסד נתונים אחד:
- web — אפליקציית Next.js שמספקת את לוחות הבקרה בממשק המשתמש ואת נתיבי ה-API
- auth — כניסה עם קוד חד-פעמי בדוא"ל ואתחול סוכנים בדומיין האימות
- sql-api — פונקציית AWS Lambda שמאחורי API Gateway עבור לקוחות תוכנה
- worker — מושך מדי יום שערי חליפין מ-ECB, CBR ו-NBS
- Postgres — מקור האמת היחיד, עם אבטחה ברמת שורה
מודל הנתונים
- ledger_entries — רשומה אחת לכל תנועה בחשבון (הכנסה, הוצאה, העברה)
- budget_lines — תאי תקציב במבנה של הוספה בלבד, שבו הרשומה האחרונה שנכתבה היא הקובעת
- budget_comments — הערות במבנה של הוספה בלבד, שמקושרות לתאי תקציב
- workspace_settings — מטבע הדיווח והגדרות ברמת סביבת העבודה
- account_metadata — מטא-נתונים לכל חשבון, כגון סיווג נזילות
- exchange_rates — שערי חליפין יומיים שמשמשים להמרה בזמן השאילתה
- workspaces / workspace_members — בידוד בין סביבות עבודה מרובות
- accounts — תצוגה שמחושבת מתוך רשומות
ledger_entries
עבודה עם מטבעות מרובים
כל הסכומים נשמרים במטבע המקורי שלהם. ההמרה למטבע הדיווח מתבצעת בזמן הקריאה באמצעות צירופי SQL מול exchange_rates. אין המרה מוקדמת שגורמת לאובדן מידע.
אימות
שני מצבים דרך משתנה הסביבה AUTH_MODE:
none— ללא אימות, עם סביבת עבודה מקומית יחידהcognito— אימות בדוא"ל עם קוד חד-פעמי, ללא סיסמה, דרך AWS Cognito ועם הרשמה פתוחה
עבור לקוחות תוכנה, נקודת הגילוי הציבורית היא GET /v1/. תהליך ההצטרפות של סוכנים משתמש בקוד חד-פעמי שנשלח בדוא"ל דרך דומיין האימות, מחזיר ApiKey ארוך-טווח, ולאחר מכן מריץ SQL דרך ממשק ה-API ללקוחות תוכנה שמאחורי API Gateway.
כל משתמש מקבל סביבת עבודה מבודדת. מדיניות RLS בודקת חברות בכל שאילתה, כולל בקשות SQL שמגיעות דרך ממשק ה-API ללקוחות תוכנה.