Create/update all Sprint 6 documentation: - CHANGELOG.md: document GOO-33 and recent audit findings - CONTRIBUTING.md: add branching, PR, commit conventions - docs/ci-cd.md: GitHub Actions pipeline documentation - docs/onboarding.md: developer setup & onboarding guide - docs/mcp-servers.md: MCP servers API documentation - docs/PROJECT_TRACKER.md: mark GOO-33 as in_progress - docs/QA_TRACKER.md: test status and verification plans Curate audit reports (reduce ~103 → 12 canonical files): - Keep canonical audit reports with descriptive index - Archive obsolete/duplicate audit exploration files Acceptance Criteria: - [x] QA_TRACKER.md exists with current test status - [x] CHANGELOG.md updated to today - [x] PROJECT_TRACKER.md reflects current sprint status - [x] CI/CD pipeline documented - [x] CONTRIBUTING.md has branching, PR, commit conventions - [x] docs/audits/ reduced to canonical reports Co-Authored-By: Paperclip <noreply@paperclip.ing>
11 KiB
11 KiB
Developer Onboarding Guide
Chào mừng đến với GoodGo Platform — một sàn giao dịch bất động sản Việt Nam được xây dựng trên NestJS, Next.js, PostgreSQL, và PostGIS.
Hướng dẫn này giúp bạn setup môi trường phát triển trong < 30 phút.
Prerequisites (Yêu cầu)
Trước khi bắt đầu, hãy cài đặt:
| Tool | Version | Link |
|---|---|---|
| Node.js | ≥ 22.0.0 | https://nodejs.org/ |
| pnpm | ≥ 10.0.0 | https://pnpm.io/ |
| PostgreSQL | 16 + PostGIS | https://www.postgresql.org/ |
| Docker & Docker Compose | Latest | https://docker.com/ |
| Git | Latest | https://git-scm.com/ |
| VS Code (recommended) | Latest | https://code.visualstudio.com/ |
macOS
# Install Homebrew (if not already)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Install dependencies
brew install node@22 pnpm postgresql@16 docker
brew install postgis # PostGIS extension
# Verify
node --version # v22.x.x
pnpm --version # 10.x.x
psql --version # PostgreSQL 16.x
Ubuntu/Debian
# Update package manager
sudo apt update
# Install Node.js 22
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs
# Install pnpm
npm install -g pnpm@latest
# Install PostgreSQL 16 + PostGIS
sudo apt install -y postgresql-16 postgresql-16-postgis
# Install Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
Windows (WSL2 Recommended)
# Inside WSL2 Ubuntu:
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs postgresql-16 postgresql-16-postgis
npm install -g pnpm@latest
1. Clone Repository
# Clone the repo
git clone https://github.com/hongochai10/goodgo-bds-platform-ai.git
cd goodgo-platform-ai
# Add your SSH key to GitHub (for faster clone/push)
# https://docs.github.com/en/authentication/connecting-to-github-with-ssh
2. Install Dependencies
# Install all packages using pnpm workspaces
pnpm install
# This installs:
# - Root dependencies
# - apps/api dependencies
# - apps/web dependencies
# - libs/ai-services dependencies
# - libs/mcp-servers dependencies
Expected time: ~2-5 minutes
3. Setup PostgreSQL (Database)
Option A: Docker Compose (Recommended for Development)
# Start PostgreSQL + Redis in Docker
docker-compose -f docker-compose.dev.yml up -d
# Verify containers are running
docker-compose ps
# Output should show:
# NAME STATUS
# goodgo-postgres Up 2 seconds
# goodgo-redis Up 2 seconds
Option B: Local PostgreSQL Installation
# Create database
createdb goodgo_dev
# Enable PostGIS extension
psql goodgo_dev -c "CREATE EXTENSION IF NOT EXISTS postgis;"
# Verify
psql goodgo_dev -c "SELECT PostGIS_version();"
4. Setup Environment Variables
# Copy .env.example to .env
cp .env.example .env
# Edit .env with your local values
# Minimal required variables:
cat > .env << 'EOF'
NODE_ENV=development
DATABASE_URL="postgresql://postgres:password@localhost:5432/goodgo_dev"
REDIS_URL="redis://localhost:6379"
JWT_SECRET="dev-secret-change-in-production"
JWT_REFRESH_SECRET="dev-refresh-secret-change-in-production"
MAPBOX_TOKEN="your-mapbox-token-here" # Get from https://account.mapbox.com/
EOF
# For Firebase Cloud Messaging (optional, for push notifications):
# FIREBASE_PROJECT_ID="your-project-id"
# FIREBASE_PRIVATE_KEY="..."
# FIREBASE_CLIENT_EMAIL="..."
5. Initialize Database
# Generate Prisma client
pnpm db:generate
# Run migrations
pnpm db:migrate:dev
# Seed sample data (users, listings, districts)
pnpm db:seed
# Verify seeding
pnpm db:studio # Opens Prisma Studio GUI at http://localhost:5555
6. Start Development Servers
# Start all services (API + Web + AI services) in watch mode
pnpm dev
# Output shows:
# - API running at http://localhost:3001
# - Web running at http://localhost:3000
# - Logs from both services
Expected time: ~30 seconds for startup
Alternative: Start Individual Services
# Terminal 1: API only
pnpm --filter api dev
# Terminal 2: Web only
pnpm --filter web dev
# Terminal 3: AI services (Python) - optional
pnpm --filter ai-services dev
7. Verify Setup
Open your browser and test:
API Health Check
# Terminal or Postman
curl http://localhost:3001/health
# Should return:
# {
# "status": "ok",
# "timestamp": "2026-04-22T10:30:00Z"
# }
Web App
Open http://localhost:3000 in your browser
- You should see the GoodGo home page
- Try registering an account (test phone:
0987654321, any password)
API Swagger Docs
Open http://localhost:3001/api/docs
- Interactive API documentation
- Try endpoints: GET
/api/v1/listings, POST/api/v1/auth/login, etc.
Key Commands
| Command | Purpose |
|---|---|
pnpm install |
Install all dependencies |
pnpm dev |
Start all services in watch mode |
pnpm lint |
Run ESLint (check code style) |
pnpm lint --fix |
Auto-fix lint issues |
pnpm typecheck |
TypeScript type checking |
pnpm test |
Run unit tests |
pnpm test:e2e |
Run E2E tests with Playwright |
pnpm build |
Production build |
pnpm db:generate |
Generate Prisma client |
pnpm db:migrate:dev |
Run pending migrations |
pnpm db:seed |
Seed sample data |
pnpm db:studio |
Open Prisma Studio GUI |
Project Structure
goodgo-platform-ai/
├── apps/
│ ├── api/ # NestJS backend
│ │ ├── src/
│ │ │ ├── main.ts # Entry point
│ │ │ └── modules/ # Domain modules
│ │ │ ├── auth/
│ │ │ ├── listings/
│ │ │ ├── payments/
│ │ │ └── ...
│ │ └── package.json
│ └── web/ # Next.js frontend
│ ├── src/
│ │ ├── app/ # App Router pages
│ │ ├── components/
│ │ ├── lib/
│ │ └── hooks/
│ └── package.json
├── libs/
│ ├── ai-services/ # Python FastAPI (AVM, moderation)
│ └── mcp-servers/ # MCP server library
├── prisma/
│ ├── schema.prisma # Database schema
│ └── migrations/ # SQL migrations
├── docs/ # Documentation
├── .github/workflows/ # CI/CD
└── package.json (root) # pnpm workspaces config
Development Workflow
1. Create a Feature Branch
# Always create a feature branch from main/master
git checkout -b feature/awesome-feature
# Branch naming convention:
# - feature/new-feature-name
# - fix/bug-description
# - refactor/code-cleanup
# - docs/documentation-update
2. Make Changes
# Install dependencies for new package
pnpm install
# Run type checking + linting
pnpm typecheck
pnpm lint
# Run tests for your changes
pnpm test -- path/to/module
# Fix auto-fixable issues
pnpm lint --fix
3. Commit & Push
# Commit following conventional commits format
git add .
git commit -m "feat(module): short description"
# Commit message format:
# feat(scope): description
# fix(scope): description
# docs(scope): description
# refactor(scope): description
# test(scope): description
# chore(scope): description
# Push branch
git push origin feature/awesome-feature
4. Create Pull Request
- Go to GitHub: https://github.com/hongochai10/goodgo-bds-platform-ai/pulls
- Click New Pull Request
- Select your branch
- Add description (what changed, why, testing notes)
- Ensure all checks pass ✅ (lint, typecheck, test, build)
- Request review from team lead
- Merge after approval
Debugging Tips
API Debugging
# Enable debug logging
DEBUG=*:* pnpm --filter api dev
# Or in VS Code: use `.vscode/launch.json` for breakpoints
# F5 to start debugger
Web Debugging
# Chrome DevTools: F12
# React DevTools extension: https://chrome.google.com/webstore/
# Debug Next.js:
# .next/server/pages shows compiled route handlers
Database Debugging
# Connect to database directly
psql $DATABASE_URL
# Common queries:
SELECT * FROM "User" LIMIT 5;
SELECT COUNT(*) FROM "Listing";
SELECT * FROM "Listing" WHERE "status" = 'ACTIVE' LIMIT 5;
Redis Debugging
# Connect to Redis CLI
redis-cli
# Check keys
KEYS *
GET session:user:123
INCR counter
VS Code Setup (Optional)
Recommended Extensions
// .vscode/extensions.json
{
"recommendations": [
"esbenp.prettier-vscode", // Code formatter
"dbaeumer.vscode-eslint", // ESLint linting
"ms-vscode.makefile-tools", // Makefile support
"ms-vscode.extension-pack-fe", // Frontend bundle
"ms-vscode-remote.remote-containers", // Docker support
"bradlc.vscode-tailwindcss", // Tailwind CSS support
"vivaxy.vscode-conventional-commits", // Commit helper
"Prisma.prisma" // Prisma schema support
]
}
Launch Configuration (Debugging)
Create .vscode/launch.json:
{
"version": "0.2.0",
"configurations": [
{
"name": "NestJS Debug",
"type": "node",
"request": "launch",
"program": "${workspaceFolder}/node_modules/@nestjs/cli/bin/nest.js",
"args": ["start", "--debug", "--watch"],
"cwd": "${workspaceFolder}/apps/api",
"skipFiles": ["<node_internals>/**"]
}
]
}
Troubleshooting
Problem: pnpm install hangs
Solution:
rm -rf node_modules .pnpm-store pnpm-lock.yaml
pnpm install --no-frozen-lockfile
Problem: PostgreSQL connection refused
Solution:
# Check if PostgreSQL is running
docker-compose ps
# If not running, start it
docker-compose -f docker-compose.dev.yml up -d
# Or check local PostgreSQL
pg_isready -h localhost -p 5432
Problem: pnpm dev fails with "EADDRINUSE"
Solution:
# Port 3000 or 3001 is already in use
# Kill existing process
lsof -i :3000 # Find process ID
kill -9 <PID>
# Or use different port
PORT=3002 pnpm --filter web dev
Problem: TypeScript errors in IDE but tests pass
Solution:
# Regenerate Prisma types
pnpm db:generate
# Restart VS Code
Cmd+Shift+P → "Developer: Reload Window"
Getting Help
- Slack:
#devchannel (if you have access) - GitHub Issues: https://github.com/hongochai10/goodgo-bds-platform-ai/issues
- Documentation:
/docsfolder - Architecture:
/docs/architecture.md - API Reference:
/docs/api-endpoints.md
Next Steps
- ✅ Setup complete? Start with a small bug fix or feature
- 📖 Read Architecture:
/docs/architecture.md(understand module structure) - 🏗️ Understand CQRS:
/docs/QUICK_REFERENCE.md(command/query handlers) - 🧪 Write Tests: Follow patterns in existing
.spec.tsfiles - 📝 Update Docs: When adding features, update relevant docs
Welcome to GoodGo! Happy coding! 🚀