197 lines
4.8 KiB
Dart
197 lines
4.8 KiB
Dart
import 'dart:convert';
|
|
import 'package:autos/domain/entities/user.dart';
|
|
|
|
/// ✅ STORE MODEL
|
|
class StoreModel {
|
|
final String name;
|
|
final String description;
|
|
final String url;
|
|
final String urlPath;
|
|
final String? lastOpenedTime;
|
|
final String? lastOpenedTimeRaw;
|
|
final String? logoUrl;
|
|
|
|
const StoreModel({
|
|
required this.name,
|
|
required this.description,
|
|
required this.url,
|
|
required this.urlPath,
|
|
this.lastOpenedTime,
|
|
this.lastOpenedTimeRaw,
|
|
this.logoUrl,
|
|
});
|
|
|
|
factory StoreModel.fromJson(Map<String, dynamic> json) {
|
|
return StoreModel(
|
|
name: json['name'] ?? '',
|
|
description: json['description'] ?? '',
|
|
url: json['url'] ?? '',
|
|
urlPath: json['urlPath'] ?? '',
|
|
lastOpenedTime: json['lastOpenedTime'],
|
|
lastOpenedTimeRaw: json['lastOpenedTimeRaw'],
|
|
logoUrl: json['logo']?['url'],
|
|
);
|
|
}
|
|
|
|
Map<String, dynamic> toJson() {
|
|
return {
|
|
'name': name,
|
|
'description': description,
|
|
'url': url,
|
|
'urlPath': urlPath,
|
|
'lastOpenedTime': lastOpenedTime,
|
|
'lastOpenedTimeRaw': lastOpenedTimeRaw,
|
|
'logo': {
|
|
'url': logoUrl,
|
|
},
|
|
};
|
|
}
|
|
}
|
|
|
|
/// ✅ PAYMENT MODEL
|
|
class PaymentModel {
|
|
final int id;
|
|
final String email;
|
|
final String amount;
|
|
final String plan;
|
|
final String status;
|
|
final String? stripeSessionId;
|
|
final String? stripePaymentIntentId;
|
|
final String? subscriptionId;
|
|
final String? startDate;
|
|
final String? endDate;
|
|
|
|
const PaymentModel({
|
|
required this.id,
|
|
required this.email,
|
|
required this.amount,
|
|
required this.plan,
|
|
required this.status,
|
|
this.stripeSessionId,
|
|
this.stripePaymentIntentId,
|
|
this.subscriptionId,
|
|
this.startDate,
|
|
this.endDate,
|
|
});
|
|
|
|
factory PaymentModel.fromJson(Map<String, dynamic> json) {
|
|
return PaymentModel(
|
|
id: json['id'] ?? 0,
|
|
email: json['email'] ?? '',
|
|
amount: json['amount'] ?? '',
|
|
plan: json['plan'] ?? '',
|
|
status: json['status'] ?? '',
|
|
stripeSessionId: json['stripeSessionId'],
|
|
stripePaymentIntentId: json['stripePaymentIntentId'],
|
|
subscriptionId: json['subscriptionId'],
|
|
startDate: json['startDate'],
|
|
endDate: json['endDate'],
|
|
);
|
|
}
|
|
|
|
Map<String, dynamic> toJson() {
|
|
return {
|
|
'id': id,
|
|
'email': email,
|
|
'amount': amount,
|
|
'plan': plan,
|
|
'status': status,
|
|
'stripeSessionId': stripeSessionId,
|
|
'stripePaymentIntentId': stripePaymentIntentId,
|
|
'subscriptionId': subscriptionId,
|
|
'startDate': startDate,
|
|
'endDate': endDate,
|
|
};
|
|
}
|
|
}
|
|
|
|
/// ✅ MAIN USER MODEL
|
|
class UserModel extends User {
|
|
final StoreModel? store;
|
|
final PaymentModel? payment;
|
|
|
|
const UserModel({
|
|
required super.id,
|
|
required super.name,
|
|
required super.email,
|
|
required super.role,
|
|
super.plan,
|
|
super.paymentStatus,
|
|
super.phoneNumber,
|
|
super.message,
|
|
super.code,
|
|
this.store,
|
|
this.payment,
|
|
});
|
|
|
|
/// ✅ FROM API JSON
|
|
factory UserModel.fromJson(Map<String, dynamic> json) {
|
|
final paymentJson = json['payment'];
|
|
final storeJson = json['store'];
|
|
|
|
final payment =
|
|
paymentJson != null ? PaymentModel.fromJson(paymentJson) : null;
|
|
|
|
final store =
|
|
storeJson != null ? StoreModel.fromJson(storeJson) : null;
|
|
|
|
return UserModel(
|
|
id: json['userid'] ?? json['id']?.toString() ?? '',
|
|
name: json['name'] ?? '',
|
|
email: json['email'] ?? '',
|
|
role: json['role'] ?? '',
|
|
plan: payment?.plan ?? json['plan'],
|
|
paymentStatus: payment?.status ?? json['paymentStatus'],
|
|
phoneNumber: json['phonenumber'] ?? '',
|
|
message: json['message'] ?? '',
|
|
code: json['code'] ?? '',
|
|
store: store,
|
|
payment: payment,
|
|
);
|
|
}
|
|
|
|
/// ✅ FROM ENTITY (LOCAL CONVERSION)
|
|
factory UserModel.fromEntity(User user) {
|
|
return UserModel(
|
|
id: user.id,
|
|
name: user.name,
|
|
email: user.email,
|
|
role: user.role,
|
|
plan: user.plan,
|
|
paymentStatus: user.paymentStatus,
|
|
phoneNumber: user.phoneNumber,
|
|
message: user.message,
|
|
code: user.code,
|
|
);
|
|
}
|
|
|
|
/// ✅ TO JSON (FOR LOCAL STORAGE)
|
|
Map<String, dynamic> toJson() {
|
|
return {
|
|
'userid': id,
|
|
'name': name,
|
|
'email': email,
|
|
'role': role,
|
|
'plan': plan,
|
|
'paymentStatus': paymentStatus,
|
|
'phonenumber': phoneNumber,
|
|
'message': message,
|
|
'code': code,
|
|
'store': store?.toJson(),
|
|
'payment': payment?.toJson(),
|
|
};
|
|
}
|
|
|
|
/// ✅ STORE USER AS RAW JSON STRING
|
|
String toRawJson() => jsonEncode(toJson());
|
|
|
|
/// ✅ RESTORE USER FROM RAW JSON STRING
|
|
factory UserModel.fromRawJson(String raw) =>
|
|
UserModel.fromJson(jsonDecode(raw));
|
|
|
|
@override
|
|
String toString() {
|
|
return 'UserModel(id: $id, name: $name, email: $email, role: $role, plan: $plan, status: $paymentStatus)';
|
|
}
|
|
}
|