Files
eatvio_app/lib/features/settings/models/oauth_account_model.dart
2025-11-07 01:38:00 +03:00

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;
}