Add API contract Dart models

This commit is contained in:
Codex
2026-07-02 13:00:17 +09:00
parent d890893966
commit 6d05f36dcc
10 changed files with 864 additions and 6 deletions
@@ -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(),
};
}
}