This PR implements a comprehensive suite of landlord management features, replacing static mock data with live backend integration. It includes a new database schema for landlord profiles, authenticated API endpoints for tenant rosters and settings management, and fully interactive frontend dashboards for profile, notification, and payout configuration.
Closes #590, Closes #591, Closes #592, Closes #593
- [New Migration]
backend/migrations/010_landlord_profiles.sql: Added tables for landlord settings, phone, company details, and bank information. - [AuthRepository]: Added
LandlordProfileinterface and methods togetLandlordProfileandupdateLandlordProfile. - [AuthStore]: Exposed landlord profile management through
UserStore. - [New Router]
backend/src/routes/landlord.ts: ImplementedGET /tenants,GET /settings, andPATCH /settingsendpoints. - [App Entry]
backend/src/app.ts: Registered the landlord router under/api/landlord.
- [Tenants Roster]
frontend/app/dashboard/landlord/tenants/page.tsx: Replaced mock data with liveapiFetchintegration; added NGN currency and date formatting. - [Settings Flow]
frontend/app/dashboard/landlord/settings/page.tsx: Implemented full state management for Profile, Notifications, and Payout tabs with real-time API syncing.
This is not a SOROBAN contract update. This PR focuses on full-stack features for landlord management.
- All automated tests pass
- Integration tests pass (if applicable)
- Manual testing completed:
- Verified tenant roster displays correct property and lease data from the database.
- Verified profile, notification preferences, and bank details persist correctly across page reloads.
- Verified role-based authentication prevents unauthorized access to landlord endpoints.
- No secrets or sensitive data are logged
- No changes to authentication/authorization logic without review (uses existing
authenticateTokenmiddleware) - No changes to admin/upgrade logic without review
Refer to the walkthrough.md for detailed UI screenshots and state transitions (loading/success).
- I linked an issue (or explained why one is not needed)
- I tested locally
- I did not commit secrets
- I updated docs if needed
- Code follows the project's style guidelines
- CI checks pass
- If UI changes: I included before/after screenshots (via walkthrough)
- If images added/changed: I verified they are optimized and accessible