import 'package:freezed_annotation/freezed_annotation.dart'; part 'oauth_account_model.freezed.dart'; part 'oauth_account_model.g.dart'; @freezed abstract class OAuthAccountModel with _$OAuthAccountModel { const factory OAuthAccountModel({ @JsonKey(name: 'oauth_id') required String oauthId, required String name, required String email, required String phone, @JsonKey(name: 'linked_at') required DateTime linkedAt, }) = _OAuthAccountModel; factory OAuthAccountModel.fromJson(Map json) => _$OAuthAccountModelFromJson(json); } @freezed abstract class OAuthAccountsResponseModel with _$OAuthAccountsResponseModel { const factory OAuthAccountsResponseModel({required bool success, required OAuthAccountsDataModel data}) = _OAuthAccountsResponseModel; factory OAuthAccountsResponseModel.fromJson(Map json) => _$OAuthAccountsResponseModelFromJson(json); } @freezed abstract class OAuthAccountsDataModel with _$OAuthAccountsDataModel { const factory OAuthAccountsDataModel({ @JsonKey(fromJson: _oauthAccountFromJson) OAuthAccountModel? vk, @JsonKey(fromJson: _oauthAccountFromJson) OAuthAccountModel? yandex, }) = _OAuthAccountsDataModel; factory OAuthAccountsDataModel.fromJson(Map json) => _$OAuthAccountsDataModelFromJson(json); } // Custom converter to handle both empty array [] and object OAuthAccountModel? _oauthAccountFromJson(dynamic json) { if (json == null) return null; if (json is List && json.isEmpty) return null; if (json is Map) { return OAuthAccountModel.fromJson(json); } return null; }