From 1ac6b849b15267626aec3ee574014d0bb65458ed Mon Sep 17 00:00:00 2001 From: yml Date: Thu, 21 May 2026 16:47:31 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8E=E7=AB=AF=E8=BF=81=E7=A7=BB=E5=90=8E?= =?UTF-8?q?=E5=8F=B0=E7=AE=A1=E7=90=86=E5=9F=BA=E7=A1=80=E6=9C=8D=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...admin-audit-service.js => admin-audit-service.ts} | 6 ++++-- ...shboard-service.js => admin-dashboard-service.ts} | 6 +++--- ...-service.js => admin-message-delivery-service.ts} | 11 +++++------ .../{admin-query-utils.js => admin-query-utils.ts} | 10 ++++++---- ...admin-write-service.js => admin-write-service.ts} | 0 docs/backend-typescript-migration-plan.md | 12 ++++++++++++ 6 files changed, 30 insertions(+), 15 deletions(-) rename apps/backend/src/services/admin/{admin-audit-service.js => admin-audit-service.ts} (88%) rename apps/backend/src/services/admin/{admin-dashboard-service.js => admin-dashboard-service.ts} (95%) rename apps/backend/src/services/admin/{admin-message-delivery-service.js => admin-message-delivery-service.ts} (84%) rename apps/backend/src/services/admin/{admin-query-utils.js => admin-query-utils.ts} (70%) rename apps/backend/src/services/admin/{admin-write-service.js => admin-write-service.ts} (100%) diff --git a/apps/backend/src/services/admin/admin-audit-service.js b/apps/backend/src/services/admin/admin-audit-service.ts similarity index 88% rename from apps/backend/src/services/admin/admin-audit-service.js rename to apps/backend/src/services/admin/admin-audit-service.ts index 3ed2a660..4010838c 100644 --- a/apps/backend/src/services/admin/admin-audit-service.js +++ b/apps/backend/src/services/admin/admin-audit-service.ts @@ -2,7 +2,9 @@ import { createAdminAuditLog, listAdminAuditLogs } from '../../repositories/admi import { nowIso } from '../../utils/time.js' import { normalizeDateQuery, normalizePage, normalizePageSize, safeParseJson } from './admin-query-utils.js' -export async function writeAdminAuditLog(session, payload = {}) { +type JsonObject = Record + +export async function writeAdminAuditLog(session: JsonObject | null | undefined, payload: JsonObject = {}) { if (!session?.userId) { return null } @@ -19,7 +21,7 @@ export async function writeAdminAuditLog(session, payload = {}) { }) } -export async function getAdminAuditLogs(query = {}) { +export async function getAdminAuditLogs(query: JsonObject = {}) { const page = normalizePage(query.page) const pageSize = normalizePageSize(query.pageSize) const { items, total } = await listAdminAuditLogs({ diff --git a/apps/backend/src/services/admin/admin-dashboard-service.js b/apps/backend/src/services/admin/admin-dashboard-service.ts similarity index 95% rename from apps/backend/src/services/admin/admin-dashboard-service.js rename to apps/backend/src/services/admin/admin-dashboard-service.ts index 34037b04..79dc6dc4 100644 --- a/apps/backend/src/services/admin/admin-dashboard-service.js +++ b/apps/backend/src/services/admin/admin-dashboard-service.ts @@ -1,8 +1,8 @@ -// @ts-check - import { query } from '../../db/client.js' import { nowIso } from '../../utils/time.js' +type JsonObject = Record + export async function getAdminDashboardSummary() { const todayPrefix = nowIso().slice(0, 10) const result = await query( @@ -39,7 +39,7 @@ export async function getAdminDashboardSummary() { `, [todayPrefix], ) - const summary = result.rows[0] || {} + const summary: JsonObject = result.rows[0] || {} return { todayOrders: Number(summary?.today_orders || 0), diff --git a/apps/backend/src/services/admin/admin-message-delivery-service.js b/apps/backend/src/services/admin/admin-message-delivery-service.ts similarity index 84% rename from apps/backend/src/services/admin/admin-message-delivery-service.js rename to apps/backend/src/services/admin/admin-message-delivery-service.ts index eccdca2a..09013950 100644 --- a/apps/backend/src/services/admin/admin-message-delivery-service.js +++ b/apps/backend/src/services/admin/admin-message-delivery-service.ts @@ -1,12 +1,11 @@ -// @ts-check - import { listMessageDeliveries } from '../../repositories/message-delivery-repo.js' import { normalizeDateQuery, normalizePage, normalizePageSize, safeParseJson } from './admin-query-utils.js' -/** @typedef {import('../../types/admin-read-inputs.js').AdminMessageDeliveryListQueryInput} AdminMessageDeliveryListQueryInput */ +import type { AdminMessageDeliveryListQueryInput } from '../../types/admin-read-inputs.js' -/** @param {AdminMessageDeliveryListQueryInput} [query] */ -export async function getAdminMessageDeliveries(query = /** @type {AdminMessageDeliveryListQueryInput} */ ({})) { +type JsonObject = Record + +export async function getAdminMessageDeliveries(query: AdminMessageDeliveryListQueryInput = {}) { const page = normalizePage(query.page) const pageSize = normalizePageSize(query.pageSize) const { items, total } = await listMessageDeliveries({ @@ -28,7 +27,7 @@ export async function getAdminMessageDeliveries(query = /** @type {AdminMessageD } } -function mapAdminMessageDeliveryListItem(item) { +function mapAdminMessageDeliveryListItem(item: JsonObject) { return { deliveryId: Number(item.id), provider: String(item.provider || '').trim(), diff --git a/apps/backend/src/services/admin/admin-query-utils.js b/apps/backend/src/services/admin/admin-query-utils.ts similarity index 70% rename from apps/backend/src/services/admin/admin-query-utils.js rename to apps/backend/src/services/admin/admin-query-utils.ts index a67a47d6..967f515b 100644 --- a/apps/backend/src/services/admin/admin-query-utils.js +++ b/apps/backend/src/services/admin/admin-query-utils.ts @@ -1,9 +1,11 @@ -export function normalizePage(rawValue) { +type JsonObject = Record + +export function normalizePage(rawValue: unknown) { const parsed = Number(rawValue) return Number.isFinite(parsed) && parsed > 0 ? Math.floor(parsed) : 1 } -export function normalizePageSize(rawValue) { +export function normalizePageSize(rawValue: unknown) { const parsed = Number(rawValue) if (!Number.isFinite(parsed) || parsed <= 0) { return 20 @@ -11,7 +13,7 @@ export function normalizePageSize(rawValue) { return Math.min(100, Math.floor(parsed)) } -export function normalizeDateQuery(rawValue, endOfDay = false) { +export function normalizeDateQuery(rawValue: unknown, endOfDay = false) { const normalized = String(rawValue || '').trim() if (!normalized) { @@ -25,7 +27,7 @@ export function normalizeDateQuery(rawValue, endOfDay = false) { return normalized } -export function safeParseJson(rawText) { +export function safeParseJson(rawText: unknown): JsonObject { if (rawText && typeof rawText === 'object') { return rawText } diff --git a/apps/backend/src/services/admin/admin-write-service.js b/apps/backend/src/services/admin/admin-write-service.ts similarity index 100% rename from apps/backend/src/services/admin/admin-write-service.js rename to apps/backend/src/services/admin/admin-write-service.ts diff --git a/docs/backend-typescript-migration-plan.md b/docs/backend-typescript-migration-plan.md index c6d14b45..e41b4c23 100644 --- a/docs/backend-typescript-migration-plan.md +++ b/docs/backend-typescript-migration-plan.md @@ -703,6 +703,18 @@ - `npm run typecheck` - `npm run build` - `npm test` 共 139 个用例通过 +174. 后台 Admin 查询 / 审计 / 仪表盘 / 消息投递 / 写入口迁移到 `.ts`: + - `src/services/admin/admin-query-utils.ts` + - `src/services/admin/admin-audit-service.ts` + - `src/services/admin/admin-dashboard-service.ts` + - `src/services/admin/admin-message-delivery-service.ts` + - `src/services/admin/admin-write-service.ts` +175. Admin 分页与日期查询归一化、审计日志写入 / 查询、仪表盘汇总、消息投递列表、后台写操作聚合入口已进入 TS 编译链路;query、session、payload、映射 row 补齐动态对象类型 +176. Docker 内验证通过: + - `src/services/admin/*.test.js` 共 8 个用例通过 + - `npm run typecheck` + - `npm run build` + - `npm test` 共 139 个用例通过 ## 下一步建议