This commit is contained in:
2025-10-28 00:09:46 +07:00
parent 9ebe7c2919
commit de49f564b1
110 changed files with 15392 additions and 3996 deletions

View File

@@ -0,0 +1,42 @@
import 'package:equatable/equatable.dart';
/// Login request model for authentication
///
/// Contains the credentials required for user login
class LoginRequestModel extends Equatable {
/// Username for authentication
final String username;
/// Password for authentication
final String password;
const LoginRequestModel({
required this.username,
required this.password,
});
/// Convert to JSON for API request
Map<String, dynamic> toJson() {
return {
'EmailPhone': username,
'Password': password,
};
}
/// Create a copy with modified fields
LoginRequestModel copyWith({
String? username,
String? password,
}) {
return LoginRequestModel(
username: username ?? this.username,
password: password ?? this.password,
);
}
@override
List<Object?> get props => [username, password];
@override
String toString() => 'LoginRequestModel(username: $username)';
}

View File

@@ -0,0 +1,81 @@
import '../../domain/entities/user_entity.dart';
/// User model that extends UserEntity for data layer
///
/// Handles JSON serialization/deserialization for API responses
class UserModel extends UserEntity {
const UserModel({
required super.userId,
required super.username,
required super.accessToken,
super.refreshToken,
});
/// Create UserModel from JSON response
///
/// Expected JSON format from API:
/// ```json
/// {
/// "AccessToken": "string"
/// }
/// ```
factory UserModel.fromJson(Map<String, dynamic> json, {String? username}) {
return UserModel(
userId: username ?? 'user', // Use username as userId or default
username: username ?? 'user',
accessToken: json['AccessToken'] as String,
refreshToken: null, // API doesn't provide refresh token
);
}
/// Convert UserModel to JSON
Map<String, dynamic> toJson() {
return {
'userId': userId,
'username': username,
'accessToken': accessToken,
'refreshToken': refreshToken,
};
}
/// Create UserModel from UserEntity
factory UserModel.fromEntity(UserEntity entity) {
return UserModel(
userId: entity.userId,
username: entity.username,
accessToken: entity.accessToken,
refreshToken: entity.refreshToken,
);
}
/// Convert to UserEntity
UserEntity toEntity() {
return UserEntity(
userId: userId,
username: username,
accessToken: accessToken,
refreshToken: refreshToken,
);
}
/// Create a copy with modified fields
@override
UserModel copyWith({
String? userId,
String? username,
String? accessToken,
String? refreshToken,
}) {
return UserModel(
userId: userId ?? this.userId,
username: username ?? this.username,
accessToken: accessToken ?? this.accessToken,
refreshToken: refreshToken ?? this.refreshToken,
);
}
@override
String toString() {
return 'UserModel(userId: $userId, username: $username, hasRefreshToken: ${refreshToken != null})';
}
}