ארכיטקטורה

סקירת המערכת, מודל הנתונים, התמיכה בריבוי מטבעות ומודל האימות.

סקירת המערכת

ממשק בדפדפן  -->  אפליקציית Next.js  -->  Postgres (RLS)
                           |                  ^
                           v                  |
                      שירות אימות ------------+
                           ^
                           |
              לקוחות תוכנה דרך API Gateway
                           ^
                           |
          תהליך רקע (איסוף שערי חליפין) -----

חמישה רכיבים, מסד נתונים אחד:

  1. web — אפליקציית Next.js שמספקת את לוחות הבקרה בממשק המשתמש ואת נתיבי ה-API
  2. auth — כניסה עם קוד חד-פעמי בדוא"ל ואתחול סוכנים בדומיין האימות
  3. sql-api — פונקציית AWS Lambda שמאחורי API Gateway עבור לקוחות תוכנה
  4. worker — מושך מדי יום שערי חליפין מ-ECB, CBR ו-NBS
  5. 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 ללקוחות תוכנה.