diff --git a/apps/backend/src/services/worker-platform/admin-service.ts b/apps/backend/src/services/worker-platform/admin-service.ts index 90be03c3..e6ab4133 100644 --- a/apps/backend/src/services/worker-platform/admin-service.ts +++ b/apps/backend/src/services/worker-platform/admin-service.ts @@ -24,8 +24,6 @@ import { resolveProblemWorkOrder, reopenCancelledWorkOrder, listAdminWorkerCancelRequests as listWorkerCancelRequestsForAdmin, - listAdminWorkerOrderFeedbacks as listWorkerOrderFeedbacksForAdmin, - resolveWorkerOrderFeedback, reviewWorkerCancelRequest, updateWorkOrder, updateWorkOrderBasic, @@ -59,7 +57,6 @@ import { mapWorkOrderAdmin, mapWorkOrderShare, mapWorkerCancelRequest, - mapWorkerOrderFeedback, normalizeAmountFen, normalizeBoolean, normalizeInteger, @@ -233,65 +230,10 @@ export async function listAdminWorkerCancelRequests(query: JsonObject = {}) { } } -export async function listAdminWorkerOrderFeedbacks(query: JsonObject = {}) { - const status = String(query.status || 'pending').trim() - const normalizedStatus = ['pending', 'resolved'].includes(status) ? status : 'pending' - return { - items: (await listWorkerOrderFeedbacksForAdmin(normalizedStatus)).map(mapWorkerOrderFeedback), - } -} - -export async function resolveAdminWorkerOrderFeedback( - feedbackId: number | string, - payload: JsonObject = {}, - actorName = '', -) { - const reply = String(payload.reply || '').trim() - if (!reply) { - throw createHttpError('请填写处理回复', { - statusCode: 400, - errorCode: 'worker_order_feedback_reply_required', - }) - } - const result = await resolveWorkerOrderFeedback({ - feedbackId: Number(feedbackId), - reply, - actorName, - now: nowIso(), - }) - if (result.failureReason === 'not_found') { - throw createHttpError('问题反馈不存在', { - statusCode: 404, - errorCode: 'worker_order_feedback_not_found', - }) - } - if (result.failureReason === 'not_pending') { - throw createHttpError('该问题反馈已处理,请刷新后重试', { - statusCode: 409, - errorCode: 'worker_order_feedback_not_pending', - }) - } - if (!result.feedback || !result.order) { - throw createHttpError('问题反馈处理失败', { - statusCode: 409, - errorCode: 'worker_order_feedback_resolve_failed', - }) - } - await resolveAdminNotificationEntity( - 'worker_order_feedback', - Number(result.feedback.id), - 'resolved', - ) - const workerId = Number(result.feedback.worker_id) - publishWorkOrderRealtimeChange({ - workOrderId: Number(result.order.id), - workerIds: workerId > 0 ? [workerId] : [], - }) - return { - feedback: mapWorkerOrderFeedback(result.feedback), - order: mapWorkOrderAdmin(result.order), - } -} +export { + listAdminWorkerOrderFeedbacks, + resolveAdminWorkerOrderFeedback, +} from './admin-worker-feedback-service.js' export async function reviewAdminWorkerCancelRequest( requestId: number | string, diff --git a/apps/backend/src/services/worker-platform/admin-worker-feedback-service.ts b/apps/backend/src/services/worker-platform/admin-worker-feedback-service.ts new file mode 100644 index 00000000..c180192f --- /dev/null +++ b/apps/backend/src/services/worker-platform/admin-worker-feedback-service.ts @@ -0,0 +1,70 @@ +import { + listAdminWorkerOrderFeedbacks as listWorkerOrderFeedbacksForAdmin, + resolveWorkerOrderFeedback, +} from '../../repositories/worker-platform/index.js' +import type { JsonObject } from '../../types/json.js' +import { createHttpError } from '../../utils/http.js' +import { nowIso } from '../../utils/time.js' +import { resolveAdminNotificationEntity } from '../admin/admin-notification-service.js' +import { publishWorkOrderRealtimeChange } from '../realtime/realtime-event-service.js' +import { mapWorkOrderAdmin, mapWorkerOrderFeedback } from './mappers.js' + +export async function listAdminWorkerOrderFeedbacks(query: JsonObject = {}) { + const status = String(query.status || 'pending').trim() + const normalizedStatus = ['pending', 'resolved'].includes(status) ? status : 'pending' + return { + items: (await listWorkerOrderFeedbacksForAdmin(normalizedStatus)).map(mapWorkerOrderFeedback), + } +} + +export async function resolveAdminWorkerOrderFeedback( + feedbackId: number | string, + payload: JsonObject = {}, + actorName = '', +) { + const reply = String(payload.reply || '').trim() + if (!reply) { + throw createHttpError('请填写处理回复', { + statusCode: 400, + errorCode: 'worker_order_feedback_reply_required', + }) + } + const result = await resolveWorkerOrderFeedback({ + feedbackId: Number(feedbackId), + reply, + actorName, + now: nowIso(), + }) + if (result.failureReason === 'not_found') { + throw createHttpError('问题反馈不存在', { + statusCode: 404, + errorCode: 'worker_order_feedback_not_found', + }) + } + if (result.failureReason === 'not_pending') { + throw createHttpError('该问题反馈已处理,请刷新后重试', { + statusCode: 409, + errorCode: 'worker_order_feedback_not_pending', + }) + } + if (!result.feedback || !result.order) { + throw createHttpError('问题反馈处理失败', { + statusCode: 409, + errorCode: 'worker_order_feedback_resolve_failed', + }) + } + await resolveAdminNotificationEntity( + 'worker_order_feedback', + Number(result.feedback.id), + 'resolved', + ) + const workerId = Number(result.feedback.worker_id) + publishWorkOrderRealtimeChange({ + workOrderId: Number(result.order.id), + workerIds: workerId > 0 ? [workerId] : [], + }) + return { + feedback: mapWorkerOrderFeedback(result.feedback), + order: mapWorkOrderAdmin(result.order), + } +} diff --git a/apps/backend/src/services/worker-platform/index.ts b/apps/backend/src/services/worker-platform/index.ts index 7a8eb352..4e20809e 100644 --- a/apps/backend/src/services/worker-platform/index.ts +++ b/apps/backend/src/services/worker-platform/index.ts @@ -26,6 +26,7 @@ export * from './admin-kuaishou-match-service.js' export * from './admin-worker-config-service.js' export * from './admin-worker-user-service.js' export * from './admin-work-order-query-service.js' +export * from './admin-worker-feedback-service.js' export * from './worker-product-match-config-service.js' export * from './worker-announcement-config-service.js' export * from './worker-hall-config-service.js'