# WhaleTown End V2

WhaleTown V2 后端是基于 NestJS 的多人小镇服务，包含 REST API、WebSocket 实时通信和 React 管理端。

## 功能

- 账号注册、登录、令牌刷新、密码找回与资料管理。
- 世界聊天、私聊、玩家位置与外观实时同步。
- 商城、钱包、背包、房间家具和排行榜。
- 咖啡店陪伴助手、课程资源与 Zulip 集成。
- 管理员登录、用户管理、操作日志和数据管理。
- 可选的服务端角色皮肤生成流程。

## 要求

- Node.js 20+
- pnpm 9+
- MySQL 和 Redis（生产环境）
- Python 3（启用皮肤生成时）

## 运行

```bash
pnpm install --frozen-lockfile
cp .env.example .env
pnpm run build
pnpm run start:prod
```

启动前至少需要在 `.env` 中设置随机的 `JWT_SECRET`、`ADMIN_TOKEN_SECRET` 和 `ZULIP_API_KEY_ENCRYPTION_KEY`。生产环境请从 `.env.production.example` 开始配置，不要直接使用示例值。

REST API 默认监听 `3000` 端口，原生 WebSocket 默认监听 `3001` 端口并使用 `/game` 路径，Swagger 地址为 `/api-docs`。生产环境的反向代理需要分别转发这两个端口。

## 管理端

```bash
pnpm --filter whale-town-admin run build
```

管理端的 API 地址通过 `client/.env.local` 中的 `VITE_API_BASE_URL` 配置。

## 安全

仓库不包含 `.env`、访问令牌、SSH 私钥、数据库文件、Redis 数据、日志或生成资产。敏感配置必须通过部署环境注入。
