feat: refactor code

This commit is contained in:
2026-06-17 12:57:28 +03:30
parent e9f294fa19
commit 519752b478
106 changed files with 3459 additions and 2309 deletions
@@ -0,0 +1,13 @@
import 'package:dio/dio.dart';
import '../../../../../core/locator/locator.dart';
import '../../../../../core/network/api_provider_imp.dart';
/// تماس‌های خامِ HTTP مربوط به کیف‌پول و پاداش روزانه.
class WalletApiProvider {
ApiProviderImp get _api => locator<ApiProviderImp>();
Future<Response> getWallet() => _api.get('/wallet');
Future<Response> getMe() => _api.get('/me');
Future<Response> claimDaily() => _api.post('/rewards/daily');
}
@@ -0,0 +1,39 @@
import '../../domain/entities/wallet_entity.dart';
/// مدلِ کیف‌پول؛ از پاسخِ /wallet و /me ساخته می‌شود.
class WalletModel extends WalletEntity {
const WalletModel({
required super.coins,
required super.tickets,
required super.xp,
required super.trophies,
required super.level,
required super.xpIntoLevel,
required super.xpForNext,
required super.vip,
required super.selectedCard,
required super.name,
required super.avatar,
});
factory WalletModel.fromJson(
Map<String, dynamic> wallet,
Map<String, dynamic> user,
) {
final name = (user['first_name'] as String?)?.trim();
final avatar = (user['avatar'] as String?)?.trim();
return WalletModel(
coins: (wallet['coins'] ?? 0) as int,
tickets: (wallet['tickets'] ?? 0) as int,
xp: (wallet['xp'] ?? 0) as int,
trophies: (wallet['trophies'] ?? 0) as int,
level: (wallet['level'] ?? 1) as int,
xpIntoLevel: (wallet['xp_into_level'] ?? 0) as int,
xpForNext: (wallet['xp_for_next'] ?? 1) as int,
vip: (wallet['vip'] ?? false) as bool,
selectedCard: (wallet['selected_card'] ?? 'simple') as String,
name: (name == null || name.isEmpty) ? 'بازیکن' : name,
avatar: (avatar == null || avatar.isEmpty) ? 'hakem-1' : avatar,
);
}
}
@@ -0,0 +1,38 @@
import 'package:dio/dio.dart';
import '../../../../core/error/custom_error.dart';
import '../../../../core/resources/data_state.dart';
import '../../domain/entities/wallet_entity.dart';
import '../../domain/repository/wallet_repository.dart';
import '../data_source/remote/wallet_api_provider.dart';
import '../model/wallet_model.dart';
class WalletRepositoryImpl extends WalletRepository {
final WalletApiProvider api;
WalletRepositoryImpl(this.api);
@override
Future<DataState<WalletEntity>> getWallet() async {
final results = await Future.wait([api.getWallet(), api.getMe()]);
final Response wallet = results[0];
final Response me = results[1];
if (wallet.statusCode == 200 && me.statusCode == 200) {
return DataSuccess(WalletModel.fromJson(
Map<String, dynamic>.from(wallet.data as Map),
Map<String, dynamic>.from((me.data['user'] ?? {}) as Map),
));
}
return DataError(errorConvertor(wallet.statusCode, null));
}
@override
Future<DataState<int>> claimDaily() async {
final Response res = await api.claimDaily();
if (res.statusCode == 200) {
return DataSuccess((res.data['amount'] ?? 0) as int);
}
final d = res.data;
final msg = (d is Map && d['message'] != null) ? d['message'].toString() : null;
return DataError(errorConvertor(res.statusCode, msg));
}
}