### 流程 1. **規劃 Line Bot 題目** 2. **規劃使用工具與架構** 3. **初始程式與持續整合(CI)** - 使用 **biomejs** 檢查程式碼品質。 4. **建立 MongoDB Atlas 並規劃資料表** 5. **串接 Google Map API 實現找餐廳功能** 6. **建立 GCP 伺服器** - 包含持續部署(CD)設定,無需額外編寫 GitHub 部署流程。 7. **新增收藏功能** 8. **收藏名單功能** - 查看地圖 - 刪除收藏 9. **整理文件** 10. **撰寫測試** - 因時間關係,將此步驟安排於最後,待有空時處理。 ### 主題名稱:line-美食地圖夥伴 Github:[line-dine-mapper](https://github.com/pg56714/line-dine-mapper) ### 功能描述: 本專案透過 LINE Bot 結合 Google Map API,提供用戶一個便捷的餐廳收藏工具。 #### **1. 找餐廳** - **目前位置輸入** - 用戶可手動輸入當前位置或透過 LINE 傳送位置資訊。 - **排名筆數設定** - 用戶可設定顯示評論數最多且評價最高的前 N 筆餐廳資訊(如前 10、前 20 等)。 - **範圍設定** - 以用戶當前地點為基準,指定搜尋半徑(單位:公尺)。 - **餐廳選擇方式** - **自行選擇**:用戶從搜尋結果中手動選擇餐廳。 - **隨機選擇**:系統隨機推薦一間餐廳。 - **餐廳資訊展示** - 顯示餐廳名稱、地址、營業時間、平均評分等資訊。 - 若搜尋結果超過 5 筆,第 5 筆將提供「繼續」選項。 - **選定餐廳後操作** - 提供以下按鈕: 1. 導航到餐廳 2. 導航至 LINE Go 3. 收藏該餐廳 4. 結束 #### **2. 收藏名單** - **自動分類(暫不處理)** - 收藏依地區(如臺北市、新北市)自動分類。 - **收藏操作模式** - **查看地圖**:查看餐廳資訊或導航。 - **刪除收藏**:刪除指定的收藏餐廳。 #### **3. 隨機推薦** - **隨機選擇** - 系統根據收藏名單隨機推薦餐廳,解決「不知道要吃什麼」的煩惱。 ## 排序邏輯 - **依評論數排序**: - 根據 `user_ratings_total` 排序,確保評論數最多的餐廳靠前。 - **依評價排序**: - 若評論數相同,根據 `rating` 排序,評分高的餐廳靠前。 範例: 1. **Restaurant C**(評論數 300,評分 4.2) 2. **Restaurant A**(評論數 200,評分 4.5) 3. **Restaurant D**(評論數 150,評分 4.5) 4. **Restaurant B**(評論數 50,評分 4.7) ## 技術選擇 - **後端框架**:Node.js (TypeScript) with Express - **雲端服務**:Google Serverless(支援持續部署) - **資料庫**:MongoDB Atlas - **套件管理工具**:Yarn - **代碼檢查與格式化工具**:[biomejs](https://biomejs.dev/)(取代 eslint 與 prettier,速度提升約 35 倍) ## MongoDB Atlas資料表 ### **資料表:`restaurant_favorites`** | 欄位名稱 | 資料類型 | 描述 | |--------------------|---------------|-----------------------------------------------| | `_id` | `ObjectId` | MongoDB 自動生成的唯一標識符。 | | `lineUserId` | `String` | LINE 用戶識別碼,標識該收藏屬於哪位用戶。 | | `restaurantId` | `String` | 餐廳的唯一識別碼(通常為 Google Places ID)。 | | `name` | `String` | 餐廳名稱。 | | `address` | `String` | 餐廳地址,用於展示和導航。 | | `latitude` | `Number` | 餐廳的緯度(用於地理查詢或導航)。 | | `longitude` | `Number` | 餐廳的經度(用於地理查詢或導航)。 | | `addedAt` | `Date` | 收藏的時間,默認為當前時間。 |