feat(app): clean architecture with typed repositories, DTO models and calendar event logos

This commit is contained in:
2026-08-15 01:03:22 +02:00
parent f08fecde23
commit 15f8f7896e
34 changed files with 1435 additions and 1420 deletions
@@ -2,11 +2,12 @@ import 'dart:async';
import 'package:finlytic_app/core/network/api_client.dart';
import 'package:finlytic_app/features/trades/models/trade_model.dart';
import 'package:finlytic_app/features/trades/models/trade_acceptance_dto.dart';
import 'package:finlytic_app/features/trades/models/close_trade_request_dto.dart';
class TradeRepository {
final ApiClient apiClient;
TradeRepository({required this.apiClient});
const TradeRepository({required this.apiClient});
Future<List<TradeModel>> fetchTrades({String? isin, String? status}) async {
try {
@@ -24,8 +25,7 @@ class TradeRepository {
}
return [];
} catch (e) {
print('Error fetching trades: $e');
throw Exception('Trades konnten nicht geladen werden');
throw Exception('Trades konnten nicht geladen werden: $e');
}
}
@@ -36,9 +36,15 @@ class TradeRepository {
}
}
Future<void> closeTrade(String id, {double? exitPrice}) async {
final body = exitPrice != null ? {'userExitPrice': exitPrice} : null;
final response = await apiClient.post('/api/v1/user/trades/$id/close', data: body);
Future<void> rejectTrade(String tradeId) async {
final response = await apiClient.post('/api/v1/user/trades/$tradeId/reject');
if (response.statusCode != 200) {
throw Exception('Trade konnte nicht abgelehnt werden');
}
}
Future<void> closeTrade(String id, {CloseTradeRequestDto? dto}) async {
final response = await apiClient.post('/api/v1/user/trades/$id/close', data: dto?.toJson());
if (response.statusCode != 200) {
throw Exception('Trade konnte nicht geschlossen werden');
}