53 lines
1.5 KiB
Dart
53 lines
1.5 KiB
Dart
import '../../establishments/domain/establishment.dart';
|
|
|
|
/// Détails machine avec tarif et durée estimée.
|
|
class MachineDetail {
|
|
const MachineDetail({
|
|
required this.machine,
|
|
required this.price,
|
|
required this.estimatedDurationMinutes,
|
|
this.establishmentName,
|
|
this.currency = 'EUR',
|
|
});
|
|
|
|
final Machine machine;
|
|
final double price;
|
|
final int estimatedDurationMinutes;
|
|
final String? establishmentName;
|
|
final String currency;
|
|
|
|
factory MachineDetail.fromJson(Map<String, dynamic> json) {
|
|
final machineJson = json['machine'] as Map<String, dynamic>;
|
|
final pricing = json['pricing'] as Map<String, dynamic>?;
|
|
|
|
String? establishmentName;
|
|
final establishment = machineJson['establishment'];
|
|
if (establishment is Map<String, dynamic>) {
|
|
establishmentName = establishment['name'] as String?;
|
|
}
|
|
|
|
return MachineDetail(
|
|
machine: Machine.fromJson(machineJson),
|
|
price: (pricing?['price'] as num?)?.toDouble() ?? 0,
|
|
currency: pricing?['currency'] as String? ?? 'EUR',
|
|
estimatedDurationMinutes: json['estimated_duration_minutes'] as int? ?? 40,
|
|
establishmentName: establishmentName,
|
|
);
|
|
}
|
|
}
|
|
|
|
/// Créneau disponible pour réservation.
|
|
class TimeSlot {
|
|
const TimeSlot({required this.start, required this.end});
|
|
|
|
final DateTime start;
|
|
final DateTime end;
|
|
|
|
factory TimeSlot.fromJson(Map<String, dynamic> json) {
|
|
return TimeSlot(
|
|
start: DateTime.parse(json['start'] as String),
|
|
end: DateTime.parse(json['end'] as String),
|
|
);
|
|
}
|
|
}
|