up
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import '../core/network/api_client.dart';
|
||||
import '../core/network/api_exception.dart';
|
||||
import '../core/network/endpoints.dart';
|
||||
import '../core/storage/token_store.dart';
|
||||
import '../models/user_model.dart';
|
||||
|
||||
/// 认证服务(《03-接口文档》第 3 章)
|
||||
@@ -8,13 +9,22 @@ class AuthService {
|
||||
AuthService._();
|
||||
|
||||
/// 3.1 发送短信验证码 scene: register/login/reset
|
||||
static Future<void> sendSmsCode(String phone, String scene) async {
|
||||
await ApiClient.I.post(Endpoints.smsSend, data: {'phone': phone, 'scene': scene});
|
||||
/// 返回开发模式验证码(短信通道未配置时服务端下发),生产通道下为 null
|
||||
static Future<String?> sendSmsCode(String phone, String scene) async {
|
||||
final data = await ApiClient.post<Map<String, dynamic>>(
|
||||
Endpoints.smsSend,
|
||||
data: {'phone': phone, 'scene': scene},
|
||||
);
|
||||
return data['dev_code'] as String?;
|
||||
}
|
||||
|
||||
/// 3.2 发送邮箱验证码
|
||||
static Future<void> sendEmailCode(String email, String scene) async {
|
||||
await ApiClient.I.post(Endpoints.emailSend, data: {'email': email, 'scene': scene});
|
||||
static Future<String?> sendEmailCode(String email, String scene) async {
|
||||
final data = await ApiClient.post<Map<String, dynamic>>(
|
||||
Endpoints.emailSend,
|
||||
data: {'email': email, 'scene': scene},
|
||||
);
|
||||
return data['dev_code'] as String?;
|
||||
}
|
||||
|
||||
/// 3.3 注册(type: phone/email,可带邀请码),返回 Token 对与用户信息
|
||||
@@ -66,7 +76,13 @@ class AuthService {
|
||||
}
|
||||
|
||||
/// 统一解析 Token 响应:access/refresh 入安全存储,user 转模型
|
||||
static LoginResult _fromTokenData(Map<String, dynamic> data) {
|
||||
static Future<LoginResult> _fromTokenData(Map<String, dynamic> data) async {
|
||||
// 登录/注册响应携带新 token 对,必须先落存储(否则登录态判定与后续请求鉴权全挂)
|
||||
final access = data['access_token'] as String?;
|
||||
final refresh = data['refresh_token'] as String?;
|
||||
if (access != null && access.isNotEmpty && refresh != null && refresh.isNotEmpty) {
|
||||
await TokenStore.save(access: access, refresh: refresh);
|
||||
}
|
||||
final user = UserModel.fromJson((data['user'] as Map<String, dynamic>?) ?? const {});
|
||||
final trial = data['trial_granted'] as Map<String, dynamic>?;
|
||||
return LoginResult(
|
||||
|
||||
@@ -34,6 +34,15 @@ class VideoService {
|
||||
static Future<Map<String, dynamic>> fetchDetail(int videoId) =>
|
||||
ApiClient.get<Map<String, dynamic>>(Endpoints.videoDetail(videoId));
|
||||
|
||||
/// 当前视频所属系列 + 全部集数(播放器抽屉用)
|
||||
static Future<Map<String, dynamic>> fetchVideoSeries(int videoId) async {
|
||||
try {
|
||||
return await ApiClient.get<Map<String, dynamic>>(Endpoints.videoSeries(videoId));
|
||||
} catch (_) {
|
||||
return {'has_series': false};
|
||||
}
|
||||
}
|
||||
|
||||
/// 5.3 观看上报(计费):开始播放时调用,客户端已按 video_id+日期 本地去重
|
||||
static Future<WatchResult> reportWatch(int videoId, {int? position}) async {
|
||||
final data = await ApiClient.post<Map<String, dynamic>>(
|
||||
|
||||
Reference in New Issue
Block a user