import 'package:ttstd_family_care/core/network/dio_client.dart'; import 'package:ttstd_family_care/features/auth/domain/auth_models.dart'; /// 客户端(家属端)认证接口访问层。 /// /// 对接后端 C 端(open 模块)认证接口。`AppConstants.kBaseUrl` 仅包含 `/api/` /// 前缀,各端点在此显式追加 `v1/open/`(即 `/api/v1/open/**`)。open 模块账号 /// 落地 `app_user`,与后台管理端(`sys_user`)物理分表。 /// /// [DioClient.get] / [DioClient.post] 已统一解析为后台返回体中的 `data` 字段; /// 业务失败时抛出 [ApiException],由上层(Repository)按需处理。 class AuthApi { const AuthApi(); /// 账号密码登录。 Future loginByPassword({ required String username, required String password, }) async { final data = await DioClient.post( 'v1/open/login', data: { 'username': username, 'password': password, }, ); return LoginResult.fromJson(data as Map); } /// 短信验证码登录。 Future loginBySms({ required String phone, required String code, }) async { final data = await DioClient.post( 'v1/open/auth/login/mobile', data: { 'mobile': phone, 'code': code, }, ); return LoginResult.fromJson(data as Map); } /// 短信注册。 Future register({ required String phone, required String code, required String password, }) async { final data = await DioClient.post( 'v1/open/register/mobile', data: { 'mobile': phone, 'code': code, 'password': password, }, ); return LoginResult.fromJson(data as Map); } /// 发送短信验证码。 /// /// 后端按场景拆分验证码发送接口(query 参数 mobile)。 Future sendSmsCode({ required String phone, required SmsScene scene, }) async { final path = switch (scene) { SmsScene.login => 'v1/open/auth/login/sms/code', SmsScene.register => 'v1/open/auth/register/sms/code', SmsScene.resetPassword => 'v1/open/reset-password/sms/code', }; await DioClient.post( path, queryParameters: {'mobile': phone}, ); } /// 重置密码(忘记密码流程:校验验证码后设置新密码)。 Future resetPassword({ required String phone, required String code, required String password, }) async { await DioClient.post( 'v1/open/auth/reset-password', data: { 'mobile': phone, 'code': code, 'password': password, }, ); } }