Monorepo
ریپازیتوری یک Turborepo monorepo است — یعنی بک اند، وب و پکیجِ contracts
هر سه در یک ریپازیتوری زندگی میکنند و با یک دستور واحد build/dev/test
میشوند. package.json ریشه این را با workspaces: ["apps/*", "packages/*"]
تعریف کرده و اسکریپتهای dev، build، dev:api، dev:web، lint، test
را در خودش دارد.
ساختار
apps/api(taghvimam-backend) — Express API برای اپ اندروید و calendar وب. مسیرها، Prisma، احراز هویت. اجرا:npm run dev:apiیا از ریشهnpm run dev --workspace=taghvimam-backend.apps/calendar-web— React (Vite) calendar UI. اجرا:npm run dev:webیا از ریشهnpm run dev --workspace=calendar-web.packages/contracts—@taghvimam/contracts: اسکیماهای Zod + تایپهای TypeScriptِ استنباطشده که منبعِ واحدِ حقیقت برای تمام DTOهای API هستند. هر دو اپ تایپهای DTO را از اینجا ایمپورت میکنند.
مسیرهای وب:
/(خانه) و/calendar-faو/calendar(هر دو، صفحهٔ تقویم جلالی).
base URL برای اپ وب
در apps/calendar-web تنظیم میشود — در dev، پروکسیِ Vite در vite.config.ts
درخواستهای /api را به http://localhost:5000 میفرستد. برای API غیرِ پروکسیشده
(تولید) VITE_API_URL را روی یک origin مطلق (مثل https://api.taghvimam.ir) بگذارید.
دستورهای ریشه (Turbo)
npm run dev # همزمان: API روی :5000، وب روی :5173
npm run build # build همهٔ workspaceها (contracts → api → web)
npm run lint # lint همه
npm run test # تست همه
برای جزئیاتِ اتصالِ فرانتاند به بکاند به کلاینت وب، و برای الگوهای UI واکنشگرا به UI واکنشگرا مراجعه کنید.