import '../domain/models/home_data.dart'; import '../domain/models/submit_site_draft.dart'; /// 首页数据仓库契约。 /// /// 界面层只认这个接口,不关心数据来自本地 mock 还是 Rust 后端。 /// /// 两个方法都是异步的:接上后端之后「加载中 / 提交中」和「失败」都是必须 /// 表达的状态,所以契约从一开始就按异步来——mock 实现直接返回已经就绪的值。 abstract interface class HomeRepository { /// 读取首页需要的全部数据。 Future fetchHomeData(); /// 提交一个网站。 /// /// 成功不返回内容:后端会回创建出来的条目,但页面用不到(提交完重新拉一次 /// `/api/nav` 就有了)。失败时抛 [HomeFailure],`message` 可以直接展示。 Future submitSite(SubmitSiteDraft draft); /// 修改一个已有的网站(只能改用户提交 / 接口推送进来的,系统内置的会返回 403)。 Future updateSite(String id, SubmitSiteDraft draft); /// 删除一个已有的网站(同样只对可修改的条目有效)。 Future deleteSite(String id); } /// 取数或提交失败。[message] 是可以直接显示给用户的说明。 class HomeFailure implements Exception { const HomeFailure(this.message); /// 面向用户的说明。 final String message; @override String toString() => message; }