跳至主要内容

開發流程

本文檔說明花店管理系統的日常開發流程與最佳實踐。

開發環境啟動

每日開始

# 1. 更新程式碼
git pull origin main

# 2. 啟動前端(使用 Mock API,預設模式)
cd app-web
npm run dev
# 訪問 http://localhost:3000

前後端整合開發

需要測試真實後端 API 時:

# 1. 啟動後端
cd app-server
./gradlew bootRun
# 後端啟動於 http://localhost:8080/app-server

# 2. 修改前端配置,關閉 MSW
# 編輯 app-web/src/conf/config.ts
# 設定 app.msw.enabled = false
# 設定 app.baseURL = '/app-server'

# 3. 啟動前端
cd app-web
npm run dev

使用 Mock API 開發(預設)

前端預設啟用 MSW Mock API,可獨立開發不需啟動後端:

cd app-web
npm run dev

MSW 會在開發環境自動啟用,Console 會顯示 [MSW] Mock Service Worker started

功能開發流程

1. 建立分支

# 從 develop 分支建立功能分支
git checkout develop
git pull
git checkout -b feature/US-101-product-list

命名規範

類型格式範例
功能feature/US-xxx-descriptionfeature/US-101-product-list
修復fix/issue-descriptionfix/login-redirect-error
改善improve/descriptionimprove/product-search-performance

2. 開發功能

後端開發順序

  1. Entity - 定義資料模型
  2. Repository - 資料存取層
  3. Service - 業務邏輯
  4. Controller - REST API
  5. 測試 - 單元測試、整合測試

前端開發順序

  1. Mock API - 定義 API 回應格式
  2. Service - API 服務層
  3. Hook - 資料查詢/變更 hook
  4. Component - UI 組件
  5. Page - 頁面整合
  6. 測試 - 組件測試

3. 提交變更

# 查看變更
git status
git diff

# 暫存變更
git add .

# 提交(遵循 Conventional Commits)
git commit -m "feat(product): 新增商品列表頁面

- 實作商品列表 API 整合
- 新增搜尋與篩選功能
- 支援分頁"

Commit Message 規範

<type>(<scope>): <subject>

<body>
Type說明
feat新功能
fix修復 bug
docs文檔更新
style程式碼風格調整
refactor重構
test測試
chore雜項維護

4. 推送與建立 PR

# 推送分支
git push -u origin feature/US-101-product-list

# 建立 Pull Request(使用 GitHub CLI)
gh pr create --title "feat(product): 新增商品列表頁面" \
--body "## 變更內容
- 實作商品列表 API
- 新增搜尋與篩選功能

## 測試
- [ ] 單元測試通過
- [ ] 手動測試通過"

5. Code Review

  • 至少一位團隊成員 review
  • CI 檢查通過
  • 解決所有 review 意見

6. 合併

# 合併到 develop
gh pr merge --squash

程式碼品質

執行 Lint 與格式化

# 前端 Lint 檢查
cd app-web
npm run lint

# 前端程式碼格式化
npm run format

# 檢查格式(不修改)
npm run format:check

執行測試

# 前端測試
cd app-web
npm run test

# 前端測試覆蓋率
npm run coverage

# 後端測試
cd app-server
./gradlew test

建置檢查

# 前端建置(含型別檢查)
cd app-web
npm run build

# 後端建置
cd app-server
./gradlew build

常見任務

新增 API 端點

  1. 定義 Entity(繼承 AuditableTenantEntity
  2. 新增 Repository(使用 EntityManager + TupleQueryBuilder
  3. 實作 Service 邏輯(@Transactional
  4. 新增 Controller 端點(@PreAuthorize 權限控制)
  5. 撰寫測試

新增前端頁面

  1. 新增 Mock Handler(app-web/src/mocks/handlers/
  2. 新增 Service 方法(app-web/src/services/
  3. 新增 React Query Hook
  4. 建立頁面組件
  5. 設定路由(app-web/src/routes/
  6. 撰寫測試

資料庫變更

專案使用 Hibernate auto DDL(ddl-auto: update),Entity 變更會自動同步到資料庫:

  1. 修改或新增 Entity
  2. 重新啟動後端
  3. Hibernate 自動更新資料庫 Schema

注意:此模式適合開發環境。生產環境建議使用 Flyway 管理遷移。

疑難排解

相依性問題

# 前端
rm -rf node_modules package-lock.json
npm install

# 後端
./gradlew clean build --refresh-dependencies

資料庫狀態不一致

H2 資料庫重置:

# 刪除 H2 資料庫檔案(會清除所有資料)
rm -rf ~/Project/appfuse/var/data/app-server/appdb.*

# 重新啟動後端,Hibernate 會重建 Schema
./gradlew bootRun

快取問題

# 清除 Gradle 快取
./gradlew clean

# 清除 Vite 快取
rm -rf node_modules/.vite

MSW 未正常運作

# 確認 mockServiceWorker.js 存在
ls app-web/public/mockServiceWorker.js

# 如果不存在,重新生成
cd app-web
npx msw init public --save

下一步