Add API contract Dart models
This commit is contained in:
@@ -0,0 +1,238 @@
|
||||
import '../../directory/domain/employee.dart';
|
||||
|
||||
class LoginDeviceInfo {
|
||||
const LoginDeviceInfo({
|
||||
required this.platform,
|
||||
required this.appVersion,
|
||||
required this.deviceName,
|
||||
});
|
||||
|
||||
final String platform;
|
||||
final String appVersion;
|
||||
final String deviceName;
|
||||
|
||||
factory LoginDeviceInfo.fromJson(Map<String, dynamic> json) {
|
||||
return LoginDeviceInfo(
|
||||
platform: json['platform'] as String? ?? '',
|
||||
appVersion: json['appVersion'] as String? ?? '',
|
||||
deviceName: json['deviceName'] as String? ?? '',
|
||||
);
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
return {
|
||||
'platform': platform,
|
||||
'appVersion': appVersion,
|
||||
'deviceName': deviceName,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
class PhoneLoginRequest {
|
||||
const PhoneLoginRequest({required this.phoneNumber, required this.device});
|
||||
|
||||
final String phoneNumber;
|
||||
final LoginDeviceInfo device;
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
return {'phoneNumber': phoneNumber, 'device': device.toJson()};
|
||||
}
|
||||
}
|
||||
|
||||
class LoginUser {
|
||||
const LoginUser({
|
||||
required this.id,
|
||||
required this.name,
|
||||
required this.phoneNumber,
|
||||
required this.tenantId,
|
||||
required this.tenantName,
|
||||
required this.tenantSlug,
|
||||
this.department,
|
||||
this.grade,
|
||||
this.position,
|
||||
this.jobTitle,
|
||||
});
|
||||
|
||||
final String id;
|
||||
final String name;
|
||||
final String phoneNumber;
|
||||
final String tenantId;
|
||||
final String tenantName;
|
||||
final String tenantSlug;
|
||||
final String? department;
|
||||
final String? grade;
|
||||
final String? position;
|
||||
final String? jobTitle;
|
||||
|
||||
factory LoginUser.fromJson(Map<String, dynamic> json) {
|
||||
return LoginUser(
|
||||
id: json['id'] as String? ?? '',
|
||||
name: json['name'] as String? ?? '',
|
||||
phoneNumber: json['phoneNumber'] as String? ?? '',
|
||||
tenantId: json['tenantId'] as String? ?? '',
|
||||
tenantName: json['tenantName'] as String? ?? '',
|
||||
tenantSlug: json['tenantSlug'] as String? ?? '',
|
||||
department: json['department'] as String?,
|
||||
grade: json['grade'] as String?,
|
||||
position: json['position'] as String?,
|
||||
jobTitle: json['jobTitle'] as String?,
|
||||
);
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
return {
|
||||
'id': id,
|
||||
'name': name,
|
||||
'phoneNumber': phoneNumber,
|
||||
'tenantId': tenantId,
|
||||
'tenantName': tenantName,
|
||||
'tenantSlug': tenantSlug,
|
||||
'department': department,
|
||||
'grade': grade,
|
||||
'position': position,
|
||||
'jobTitle': jobTitle,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
class PhoneLoginResponse {
|
||||
const PhoneLoginResponse({
|
||||
required this.status,
|
||||
required this.token,
|
||||
required this.expiresAt,
|
||||
required this.user,
|
||||
});
|
||||
|
||||
final String status;
|
||||
final String token;
|
||||
final DateTime expiresAt;
|
||||
final LoginUser user;
|
||||
|
||||
factory PhoneLoginResponse.fromJson(Map<String, dynamic> json) {
|
||||
return PhoneLoginResponse(
|
||||
status: json['status'] as String? ?? '',
|
||||
token: json['token'] as String? ?? '',
|
||||
expiresAt: DateTime.parse(json['expiresAt'] as String),
|
||||
user: LoginUser.fromJson(json['user'] as Map<String, dynamic>? ?? {}),
|
||||
);
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
return {
|
||||
'status': status,
|
||||
'token': token,
|
||||
'expiresAt': expiresAt.toUtc().toIso8601String(),
|
||||
'user': user.toJson(),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
class UserPermissions {
|
||||
const UserPermissions({
|
||||
required this.directory,
|
||||
required this.organization,
|
||||
required this.favoritesSync,
|
||||
});
|
||||
|
||||
final bool directory;
|
||||
final bool organization;
|
||||
final bool favoritesSync;
|
||||
|
||||
factory UserPermissions.fromJson(Map<String, dynamic> json) {
|
||||
return UserPermissions(
|
||||
directory: json['directory'] as bool? ?? false,
|
||||
organization: json['organization'] as bool? ?? false,
|
||||
favoritesSync: json['favoritesSync'] as bool? ?? false,
|
||||
);
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
return {
|
||||
'directory': directory,
|
||||
'organization': organization,
|
||||
'favoritesSync': favoritesSync,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
class CurrentUser {
|
||||
const CurrentUser({
|
||||
required this.id,
|
||||
required this.name,
|
||||
required this.phoneNumber,
|
||||
required this.email,
|
||||
required this.tenantId,
|
||||
required this.tenantName,
|
||||
required this.tenantSlug,
|
||||
required this.permissions,
|
||||
this.department,
|
||||
this.grade,
|
||||
this.position,
|
||||
this.jobTitle,
|
||||
});
|
||||
|
||||
final String id;
|
||||
final String name;
|
||||
final String phoneNumber;
|
||||
final String email;
|
||||
final String tenantId;
|
||||
final String tenantName;
|
||||
final String tenantSlug;
|
||||
final UserPermissions permissions;
|
||||
final String? department;
|
||||
final String? grade;
|
||||
final String? position;
|
||||
final String? jobTitle;
|
||||
|
||||
factory CurrentUser.fromJson(Map<String, dynamic> json) {
|
||||
return CurrentUser(
|
||||
id: json['id'] as String? ?? '',
|
||||
name: json['name'] as String? ?? '',
|
||||
phoneNumber: json['phoneNumber'] as String? ?? '',
|
||||
email: json['email'] as String? ?? '',
|
||||
tenantId: json['tenantId'] as String? ?? '',
|
||||
tenantName: json['tenantName'] as String? ?? '',
|
||||
tenantSlug: json['tenantSlug'] as String? ?? '',
|
||||
permissions: UserPermissions.fromJson(
|
||||
json['permissions'] as Map<String, dynamic>? ?? {},
|
||||
),
|
||||
department: json['department'] as String?,
|
||||
grade: json['grade'] as String?,
|
||||
position: json['position'] as String?,
|
||||
jobTitle: json['jobTitle'] as String?,
|
||||
);
|
||||
}
|
||||
|
||||
Employee toEmployee() {
|
||||
return Employee(
|
||||
id: id,
|
||||
name: name,
|
||||
phoneNumber: phoneNumber,
|
||||
email: email,
|
||||
tenantId: tenantId,
|
||||
tenantName: tenantName,
|
||||
tenantSlug: tenantSlug,
|
||||
department: department,
|
||||
grade: grade,
|
||||
position: position,
|
||||
jobTitle: jobTitle,
|
||||
);
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
return {
|
||||
'id': id,
|
||||
'name': name,
|
||||
'phoneNumber': phoneNumber,
|
||||
'email': email,
|
||||
'tenantId': tenantId,
|
||||
'tenantName': tenantName,
|
||||
'tenantSlug': tenantSlug,
|
||||
'department': department,
|
||||
'grade': grade,
|
||||
'position': position,
|
||||
'jobTitle': jobTitle,
|
||||
'permissions': permissions.toJson(),
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user