Automated Action 9ca9d35a1a Implement complete Urban Real Estate API backend
- Set up FastAPI project structure with modular architecture
- Create comprehensive database models for users, properties, messages, notifications, and payments
- Implement JWT-based authentication with role-based access control (Seeker, Agent, Landlord, Admin)
- Build property listings CRUD with advanced search and filtering capabilities
- Add dedicated affordable housing endpoints for Nigerian market focus
- Create real-time messaging system between users
- Implement admin dashboard with property approval workflow and analytics
- Add notification system for user alerts
- Integrate Paystack payment gateway for transactions
- Set up SQLite database with Alembic migrations
- Include comprehensive health check and API documentation
- Add proper error handling and validation throughout
- Follow FastAPI best practices with Pydantic schemas and dependency injection
2025-06-27 12:24:06 +00:00

204 lines
6.0 KiB
Markdown

# Urban Real Estate API
A comprehensive backend API for the Urban Real Estate App - a Nigerian housing marketplace that connects property seekers with agents, landlords, and affordable housing options.
## Features
- **User Authentication & Authorization**: JWT-based authentication with role-based access control
- **Property Listings Management**: Full CRUD operations for property listings
- **Affordable Housing**: Dedicated endpoints for affordable housing listings
- **Messaging System**: Real-time messaging between users
- **Admin Dashboard**: Administrative controls for managing users and properties
- **Notifications**: User notification system
- **Payment Integration**: Paystack payment gateway integration
- **Search & Filtering**: Advanced property search with multiple filters
## Technology Stack
- **Framework**: FastAPI (Python)
- **Database**: SQLite with SQLAlchemy ORM
- **Authentication**: JWT tokens with bcrypt password hashing
- **API Documentation**: Automatic OpenAPI/Swagger documentation
- **Migrations**: Alembic for database migrations
## Project Structure
```
urbanrealestateapi/
├── app/
│ ├── auth/ # Authentication utilities
│ ├── core/ # Core security functions
│ ├── db/ # Database configuration
│ ├── models/ # SQLAlchemy models
│ ├── routers/ # API route handlers
│ └── schemas/ # Pydantic schemas
├── alembic/ # Database migrations
├── main.py # FastAPI application entry point
├── requirements.txt # Python dependencies
└── README.md # This file
```
## Installation & Setup
1. **Install Dependencies**:
```bash
pip install -r requirements.txt
```
2. **Set Environment Variables**:
```bash
export SECRET_KEY="your-secret-key-here"
export PAYSTACK_SECRET_KEY="your-paystack-secret-key"
export PAYSTACK_PUBLIC_KEY="your-paystack-public-key"
export ENVIRONMENT="development"
```
3. **Run Database Migrations**:
```bash
alembic upgrade head
```
4. **Start the Application**:
```bash
uvicorn main:app --host 0.0.0.0 --port 8000 --reload
```
## Environment Variables
The following environment variables should be set for production:
- `SECRET_KEY`: JWT secret key for token generation
- `PAYSTACK_SECRET_KEY`: Paystack secret key for payment processing
- `PAYSTACK_PUBLIC_KEY`: Paystack public key for payment processing
- `ENVIRONMENT`: Application environment (development/production)
## API Endpoints
### Authentication
- `POST /api/auth/register` - Register a new user
- `POST /api/auth/login` - Login user
### Properties
- `GET /api/properties/` - List properties with filtering
- `POST /api/properties/` - Create new property listing
- `GET /api/properties/{id}` - Get property details
- `PUT /api/properties/{id}` - Update property listing
- `DELETE /api/properties/{id}` - Delete property listing
### Affordable Housing
- `GET /api/affordable/` - List affordable housing properties
### Messages
- `POST /api/messages/` - Send a message
- `GET /api/messages/` - Get user messages
- `GET /api/messages/conversations/{user_id}` - Get conversation with specific user
- `PUT /api/messages/{id}/read` - Mark message as read
### Notifications
- `GET /api/notifications/` - Get user notifications
- `PUT /api/notifications/{id}/read` - Mark notification as read
- `PUT /api/notifications/mark-all-read` - Mark all notifications as read
### Admin (Admin role required)
- `GET /api/admin/properties/pending` - Get pending property approvals
- `PUT /api/admin/properties/{id}/approve` - Approve property listing
- `PUT /api/admin/properties/{id}/reject` - Reject property listing
- `GET /api/admin/users` - List users
- `PUT /api/admin/users/{id}/deactivate` - Deactivate user
- `GET /api/admin/analytics` - Get system analytics
### Payments
- `POST /api/payments/initiate` - Initiate payment
- `POST /api/payments/verify/{ref}` - Verify payment
- `GET /api/payments/` - Get user payments
- `GET /api/payments/{id}` - Get payment details
### System
- `GET /` - API information
- `GET /health` - Health check endpoint
- `GET /docs` - Swagger documentation
- `GET /redoc` - ReDoc documentation
## User Roles
1. **Seeker**: Can search and view properties, send messages
2. **Agent**: Can list properties, manage listings, communicate with seekers
3. **Landlord**: Can list properties, manage listings, communicate with seekers
4. **Admin**: Full access to all endpoints, can approve/reject listings, manage users
## Database Schema
### Users
- User authentication and profile information
- Role-based access control
- Profile with bio, image, and verification status
### Properties
- Property listings with comprehensive details
- Location, pricing, and amenity information
- Approval workflow for listings
- Support for affordable housing categorization
### Messages
- Real-time messaging between users
- Message read status tracking
### Notifications
- User notification system
- Read/unread status tracking
### Payments
- Payment transaction logging
- Paystack integration support
## Development
### Running Tests
```bash
# Add your test commands here when tests are implemented
pytest
```
### Code Formatting
```bash
ruff check .
ruff format .
```
### Database Operations
```bash
# Create new migration
alembic revision --autogenerate -m "Description"
# Apply migrations
alembic upgrade head
# Rollback migration
alembic downgrade -1
```
## Production Deployment
1. Set all required environment variables
2. Use a production WSGI server like Gunicorn
3. Configure proper database (PostgreSQL recommended for production)
4. Set up proper logging and monitoring
5. Configure HTTPS/SSL
6. Set up database backups
## Contributing
1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Run tests and linting
5. Submit a pull request
## License
This project is licensed under the MIT License.
## Support
For support and questions, please create an issue in the repository.