Files
Qlyra/lib/models/digital_id.dart
T
sevenhill f74057ce9b
Build Android (FCM) / build-android-fcm (push) Canceled after 0s
Build Android / build-android (push) Canceled after 0s
Build iOS / build-ios (push) Canceled after 0s
Build Linux / build-linux (push) Canceled after 0s
Build macOS / build-macos (push) Canceled after 0s
Build Windows / build-windows (push) Canceled after 0s
Release (main) / android (oneme) (push) Canceled after 0s
Release (main) / android (qlyra) (push) Canceled after 0s
Release (main) / windows (push) Canceled after 0s
Release (main) / linux (push) Canceled after 0s
Release (main) / macos (push) Canceled after 0s
Release (main) / ios (push) Canceled after 0s
Release (main) / release (push) Canceled after 0s
Rebrand application as Qlyra
2026-08-30 13:16:17 +03:00

273 lines
6.8 KiB
Dart

enum DigitalIdVerification {
valid,
invalid,
photoCreated,
notFound,
deviceMismatch,
liteValid,
unknown;
static DigitalIdVerification fromValue(String? value) {
switch (value) {
case 'valid':
return DigitalIdVerification.valid;
case 'invalid':
return DigitalIdVerification.invalid;
case 'photo_created':
return DigitalIdVerification.photoCreated;
case 'not_found':
return DigitalIdVerification.notFound;
case 'device_mismatch':
return DigitalIdVerification.deviceMismatch;
case 'lite_valid':
return DigitalIdVerification.liteValid;
default:
return DigitalIdVerification.unknown;
}
}
}
enum DigitalIdQrType {
m1('M1', 'max_confirm_age'),
m2('M2', 'max_cert_large_family'),
m3('M3', 'max_student_ticket'),
m4('M4', 'max_sor'),
m5('M5', 'max_single_benefits'),
m7('M7', 'max_invalid_certificate'),
m8('M8', 'max_pension_certificate'),
m11('M11', 'max_identify_verification');
const DigitalIdQrType(this.code, this.alias);
final String code;
final String alias;
}
class DigitalIdAddress {
final String? address;
final String? flat;
final String? frame;
final String? house;
final String? zipCode;
const DigitalIdAddress({
this.address,
this.flat,
this.frame,
this.house,
this.zipCode,
});
factory DigitalIdAddress.fromMap(Map map) {
return DigitalIdAddress(
address: map['address'] as String?,
flat: map['flat'] as String?,
frame: map['frame'] as String?,
house: map['house'] as String?,
zipCode: map['zip_code'] as String?,
);
}
String get formatted {
final parts = <String>[
if (address != null && address!.isNotEmpty) address!,
if (house != null && house!.isNotEmpty) 'д. $house',
if (frame != null && frame!.isNotEmpty) 'к. $frame',
if (flat != null && flat!.isNotEmpty) 'кв. $flat',
];
return parts.join(', ');
}
}
class DigitalIdBiometryStatus {
final bool hasBiometryToken;
final String? deviceId;
final bool hasPhotoHash;
const DigitalIdBiometryStatus({
required this.hasBiometryToken,
required this.deviceId,
required this.hasPhotoHash,
});
factory DigitalIdBiometryStatus.fromMap(Map map) {
return DigitalIdBiometryStatus(
hasBiometryToken: map['has_biometry_token'] == true,
deviceId: map['device_id'] as String?,
hasPhotoHash: map['has_photo_hash'] == true,
);
}
}
class DigitalIdDocument {
final String type;
final Map<String, dynamic> fields;
const DigitalIdDocument({required this.type, required this.fields});
factory DigitalIdDocument.fromMap(Map map) {
final fields = <String, dynamic>{};
for (final entry in map.entries) {
fields[entry.key.toString()] = entry.value;
}
return DigitalIdDocument(
type: (map['type'] as String?) ?? 'unknown',
fields: fields,
);
}
String? get firstName => fields['first_name'] as String?;
String? get lastName => fields['last_name'] as String?;
String? get middleName => fields['middle_name'] as String?;
String? get number => fields['number'] as String?;
String? get series => fields['series'] as String?;
}
class DigitalIdProfile {
final String? firstName;
final String? lastName;
final String? middleName;
final String? birthDate;
final String? birthPlace;
final String? gender;
final String? snils;
final String? inn;
final DigitalIdAddress? registrationAddress;
final List<DigitalIdDocument> documents;
const DigitalIdProfile({
this.firstName,
this.lastName,
this.middleName,
this.birthDate,
this.birthPlace,
this.gender,
this.snils,
this.inn,
this.registrationAddress,
this.documents = const [],
});
factory DigitalIdProfile.fromMap(Map map) {
final rawDocs = map['documents'];
final documents = <DigitalIdDocument>[];
if (rawDocs is List) {
for (final doc in rawDocs) {
if (doc is Map) documents.add(DigitalIdDocument.fromMap(doc));
}
}
final address = map['registration_address'];
return DigitalIdProfile(
firstName: map['first_name'] as String?,
lastName: map['last_name'] as String?,
middleName: map['middle_name'] as String?,
birthDate: map['birth_date'] as String?,
birthPlace: map['birth_place'] as String?,
gender: map['gender'] as String?,
snils: map['snils'] as String?,
inn: map['inn'] as String?,
registrationAddress: address is Map
? DigitalIdAddress.fromMap(address)
: null,
documents: documents,
);
}
String get fullName {
final parts = <String>[
if (lastName != null && lastName!.isNotEmpty) lastName!,
if (firstName != null && firstName!.isNotEmpty) firstName!,
if (middleName != null && middleName!.isNotEmpty) middleName!,
];
return parts.join(' ');
}
}
class DigitalIdUserDocs {
final int userId;
final DigitalIdProfile profile;
const DigitalIdUserDocs({required this.userId, required this.profile});
factory DigitalIdUserDocs.fromMap(Map map) {
final profile = map['digital_profile'];
return DigitalIdUserDocs(
userId: (map['user_id'] as num?)?.toInt() ?? 0,
profile: profile is Map
? DigitalIdProfile.fromMap(profile)
: const DigitalIdProfile(),
);
}
}
class DigitalIdEsiaLink {
final String? state;
final String url;
const DigitalIdEsiaLink({this.state, required this.url});
factory DigitalIdEsiaLink.fromMap(Map map) {
return DigitalIdEsiaLink(
state: map['state'] as String?,
url: map['url'] as String? ?? '',
);
}
}
class DigitalIdQr {
final String qr;
final String? qrGost;
const DigitalIdQr({required this.qr, this.qrGost});
factory DigitalIdQr.fromMap(Map map) {
return DigitalIdQr(
qr: map['qr'] as String? ?? '',
qrGost: map['qr_gost'] as String?,
);
}
}
class DigitalIdUniversalQr {
final String uidHash;
final String? phone;
final String? sessionId;
const DigitalIdUniversalQr({
required this.uidHash,
this.phone,
this.sessionId,
});
factory DigitalIdUniversalQr.fromMap(Map map) {
return DigitalIdUniversalQr(
uidHash: map['uid_hash'] as String? ?? '',
phone: map['phone'] as String?,
sessionId: map['session_id'] as String?,
);
}
}
class DigitalIdAcmsCard {
final String id;
final String inn;
final String companyName;
final String logoImg;
const DigitalIdAcmsCard({
required this.id,
required this.inn,
required this.companyName,
required this.logoImg,
});
factory DigitalIdAcmsCard.fromMap(Map map) {
return DigitalIdAcmsCard(
id: map['id'] as String? ?? '',
inn: map['inn'] as String? ?? '',
companyName: map['company_name'] as String? ?? '',
logoImg: map['logo_img'] as String? ?? '',
);
}
}