A full-stack cloud-native application for managing real estate properties, users, and realtors. Built with C# ASP.NET Core, React, and deployed on AWS infrastructure with Google APigee API management.
This is a Minimal Viable Product (MVP) demonstrating core full-stack development and cloud deployment principles. The system provides a RESTful API for managing real estate data and a React web client for end-user interaction, all deployed on AWS cloud services.
- RESTful API with complete CRUD operations for Properties, Users, and Realtors
- Three-Layered Architecture (Controller β Service β Repository)
- Repository Pattern for clean data access abstraction
- Entity Framework Core with AWS RDS database
- AutoMapper for DTO-Entity mapping
- Swagger/OpenAPI documentation
- Google APigee API gateway for security and access control
- React Frontend with TypeScript/JavaScript
- Docker Containerization with AWS ECS Fargate deployment
- AWS S3 static website hosting
graph TD
A(End Users)
B("React Web Client (AWS S3)")
C("Google APIGEE API Gateway")
D("ASP.NET Core API (AWS ECS Fargate)")
E(Controllers)
F(Services)
G(Repositories)
H("AWS RDS (Database)")
A --> B
B -- HTTPS + API Key --> C
C --> D
D --> E
E --> F
F --> G
D --> H
G --> H
- Framework: ASP.NET Core 6.0+
- Language: C#
- ORM: Entity Framework Core
- Mapping: AutoMapper
- Documentation: Swashbuckle (Swagger)
- Containerization: Docker
- Framework: React 18+
- Build Tool: Vite
- Language: TypeScript or JavaScript
- HTTP Client: Axios
- Routing: React Router
- Database: AWS RDS (PostgreSQL/SQL Server)
- Container Registry: AWS ECR
- Container Hosting: AWS ECS Fargate
- Static Hosting: AWS S3
- API Gateway: Google APigee
- Address, City, State, ZipCode
- Price, Bedrooms, Bathrooms, SquareFeet
- PropertyType, Status
- RealtorId (Foreign Key)
- ListedDate, Description
- FirstName, LastName
- Email, PhoneNumber
- Address
- CreatedDate, IsActive
- FirstName, LastName
- Email, PhoneNumber
- LicenseNumber, Agency
- YearsOfExperience, Specialization
- IsActive
- .NET 6.0 SDK or later
- Node.js 16+ and npm
- Docker Desktop
- AWS Account (Free Tier eligible)
- Google Cloud Account (for APigee)
- Visual Studio 2022 or VS Code
-
Clone the repository
git clone <repository-url> cd RealEstateAPI
-
Install dependencies
dotnet restore
-
Update connection string
Edit
appsettings.json:{ "ConnectionStrings": { "DefaultConnection": "Server=localhost;Database=RealEstateDB;Trusted_Connection=True;" } } -
Run migrations
dotnet ef database update
-
Run the API
dotnet run
-
Access Swagger UI
Navigate to:
https://localhost:5001/swagger
-
Create Vite React project
npm create vite@latest real-estate-client -- --template react-ts cd real-estate-client -
Install dependencies
npm install npm install axios react-router-dom
-
Configure environment variables
Create
.envfile:VITE_API_BASE_URL=https://your-apigee-url.com/api VITE_API_KEY=your-api-key-here
-
Run development server
npm run dev
-
Access the application
Navigate to:
http://localhost:5173
docker build -t real-estate-api .docker run -p 8080:80 -e ConnectionStrings__DefaultConnection="your-connection-string" real-estate-api# Authenticate Docker to ECR
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin <account-id>.dkr.ecr.us-east-1.amazonaws.com
# Tag image
docker tag real-estate-api:latest <account-id>.dkr.ecr.us-east-1.amazonaws.com/real-estate-api:latest
# Push image
docker push <account-id>.dkr.ecr.us-east-1.amazonaws.com/real-estate-api:latest- Create RDS instance (PostgreSQL or SQL Server)
- Configure security group for inbound connections
- Update connection string in ECS task definition
- Run migrations against RDS database
- Create ECS cluster
- Create task definition with container configuration
- Configure environment variables (connection string)
- Run task with public IP enabled
- Configure security group for HTTP/HTTPS access
- Create S3 bucket
- Enable static website hosting
- Configure bucket policy for public read access
- Build React app:
npm run build - Upload build files:
aws s3 sync dist/ s3://your-bucket-name
-
Create API Proxy
- Target endpoint: Your ECS Fargate URL
- Proxy endpoint:
/api/*
-
Add Verify API Key Policy
<VerifyAPIKey name="verify-api-key"> <APIKey ref="request.header.x-api-key"/> </VerifyAPIKey>
-
Create API Product
- Add all API endpoints
- Set quota and rate limits
-
Register Developers
- Add at least 2 developers
- Generate API keys
-
Create Developer Portal
- Enable API key management
- Publish API documentation
GET /api/properties- Get all propertiesGET /api/properties/{id}- Get property by IDPOST /api/properties- Create new propertyPUT /api/properties/{id}- Update entire propertyPATCH /api/properties/{id}- Partially update propertyDELETE /api/properties/{id}- Delete property
GET /api/users- Get all usersGET /api/users/{id}- Get user by IDPOST /api/users- Create new userPUT /api/users/{id}- Update entire userPATCH /api/users/{id}- Partially update userDELETE /api/users/{id}- Delete user
GET /api/realtors- Get all realtorsGET /api/realtors/{id}- Get realtor by IDPOST /api/realtors- Create new realtorPUT /api/realtors/{id}- Update entire realtorPATCH /api/realtors/{id}- Partially update realtorDELETE /api/realtors/{id}- Delete realtor
- Navigate to
/swagger - Expand endpoint
- Click "Try it out"
- Enter parameters
- Execute request
- Import API collection
- Set environment variables (API URL, API Key)
- Add
x-api-keyheader with your APigee key - Send requests
- Navigate to deployed S3 URL
- Use UI to perform CRUD operations
- Verify data persistence
This project was developed by a team of 3 developers:
- Student 1: Backend Core & Data Layer (Database, Repositories, DTOs)
- Student 2: API & Cloud Deployment (Controllers, Services, Docker, ECS)
- Student 3: API Management & Frontend (APigee, React Application)
Current Task: Seed AWS RDS database with 10+ rows per table
Status: β All preparation complete - Ready to execute!
Quick Start:
- π Read:
STUDENT_1_COMPLETE_PACKAGE.md(overview) - π Start:
RealEstateAPI/STUDENT_1_START_HERE.md(entry point) - π Guide:
RealEstateAPI/STUDENT_1_RDS_SEEDING_GUIDE.md(complete guide) - β
Track:
RealEstateAPI/STUDENT_1_QUICK_CHECKLIST.md(checklist)
What's Ready:
- β Entity models created (Property, User, Realtor)
- β DbContext configured with relationships
- β Seed data prepared (10 rows Γ 3 tables = 30 rows)
- β Migrations created and ready to apply
- β Helper scripts written (migrate-to-rds.ps1, verify-seed-data.sql)
- β Complete documentation (13 files)
What to Do:
- Create AWS RDS instance (20 min)
- Configure security group (5 min)
- Update connection string (5 min)
- Run migration script (5 min)
- Verify data (15 min)
Time Estimate: ~50 minutes
See STUDENT_1_COMPLETE_PACKAGE.md for complete details.
- API Documentation: Available at
/swaggerendpoint - Architecture Design: Comprehensive system design documentation
- Requirements: Detailed functional and technical requirements
- Implementation Guide: Step-by-step development tasks
- Implement three-layered architecture with Repository Pattern
- Build complete RESTful API with all HTTP methods
- Deploy full-stack application on AWS cloud infrastructure
- Integrate API gateway for security and access control
- Create responsive React frontend consuming the API
- Follow industry best practices and coding standards
Database Connection Failed
- Verify RDS security group allows inbound connections
- Check connection string format
- Ensure RDS instance is publicly accessible (for development)
Docker Build Failed
- Verify Dockerfile syntax
- Check .NET SDK version compatibility
- Ensure all dependencies are restored
APigee 401 Unauthorized
- Verify API key is included in
x-api-keyheader - Check API key is valid and not expired
- Ensure API product includes the endpoint
React App Can't Connect to API
- Verify VITE_API_BASE_URL is correct in .env file
- Check CORS configuration on API
- Ensure APigee proxy is forwarding requests
This project is developed for demonstration and educational purposes.
- AWS documentation and tutorials
- Google APigee documentation
- Microsoft ASP.NET Core documentation
- React documentation
- Open source community contributions
For questions or issues, please contact the development team or refer to the project documentation.