Files
CFDivePlatform/openspec/changes/archive/2026-06-11-course-image-compression/tasks.md
T
a620906209 a7d5f81890
Run Tests / test (pull_request) Successful in 1m58s
chore(openspec): 歸檔 course-image-compression 變更
實作已 merge(PR #34),規格增量已於實作時同步至主規格。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 23:53:15 +08:00

1.3 KiB
Raw Blame History

1. 共用壓縮 trait

  • 1.1 新增 app/Traits/CompressesImages.phpcompressToJpeg(UploadedFile $file, string $directory): string——Intervention v3 讀取 → 長邊 >2048 時 scaleDown(2048, 2048)toJpeg(quality: 85)Storage::disk('public')->put("{$directory}/{uuid}.jpg", ...),回傳相對路徑

2. CourseImageController 套用

  • 2.1 validateImage()max:2048max:10240
  • 2.2 uploadCover()store() 改用 compressToJpeg($file, "offers/{$offerId}/cover")
  • 2.3 uploadImage():同上,目錄 offers/{$offerId}/gallery

3. 前端 lazy loading

  • 3.1 frontend/src/views/CoursesView.vueCourseDetailView.vue 的課程圖 <img>loading="lazy"(其他列表元件若有課程圖一併處理)

4. 測試

  • 4.1 更新 CourseImageTest:大小上限案例改 >10MB 422、新增 5MB 通過案例、儲存路徑斷言改 .jpg
  • 4.2 新增壓縮行為案例:上傳 3000×3000 fake 圖 → 讀回實際尺寸 ≤2048;上傳 PNG → 儲存為 .jpg
  • 4.3 容器內 php artisan test 全綠(基準:151 passed;本機缺 GD 不可作準)

5. 規格同步

  • 5.1 將本 change 的 specs 增量套用至主規格 openspec/specs/course-image-upload/spec.md