feat: refactor code
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
/// موجودیتهای کاتالوگ فروشگاه (مستقل از JSON).
|
||||
class CoinPackage {
|
||||
final String id;
|
||||
final String title;
|
||||
final int coins;
|
||||
final int vipDays;
|
||||
final int priceToman;
|
||||
final int bonusPct;
|
||||
const CoinPackage({
|
||||
required this.id,
|
||||
required this.title,
|
||||
required this.coins,
|
||||
required this.vipDays,
|
||||
required this.priceToman,
|
||||
required this.bonusPct,
|
||||
});
|
||||
}
|
||||
|
||||
class TicketPackage {
|
||||
final String id;
|
||||
final String title;
|
||||
final int tickets;
|
||||
final int priceToman;
|
||||
const TicketPackage({
|
||||
required this.id,
|
||||
required this.title,
|
||||
required this.tickets,
|
||||
required this.priceToman,
|
||||
});
|
||||
}
|
||||
|
||||
class CardSkin {
|
||||
final String id;
|
||||
final String title;
|
||||
final int priceCoins;
|
||||
const CardSkin(
|
||||
{required this.id, required this.title, required this.priceCoins});
|
||||
}
|
||||
|
||||
class Booster {
|
||||
final String id;
|
||||
final String title;
|
||||
final int multiplier;
|
||||
final int hours;
|
||||
final int priceToman;
|
||||
const Booster({
|
||||
required this.id,
|
||||
required this.title,
|
||||
required this.multiplier,
|
||||
required this.hours,
|
||||
required this.priceToman,
|
||||
});
|
||||
}
|
||||
|
||||
class VipPackage {
|
||||
final String id;
|
||||
final String title;
|
||||
final int months;
|
||||
final int priceToman;
|
||||
const VipPackage({
|
||||
required this.id,
|
||||
required this.title,
|
||||
required this.months,
|
||||
required this.priceToman,
|
||||
});
|
||||
}
|
||||
|
||||
/// کلِ دادهی فروشگاه: کاتالوگ + کارتهای متعلق به کاربر + کارت انتخابی.
|
||||
class ShopData {
|
||||
final List<CoinPackage> coinPackages;
|
||||
final List<TicketPackage> ticketPackages;
|
||||
final List<CardSkin> cardSkins;
|
||||
final List<Booster> boosters;
|
||||
final List<VipPackage> vipPackages;
|
||||
final List<String> ownedCards;
|
||||
final String selectedCard;
|
||||
|
||||
const ShopData({
|
||||
required this.coinPackages,
|
||||
required this.ticketPackages,
|
||||
required this.cardSkins,
|
||||
required this.boosters,
|
||||
required this.vipPackages,
|
||||
required this.ownedCards,
|
||||
required this.selectedCard,
|
||||
});
|
||||
|
||||
bool owns(String cardId) => cardId == 'simple' || ownedCards.contains(cardId);
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
import '../../../../core/resources/data_state.dart';
|
||||
import '../../../../core/usecase/use_case.dart';
|
||||
import '../entities/shop_entities.dart';
|
||||
|
||||
abstract class ShopRepository {
|
||||
Future<DataState<ShopData>> getShop();
|
||||
Future<DataState<String>> buyCard(String cardId);
|
||||
Future<DataState<String>> selectCard(String cardId);
|
||||
Future<DataState<String>> purchase(PurchaseParams params);
|
||||
Future<DataState<int>> adReward(String token);
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
import '../../../../core/resources/data_state.dart';
|
||||
import '../../../../core/usecase/use_case.dart';
|
||||
import '../repository/shop_repository.dart';
|
||||
|
||||
class AdRewardUseCase implements UseCase<DataState<int>, String> {
|
||||
final ShopRepository repository;
|
||||
AdRewardUseCase(this.repository);
|
||||
|
||||
@override
|
||||
Future<DataState<int>> call(String params) => repository.adReward(params);
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
import '../../../../core/resources/data_state.dart';
|
||||
import '../../../../core/usecase/use_case.dart';
|
||||
import '../repository/shop_repository.dart';
|
||||
|
||||
class BuyCardUseCase implements UseCase<DataState<String>, String> {
|
||||
final ShopRepository repository;
|
||||
BuyCardUseCase(this.repository);
|
||||
|
||||
@override
|
||||
Future<DataState<String>> call(String params) => repository.buyCard(params);
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
import '../../../../core/resources/data_state.dart';
|
||||
import '../../../../core/usecase/use_case.dart';
|
||||
import '../entities/shop_entities.dart';
|
||||
import '../repository/shop_repository.dart';
|
||||
|
||||
class GetShopUseCase implements UseCase<DataState<ShopData>, NoParams> {
|
||||
final ShopRepository repository;
|
||||
GetShopUseCase(this.repository);
|
||||
|
||||
@override
|
||||
Future<DataState<ShopData>> call(NoParams params) => repository.getShop();
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
import '../../../../core/resources/data_state.dart';
|
||||
import '../../../../core/usecase/use_case.dart';
|
||||
import '../repository/shop_repository.dart';
|
||||
|
||||
class PurchaseUseCase implements UseCase<DataState<String>, PurchaseParams> {
|
||||
final ShopRepository repository;
|
||||
PurchaseUseCase(this.repository);
|
||||
|
||||
@override
|
||||
Future<DataState<String>> call(PurchaseParams params) =>
|
||||
repository.purchase(params);
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
import '../../../../core/resources/data_state.dart';
|
||||
import '../../../../core/usecase/use_case.dart';
|
||||
import '../repository/shop_repository.dart';
|
||||
|
||||
class SelectCardUseCase implements UseCase<DataState<String>, String> {
|
||||
final ShopRepository repository;
|
||||
SelectCardUseCase(this.repository);
|
||||
|
||||
@override
|
||||
Future<DataState<String>> call(String params) =>
|
||||
repository.selectCard(params);
|
||||
}
|
||||
Reference in New Issue
Block a user