import 'package:dio/dio.dart'; import 'package:sunny_mochi/core/config/api_paths.dart'; import 'package:sunny_mochi/core/crash/pending_crash_report.dart'; import 'package:sunny_mochi/core/network/api_response.dart'; import 'package:sunny_mochi/core/network/dio_client.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; part 'crash_datasource.g.dart'; @riverpod CrashDatasource crashDatasource(Ref ref) => CrashDatasource(ref.watch(dioClientProvider)); /// 崩溃报告上报接口。 /// /// **后端接口规范(待后端实现)**: /// ``` /// POST /sys/crash-report /// Headers: satoken: (可选,未登录也应接受) /// Body: { "kind", "error", "stackTrace", "occurredAt", "deviceModel", ... } /// Response: { "retCode": "00000", "retMsg": "ok", "retData": null } /// ``` // TODO(backend): 实现 POST /sys/crash-report 接口(接收客户端崩溃日志) class CrashDatasource { const CrashDatasource(this._dio); final Dio _dio; Future sendCrashReport(PendingCrashReport report) async { final resp = await _dio.post>( ApiPaths.crashReport, data: report.toJson(), ); parseEnvelope(resp.data, (j) => j).unwrapVoid(); } }