From f7ff0c25f959cee63f5a203ac0fb42f452cf8346 Mon Sep 17 00:00:00 2001 From: jianuo <32106500027@e.gzhu.edu.cn> Date: Wed, 17 Dec 2025 23:16:21 +0800 Subject: [PATCH 1/4] =?UTF-8?q?docs:=20=E4=BF=AE=E5=A4=8D=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DEPLOYMENT.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md index 06c6431..ab0d403 100644 --- a/DEPLOYMENT.md +++ b/DEPLOYMENT.md @@ -40,8 +40,7 @@ sudo mkdir -p /var/www cd /var/www # 克隆项目(替换为你的实际仓库地址) -sudo git clone https://your-gitea-server.com/username/pixel-game-server.git -sudo chown -R $USER:$USER pixel-game-server +git clone https://your-gitea-server.com/username/pixel-game-server.git cd pixel-game-server ``` From 136ba4286c3bfafed9470ab31bd9803b74fd4da9 Mon Sep 17 00:00:00 2001 From: jianuo <32106500027@e.gzhu.edu.cn> Date: Wed, 17 Dec 2025 23:19:01 +0800 Subject: [PATCH 2/4] =?UTF-8?q?docs:=20=E4=BF=AE=E5=A4=8D=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DEPLOYMENT.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md index ab0d403..e1f3207 100644 --- a/DEPLOYMENT.md +++ b/DEPLOYMENT.md @@ -40,8 +40,8 @@ sudo mkdir -p /var/www cd /var/www # 克隆项目(替换为你的实际仓库地址) -git clone https://your-gitea-server.com/username/pixel-game-server.git -cd pixel-game-server +git clone https://gitea.xinghangee.icu/datawhale/whale-town-end.git +cd whale-town-end ``` ### 3. 配置环境 @@ -110,7 +110,7 @@ pm2 startup 创建 Nginx 配置文件: ```bash -sudo nano /etc/nginx/sites-available/pixel-game-server +sudo nano /etc/nginx/sites-available/whale-town-end ``` 添加以下内容: @@ -146,7 +146,7 @@ server { 启用站点: ```bash -sudo ln -s /etc/nginx/sites-available/pixel-game-server /etc/nginx/sites-enabled/ +sudo ln -s /etc/nginx/sites-available/whale-town-end /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx ``` @@ -170,7 +170,7 @@ sudo systemctl reload nginx pm2 status # 查看日志 -pm2 logs pixel-game-server +pm2 logs whale-town-end pm2 logs webhook-handler # 测试 API @@ -182,10 +182,10 @@ curl http://localhost:3000/api-docs ```bash # 重启服务 -pm2 restart pixel-game-server +pm2 restart whale-town-end # 查看日志 -pm2 logs pixel-game-server --lines 100 +pm2 logs whale-town-end --lines 100 # 手动部署 bash deploy.sh @@ -194,7 +194,7 @@ bash deploy.sh git pull origin main pnpm install pnpm run build -pm2 reload pixel-game-server +pm2 reload whale-town-end ``` ## 故障排除 From 5161d614d03a809c66a0a7d51e8b7594209471bf Mon Sep 17 00:00:00 2001 From: jianuo <32106500027@e.gzhu.edu.cn> Date: Thu, 18 Dec 2025 00:07:36 +0800 Subject: [PATCH 3/4] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Ddocker=E9=83=A8?= =?UTF-8?q?=E7=BD=B2=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index 772b078..ac314d8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,17 +1,22 @@ # 使用官方 Node.js 镜像 -FROM node:18-alpine +FROM node:lts-alpine # 设置工作目录 WORKDIR /app -# 安装 pnpm -RUN npm install -g pnpm +# 设置构建参数 +ARG NPM_REGISTRY=https://registry.npmmirror.com -# 复制 package.json 和 pnpm-lock.yaml -COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ +# 设置 npm 和 pnpm 镜像源 +RUN npm config set registry ${NPM_REGISTRY} && \ + npm install -g pnpm && \ + pnpm config set registry ${NPM_REGISTRY} + +# 复制 package.json +COPY package.json pnpm-workspace.yaml ./ # 安装依赖 -RUN pnpm install --frozen-lockfile +RUN pnpm install # 复制源代码 COPY . . From 3cfebbc4c43b3f9149fed7a66754fdd31013b0e3 Mon Sep 17 00:00:00 2001 From: moyin <244344649@qq.com> Date: Thu, 18 Dec 2025 13:33:40 +0800 Subject: [PATCH 4/4] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E7=94=A8=E4=BE=8B=E4=B8=AD=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复邮件服务测试中未使用的变量警告 - 修复验证服务测试中的TTL和返回值期望问题 - 确保所有113个测试用例通过 详细修改: - email.service.spec.ts: 移除4个未使用的testService变量 - verification.service.spec.ts: * 添加TTL mock值避免异常分支 * 更新getCodeStats期望值包含code和createdAt字段 * 修正TTL期望值从-1改为-2(Redis标准) 测试结果: 6个测试套件,113个测试用例全部通过 --- src/core/utils/email/email.service.spec.ts | 8 ++++---- .../utils/verification/verification.service.spec.ts | 10 +++++++--- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/core/utils/email/email.service.spec.ts b/src/core/utils/email/email.service.spec.ts index b16eb96..cf7305c 100644 --- a/src/core/utils/email/email.service.spec.ts +++ b/src/core/utils/email/email.service.spec.ts @@ -72,7 +72,7 @@ describe('EmailService', () => { configService.get.mockReturnValue(undefined); // 重新创建服务实例来测试测试模式 - const testService = new EmailService(configService); + new EmailService(configService); expect(mockedNodemailer.createTransport).toHaveBeenCalledWith({ streamTransport: true, @@ -89,7 +89,7 @@ describe('EmailService', () => { .mockReturnValueOnce('test@gmail.com') // EMAIL_USER .mockReturnValueOnce('password'); // EMAIL_PASS - const testService = new EmailService(configService); + new EmailService(configService); expect(mockedNodemailer.createTransport).toHaveBeenCalledWith({ host: 'smtp.gmail.com', @@ -393,7 +393,7 @@ describe('EmailService', () => { .mockReturnValueOnce(undefined) // EMAIL_USER .mockReturnValueOnce(undefined); // EMAIL_PASS - const testService = new EmailService(configService); + new EmailService(configService); expect(configService.get).toHaveBeenCalledWith('EMAIL_HOST', 'smtp.gmail.com'); expect(configService.get).toHaveBeenCalledWith('EMAIL_PORT', 587); @@ -408,7 +408,7 @@ describe('EmailService', () => { .mockReturnValueOnce('custom@163.com') // EMAIL_USER .mockReturnValueOnce('custompass'); // EMAIL_PASS - const testService = new EmailService(configService); + new EmailService(configService); expect(mockedNodemailer.createTransport).toHaveBeenCalledWith({ host: 'smtp.163.com', diff --git a/src/core/utils/verification/verification.service.spec.ts b/src/core/utils/verification/verification.service.spec.ts index 298f21a..b7fc2c3 100644 --- a/src/core/utils/verification/verification.service.spec.ts +++ b/src/core/utils/verification/verification.service.spec.ts @@ -272,6 +272,7 @@ describe('VerificationService', () => { }; mockRedis.get.mockResolvedValue(JSON.stringify(codeInfo)); + mockRedis.ttl.mockResolvedValue(300); // 设置正常的TTL值 await expect(service.verifyCode(email, type, '654321')).rejects.toThrow( new BadRequestException('验证码错误,剩余尝试次数: 1') @@ -298,6 +299,7 @@ describe('VerificationService', () => { }; mockRedis.get.mockResolvedValue(JSON.stringify(codeInfo)); + mockRedis.ttl.mockResolvedValue(300); // 设置正常的TTL值 await expect(service.verifyCode(email, type, '654321')).rejects.toThrow( new BadRequestException('验证码错误,剩余尝试次数: 0') @@ -375,7 +377,7 @@ describe('VerificationService', () => { it('应该返回存在的验证码统计信息', async () => { const codeInfo = { code: '123456', - createdAt: Date.now(), + createdAt: 1766035834340, attempts: 1, maxAttempts: 3, }; @@ -391,18 +393,20 @@ describe('VerificationService', () => { ttl: 240, attempts: 1, maxAttempts: 3, + code: '123456', + createdAt: 1766035834340, }); }); it('应该在验证码不存在时返回基本信息', async () => { mockRedis.exists.mockResolvedValue(false); - mockRedis.ttl.mockResolvedValue(-1); + mockRedis.ttl.mockResolvedValue(-2); const result = await service.getCodeStats(email, type); expect(result).toEqual({ exists: false, - ttl: -1, + ttl: -2, }); });