/// 창고(Warehouse) 도메인 엔티티. class Warehouse { Warehouse({ this.id, required this.warehouseCode, required this.warehouseName, this.zipcode, this.addressDetail, this.isActive = true, this.isDeleted = false, this.note, this.createdAt, this.updatedAt, }); final int? id; final String warehouseCode; final String warehouseName; final WarehouseZipcode? zipcode; final String? addressDetail; final bool isActive; final bool isDeleted; final String? note; final DateTime? createdAt; final DateTime? updatedAt; /// 일부 속성만 변경한 새 인스턴스를 반환한다. Warehouse copyWith({ int? id, String? warehouseCode, String? warehouseName, WarehouseZipcode? zipcode, String? addressDetail, bool? isActive, bool? isDeleted, String? note, DateTime? createdAt, DateTime? updatedAt, }) { return Warehouse( id: id ?? this.id, warehouseCode: warehouseCode ?? this.warehouseCode, warehouseName: warehouseName ?? this.warehouseName, zipcode: zipcode ?? this.zipcode, addressDetail: addressDetail ?? this.addressDetail, isActive: isActive ?? this.isActive, isDeleted: isDeleted ?? this.isDeleted, note: note ?? this.note, createdAt: createdAt ?? this.createdAt, updatedAt: updatedAt ?? this.updatedAt, ); } } /// 창고 주소에 대한 우편번호/행정 정보. class WarehouseZipcode { WarehouseZipcode({ required this.zipcode, this.sido, this.sigungu, this.roadName, }); final String zipcode; final String? sido; final String? sigungu; final String? roadName; } /// 창고 생성/수정에 사용하는 입력 모델. class WarehouseInput { WarehouseInput({ required this.warehouseCode, required this.warehouseName, this.zipcode, this.addressDetail, this.isActive = true, this.note, }); final String warehouseCode; final String warehouseName; final String? zipcode; final String? addressDetail; final bool isActive; final String? note; /// API 요청 바디로 직렬화한다. Map toPayload() { return { 'warehouse_code': warehouseCode, 'warehouse_name': warehouseName, 'zipcode': zipcode, 'address_detail': addressDetail, 'is_active': isActive, 'note': note, }; } }