معماری جامع سیستم (Enterprise Headless Architecture)
پروژه Loomix Commerce بر پایه معماری سهگانه Headless Decoupled پیادهسازی شده است. این سیستم تفکیکشده باعث بالا رفتن مقیاسپذیری، امنیت، سرعت و قابلیت توسعه لایههای فرانتاند و بکاند بدون وابستگی سخت میشود.
۱. فرانتاند (Next.js 16 App Router)
رابط کاربری خریداران با React Server Components، i18n چندزبانه، رندرینگ پویای Loomix Blocks و کشینگ آنی با Revalidation.
۲. موتور فروشگاهی (Medusa v2)
مدیریت کاتالوگ محصولات، تنوعها، قیمتگذاری منطقهای، سبد خرید، Workflows ثبت سفارش، پیامک OTP و پست ایران.
۳. مدیریت محتوا (Strapi CMS)
مدیریت چیدمان برگهها، بنرها، بلاگ، منوهای فوتر/هدر، ترجمه اپشنهای محصولات و سیستم وبهوکهای لحظهای.
۴. اکوسیستم Loomix Blocks
بلاکهای بصری آماده که از طریق منوی Storefront در پنل استراپی و GitHub CI/CD همگام شده و توسط BlockRenderer به صورت پویا رندر میشوند.
جریان فراخوانی و رندرینگ دادهها در Next.js
- دریافت چیدمان برگه اصلی و بلاکهای پویای Strapi CMS
- دریافت قیمتهای منطقهای و کاتالوگ از Medusa 2.0 Engine
- کوئری گرفتن مستقیم از Meilisearch برای فیلترها و رنگها
- رندر داینامیک بلاکهای استرپی به کامپوننتهای Loomix Blocks
نحوه ترکیب دادههای Strapi و Medusa در Next.js 16
typescriptconst homepageData = await getHomepageData();const region = await getRegion(countryCode);const searchResults = await queryMeilisearch({ color: "Red", price_range: [10, 50] }); return ( <main> {homepageData.blocks.map((block, index) => ( <BlockRenderer key={block.id} block={block} region={region} countryCode={countryCode} /> ))} </main>);شبکه توکنها و امنیت متغیرهای محیطی (.env)
.env.example
bash# آدرسهای عمومی سرویسهاSTOREFRONT_PUBLIC_URL=https://yourdomain.comSTRAPI_PUBLIC_URL=https://cms.yourdomain.comMEDUSA_BACKEND_PUBLIC_URL=https://api.yourdomain.com # توکنهای دسترسی Strapi CMSSTRAPI_API_TOKEN_FOR_MEDUSA=your_strapi_full_access_tokenSTRAPI_API_TOKEN_FOR_FRONT=your_strapi_read_only_token # کلیدهای عمومی Medusa & SearchMEDUSA_PUBLISHABLE_KEY=pk_your_medusa_publishable_keyMEILI_SEARCH_KEY=your_meilisearch_search_api_key # سرویس ایمیل (SMTP) و پیامکSMTP_HOST=smtp.gmail.comSMTP_PORT=587SMTP_USER=your-email@gmail.comSMTP_PASS=your-app-passwordSMTP_FROM_ADDRESS=noreply@yourdomain.comSMS_API_KEY=your_sms_api_key