shihyuuuuuuu / ReadingAPP

0 stars 0 forks source link

Add models #21

Closed shihyuuuuuuu closed 2 months ago

shihyuuuuuuu commented 3 months ago

Issue

Fixes #15 ## Changes - 新增 Firebase 相關 plugins - `enums` 放到 `data/local/` - 新增各 data models - 新增各 model 的 repositories - 新增 `test_data.json` 到 `assets/`,可作為 database 操作與 UI 顯示之測試資料 - 新增測試用之 scripts(見下面 Test part) ### 關於 Models - 統一繼承自 `abstract class MappableModel`,各 model 必須 override `fromMap` 和 `toMap`,使其能夠統一格式與 firebase 溝通資料 ```dart abstract class MappableModel { MappableModel(); MappableModel._(); factory MappableModel.fromMap(Map map, String id) { throw UnimplementedError('fromMap must be implemented'); } Map toMap(); } ``` ### 關於 Repository - 統一繼承自 `base_repo.dart` 中的 `abstract class BaseRepository`,為一支援泛型之 abstract class,各自 repository 只要改 model type 即可,可大幅減少 duplicated code - `BaseRepository` 目前實做 `add` 和 `get`(by ID),之後再依需求擴增 `delete` 等功能 ## Test 新增兩個測試用的 scripts: **test_add_models.dart** - 執行:`flutter run -t lib/script/test_add_models.dart ` - 會抓 `assets/test_data.json` 的資料並使用各 model repo 的 `add` 功能,將測試資料新增到 firebase - 可上 firebase 檢視新增的結果 ![image](https://github.com/user-attachments/assets/908bb951-da0d-4dd6-8274-53541f03fcdd) **delete_all_collections.dart** - 執行:`flutter run -t lib/script/delete_all_collections.dart` - 會刪除所有列在 script 中 collections 的 documents,謹慎使用 ## Screenshots ## Additional Notes
shihyuuuuuuu commented 3 months ago

為了要測試 model 功能是否正常,我有先添加 User 的 repository 做測試了,可以對 Firestore 做 AddUser 以及 GetUser。 另外有寫了個簡單的 unit test,測試新增 User 的功能是否正常。(可看上面的 PR 描述)

Todo:

RitaHsieh commented 2 months ago

想在userBook裡面加notesId: List notesId,連到一連串的notes

shihyuuuuuuu commented 2 months ago

想在userBook裡面加notesId: List notesId,連到一連串的notes

想到那時候為什麼沒有加這個了,因為 Note mode 的欄位有 userBookId,要列出 userBook 的所有 notes,應該可以用 Select userBook From Note Where userBookId=xxx 之類的,要把 notesId 嵌入到 userBook 是考慮到可以加速效能、不用多一次查詢嗎?

shihyuuuuuuu commented 2 months ago

PR 描述有更新囉!請見上面https://github.com/shihyuuuuuuu/ReadingAPP/pull/21#issue-2453415393

RitaHsieh commented 2 months ago

想在userBook裡面加notesId: List notesId,連到一連串的notes

想到那時候為什麼沒有加這個了,因為 Note mode 的欄位有 userBookId,要列出 userBook 的所有 notes,應該可以用 Select userBook From Note Where userBookId=xxx 之類的,要把 notesId 嵌入到 userBook 是考慮到可以加速效能、不用多一次查詢嗎?

嗯,本來是在考慮能不能join的問題,但既然你覺得可以就先這樣吧!