Taghvimam
«تقویمم» (Taghvimam) یک پلتفرم تقویم است که هستهٔ آن یک بکاند همگامسازی آفلاین و چنددستگاهه است؛ در کنار یک اپلیکیشن وب (React/Vite) و یک کلاینت اندروید. طراحی بکاند حول سه محور است: همگامسازی قابلاتکا در حالت آفلاین، احراز هویت مبتنی بر دستگاه، و حل تعارض بدون ازدسترفتن داده.
از کجا شروع کنم؟
- مرجع کامل API — مستقیماً از روی Zod schemaها تولید میشود (منبع واحد): مرجع API.
- امتحانِ زندهی endpointها — Swagger UI.
- راهنماها — شروع به کار · معماری سیستم.
اجزای پروژه
| بخش | تکنولوژی |
|---|---|
بکاند (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 طراحی همگامسازی مراجعه کنید.