import { readBody } from 'h3'; import { createTransaction, type TransactionStatus, } from '~/utils/finance-repository'; import { useResponseError, useResponseSuccess } from '~/utils/response'; import { notifyTransactionWebhook } from '~/utils/telegram-webhook'; const DEFAULT_CURRENCY = 'CNY'; const ALLOWED_STATUSES: TransactionStatus[] = [ 'draft', 'pending', 'approved', 'rejected', 'paid', ]; export default defineEventHandler(async (event) => { const body = await readBody(event); if (!body?.type || !body?.amount || !body?.transactionDate) { return useResponseError('缺少必填字段', -1); } const amount = Number(body.amount); if (Number.isNaN(amount)) { return useResponseError('金额格式不正确', -1); } const status = (body.status as TransactionStatus | undefined) ?? 'approved'; if (!ALLOWED_STATUSES.includes(status)) { return useResponseError('状态值不合法', -1); } const transaction = createTransaction({ type: body.type, amount, currency: body.currency ?? DEFAULT_CURRENCY, categoryId: body.categoryId ?? null, accountId: body.accountId ?? null, transactionDate: body.transactionDate, description: body.description ?? '', project: body.project ?? null, memo: body.memo ?? null, status, reimbursementBatch: body.reimbursementBatch ?? null, reviewNotes: body.reviewNotes ?? null, submittedBy: body.submittedBy ?? null, approvedBy: body.approvedBy ?? null, statusUpdatedAt: body.statusUpdatedAt ?? undefined, approvedAt: body.approvedAt ?? undefined, }); notifyTransactionWebhook(transaction, { action: 'created' }).catch((error) => console.error('[finance][transactions.post] webhook notify failed', error), ); return useResponseSuccess(transaction); });