forked from eatvio/eatvio_app
45 lines
1.6 KiB
Dart
45 lines
1.6 KiB
Dart
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<String, dynamic> json) => _$OAuthAccountModelFromJson(json);
|
|
}
|
|
|
|
@freezed
|
|
abstract class OAuthAccountsResponseModel with _$OAuthAccountsResponseModel {
|
|
const factory OAuthAccountsResponseModel({required bool success, required OAuthAccountsDataModel data}) = _OAuthAccountsResponseModel;
|
|
|
|
factory OAuthAccountsResponseModel.fromJson(Map<String, dynamic> 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<String, dynamic> 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<String, dynamic>) {
|
|
return OAuthAccountModel.fromJson(json);
|
|
}
|
|
return null;
|
|
}
|