#连接库初步完成

This commit is contained in:
CC
2026-01-27 18:44:49 +08:00
parent 8c39f0daf8
commit 949743972c
82 changed files with 1187 additions and 650 deletions

View File

@@ -1,5 +1,5 @@
import '../models/user_model.dart';
abstract class AuthHttpDataSource {
abstract class IAuthHttpDataSource {
Future<UserModel> login(String username, String password, int sourceType);
}

View File

@@ -0,0 +1,8 @@
import '../../domain/entities/user_entity.dart';
abstract class IAuthLocalDataSource {
Future<void> saveUser(UserEntity user);
Future<UserEntity?> getUser();
Future<void> deleteUser();
Future<bool> hasUser();
}

View File

@@ -2,9 +2,9 @@ import 'package:dio/dio.dart';
import 'package:maibu_satabot_v2/core/consts/http_api_consts.dart';
import '../../models/user_model.dart';
import '../auth_http_datasource.dart';
import '../i_auth_http_datasource.dart';
class AuthHttpDataSourceImpl implements AuthHttpDataSource {
class AuthHttpDataSourceImpl implements IAuthHttpDataSource {
final Dio dio;
AuthHttpDataSourceImpl(this.dio);

View File

@@ -0,0 +1,41 @@
import 'dart:convert';
import 'package:shared_preferences/shared_preferences.dart';
import '../../models/user_model.dart';
import '../../../domain/entities/user_entity.dart';
import '../i_auth_local_datasource.dart';
class AuthLocalDatasourceImpl implements IAuthLocalDataSource {
final SharedPreferences _prefs;
static const _userKey = 'auth_user';
AuthLocalDatasourceImpl(this._prefs);
@override
Future<void> saveUser(UserEntity user) async {
// 1. 将对象转为 Map -> 2. 将 Map 转为 JSON 字符串
final model = UserModel.fromEntity(user);
await _prefs.setString(_userKey, json.encode(model.toJson()));
}
@override
Future<UserEntity?> getUser() async {
final jsonString = _prefs.getString(_userKey);
if (jsonString == null) return null;
// 将 JSON 转回 Model,再转成 Entity 返回给业务层
final model = UserModel.fromJson(json.decode(jsonString));
return model.toEntity();
}
@override
Future<void> deleteUser() async {
await _prefs.remove(_userKey);
}
@override
Future<bool> hasUser() async {
return _prefs.containsKey(_userKey);
}
}

View File

@@ -1,8 +1,9 @@
import 'package:maibu_satabot_v2/core/data/base_model.dart';
import '../../../../core/domain/entities/user_entity.dart';
import '../../domain/entities/user_entity.dart';
class UserModel extends UserEntity implements BaseModel {
class UserModel extends UserEntity implements BaseModel<UserEntity> {
UserModel({
required super.userId,
required super.username,
@@ -26,6 +27,7 @@ class UserModel extends UserEntity implements BaseModel {
);
}
@override
Map<String, dynamic> toJson() {
return {
'userId': userId,
@@ -38,17 +40,7 @@ class UserModel extends UserEntity implements BaseModel {
};
}
toEntity() {
return UserEntity(
userId: userId,
username: username,
nickname: nickname,
token: token,
avatar: avatar,
email: email,
phone: phone,
);
}
factory UserModel.fromEntity(UserEntity entity) {
return UserModel(
@@ -61,4 +53,17 @@ class UserModel extends UserEntity implements BaseModel {
phone: entity.phone,
);
}
@override
UserEntity toEntity() {
return UserEntity(
userId: userId,
username: username,
nickname: nickname,
token: token,
avatar: avatar,
email: email,
phone: phone,
);
}
}

View File

@@ -1,15 +1,15 @@
import 'package:dio/dio.dart';
import 'package:fpdart/fpdart.dart';
import 'package:maibu_satabot_v2/core/storage/user_storage.dart';
import 'package:maibu_satabot_v2/features/auth/data/datasources/i_auth_local_datasource.dart';
import '../../../../core/domain/entities/user_entity.dart';
import '../../domain/entities/user_entity.dart';
import '../../domain/errors/auth_failure.dart';
import '../../domain/repositories/auth_repository.dart';
import '../datasources/auth_http_datasource.dart';
import '../datasources/i_auth_http_datasource.dart';
class AuthRepositoryImpl implements AuthRepository {
final AuthHttpDataSource httpRemote;
final UserStorage localTokenStorage;
final IAuthHttpDataSource httpRemote;
final IAuthLocalDataSource localTokenStorage;
AuthRepositoryImpl({
required this.httpRemote,