diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 092a6bce..c7622c35 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -14,7 +14,13 @@ "Bash(flutter test:*)", "Bash(flutter analyze:*)", "Bash(findstr:*)", - "Bash(flutter pub get:*)" + "Bash(flutter pub get:*)", + "Bash(cat:*)", + "Bash(git add:*)", + "Bash(git commit -m \"$(cat <<''EOF''\nrefactor(infra): 统一微服务基础设施为共享模式\n\n- 将 presence-service 添加到主 docker-compose.yml(端口 3011,Redis DB 10)\n- 更新 init-databases.sh 添加 rwa_admin 和 rwa_presence 数据库\n- 重构 admin-service/deploy.sh 使用共享基础设施\n- 重构 presence-service/deploy.sh 使用共享基础设施\n- 添加 authorization-service 开发指南文档\n\n解决多个微服务独立启动重复基础设施(PostgreSQL/Redis/Kafka)的问题\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude \nEOF\n)\")", + "Bash(git push)", + "Bash(git commit -m \"$(cat <<''EOF''\nfeat(admin-service): 增强移动端版本上传功能\n\n- 添加 APK/IPA 文件解析器自动提取版本信息\n- 支持从安装包自动读取 versionName 和 versionCode\n- 添加 adbkit-apkreader 依赖解析 APK 文件\n- 添加 plist 依赖解析 IPA 文件\n- 优化上传接口支持自动填充版本信息\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude \nEOF\n)\")", + "Bash(git commit:*)" ], "deny": [], "ask": [] diff --git a/backend/services/admin-service/.claude/settings.local.json b/backend/services/admin-service/.claude/settings.local.json new file mode 100644 index 00000000..9c4da442 --- /dev/null +++ b/backend/services/admin-service/.claude/settings.local.json @@ -0,0 +1,25 @@ +{ + "permissions": { + "allow": [ + "Bash(tree:*)", + "Bash(git add:*)", + "Bash(git commit:*)", + "Bash(git push)", + "Bash(wsl -e bash -c \"cd /mnt/c/Users/dong/Desktop/rwadurian/backend/services/admin-service && npm run build 2>&1\")", + "Bash(npm run build:*)", + "Bash(npx tsc:*)", + "Bash(node node_modules/.bin/tsc:*)", + "Bash(docker build:*)", + "Bash(cat:*)", + "Bash(timeout:*)", + "Bash(wsl -e bash -c \"cd /mnt/c/Users/dong/Desktop/rwadurian/backend/services/admin-service && npm install @nestjs/serve-static @types/multer --save 2>&1\")", + "Bash(wsl -e bash -c \"cd /mnt/c/Users/dong/Desktop/rwadurian/backend/services/admin-service && npm install @nestjs/serve-static@^4.0.0 @types/multer --save 2>&1\")", + "Bash(ssh ceshi@rwa-colocation-1-lan:*)", + "Bash(node:*)", + "Bash(dir:*)", + "Bash(npm install:*)" + ], + "deny": [], + "ask": [] + } +} diff --git a/backend/services/identity-service/Dockerfile b/backend/services/identity-service/Dockerfile index 5875576e..a8dac048 100644 --- a/backend/services/identity-service/Dockerfile +++ b/backend/services/identity-service/Dockerfile @@ -8,8 +8,10 @@ FROM node:20-alpine AS builder # Use Aliyun mirror for Alpine packages (China acceleration) RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories -# Use taobao npm registry (China acceleration) -RUN npm config set registry https://registry.npmmirror.com +# Use China mirrors for npm (try Huawei mirror as fallback) +# Options: npmmirror.com, mirrors.huaweicloud.com, registry.npm.taobao.org +RUN npm config set registry https://mirrors.huaweicloud.com/repository/npm/ && \ + npm config set disturl https://mirrors.huaweicloud.com/nodejs/ WORKDIR /app @@ -51,8 +53,8 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ curl \ && rm -rf /var/lib/apt/lists/* -# Use taobao npm registry (China acceleration) -RUN npm config set registry https://registry.npmmirror.com +# Use Huawei npm mirror (more stable than npmmirror) +RUN npm config set registry https://mirrors.huaweicloud.com/repository/npm/ # Install production dependencies only COPY package*.json ./ diff --git a/backend/services/presence-service/.claude/settings.local.json b/backend/services/presence-service/.claude/settings.local.json index 3db05fe1..22a9968b 100644 --- a/backend/services/presence-service/.claude/settings.local.json +++ b/backend/services/presence-service/.claude/settings.local.json @@ -13,7 +13,31 @@ "Bash(git -C \"c:/Users/dong/Desktop/rwadurian/backend/services/presence-service\" diff --stat)", "Bash(git -C \"c:/Users/dong/Desktop/rwadurian/backend/services/presence-service\" log --oneline -5)", "Bash(git -C \"c:/Users/dong/Desktop/rwadurian/backend/services/presence-service\" add .)", - "Bash(git -C \"c:/Users/dong/Desktop/rwadurian/backend/services/presence-service\" add \"../admin-service/test/\")" + "Bash(git -C \"c:/Users/dong/Desktop/rwadurian/backend/services/presence-service\" add \"../admin-service/test/\")", + "Bash(git -C \"c:/Users/dong/Desktop/rwadurian/backend/services/presence-service\" status --short)", + "Bash(git -C \"c:/Users/dong/Desktop/rwadurian/backend/services/presence-service\" commit -m \"$(cat <<''EOF''\nfeat(presence-service): 添加完整的测试套件和生产部署设施\n\n- 添加 165 个测试用例 (123 单元测试, 22 集成测试, 20 E2E测试)\n- 添加 Docker 多阶段构建和 docker-compose 生产部署配置\n- 添加完整的文档体系 (架构、API、开发、测试、部署)\n- 添加环境配置 (.env.development/production/test)\n- 添加部署脚本 (health-check, start-all, stop-service)\n- 修复 TypeScript 类型错误\n- 经 WSL2 验证所有生产部署命令测试通过\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude \nEOF\n)\")", + "Bash(git -C \"c:/Users/dong/Desktop/rwadurian/backend/services/presence-service\" push)", + "Bash(git -C \"c:/Users/dong/Desktop/rwadurian/backend/services/presence-service\" add deploy.sh scripts/quick-test.sh scripts/rebuild-kafka.sh scripts/README.md)", + "Bash(git -C \"c:/Users/dong/Desktop/rwadurian/backend/services/presence-service\" commit -m \"$(cat <<''EOF''\nfeat(presence-service): 添加完整的部署脚本\n\n- 添加 deploy.sh 主部署脚本 (build/start/stop/logs/migrate/test)\n- 添加 scripts/quick-test.sh API 快速测试脚本\n- 添加 scripts/rebuild-kafka.sh Kafka 重建脚本\n- 更新 scripts/README.md 文档\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude \nEOF\n)\")", + "Bash(git -C \"c:/Users/dong/Desktop/rwadurian/backend/services/presence-service\" diff deploy.sh)", + "Bash(git -C \"c:/Users/dong/Desktop/rwadurian/backend/services/presence-service\" add deploy.sh)", + "Bash(git -C \"c:/Users/dong/Desktop/rwadurian/backend/services/presence-service\" commit -m \"refactor(presence-service): 优化 deploy.sh 与主基础设施集成\n\n- 更新容器名和镜像名与项目规范一致\n- 添加 load_env 函数支持共享环境配置\n- 添加 up/logs-all/clean-all 命令\n- 使用动态 HEALTH_ENDPOINT\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude \")", + "Bash(git -C \"c:/Users/dong/Desktop/rwadurian/backend/services/presence-service\" log --oneline -3)", + "Bash(git -C \"c:/Users/dong/Desktop/rwadurian/backend/services/presence-service\" commit -m \"fix(presence-service): 修复 deploy.sh 自调用权限问题\n\n使用 bash \"\"$SCRIPT_DIR/deploy.sh\"\" 替代 $0 避免路径变化导致的权限问题\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude \")", + "Bash(git -C \"c:/Users/dong/Desktop/rwadurian/backend/services/presence-service\" add .env.development .env.example .env.production Dockerfile docker-compose.yml scripts/README.md scripts/health-check.sh scripts/quick-test.sh scripts/rebuild-kafka.sh scripts/start-all.sh scripts/stop-service.sh src/main.ts)", + "Bash(git -C \"c:/Users/dong/Desktop/rwadurian/backend/services/presence-service\" commit -m \"$(cat <<''EOF''\nfix(presence-service): 统一端口配置为 3011\n\n修复端口配置不一致问题 (子项目使用3001,主项目使用3011):\n- 更新 docker-compose.yml 端口映射和健康检查URL\n- 更新 Dockerfile EXPOSE 和 HEALTHCHECK 端口\n- 更新 .env.* 文件中的 APP_PORT\n- 更新 src/main.ts 默认端口\n- 更新所有脚本中的端口引用\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude \nEOF\n)\")", + "Bash(git add:*)", + "Bash(git commit:*)", + "Bash(git push:*)", + "Bash(dir:*)", + "Bash(git -C \"c:/Users/dong/Desktop/rwadurian/backend/services\" status --short)", + "Bash(git -C \"c:/Users/dong/Desktop/rwadurian/backend/services\" add deploy.sh)", + "Bash(git -C \"c:/Users/dong/Desktop/rwadurian/backend/services\" commit -m \"$(cat <<''EOF''\nfix(deploy): 修复 health 命令使用正确的健康检查端点\n\n- 为每个微服务配置实际的健康检查端点路径\n- 大多数服务使用 /api/v1/health\n- backup-service 和 reward-service 使用 /health\n- leaderboard-service 使用 /api/health\n- 新增 presence-service (端口 3011)\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude \nEOF\n)\")", + "Bash(git -C \"c:/Users/dong/Desktop/rwadurian/backend/services\" add presence-service/deploy.sh)", + "Bash(git -C \"c:/Users/dong/Desktop/rwadurian/backend/services\" commit -m \"$(cat <<''EOF''\nfeat(presence-service): 添加 init-db 命令创建数据库\n\n- 添加 init-db 命令自动创建 rwa_presence 数据库\n- 创建数据库后自动运行 prisma db push 创建表结构\n- 更新帮助文档\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude \nEOF\n)\")", + "Bash(git -C \"c:/Users/dong/Desktop/rwadurian/backend/services\" commit -m \"$(cat <<''EOF''\nfeat(deploy): 添加 presence-service 到主部署脚本\n\n- 在 init-databases.sh 中添加 rwa_presence 数据库\n- 在 migrate 函数中添加 presence-service\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude \nEOF\n)\")", + "Bash(git -C \"c:/Users/dong/Desktop/rwadurian/backend/services\" commit -m \"$(cat <<''EOF''\nfix(deploy): 添加 admin-service 数据库 rwa_admin\n\n- 在 init-databases.sh 中添加 rwa_admin 数据库\n- 在 migrate 函数中添加 admin-service\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude \nEOF\n)\")", + "Bash(git -C \"c:/Users/dong/Desktop/rwadurian/backend/services\" push)" ], "deny": [], "ask": [] diff --git a/backend/services/reporting-service/.env.development b/backend/services/reporting-service/.env.development new file mode 100644 index 00000000..63266a66 --- /dev/null +++ b/backend/services/reporting-service/.env.development @@ -0,0 +1,39 @@ +# 应用配置 +NODE_ENV=development +PORT=3008 +APP_NAME=reporting-service + +# 数据库 +DATABASE_URL="postgresql://postgres:postgres@localhost:5432/rwadurian_reporting?schema=public" + +# JWT (与 identity-service 共享密钥) +JWT_SECRET=your-super-secret-jwt-key-change-in-production +JWT_ACCESS_EXPIRES_IN=2h + +# Redis +REDIS_HOST=localhost +REDIS_PORT=6379 +REDIS_PASSWORD= + +# Kafka +KAFKA_BROKERS=localhost:9092 +KAFKA_GROUP_ID=reporting-service-group +KAFKA_CLIENT_ID=reporting-service + +# 外部服务 +IDENTITY_SERVICE_URL=http://localhost:3001 +PLANTING_SERVICE_URL=http://localhost:3003 +REFERRAL_SERVICE_URL=http://localhost:3004 +REWARD_SERVICE_URL=http://localhost:3005 +LEADERBOARD_SERVICE_URL=http://localhost:3007 +WALLET_SERVICE_URL=http://localhost:3002 + +# 文件存储 +FILE_STORAGE_PATH=./storage/reports +FILE_STORAGE_URL_PREFIX=http://localhost:3008/files + +# 报表缓存过期时间(秒) +REPORT_CACHE_TTL=3600 + +# 报表快照保留天数 +SNAPSHOT_RETENTION_DAYS=90 diff --git a/frontend/mobile-app/.claude/settings.local.json b/frontend/mobile-app/.claude/settings.local.json index 026da6db..ba4cc3eb 100644 --- a/frontend/mobile-app/.claude/settings.local.json +++ b/frontend/mobile-app/.claude/settings.local.json @@ -33,7 +33,33 @@ "Bash(node -e:*)", "Bash(wsl -e bash -c \"cd /mnt/c/Users/dong/Desktop/rwadurian/backend/services/identity-service && docker compose config --quiet && echo ''Docker Compose config is valid''\")", "Bash(ls:*)", - "Bash(find:*)" + "Bash(find:*)", + "Bash(wsl --list --verbose)", + "Bash(wsl -d Ubuntu -- bash -c \"echo ''WSL Ubuntu is running'' && cat /etc/os-release | head -3\")", + "Bash(wsl:*)", + "Bash(git push)", + "Bash(cat:*)", + "Bash(done)", + "Bash(timeout:*)", + "Bash(npm run build:*)", + "Bash(test:*)", + "Bash(npx prisma migrate dev:*)", + "Bash(DATABASE_URL=\"postgresql://user:pass@localhost:5432/db\" npx prisma migrate:*)", + "Bash(npm install:*)", + "Bash(npm run prisma:generate:*)", + "Bash(echo:*)", + "Bash(git checkout:*)", + "Bash(git reset:*)", + "Bash(docker exec:*)", + "Bash(docker build:*)", + "Bash(if [ -f nul ])", + "Bash(then rm nul)", + "Bash(else echo \"nul file not found\")", + "Bash(fi)", + "Bash(docker-compose:*)", + "Bash(c:/Android/platform-tools/adb.exe shell ping:*)", + "Bash(curl:*)", + "Bash(DATABASE_URL=\"postgresql://postgres:password@localhost:5432/rwa_identity?schema=public\" npx prisma migrate:*)" ], "deny": [], "ask": [] diff --git a/frontend/mobile-upgrade/.claude/settings.local.json b/frontend/mobile-upgrade/.claude/settings.local.json new file mode 100644 index 00000000..d5378c25 --- /dev/null +++ b/frontend/mobile-upgrade/.claude/settings.local.json @@ -0,0 +1,38 @@ +{ + "permissions": { + "allow": [ + "Bash(cat:*)", + "Bash(tree:*)", + "Bash(wsl -e bash -c \"cd /mnt/c/Users/dong/Desktop/rwadurian/frontend/mobile-upgrade && docker --version && docker compose version\")", + "Bash(wsl -e bash -c \"cd /mnt/c/Users/dong/Desktop/rwadurian/frontend/mobile-upgrade && docker compose build --no-cache 2>&1\")", + "Bash(wsl -e bash -c \"cd /mnt/c/Users/dong/Desktop/rwadurian/frontend/mobile-upgrade && docker compose up -d 2>&1\")", + "Bash(wsl -e bash -c \"docker ps --filter ''name=rwadurian-mobile-upgrade'' && sleep 3 && curl -s http://localhost:3020/api/health 2>&1\")", + "Bash(wsl -e bash -c \"curl -s -o /dev/null -w ''%{http_code}'' http://localhost:3020/ && echo '' - Main page OK''\")", + "Bash(wsl -e bash -c:*)", + "Bash(git add:*)", + "Bash(git commit -m \"$(cat <<''EOF''\nfeat(mobile-upgrade): 添加 Docker 和 Nginx 自动化部署配置\n\n- 添加 Dockerfile 多阶段构建配置\n- 添加 docker-compose.yml 容器编排\n- 添加 nginx 配置(域名: update.szaiai.com)\n- 添加 scripts 运维脚本(deploy/build/start/stop/restart/logs/status/clean/health)\n- 添加健康检查 API 端点 /api/health\n- 添加 .env.production 生产环境配置\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude \nEOF\n)\")", + "Bash(git push:*)", + "Bash(git commit -m \"$(cat <<''EOF''\nfix(mobile-upgrade): 修复 API URL 路径重复问题\n\n移除 NEXT_PUBLIC_API_URL 末尾的 /api,避免请求路径变成 /api/api/v1/...\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude \nEOF\n)\")", + "Bash(nslookup:*)", + "Bash(curl:*)", + "Bash(git commit:*)", + "Bash(find:*)", + "Bash(dir:*)", + "Bash(backend/services/admin-service/docker-compose.yml )", + "Bash(backend/services/admin-service/src/api/controllers/version.controller.ts )", + "Bash(backend/services/admin-service/src/api/controllers/download.controller.ts )", + "Bash(backend/services/admin-service/src/app.module.ts )", + "Bash(backend/services/admin-service/src/infrastructure/storage/file-storage.service.ts )", + "Bash(frontend/mobile-app/lib/core/updater/download_manager.dart )", + "Bash(frontend/mobile-app/scripts/ )", + "Bash(frontend/mobile-upgrade/src/domain/entities/version.ts )", + "Bash(frontend/mobile-upgrade/src/domain/repositories/version-repository.ts )", + "Bash(frontend/mobile-upgrade/src/infrastructure/repositories/version-repository-impl.ts )", + "Bash(frontend/mobile-upgrade/src/presentation/components/upload-modal.tsx)", + "Bash(findstr:*)", + "Bash(git pull:*)" + ], + "deny": [], + "ask": [] + } +}