# City and Ward API Implementation - Complete Guide ## Files Created ✅ 1. ✅ `lib/features/account/domain/entities/city.dart` 2. ✅ `lib/features/account/domain/entities/ward.dart` 3. ✅ `lib/features/account/data/models/city_model.dart` 4. ✅ `lib/features/account/data/models/ward_model.dart` 5. ✅ Updated `lib/core/constants/storage_constants.dart` - Added `cityBox` and `wardBox` - Added `cityModel = 31` and `wardModel = 32` - Shifted all enum IDs by +2 ## Implementation Status ### Completed: - ✅ Domain entities (City, Ward) - ✅ Hive models with type adapters - ✅ Storage constants updated - ✅ Build runner generated .g.dart files ### Remaining (Need to implement): 1. **Remote Datasource** - `lib/features/account/data/datasources/location_remote_datasource.dart` 2. **Local Datasource** - `lib/features/account/data/datasources/location_local_datasource.dart` 3. **Repository Interface** - `lib/features/account/domain/repositories/location_repository.dart` 4. **Repository Implementation** - `lib/features/account/data/repositories/location_repository_impl.dart` 5. **Providers** - `lib/features/account/presentation/providers/location_provider.dart` 6. **Update AddressFormPage** to use the providers ## API Endpoints (from docs/auth.sh) ### Get Cities: ```bash POST /api/method/frappe.client.get_list Body: { "doctype": "City", "fields": ["city_name","name","code"], "limit_page_length": 0 } ``` ### Get Wards (filtered by city): ```bash POST /api/method/frappe.client.get_list Body: { "doctype": "Ward", "fields": ["ward_name","name","code"], "filters": {"city": "96"}, "limit_page_length": 0 } ``` ## Offline-First Strategy 1. **Cities**: Cache in Hive, refresh from API periodically 2. **Wards**: Load from API when city selected, cache per city Would you like me to generate the remaining implementation files now?