رفتن به محتوای اصلی

Taghvimam

«تقویم‌م» (Taghvimam) یک پلتفرم تقویم است که هستهٔ آن یک بک‌اند همگام‌سازی آفلاین و چند‌دستگاهه است؛ در کنار یک اپلیکیشن وب (React/Vite) و یک کلاینت اندروید. طراحی بک‌اند حول سه محور است: همگام‌سازی قابل‌اتکا در حالت آفلاین، احراز هویت مبتنی بر دستگاه، و حل تعارض بدون از‌دست‌رفتن داده.

از کجا شروع کنم؟

اجزای پروژه

بخشتکنولوژی
بک‌اند (apps/api)Express.js + TypeScript، Prisma + PostgreSQL، احراز هویت JWT دو‌توکنی، OTP پیامکی (کاوه‌نگار)، Firebase FCM
وب (apps/calendar-web)React 18 + Vite + Tailwind، TanStack Query، معماری feature-sliced
contracts (packages/contracts)Zod schema‌ها — منبع واحدِ تمام DTO‌ها و specِ OpenAPI
همگام‌سازیآفلاین، مبتنی بر version سراسری، cursor امضا‌شده، آخرین‌نوشته‌برنده (LWW) و ذخیرهٔ تعارض‌ها

همگام‌سازی، در یک نگاه

دستگاه و سرور تغییراتشان را از طریق endpoint‌های /api/sync/* با هم هماهنگ می‌کنند:

  • هر رکورد یک uid (ساختهٔ کلاینت) و یک version (تک‌رشته‌ای و سراسری) دارد.
  • Pull با یک cursor امضا‌شده (black-box) انجام می‌شود که برای هر موجودیت، آخرین نسخه‌ای را که دیده نشده نگه می‌دارد. سرور با گرفتن یک advisory lock به ازای هر کاربر، تضمین می‌کند که هیچ رکوردی در میانهٔ یک pull از قلم نیفتد.
  • Push هر آیتم را در یک transaction جداگانه و با قاعدهٔ آخرین‌نوشته‌برنده (LWW) اعمال می‌کند؛ اگر تعارضی پیش بیاید، نسخهٔ بازنده در جدول SyncConflict ذخیره می‌شود تا بعداً قابل بازیابی باشد.

برای مدل کامل به spec طراحی همگام‌سازی مراجعه کنید.