# CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

### 开发环境说明
- 多八多云端开发容器环境
- Node.js 20.19.2
- MySQL 8 (默认数据库: d8dai)
- Redis 7
- MinIO(默认存储桶: d8dai)
- 所有服务使用默认参数连接，正式环境参数相同
- 默认开放8080端口供外网访问

## Development Commands

**Build and Run:**
- `pnpm run dev` - Start development server on port 8080
- `pnpm run build` - Build both client and server
- `pnpm run build:client` - Build client only
- `pnpm run build:server` - Build server only
- `pnpm start` - Start production server

**Database:**
- MySQL database runs on localhost:3306 (default credentials: root/empty)
- Redis runs on localhost:6379
- MinIO runs on localhost:9000/9001 (credentials: minioadmin/minioadmin)
- Use `docker-compose up` to start all services

## Architecture Overview

**Frontend (src/client/):**
- React 19 + TypeScript + Vite
- Two main sections: `admin/` and `home/`
- Uses Radix UI components and Tailwind CSS
- React Router for navigation
- React Hook Form for forms
- TanStack Query for API calls

**Backend (src/server/):**
- Hono.js framework with OpenAPI support
- TypeORM with MySQL database
- Modular structure under `src/server/modules/`
- JWT authentication
- File storage with MinIO integration

**Key Modules:**
- `users/` - User management and authentication
- `files/` - File upload/download functionality
- `payments/` - Payment processing
- `membership/` - Membership plans
- `templates/` - Document templates
- `documents/` - Document processing (Word merge feature)

**API Structure:**
- OpenAPI documentation available at `/doc`
- API routes defined in `src/server/api/`
- Client API calls in `src/client/api.ts`

## Development Patterns

**Form Validation:**
- Frontend uses React Hook Form with Zod validation
- Backend uses Zod with `z.coerce` for type conversion
- Always use `dayjs` objects instead of native Date objects

**Database:**
- TypeORM entities with decorators
- Migrations in `src/server/migrations/`
- Environment variables for database configuration

**File Handling:**
- MinIO integration for file storage
- File upload/download utilities
- Document processing with docxtemplater and mammoth

## Common Issues & Solutions

1. **Date validation errors**: Use `dayjs()` instead of `new Date()`
2. **OpenAPI path parameters**: Use `{id}` format instead of `:id`
3. **Type coercion**: Use `z.coerce.number()` and `z.coerce.boolean()` for URL params
4. **Form validation mismatches**: Ensure frontend and backend validation rules match

## Environment Setup

Required environment variables:
- `DB_HOST`, `DB_PORT`, `DB_USERNAME`, `DB_PASSWORD`, `DB_DATABASE`
- Database defaults to localhost:3306 with root/empty credentials
- MinIO defaults to localhost:9000 with minioadmin/minioadmin

## Roo Framework

The project uses Roo framework for code generation and validation:
- Commands in `.roo/commands/`
- API-client validation rules
- Entity-field mapping checks

## Project Standards & Rules
- @.roo/rules/01-general.md - 通用开发规范
- @.roo/rules/02-typescript.md - TypeScript规范
- @.roo/rules/03-modules.md - 模块化规范
- @.roo/rules/04-api.md - API开发规范
- @.roo/rules/05-database.md - 数据库规范
- @.roo/rules/06-service-di.md - 服务与依赖注入规范
- @.roo/rules/07-openapi.md - OpenAPI规范
- @.roo/rules/08-rpc.md - RPC调用规范
- @.roo/rules/09-logging.md - 日志规范
- @.roo/rules/10-entity.md - 实体定义规范
- @.roo/rules/11-admin-frontend.md - 管理前端规范
- @.roo/rules/11-custom-crud.md - 自定义CRUD规范
- @.roo/rules/11-entity-creation.md - 实体创建规范
- @.roo/rules/11-home-frontend.md - 首页前端规范
- @.roo/rules/11-standard-crud.md - 标准CRUD规范
- @.roo/rules/12-generic-crud.md - 通用CRUD规范
- @.roo/rules/14-crud-filtering.md - CRUD筛选规范
- @.roo/rules/15-user-tracking.md - 用户追踪规范

## Development Notes
- Uses pnpm as package manager
- Vite for both dev server and production builds
- SSR (Server-Side Rendering) setup with Hono.js
- Environment variables via `.env` file
- Port 8080 for development and production

## Claude Code
- use pnpm
- 数据库在同一容器组的另一个容器中，需要运行 mysql -h 127.0.0.1 -U root 来访问
- vitest中，只有console.debug会显示，其他的都屏蔽了
- vitest中，用import 来配合 vi.mocked，而不是require
- e2e测试平常只运行 pnpm test:e2e:chromium 就行
- e2e测试失败时先查看页面结构 test-results/**/error-context.md
- 前端是 hono/client  hc  rpc 的，不是直接fetch
- bmad-core dir is in .bmad-core
- 必须用中文回答
