Medusa 2.0 Ticaret Motoru Entegrasyonu ve İş Akışları
Medusa 2.0, sepet, stok, siparişler ve çoklu ödeme yöntemlerini yöneten gelişmiş ticaret çekirdeğidir.
Medusa 2.0 Sürümü Hakkında Önemli Not
Platform, güçlü Workflows sistemi ve iki kat daha yüksek performans sunan Medusa v2 sürümünü temel alır.
1. Medusa v2 Modüler Mimarisi ve Anlık Senkronizasyon
Next.js ön yüzü, kurulum sırasında otomatik oluşturulan Publishable API Key ile resmi SDK üzerinden Medusa ile haberleşir.
product-strapi.tsÜrünler, varyantlar, renk ve beden seçeneklerinin kusursuz yönetimi.
review-product.tsAlışveriş sepeti işleme ve anlık promosyon kuponu uygulama.
wishlist-customer.tsTeslimat adresleri, vergi ve kargo maliyetlerinin doğru hesaplanması.
question-product.tsÖdeme tamamlandığında sipariş durumunun güncellenmesi ve stok düşümü.
store-admin/src/links/review-product.ts
typescriptimport { defineLink } from "@medusajs/framework/modules-sdk"import ProductModule from "@medusajs/medusa/product"import ProductReviewModule from "../modules/product-review" export default defineLink( ProductModule.linkable.product, ProductReviewModule.linkable.productReview)2. Mağaza Ortam Değişkenleri (.env) Yapılandırması
Mağaza ön yüzünü Medusa çekirdeğine bağlamak için zorunlu ortam değişkenleri:
.env Dosyasındaki Medusa Bağlantı Değişkenleri
bashnpm run seedMedusa JS İstemcisini Başlatma
bashnpx medusa exec ./src/scripts/seed-30-products.tsÜrün Listesini Getirme Sorgusu Örneği
bashnpx medusa exec ./src/scripts/sync-meilisearch.tsSepete Ürün Ekleme İşlemi Örneği
bashnpx medusa exec ./src/scripts/delete-all-products.ts3. Sipariş Süreçleri ve Dahili Workflows Mimarisi
src/lib/data/products.ts
typescriptimport { sdk } from "@lib/config"import { HttpTypes } from "@medusajs/types"import { getAuthHeaders, getCacheOptions } from "./cookies"import { getLocaleHeader } from "@lib/util/get-locale-header"import { getRegion, retrieveRegion } from "./regions"import { isNetworkFetchError, warnMedusaUnreachable } from "@lib/util/medusa-fetch" export const listProducts = async ({ pageParam = 1, queryParams, countryCode, regionId, disableAuth = false,}: { pageParam?: number queryParams?: HttpTypes.FindParams & HttpTypes.StoreProductListParams countryCode?: string regionId?: string disableAuth?: boolean}): Promise<{ response: { products: HttpTypes.StoreProduct[]; count: number } nextPage: number | null queryParams?: HttpTypes.FindParams & HttpTypes.StoreProductListParams}> => { if (!countryCode && !regionId) { throw new Error("Country code or region ID is required") } const limit = queryParams?.limit || 12 const _pageParam = Math.max(pageParam, 1) const offset = _pageParam === 1 ? 0 : (_pageParam - 1) * limit let region: HttpTypes.StoreRegion | undefined | null if (countryCode) { region = await getRegion(countryCode, disableAuth) } else { region = await retrieveRegion(regionId!, disableAuth) } if (!region) { return { response: { products: [], count: 0 }, nextPage: null } } const headers = { ...(disableAuth ? {} : await getAuthHeaders()), ...(await getLocaleHeader(disableAuth)), } as Record<string, string> const next = { ...(disableAuth ? { tags: ["store-products"] } : await getCacheOptions("store-products")), revalidate: 3600, } try { return await sdk.client .fetch<{ products: HttpTypes.StoreProduct[]; count: number }>( `/store/products`, { method: "GET", query: { limit, offset, region_id: region?.id, fields: "*variants.calculated_price,+variants.inventory_quantity,*variants.images,*options,*options.values,*variants.options,+metadata,+tags", ...queryParams, }, headers, next, cache: "force-cache", } ) .then(({ products, count }) => { const nextPage = count > offset + limit ? pageParam + 1 : null return { response: { products, count }, nextPage, queryParams, } }) } catch (error) { if (isNetworkFetchError(error)) { warnMedusaUnreachable("listProducts") return { response: { products: [], count: 0 }, nextPage: null, queryParams, } } throw error }}4. Ürün Yönetimi ve Fiyat Önbellekleme İpuçları
Katalog verileri Next.js'de belirli etiketlerle (örn: medusa-products) önbelleğe alınır ve fiyat değiştiğinde otomatik yenilenir.
Medusa Ürünleri Önbellek Yenileme
envSMTP_HOST=smtp.gmail.comSMTP_PORT=587SMTP_USER=your-email@gmail.comSMTP_PASS=your-app-passwordSMTP_FROM_ADDRESS=noreply@yourdomain.comCONTACT_FORM_RECIPIENT=info@yourdomain.comSENDPULSE_API_ID=your_sendpulse_idSENDPULSE_API_SECRET=your_sendpulse_secret