chore: migrate to KT financial system
This commit is contained in:
73
apps/backend/api/finance/reimbursements.post.ts
Normal file
73
apps/backend/api/finance/reimbursements.post.ts
Normal file
@@ -0,0 +1,73 @@
|
||||
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 DEFAULT_STATUS: TransactionStatus = 'pending';
|
||||
const ALLOWED_STATUSES: TransactionStatus[] = [
|
||||
'draft',
|
||||
'pending',
|
||||
'approved',
|
||||
'rejected',
|
||||
'paid',
|
||||
];
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
const body = await readBody(event);
|
||||
|
||||
if (!body?.amount || !body?.transactionDate) {
|
||||
return useResponseError('缺少必填字段', -1);
|
||||
}
|
||||
|
||||
const amount = Number(body.amount);
|
||||
if (Number.isNaN(amount)) {
|
||||
return useResponseError('金额格式不正确', -1);
|
||||
}
|
||||
|
||||
const type =
|
||||
(body.type as 'expense' | 'income' | 'transfer' | undefined) ?? 'expense';
|
||||
const status =
|
||||
(body.status as TransactionStatus | undefined) ?? DEFAULT_STATUS;
|
||||
|
||||
if (!ALLOWED_STATUSES.includes(status)) {
|
||||
return useResponseError('状态值不合法', -1);
|
||||
}
|
||||
|
||||
const reimbursement = createTransaction({
|
||||
type,
|
||||
amount,
|
||||
currency: body.currency ?? DEFAULT_CURRENCY,
|
||||
categoryId: body.categoryId ?? null,
|
||||
accountId: body.accountId ?? null,
|
||||
transactionDate: body.transactionDate,
|
||||
description:
|
||||
body.description ??
|
||||
body.item ??
|
||||
(body.notes ? `${body.notes}` : '') ??
|
||||
'',
|
||||
project: body.project ?? body.category ?? null,
|
||||
memo: body.memo ?? body.notes ?? null,
|
||||
status,
|
||||
reimbursementBatch: body.reimbursementBatch ?? null,
|
||||
reviewNotes: body.reviewNotes ?? null,
|
||||
submittedBy: body.submittedBy ?? body.requester ?? null,
|
||||
approvedBy: body.approvedBy ?? null,
|
||||
approvedAt: body.approvedAt ?? null,
|
||||
statusUpdatedAt: body.statusUpdatedAt ?? undefined,
|
||||
});
|
||||
|
||||
notifyTransactionWebhook(reimbursement, {
|
||||
action: 'reimbursement.created',
|
||||
}).catch((error) =>
|
||||
console.error(
|
||||
'[finance][reimbursements.post] webhook notify failed',
|
||||
error,
|
||||
),
|
||||
);
|
||||
|
||||
return useResponseSuccess(reimbursement);
|
||||
});
|
||||
Reference in New Issue
Block a user