Files
syncrow-app/lib/features/auth/model/user_model.dart
2025-01-08 17:17:52 +03:00

126 lines
3.5 KiB
Dart

import 'dart:convert';
import 'package:flutter/foundation.dart';
import 'package:syncrow_app/features/auth/model/token.dart';
class Role {
final String uuid;
final DateTime createdAt;
final DateTime updatedAt;
final String type;
Role({
required this.uuid,
required this.createdAt,
required this.updatedAt,
required this.type,
});
factory Role.fromJson(Map<String, dynamic> json) {
return Role(
uuid: json['uuid'],
createdAt: DateTime.parse(json['createdAt']),
updatedAt: DateTime.parse(json['updatedAt']),
type: json['type'],
);
}
Map<String, dynamic> toJson() {
return {
'uuid': uuid,
'createdAt': createdAt.toIso8601String(),
'updatedAt': updatedAt.toIso8601String(),
'type': type,
};
}
}
class UserModel {
static String userUuidKey = 'userUuid';
final String? uuid;
final String? email;
final String? firstName;
final String? lastName;
final Uint8List? profilePicture;
final String? phoneNumber;
final bool? isEmailVerified;
final String? regionName;
final String? timeZone;
final String? regionUuid;
final bool? isAgreementAccepted;
final Role? role;
UserModel({
required this.uuid,
required this.email,
required this.firstName,
required this.lastName,
required this.profilePicture,
required this.phoneNumber,
required this.isEmailVerified,
required this.regionUuid,
required this.isAgreementAccepted,
required this.regionName,
required this.timeZone,
required this.role,
});
factory UserModel.fromJson(Map<String, dynamic> json) {
return UserModel(
uuid: json['uuid'],
email: json['email'],
firstName: json['firstName'],
lastName: json['lastName'],
profilePicture: UserModel.decodeBase64Image(json['profilePicture']),
phoneNumber: json['phoneNumber'],
isEmailVerified: json['isEmailVerified'],
isAgreementAccepted: json['isAgreementAccepted'],
regionName: json['region']?['regionName'],
timeZone: json['timeZone']?['timeZoneOffset'],
regionUuid: json['region']?['uuid'],
role: json['role'] != null ? Role.fromJson(json['role']) : null,
);
}
factory UserModel.fromToken(Token token) {
Map<String, dynamic> tempJson = Token.decodeToken(token.accessToken);
return UserModel(
uuid: tempJson['uuid'].toString(),
email: tempJson['email'],
lastName: tempJson['lastName'],
firstName: tempJson['firstName'],
profilePicture: UserModel.decodeBase64Image(tempJson['profilePicture']),
phoneNumber: null,
isEmailVerified: null,
isAgreementAccepted: null,
regionUuid: null,
regionName: tempJson['region']?['regionName'],
timeZone: tempJson['timezone']?['timeZoneOffset'],
role: tempJson['role'] != null ? Role.fromJson(tempJson['role']) : null,
);
}
static Uint8List? decodeBase64Image(String? base64String) {
if (base64String != null) {
return base64.decode(base64String);
}
return null;
}
Map<String, dynamic> toJson() {
return {
'uuid': uuid,
'email': email,
'firstName': firstName,
'lastName': lastName,
'profilePicture': profilePicture != null ? base64.encode(profilePicture!) : null,
'phoneNumber': phoneNumber,
'isEmailVerified': isEmailVerified,
'regionUuid': regionUuid,
'isAgreementAccepted': isAgreementAccepted,
'regionName': regionName,
'timeZone': timeZone,
'role': role?.toJson(),
};
}
}