Ho Ngoc Hai e9889539ea fix: eliminate untyped repository returns and standardize DomainException usage across all handlers
- Create typed DTOs (ListingDetailData, ListingSearchItem, ListingSellerItem) for repository read methods
- Replace all Promise<any> and PaginatedResult<any> with concrete types in repository interface and implementation
- Remove `as any` casts in search params by using Prisma enum types (TransactionType, PropertyType)
- Migrate all 16 handlers from NestJS built-in exceptions to domain exceptions (NotFoundException, ValidationException, etc.)
- Add CONTRIBUTING.md documenting error handling convention
- All 230 tests pass, typecheck clean

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-08 06:25:44 +07:00

GoodGo Platform AI

Vietnam's intelligent real estate platform — property search, AI-powered valuation, and end-to-end transaction management.

Tech Stack

Layer Technology
Backend NestJS 11, TypeScript, Prisma ORM, CQRS
Frontend Next.js 14, React 18, Tailwind CSS, Zustand
Database PostgreSQL 16 + PostGIS 3.4
Search Typesense 27
Cache/Queue Redis 7
AI/ML FastAPI, XGBoost, Claude API, Underthesea
MCP Model Context Protocol servers (property search, valuation, analytics)
Storage MinIO (S3-compatible)
Monitoring Prometheus + Grafana
Payments VNPay, MoMo, ZaloPay

Architecture Overview

┌─────────────┐     ┌──────────────┐     ┌──────────────────┐
│  Next.js 14 │────▶│  NestJS API  │────▶│  PostgreSQL +    │
│  (Web App)  │     │  (REST)      │     │  PostGIS         │
└─────────────┘     └──────┬───────┘     └──────────────────┘
                           │
              ┌────────────┼────────────┐
              │            │            │
        ┌─────▼──┐  ┌──────▼───┐  ┌────▼─────┐
        │ Redis  │  │Typesense │  │  MinIO   │
        │ Cache  │  │ Search   │  │ Storage  │
        └────────┘  └──────────┘  └──────────┘
              │
        ┌─────▼──────────────────────────┐
        │  MCP Servers                   │
        │  ├─ Property Search            │
        │  ├─ Market Analytics           │
        │  └─ Valuation                  │
        └─────────────┬─────────────────┘
                      │
              ┌───────▼────────┐
              │  AI Services   │
              │  (FastAPI)     │
              │  ├─ AVM        │
              │  └─ Moderation │
              └────────────────┘

Monorepo Structure

goodgo-platform-ai/
├── apps/
│   ├── api/              # NestJS backend (port 3000)
│   └── web/              # Next.js frontend (port 3001)
├── libs/
│   ├── ai-services/      # Python FastAPI — AVM + content moderation
│   └── mcp-servers/      # MCP server implementations
├── prisma/               # Database schema & migrations
├── e2e/                  # Playwright E2E tests
├── monitoring/           # Prometheus & Grafana configs
└── docs/                 # Developer documentation

Quick Start

Prerequisites

  • Docker Engine 24+ & Docker Compose v2
  • Node.js 22 LTS
  • pnpm 10.27+ (corepack enable && corepack prepare pnpm@latest --activate)

Setup

# 1. Clone the repository
git clone <repo-url> && cd goodgo-platform-ai

# 2. Copy environment file
cp .env.example .env

# 3. Start infrastructure services
docker compose up -d

# 4. Verify services are healthy
docker compose ps

# 5. Install dependencies
pnpm install

# 6. Generate Prisma client
pnpm db:generate

# 7. Run database migrations
pnpm db:migrate:dev

# 8. Seed the database (optional)
pnpm db:seed

# 9. Start all apps in dev mode
pnpm dev

The API will be available at http://localhost:3000 and the web app at http://localhost:3001.

Infrastructure Services

Service Port(s) Dashboard
PostgreSQL + PostGIS 5432
Redis 6379
Typesense 8108 http://localhost:8108/health
MinIO 9000 / 9001 http://localhost:9001 (console)
AI Services (FastAPI) 8000 http://localhost:8000/health
Prometheus 9090 http://localhost:9090
Grafana 3002 http://localhost:3002

Development

Common Commands

pnpm dev              # Start all apps (API + Web)
pnpm build            # Build all packages
pnpm lint             # Run ESLint
pnpm typecheck        # TypeScript type checking
pnpm format           # Format with Prettier
pnpm test             # Run unit/integration tests

Database

pnpm db:generate      # Regenerate Prisma client
pnpm db:migrate:dev   # Create and apply migrations
pnpm db:migrate:deploy # Apply migrations (CI/production)
pnpm db:seed          # Seed database
pnpm db:studio        # Open Prisma Studio (visual editor)
pnpm db:reset         # Reset database (destructive)

E2E Testing

pnpm test:e2e         # Run all E2E tests
pnpm test:e2e:api     # API tests only
pnpm test:e2e:web     # Web UI tests only
pnpm test:e2e:report  # Open HTML test report

API Modules

Module Description
auth Registration, login, JWT + refresh token rotation, OAuth (Google/Zalo), KYC
listings Property listing CRUD, status workflow, media management
search Typesense full-text search with geo-spatial filters
payments VNPay, MoMo, ZaloPay integration
subscriptions Plan management, usage tracking
notifications Email and in-app notifications
admin Listing moderation, user management
analytics Market reports, price indices, AVM integration
mcp MCP server bridge (property search, valuation, analytics)
metrics Prometheus metrics endpoint

Each module follows Domain-Driven Design with presentation/, application/, domain/, and infrastructure/ layers.

Documentation

License

Proprietary — All rights reserved.

Description
Mirror of goodgo-bds-platform-ai from GitHub
Readme 18 MiB
Languages
TypeScript 95.4%
Python 2.7%
Shell 0.9%
JavaScript 0.8%
Dockerfile 0.1%