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>
516 lines
11 KiB
Markdown
516 lines
11 KiB
Markdown
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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)
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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)
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# Enable debug logging
|
|
DEBUG=*:* pnpm --filter api dev
|
|
|
|
# Or in VS Code: use `.vscode/launch.json` for breakpoints
|
|
# F5 to start debugger
|
|
```
|
|
|
|
### Web Debugging
|
|
|
|
```bash
|
|
# Chrome DevTools: F12
|
|
# React DevTools extension: https://chrome.google.com/webstore/
|
|
|
|
# Debug Next.js:
|
|
# .next/server/pages shows compiled route handlers
|
|
```
|
|
|
|
### Database Debugging
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# Connect to Redis CLI
|
|
redis-cli
|
|
|
|
# Check keys
|
|
KEYS *
|
|
GET session:user:123
|
|
INCR counter
|
|
```
|
|
|
|
---
|
|
|
|
## VS Code Setup (Optional)
|
|
|
|
### Recommended Extensions
|
|
|
|
```json
|
|
// .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`:
|
|
|
|
```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:**
|
|
```bash
|
|
rm -rf node_modules .pnpm-store pnpm-lock.yaml
|
|
pnpm install --no-frozen-lockfile
|
|
```
|
|
|
|
### Problem: PostgreSQL connection refused
|
|
|
|
**Solution:**
|
|
```bash
|
|
# 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:**
|
|
```bash
|
|
# 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:**
|
|
```bash
|
|
# Regenerate Prisma types
|
|
pnpm db:generate
|
|
|
|
# Restart VS Code
|
|
Cmd+Shift+P → "Developer: Reload Window"
|
|
```
|
|
|
|
---
|
|
|
|
## Getting Help
|
|
|
|
- **Slack:** `#dev` channel (if you have access)
|
|
- **GitHub Issues:** https://github.com/hongochai10/goodgo-bds-platform-ai/issues
|
|
- **Documentation:** `/docs` folder
|
|
- **Architecture:** `/docs/architecture.md`
|
|
- **API Reference:** `/docs/api-endpoints.md`
|
|
|
|
---
|
|
|
|
## Next Steps
|
|
|
|
1. ✅ **Setup complete?** Start with a small bug fix or feature
|
|
2. 📖 **Read Architecture:** `/docs/architecture.md` (understand module structure)
|
|
3. 🏗️ **Understand CQRS:** `/docs/QUICK_REFERENCE.md` (command/query handlers)
|
|
4. 🧪 **Write Tests:** Follow patterns in existing `.spec.ts` files
|
|
5. 📝 **Update Docs:** When adding features, update relevant docs
|
|
|
|
---
|
|
|
|
**Welcome to GoodGo! Happy coding! 🚀**
|