new project stable version

This commit is contained in:
2026-05-10 19:11:31 +03:00
commit 3616f84556
391 changed files with 23857 additions and 0 deletions

View File

@@ -0,0 +1,15 @@
import 'package:shared_preferences/shared_preferences.dart';
class AppSettingsService {
final SharedPreferences sharedPreferences;
AppSettingsService(this.sharedPreferences);
Future<void> saveMapSettingsFlag(String key, bool value) async {
sharedPreferences.setBool(key, value);
}
bool getMapSettingsFlag(String key) {
return sharedPreferences.getBool(key) ?? false;
}
}

View File

@@ -0,0 +1,43 @@
import 'dart:io';
import 'package:android_id/android_id.dart';
import 'package:device_info_plus/device_info_plus.dart';
import '../../domain/service/device_info_service.dart';
class DeviceInfoServiceImpl extends DeviceInfoService {
final DeviceInfoPlugin _deviceInfo = DeviceInfoPlugin();
final AndroidId _androidId = const AndroidId();
@override
Future<String> getDeviceModel() async {
try {
if (Platform.isAndroid) {
final androidInfo = await _deviceInfo.androidInfo;
return '${androidInfo.manufacturer} ${androidInfo.model}';
} else if (Platform.isIOS) {
final iosInfo = await _deviceInfo.iosInfo;
return iosInfo.utsname.machine;
}
} catch (e) {
print("ERROR: $e");
}
return 'Unknown';
}
@override
Future<String?> getSystemId() async {
try {
if (Platform.isAndroid) {
return await _androidId.getId();
} else if (Platform.isIOS) {
final iosInfo = await _deviceInfo.iosInfo;
return iosInfo.identifierForVendor;
}
} catch (e) {
print("ERROR: $e");
return null;
}
return null;
}
}

View File

@@ -0,0 +1,36 @@
import 'dart:developer' as dev;
import '../network/api_service.dart';
class NewsApiService {
final ApiService _apiService;
NewsApiService(this._apiService);
Future<Map<String, dynamic>> getNews() async {
try {
dev.log('NewsApiService: Запрос GET /news');
final response = await _apiService.getNews();
dev.log('NewsApiService: Успешно получено ${response['data']?.length ?? 0} новостей');
return response;
} catch (e, stackTrace) {
dev.log('NewsApiService: Ошибка: $e', stackTrace: stackTrace);
throw Exception('Не удалось загрузить новости: $e');
}
}
Future<Map<String, dynamic>> getNewsById(int newsId) async {
try {
dev.log('NewsApiService: Запрос GET /news/$newsId');
final response = await _apiService.getNewsById(newsId);
dev.log('NewsApiService: Успешно получена новость с ID: $newsId');
return response!;
} catch (e, stackTrace) {
dev.log('NewsApiService: Ошибка: $e', stackTrace: stackTrace);
throw Exception('Не удалось загрузить новость: $e');
}
}
}

View File

@@ -0,0 +1,80 @@
import 'package:be_happy/domain/entities/user_auth_data.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import '../../domain/service/security_service.dart';
class SecurityServiceImpl extends SecurityService {
static const String kAccessToken = "access_token";
static const String kRefreshToken = "refresh_token";
static const String kCardNumberPrefix = "card_number_";
final FlutterSecureStorage _secureStorage;
SecurityServiceImpl(this._secureStorage);
@override
Future<void> saveTokens(UserAuthData data) async {
await _secureStorage.write(key: kAccessToken, value: data.accessToken);
await _secureStorage.write(key: kRefreshToken, value: data.refreshToken);
}
@override
Future<void> removeTokens() async {
await _secureStorage.delete(key: kRefreshToken);
await _secureStorage.delete(key: kAccessToken);
}
@override
Future<String?> getAccessToken() async {
return await _secureStorage.read(key: kAccessToken);
}
@override
Future<String?> getRefreshToken() async {
return await _secureStorage.read(key: kRefreshToken);
}
@override
Future<void> saveCardFullNumber(int cardId, String fullCardNumber) async {
await _secureStorage.write(
key: '${kCardNumberPrefix}_$cardId',
value: fullCardNumber,
);
}
@override
Future<String?> getCardFullNumber(int cardId) async {
return await _secureStorage.read(key: '${kCardNumberPrefix}_$cardId');
}
@override
Future<void> removeCardFullNumber(int cardId) async {
await _secureStorage.delete(key: '${kCardNumberPrefix}_$cardId');
}
@override
Future<void> clearAllCardsNumbers() async {
// Получаем все ключи и удаляем те, что начинаются с префикса карты
final allKeys = await _secureStorage.readAll();
for (final key in allKeys.keys) {
if (key.startsWith(kCardNumberPrefix)) {
await _secureStorage.delete(key: key);
}
}
}
// @override
// Future<UserAuthData?> getTokens() async {
// final accessToken = await _secureStorage.read(key: kAccessToken);
// final refreshToken = await _secureStorage.read(key: kRefreshToken);
//
// if(accessToken != null && refreshToken != null) {
// return UserAuthData(
// accessToken: accessToken,
// refreshToken: refreshToken,
// );
// }
//
// return null;
// }
}