From d1c933f032768c2718b02bdde7c62e2f1cef95e6 Mon Sep 17 00:00:00 2001 From: wangziqi Date: Wed, 5 Aug 2026 21:14:17 +0800 Subject: [PATCH] =?UTF-8?q?refactor(server):=20=E6=B8=85=E7=90=86=E6=97=A0?= =?UTF-8?q?=E7=94=A8=E5=AF=BC=E5=85=A5=E4=B8=8E=E7=B1=BB=E5=9E=8B=E8=BD=AC?= =?UTF-8?q?=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除测试/控制器中未使用的导入与实例 - bills/classroom-rentals 改用 ESM 导入替代 require - bills.service 去掉多余断言、backfill 显式转字符串、main.ts void bootstrap --- apps/server/src/ai-chat/ai-chat.controller.ts | 4 ++-- apps/server/src/ai-chat/ai-review.service.spec.ts | 12 ------------ .../src/attendance/attendance.controller.spec.ts | 14 -------------- apps/server/src/bills/bills-export.service.ts | 2 +- apps/server/src/bills/bills.service.ts | 2 +- .../classroom-rentals/classroom-rentals.service.ts | 3 ++- .../src/database/database-migrations.backfill.ts | 2 +- apps/server/src/main.ts | 2 +- 8 files changed, 8 insertions(+), 33 deletions(-) diff --git a/apps/server/src/ai-chat/ai-chat.controller.ts b/apps/server/src/ai-chat/ai-chat.controller.ts index 7f041ed..49339f9 100644 --- a/apps/server/src/ai-chat/ai-chat.controller.ts +++ b/apps/server/src/ai-chat/ai-chat.controller.ts @@ -24,7 +24,7 @@ import type { AuthenticatedUser } from '../authorization'; import { AiAttachmentService } from './ai-attachment.service'; import { AiChatService } from './ai-chat.service'; import type { AiSseEventName } from './ai-chat.types'; -import type { AiReviewSection, AiReviewSectionType } from './entities'; +import type { AiReviewSectionType } from './entities'; import { CreateConversationDto, EditMessageDto, @@ -248,7 +248,7 @@ export class AiChatController { data: await this.service.confirmReviewStep( req.user, reviewId, - sectionKey as AiReviewSection['key'], + sectionKey, ), }; } diff --git a/apps/server/src/ai-chat/ai-review.service.spec.ts b/apps/server/src/ai-chat/ai-review.service.spec.ts index 1ce6b94..a783d44 100644 --- a/apps/server/src/ai-chat/ai-review.service.spec.ts +++ b/apps/server/src/ai-chat/ai-review.service.spec.ts @@ -1,15 +1,4 @@ import { BadRequestException, NotFoundException } from '@nestjs/common'; -import { DataSource } from 'typeorm'; -import * as allEntities from '../entities'; -import { Bed } from '../entities/bed.entity'; -import { Occupancy } from '../entities/occupancy.entity'; -import { Organization } from '../entities/organization.entity'; -import { Room } from '../entities/room.entity'; -import { Student } from '../entities/student.entity'; -import { AiConversation } from './entities/ai-conversation.entity'; -import { AiMessage } from './entities/ai-message.entity'; -import { AiReview } from './entities/ai-review.entity'; -import { User } from '../entities/user.entity'; import { AiReviewService } from './ai-review.service'; import type { ExcelSheetRows } from './ai-excel-reader.service'; @@ -636,4 +625,3 @@ describe('AiReviewService', () => { }); }); }); - diff --git a/apps/server/src/attendance/attendance.controller.spec.ts b/apps/server/src/attendance/attendance.controller.spec.ts index 7718998..e5f17cf 100644 --- a/apps/server/src/attendance/attendance.controller.spec.ts +++ b/apps/server/src/attendance/attendance.controller.spec.ts @@ -23,24 +23,10 @@ describe('AttendanceRecordsController — DingTalk import scope', () => { can: jest.fn().mockReturnValue(false), }; - let controller: AttendanceController; - let recordsController: AttendanceRecordsController; let importController: AttendanceImportController; beforeEach(() => { jest.clearAllMocks(); - controller = new AttendanceController( - attendanceService as unknown as AttendanceService, - importService as unknown as AttendanceImportService, - logService as unknown as OperationLogsService, - authzService as never, - ); - recordsController = new AttendanceRecordsController( - attendanceService as unknown as AttendanceService, - importService as unknown as AttendanceImportService, - logService as unknown as OperationLogsService, - authzService as never, - ); importController = new AttendanceImportController( attendanceService as unknown as AttendanceService, importService as unknown as AttendanceImportService, diff --git a/apps/server/src/bills/bills-export.service.ts b/apps/server/src/bills/bills-export.service.ts index 9d1690a..3f94ac3 100644 --- a/apps/server/src/bills/bills-export.service.ts +++ b/apps/server/src/bills/bills-export.service.ts @@ -7,6 +7,7 @@ import { Deposit } from '../entities/deposit.entity'; import * as ExcelJS from 'exceljs'; import * as PDFDocument from 'pdfkit'; import { Response } from 'express'; +import fs from 'fs'; @Injectable() export class BillsExportService { @@ -149,7 +150,6 @@ export class BillsExportService { '/usr/share/fonts/truetype/wqy/wqy-microhei.ttc', ]; let fontRegistered = false; - const fs = require('fs'); for (const fp of fontPaths) { try { if (fs.existsSync(fp)) { diff --git a/apps/server/src/bills/bills.service.ts b/apps/server/src/bills/bills.service.ts index 57209aa..595be78 100644 --- a/apps/server/src/bills/bills.service.ts +++ b/apps/server/src/bills/bills.service.ts @@ -45,7 +45,7 @@ export class BillsService { */ async generateBills(dto: GenerateBillsDto) { const { operationId, ...request } = dto; - const work = () => this.generation.generateBillsOnce(request as GenerateBillsDto); + const work = () => this.generation.generateBillsOnce(request); return this.financialOperations ? this.financialOperations.run(operationId, 'bill.generate', work) : work(); diff --git a/apps/server/src/classroom-rentals/classroom-rentals.service.ts b/apps/server/src/classroom-rentals/classroom-rentals.service.ts index 94e8d0b..2e48720 100644 --- a/apps/server/src/classroom-rentals/classroom-rentals.service.ts +++ b/apps/server/src/classroom-rentals/classroom-rentals.service.ts @@ -17,6 +17,7 @@ import { RentalScheduleService } from './rental-schedule.service'; import * as path from 'path'; import * as fs from 'fs'; +import { randomBytes } from 'crypto'; // 预设色板(与 organizations.service 保持一致,作为颜色兜底) function rentalConflictError( @@ -347,7 +348,7 @@ export class ClassroomRentalsService { const ext = path.extname(file.originalname).toLowerCase(); if (ext !== '.pdf') throw new BadRequestException('文件扩展名必须为 .pdf'); // UUID 文件名 - const uuid = require('crypto').randomBytes(16).toString('hex'); + const uuid = randomBytes(16).toString('hex'); const filename = `${uuid}.pdf`; const fullPath = path.join(this.uploadDir, filename); // 路径遍历防护 diff --git a/apps/server/src/database/database-migrations.backfill.ts b/apps/server/src/database/database-migrations.backfill.ts index b48f606..2444b36 100644 --- a/apps/server/src/database/database-migrations.backfill.ts +++ b/apps/server/src/database/database-migrations.backfill.ts @@ -53,7 +53,7 @@ export async function backfillOrganizations( VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)`, [ uuidV7(), - `ORG_${legacy.id}`, + `ORG_${String(legacy.id)}`, name, 0, legacy.contact || null, diff --git a/apps/server/src/main.ts b/apps/server/src/main.ts index 1f58ab6..1431280 100644 --- a/apps/server/src/main.ts +++ b/apps/server/src/main.ts @@ -15,4 +15,4 @@ async function bootstrap() { await app.listen(process.env.PORT ?? 3000); } -bootstrap(); +void bootstrap();