Files
superport/lib/models/address_model.dart
2025-07-02 17:45:44 +09:00

82 lines
2.2 KiB
Dart

/// 주소 모델
///
/// 우편번호, 시/도, 상세주소로 구성된 주소 정보를 관리합니다.
/// 회사 및 지점의 주소 정보를 일관되게 처리하기 위한 모델입니다.
class Address {
/// 우편번호
final String zipCode;
/// 시/도 (서울특별시, 경기도 등)
final String region;
/// 상세 주소
final String detailAddress;
/// 생성자
const Address({this.zipCode = '', this.region = '', this.detailAddress = ''});
/// 주소를 문자열로 반환합니다. (전체 주소)
///
/// 예시: "12345 서울특별시 강남구 테헤란로 123"
@override
String toString() {
final List<String> parts = [];
if (zipCode.isNotEmpty) {
parts.add(zipCode);
}
if (region.isNotEmpty) {
parts.add(region);
}
if (detailAddress.isNotEmpty) {
parts.add(detailAddress);
}
return parts.join(' ');
}
/// 전체 주소에서 Address 객체를 생성합니다.
///
/// 현재는 우편번호, 시/도, 상세주소를 분리하지 않고 전체를 detailAddress로 저장합니다.
/// 기존 데이터 마이그레이션을 위한 메서드입니다.
factory Address.fromFullAddress(String fullAddress) {
return Address(detailAddress: fullAddress);
}
/// JSON에서 Address 객체를 생성합니다.
factory Address.fromJson(Map<String, dynamic> json) {
return Address(
zipCode: json['zipCode'] ?? '',
region: json['region'] ?? '',
detailAddress: json['detailAddress'] ?? '',
);
}
/// Address 객체를 JSON으로 변환합니다.
Map<String, dynamic> toJson() {
return {
'zipCode': zipCode,
'region': region,
'detailAddress': detailAddress,
};
}
/// 주소가 비어 있는지 확인합니다.
bool get isEmpty =>
zipCode.isEmpty && region.isEmpty && detailAddress.isEmpty;
/// 주소가 비어 있지 않은지 확인합니다.
bool get isNotEmpty => !isEmpty;
/// 복사본을 생성하고 일부 필드를 업데이트합니다.
Address copyWith({String? zipCode, String? region, String? detailAddress}) {
return Address(
zipCode: zipCode ?? this.zipCode,
region: region ?? this.region,
detailAddress: detailAddress ?? this.detailAddress,
);
}
}