HooStore-Backend/docs/implementation-plan.md
2026-10-27 15:08:53 +07:00

3.2 KiB

Backend Implementation Plan — Medusa (default, no core modification)

Mục tiêu

Khởi tạo Medusa backend chạy bằng cấu hình mặc định (không fork/sửa source Medusa), expose Store API cho storefront Next.js và Admin API cho quản trị viên.

1. Prerequisites

  • Node.js 20.x (đã có: v20.16.0)
  • PostgreSQL (dev: local hoặc Docker container)
  • Redis (dev: local hoặc Docker container; dùng cho event bus, cache, workflow engine)
  • Git (repo riêng biệt với frontend)

2. Scaffold dự án

  • Chạy npx create-medusa-app@latest (hoặc medusa new) trong thư mục backend/
  • Chọn: khởi tạo với PostgreSQL, không cần seed data mẫu mặc định của Medusa nếu không cần (sẽ seed data riêng của brand)
  • Kết quả: Medusa server + Admin dashboard (React, đi kèm sẵn, không cần build riêng)

3. Cấu hình môi trường (.env)

  • DATABASE_URL — kết nối PostgreSQL
  • REDIS_URL — kết nối Redis
  • STORE_CORS, ADMIN_CORS, AUTH_CORS — whitelist origin của frontend (Next.js dev: http://localhost:3000, prod: domain thật)
  • JWT_SECRET, COOKIE_SECRET

4. Cấu hình thương mại cơ bản (qua Admin, không cần code)

  • Tạo Region (ví dụ: Việt Nam — currency VND) và Sales Channel
  • Cấu hình Shipping Option cơ bản (giao hàng nội địa)
  • Cấu hình Payment Provider (bắt đầu với manual/COD cho MVP, hoặc Stripe nếu cần online payment ngay)
  • Tạo tài khoản Admin user đầu tiên

5. Product data model — sử dụng default, không custom module

Theo quyết định đã thảo luận: không cần sửa core Medusa cho yêu cầu custom size đo (vòng eo, vai, ngực...):

  • Field nào cần nhập cho từng sản phẩm → lưu trong product.metadata.measurement_fields (JSON, sửa trực tiếp qua Admin có sẵn)
  • Giá trị khách nhập → lưu trong line_item.metadata khi add-to-cart (API POST /store/carts/{id}/line-items đã hỗ trợ sẵn tham số metadata)
  • Không cần custom module ở giai đoạn MVP. Cân nhắc custom module + Admin UI widget riêng ở giai đoạn sau nếu cần UI đẹp hơn hoặc query có cấu trúc theo số đo.

6. Tạo dữ liệu sản phẩm mẫu

  • Ít nhất 1-2 category, vài product với variant chuẩn (màu/size cố định) + 1 product minh họa dùng measurement_fields custom

7. Kiểm thử API

  • Verify Admin API (/admin/*) hoạt động qua Admin dashboard
  • Verify Store API (/store/*) trả đúng product/region/cart bằng publishable API key
  • Verify luồng: tạo cart → add line item với metadata custom size → checkout → order lưu đúng metadata

8. Git & Deploy target (ghi chú, chưa thực hiện)

  • Repo riêng biệt (backend/ là git repo độc lập, không chung với frontend/)
  • Deploy: Railway hoặc Render (Node service) + Supabase/Neon (PostgreSQL managed) + Redis managed (Upstash hoặc addon của platform)

Không nằm trong scope MVP này

  • Custom Medusa module cho measurement fields có cấu trúc riêng
  • Multi-currency / multi-region đầy đủ (chỉ 1 region VN cho MVP)
  • Payment gateway ngoài manual/Stripe cơ bản