chore(app): сгенерированный Dart-клиент из OpenAPI

openapi-generator-cli -g dart-dio. Генерируется, но коммитится: CI ловит дрейф
openapi/openapi.json, а приложение собирается без запуска генератора.
Пересобирается через just gen-client после любого изменения роутов.
This commit is contained in:
Dmitry
2026-09-18 13:44:09 +03:00
parent ce0966fca2
commit 90ba198c2a
176 changed files with 15733 additions and 0 deletions
@@ -0,0 +1,147 @@
import 'package:fintracker_api/src/model/account_balance.dart';
import 'package:fintracker_api/src/model/account_out.dart';
import 'package:fintracker_api/src/model/account_patch.dart';
import 'package:fintracker_api/src/model/cash_flow_month.dart';
import 'package:fintracker_api/src/model/category_out.dart';
import 'package:fintracker_api/src/model/data_quality_row.dart';
import 'package:fintracker_api/src/model/health.dart';
import 'package:fintracker_api/src/model/login_request.dart';
import 'package:fintracker_api/src/model/net_worth_breakdown.dart';
import 'package:fintracker_api/src/model/net_worth_day.dart';
import 'package:fintracker_api/src/model/problem.dart';
import 'package:fintracker_api/src/model/refresh_log_out.dart';
import 'package:fintracker_api/src/model/refresh_request.dart';
import 'package:fintracker_api/src/model/rule_create.dart';
import 'package:fintracker_api/src/model/rule_out.dart';
import 'package:fintracker_api/src/model/rule_patch.dart';
import 'package:fintracker_api/src/model/runway_out.dart';
import 'package:fintracker_api/src/model/source_status.dart';
import 'package:fintracker_api/src/model/spending_row.dart';
import 'package:fintracker_api/src/model/sync_job_out.dart';
import 'package:fintracker_api/src/model/sync_run_out.dart';
import 'package:fintracker_api/src/model/token_pair.dart';
import 'package:fintracker_api/src/model/transaction_out.dart';
import 'package:fintracker_api/src/model/transaction_page.dart';
import 'package:fintracker_api/src/model/user_out.dart';
final _regList = RegExp(r'^List<(.*)>$');
final _regSet = RegExp(r'^Set<(.*)>$');
final _regMap = RegExp(r'^Map<String,(.*)>$');
ReturnType deserialize<ReturnType, BaseType>(dynamic value, String targetType, {bool growable= true}) {
switch (targetType) {
case 'String':
return '$value' as ReturnType;
case 'int':
return (value is int ? value : int.parse('$value')) as ReturnType;
case 'bool':
if (value is bool) {
return value as ReturnType;
}
final valueString = '$value'.toLowerCase();
return (valueString == 'true' || valueString == '1') as ReturnType;
case 'double':
return (value is double ? value : double.parse('$value')) as ReturnType;
case 'AccountBalance':
return AccountBalance.fromJson(value as Map<String, dynamic>) as ReturnType;
case 'AccountKind':
case 'AccountOut':
return AccountOut.fromJson(value as Map<String, dynamic>) as ReturnType;
case 'AccountPatch':
return AccountPatch.fromJson(value as Map<String, dynamic>) as ReturnType;
case 'AccountRole':
case 'Broker':
case 'CashFlowMonth':
return CashFlowMonth.fromJson(value as Map<String, dynamic>) as ReturnType;
case 'CategoryOut':
return CategoryOut.fromJson(value as Map<String, dynamic>) as ReturnType;
case 'DataQualityRow':
return DataQualityRow.fromJson(value as Map<String, dynamic>) as ReturnType;
case 'EventSource':
case 'FlowType':
case 'Health':
return Health.fromJson(value as Map<String, dynamic>) as ReturnType;
case 'JobStatus':
case 'LoginRequest':
return LoginRequest.fromJson(value as Map<String, dynamic>) as ReturnType;
case 'NetWorthBreakdown':
return NetWorthBreakdown.fromJson(value as Map<String, dynamic>) as ReturnType;
case 'NetWorthDay':
return NetWorthDay.fromJson(value as Map<String, dynamic>) as ReturnType;
case 'Problem':
return Problem.fromJson(value as Map<String, dynamic>) as ReturnType;
case 'RefreshLogOut':
return RefreshLogOut.fromJson(value as Map<String, dynamic>) as ReturnType;
case 'RefreshRequest':
return RefreshRequest.fromJson(value as Map<String, dynamic>) as ReturnType;
case 'RuleCreate':
return RuleCreate.fromJson(value as Map<String, dynamic>) as ReturnType;
case 'RuleKind':
case 'RuleMatchType':
case 'RuleOut':
return RuleOut.fromJson(value as Map<String, dynamic>) as ReturnType;
case 'RulePatch':
return RulePatch.fromJson(value as Map<String, dynamic>) as ReturnType;
case 'RunStatus':
case 'RunwayOut':
return RunwayOut.fromJson(value as Map<String, dynamic>) as ReturnType;
case 'SourceStatus':
return SourceStatus.fromJson(value as Map<String, dynamic>) as ReturnType;
case 'SpendingRow':
return SpendingRow.fromJson(value as Map<String, dynamic>) as ReturnType;
case 'SyncJobOut':
return SyncJobOut.fromJson(value as Map<String, dynamic>) as ReturnType;
case 'SyncRunOut':
return SyncRunOut.fromJson(value as Map<String, dynamic>) as ReturnType;
case 'TokenPair':
return TokenPair.fromJson(value as Map<String, dynamic>) as ReturnType;
case 'TransactionOut':
return TransactionOut.fromJson(value as Map<String, dynamic>) as ReturnType;
case 'TransactionPage':
return TransactionPage.fromJson(value as Map<String, dynamic>) as ReturnType;
case 'UserOut':
return UserOut.fromJson(value as Map<String, dynamic>) as ReturnType;
default:
RegExpMatch? match;
if (value is List && (match = _regList.firstMatch(targetType)) != null) {
targetType = match![1]!; // ignore: parameter_assignments
return value
.map<BaseType>((dynamic v) => deserialize<BaseType, BaseType>(v, targetType, growable: growable))
.toList(growable: growable) as ReturnType;
}
if (value is Set && (match = _regSet.firstMatch(targetType)) != null) {
targetType = match![1]!; // ignore: parameter_assignments
return value
.map<BaseType>((dynamic v) => deserialize<BaseType, BaseType>(v, targetType, growable: growable))
.toSet() as ReturnType;
}
if (value is Map && (match = _regMap.firstMatch(targetType)) != null) {
targetType = match![1]!.trim(); // ignore: parameter_assignments
return Map<String, BaseType>.fromIterables(
value.keys as Iterable<String>,
value.values.map((dynamic v) => deserialize<BaseType, BaseType>(v, targetType, growable: growable)),
) as ReturnType;
}
break;
}
throw Exception('Cannot deserialize');
}