/// 주소 모델 /// /// 우편번호, 시/도, 상세주소로 구성된 주소 정보를 관리합니다. /// 회사 및 지점의 주소 정보를 일관되게 처리하기 위한 모델입니다. 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 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 json) { return Address( zipCode: json['zipCode'] ?? '', region: json['region'] ?? '', detailAddress: json['detailAddress'] ?? '', ); } /// Address 객체를 JSON으로 변환합니다. Map 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, ); } }