56 lines
1.6 KiB
Dart
56 lines
1.6 KiB
Dart
/// Postanschrift — Value-Object, identitätslos.
|
|
///
|
|
/// Tritt im Domain an drei Stellen auf: am `Customer` (Stamm-Adresse) und
|
|
/// als `deliveryAddressSnapshot` auf der `Delivery` (eingefrorene Kopie der
|
|
/// Adresse zum Zeitpunkt der Belegerzeugung, damit nachträgliche Änderungen
|
|
/// am Stammdatensatz die ausgelieferte Tour nicht „verschieben"). Spiegelt
|
|
/// das Backend-DTO `Address` 1:1.
|
|
class Address {
|
|
const Address({
|
|
required this.street,
|
|
required this.houseNumber,
|
|
required this.postalCode,
|
|
required this.city,
|
|
required this.country,
|
|
});
|
|
|
|
final String street;
|
|
final String houseNumber;
|
|
final String postalCode;
|
|
final String city;
|
|
final String country;
|
|
|
|
/// Einzeilige Darstellung für Listen/Header.
|
|
String get oneLine =>
|
|
'$street $houseNumber, $postalCode $city';
|
|
|
|
Address copyWith({
|
|
String? street,
|
|
String? houseNumber,
|
|
String? postalCode,
|
|
String? city,
|
|
String? country,
|
|
}) {
|
|
return Address(
|
|
street: street ?? this.street,
|
|
houseNumber: houseNumber ?? this.houseNumber,
|
|
postalCode: postalCode ?? this.postalCode,
|
|
city: city ?? this.city,
|
|
country: country ?? this.country,
|
|
);
|
|
}
|
|
|
|
@override
|
|
bool operator ==(Object other) =>
|
|
identical(this, other) ||
|
|
other is Address &&
|
|
other.street == street &&
|
|
other.houseNumber == houseNumber &&
|
|
other.postalCode == postalCode &&
|
|
other.city == city &&
|
|
other.country == country;
|
|
|
|
@override
|
|
int get hashCode => Object.hash(street, houseNumber, postalCode, city, country);
|
|
}
|