统一前后端代码格式化配置
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { Router } from "express";
|
||||
import { Router } from 'express'
|
||||
|
||||
import {
|
||||
getAdminAffiliateDashConfig,
|
||||
@@ -6,84 +6,77 @@ import {
|
||||
listAdminAffiliateDashProducts,
|
||||
matchAdminAffiliateDashSku,
|
||||
updateAdminAffiliateDashConfig,
|
||||
} from "../../../services/admin/platform-config/affiliate-dash-service.js";
|
||||
import { createJsonHandler } from "../session.js";
|
||||
import type { JsonRecord } from "../../../types/json.js";
|
||||
} from '../../../services/admin/platform-config/affiliate-dash-service.js'
|
||||
import { createJsonHandler } from '../session.js'
|
||||
import type { JsonRecord } from '../../../types/json.js'
|
||||
|
||||
const router = Router();
|
||||
const router = Router()
|
||||
|
||||
router.get(
|
||||
"/affiliate-dash",
|
||||
'/affiliate-dash',
|
||||
createJsonHandler(() => getAdminAffiliateDashConfig(), {
|
||||
successMessage: "ok",
|
||||
errorMessage: "读取 affiliate-dash 配置失败",
|
||||
scope: "[admin/platform-config/affiliate-dash]",
|
||||
})
|
||||
);
|
||||
successMessage: 'ok',
|
||||
errorMessage: '读取 affiliate-dash 配置失败',
|
||||
scope: '[admin/platform-config/affiliate-dash]',
|
||||
}),
|
||||
)
|
||||
|
||||
router.post(
|
||||
"/affiliate-dash",
|
||||
createJsonHandler(
|
||||
(req) => updateAdminAffiliateDashConfig(req.body as JsonRecord),
|
||||
{
|
||||
successMessage: "affiliate-dash 配置已保存",
|
||||
errorMessage: "保存 affiliate-dash 配置失败",
|
||||
scope: "[admin/platform-config/affiliate-dash]",
|
||||
audit: (_req, data) => {
|
||||
const result = data as JsonRecord;
|
||||
const source = result.source as JsonRecord | undefined;
|
||||
const effective = result.effective as JsonRecord | undefined;
|
||||
'/affiliate-dash',
|
||||
createJsonHandler((req) => updateAdminAffiliateDashConfig(req.body as JsonRecord), {
|
||||
successMessage: 'affiliate-dash 配置已保存',
|
||||
errorMessage: '保存 affiliate-dash 配置失败',
|
||||
scope: '[admin/platform-config/affiliate-dash]',
|
||||
audit: (_req, data) => {
|
||||
const result = data as JsonRecord
|
||||
const source = result.source as JsonRecord | undefined
|
||||
const effective = result.effective as JsonRecord | undefined
|
||||
|
||||
return {
|
||||
action: "platform_affiliate_dash_config_updated",
|
||||
targetType: "platform_config",
|
||||
targetId: "affiliate_dash",
|
||||
data: {
|
||||
enabled: effective?.enabled !== false,
|
||||
hasAppKey: Boolean(effective?.hasAppKey),
|
||||
hasAppSecret: Boolean(effective?.hasAppSecret),
|
||||
hasCallbackSecret: Boolean(effective?.hasCallbackSecret),
|
||||
skuMappingCount: Number(source?.skuMapping && typeof source.skuMapping === "object"
|
||||
return {
|
||||
action: 'platform_affiliate_dash_config_updated',
|
||||
targetType: 'platform_config',
|
||||
targetId: 'affiliate_dash',
|
||||
data: {
|
||||
enabled: effective?.enabled !== false,
|
||||
hasAppKey: Boolean(effective?.hasAppKey),
|
||||
hasAppSecret: Boolean(effective?.hasAppSecret),
|
||||
hasCallbackSecret: Boolean(effective?.hasCallbackSecret),
|
||||
skuMappingCount: Number(
|
||||
source?.skuMapping && typeof source.skuMapping === 'object'
|
||||
? Object.keys(source.skuMapping).length
|
||||
: 0),
|
||||
},
|
||||
};
|
||||
},
|
||||
}
|
||||
)
|
||||
);
|
||||
: 0,
|
||||
),
|
||||
},
|
||||
}
|
||||
},
|
||||
}),
|
||||
)
|
||||
|
||||
router.post(
|
||||
"/affiliate-dash/match",
|
||||
createJsonHandler(
|
||||
(req) => matchAdminAffiliateDashSku(req.body as JsonRecord),
|
||||
{
|
||||
successMessage: "ok",
|
||||
errorMessage: "匹配 affiliate-dash sku 失败",
|
||||
scope: "[admin/platform-config/affiliate-dash/match]",
|
||||
}
|
||||
)
|
||||
);
|
||||
'/affiliate-dash/match',
|
||||
createJsonHandler((req) => matchAdminAffiliateDashSku(req.body as JsonRecord), {
|
||||
successMessage: 'ok',
|
||||
errorMessage: '匹配 affiliate-dash sku 失败',
|
||||
scope: '[admin/platform-config/affiliate-dash/match]',
|
||||
}),
|
||||
)
|
||||
|
||||
router.post(
|
||||
"/affiliate-dash/products",
|
||||
createJsonHandler(
|
||||
(req) => listAdminAffiliateDashProducts(req.body as JsonRecord),
|
||||
{
|
||||
successMessage: "ok",
|
||||
errorMessage: "查询 affiliate-dash 商品失败",
|
||||
scope: "[admin/platform-config/affiliate-dash/products]",
|
||||
}
|
||||
)
|
||||
);
|
||||
'/affiliate-dash/products',
|
||||
createJsonHandler((req) => listAdminAffiliateDashProducts(req.body as JsonRecord), {
|
||||
successMessage: 'ok',
|
||||
errorMessage: '查询 affiliate-dash 商品失败',
|
||||
scope: '[admin/platform-config/affiliate-dash/products]',
|
||||
}),
|
||||
)
|
||||
|
||||
router.post(
|
||||
"/affiliate-dash/wallet",
|
||||
'/affiliate-dash/wallet',
|
||||
createJsonHandler(() => getAdminAffiliateDashWallet(), {
|
||||
successMessage: "ok",
|
||||
errorMessage: "查询 affiliate-dash 钱包失败",
|
||||
scope: "[admin/platform-config/affiliate-dash/wallet]",
|
||||
})
|
||||
);
|
||||
successMessage: 'ok',
|
||||
errorMessage: '查询 affiliate-dash 钱包失败',
|
||||
scope: '[admin/platform-config/affiliate-dash/wallet]',
|
||||
}),
|
||||
)
|
||||
|
||||
export default router;
|
||||
export default router
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Router } from "express";
|
||||
import { Router } from 'express'
|
||||
|
||||
import {
|
||||
appointAdminCloudtentaclesVirtualNumber,
|
||||
@@ -23,7 +23,7 @@ import {
|
||||
useAdminCloudtentaclesSku,
|
||||
validateAdminCloudtentaclesSession,
|
||||
verifyAdminCloudtentaclesLoginCode,
|
||||
} from "../../../services/admin/platform-config/cloudtentacles/index.js";
|
||||
} from '../../../services/admin/platform-config/cloudtentacles/index.js'
|
||||
import type {
|
||||
AdminCloudtentaclesCatalogQueryRouteBody,
|
||||
AdminCloudtentaclesFullFlowRouteBody,
|
||||
@@ -35,398 +35,353 @@ import type {
|
||||
AdminCloudtentaclesTestLoginRouteBody,
|
||||
AdminCloudtentaclesValidateSessionRouteBody,
|
||||
AdminCloudtentaclesVirtualNumberRouteBody,
|
||||
} from "../../../types/admin/route-inputs.js";
|
||||
import { createJsonHandler } from "../session.js";
|
||||
import type { JsonRecord } from "../../../types/json.js";
|
||||
} from '../../../types/admin/route-inputs.js'
|
||||
import { createJsonHandler } from '../session.js'
|
||||
import type { JsonRecord } from '../../../types/json.js'
|
||||
|
||||
const router = Router();
|
||||
const router = Router()
|
||||
|
||||
router.get(
|
||||
"/cloudtentacles-source",
|
||||
'/cloudtentacles-source',
|
||||
createJsonHandler(() => listAdminCloudtentaclesSources(), {
|
||||
successMessage: "ok",
|
||||
errorMessage: "读取 cloudtentacles 履约平台配置失败",
|
||||
scope: "[admin/platform-config/cloudtentacles-source]",
|
||||
})
|
||||
);
|
||||
successMessage: 'ok',
|
||||
errorMessage: '读取 cloudtentacles 履约平台配置失败',
|
||||
scope: '[admin/platform-config/cloudtentacles-source]',
|
||||
}),
|
||||
)
|
||||
|
||||
router.delete(
|
||||
"/cloudtentacles-source/:sourceKey",
|
||||
'/cloudtentacles-source/:sourceKey',
|
||||
createJsonHandler(
|
||||
(req) =>
|
||||
deleteAdminCloudtentaclesSource(
|
||||
String(req.params.sourceKey || "").trim()
|
||||
),
|
||||
(req) => deleteAdminCloudtentaclesSource(String(req.params.sourceKey || '').trim()),
|
||||
{
|
||||
successMessage: "cloudtentacles 履约平台配置已删除",
|
||||
errorMessage: "删除 cloudtentacles 履约平台配置失败",
|
||||
scope: "[admin/platform-config/cloudtentacles-source/:sourceKey]",
|
||||
successMessage: 'cloudtentacles 履约平台配置已删除',
|
||||
errorMessage: '删除 cloudtentacles 履约平台配置失败',
|
||||
scope: '[admin/platform-config/cloudtentacles-source/:sourceKey]',
|
||||
audit: (req) => ({
|
||||
action: "platform_cloudtentacles_source_deleted",
|
||||
targetType: "platform_config",
|
||||
targetId: String(req.params.sourceKey || "").trim(),
|
||||
action: 'platform_cloudtentacles_source_deleted',
|
||||
targetType: 'platform_config',
|
||||
targetId: String(req.params.sourceKey || '').trim(),
|
||||
data: {},
|
||||
}),
|
||||
}
|
||||
)
|
||||
);
|
||||
},
|
||||
),
|
||||
)
|
||||
|
||||
router.post(
|
||||
"/cloudtentacles-source",
|
||||
'/cloudtentacles-source',
|
||||
createJsonHandler(
|
||||
(req) =>
|
||||
updateAdminCloudtentaclesSourceConfig(
|
||||
req.body as AdminCloudtentaclesSourceConfigRouteBody
|
||||
),
|
||||
updateAdminCloudtentaclesSourceConfig(req.body as AdminCloudtentaclesSourceConfigRouteBody),
|
||||
{
|
||||
successMessage: "cloudtentacles 履约平台配置已保存",
|
||||
errorMessage: "保存 cloudtentacles 履约平台配置失败",
|
||||
scope: "[admin/platform-config/cloudtentacles-source]",
|
||||
successMessage: 'cloudtentacles 履约平台配置已保存',
|
||||
errorMessage: '保存 cloudtentacles 履约平台配置失败',
|
||||
scope: '[admin/platform-config/cloudtentacles-source]',
|
||||
audit: (_req, data) => {
|
||||
const result = data as JsonRecord;
|
||||
const result = data as JsonRecord
|
||||
return {
|
||||
action: "platform_cloudtentacles_source_updated",
|
||||
targetType: "platform_config",
|
||||
targetId: "cloudtentacles_source",
|
||||
action: 'platform_cloudtentacles_source_updated',
|
||||
targetType: 'platform_config',
|
||||
targetId: 'cloudtentacles_source',
|
||||
data: {
|
||||
filePath: String(result.filePath || "").trim(),
|
||||
username: String(result.source?.username || "").trim(),
|
||||
filePath: String(result.filePath || '').trim(),
|
||||
username: String(result.source?.username || '').trim(),
|
||||
enabled: Boolean(result.source?.enabled),
|
||||
},
|
||||
};
|
||||
}
|
||||
},
|
||||
}
|
||||
)
|
||||
);
|
||||
},
|
||||
),
|
||||
)
|
||||
|
||||
router.get(
|
||||
"/cloudtentacles/override-rules",
|
||||
'/cloudtentacles/override-rules',
|
||||
createJsonHandler(() => getAdminCloudtentaclesOverrideRules(), {
|
||||
successMessage: "ok",
|
||||
errorMessage: "读取 cloudtentacles 覆盖规则失败",
|
||||
scope: "[admin/platform-config/cloudtentacles/override-rules]",
|
||||
})
|
||||
);
|
||||
successMessage: 'ok',
|
||||
errorMessage: '读取 cloudtentacles 覆盖规则失败',
|
||||
scope: '[admin/platform-config/cloudtentacles/override-rules]',
|
||||
}),
|
||||
)
|
||||
|
||||
router.post(
|
||||
"/cloudtentacles/override-rules",
|
||||
'/cloudtentacles/override-rules',
|
||||
createJsonHandler(
|
||||
(req) =>
|
||||
updateAdminCloudtentaclesOverrideRules(
|
||||
req.body as AdminCloudtentaclesOverrideRuleConfigRouteBody
|
||||
req.body as AdminCloudtentaclesOverrideRuleConfigRouteBody,
|
||||
),
|
||||
{
|
||||
successMessage: "cloudtentacles 覆盖规则已保存",
|
||||
errorMessage: "保存 cloudtentacles 覆盖规则失败",
|
||||
scope: "[admin/platform-config/cloudtentacles/override-rules]",
|
||||
successMessage: 'cloudtentacles 覆盖规则已保存',
|
||||
errorMessage: '保存 cloudtentacles 覆盖规则失败',
|
||||
scope: '[admin/platform-config/cloudtentacles/override-rules]',
|
||||
audit: (_req, data) => {
|
||||
const result = data as JsonRecord;
|
||||
const result = data as JsonRecord
|
||||
return {
|
||||
action: "platform_cloudtentacles_override_rules_updated",
|
||||
targetType: "platform_config",
|
||||
targetId: "cloudtentacles_override_rules",
|
||||
action: 'platform_cloudtentacles_override_rules_updated',
|
||||
targetType: 'platform_config',
|
||||
targetId: 'cloudtentacles_override_rules',
|
||||
data: {
|
||||
filePath: String(result.filePath || "").trim(),
|
||||
filePath: String(result.filePath || '').trim(),
|
||||
enabled: result.enabled !== false,
|
||||
ruleCount: Array.isArray(result.rules) ? result.rules.length : 0,
|
||||
},
|
||||
};
|
||||
}
|
||||
},
|
||||
}
|
||||
)
|
||||
);
|
||||
},
|
||||
),
|
||||
)
|
||||
|
||||
router.post(
|
||||
"/cloudtentacles/send-sms-code",
|
||||
'/cloudtentacles/send-sms-code',
|
||||
createJsonHandler(
|
||||
(req) =>
|
||||
sendAdminCloudtentaclesSmsCode(
|
||||
req.body as AdminCloudtentaclesSendSmsCodeRouteBody
|
||||
),
|
||||
(req) => sendAdminCloudtentaclesSmsCode(req.body as AdminCloudtentaclesSendSmsCodeRouteBody),
|
||||
{
|
||||
successMessage: "cloudtentacles 短信验证码已发送",
|
||||
errorMessage: "cloudtentacles 发送短信验证码失败",
|
||||
scope: "[admin/platform-config/cloudtentacles/send-sms-code]",
|
||||
successMessage: 'cloudtentacles 短信验证码已发送',
|
||||
errorMessage: 'cloudtentacles 发送短信验证码失败',
|
||||
scope: '[admin/platform-config/cloudtentacles/send-sms-code]',
|
||||
audit: (req, data) => {
|
||||
const body = req.body as AdminCloudtentaclesSendSmsCodeRouteBody;
|
||||
const result = data as JsonRecord;
|
||||
const body = req.body as AdminCloudtentaclesSendSmsCodeRouteBody
|
||||
const result = data as JsonRecord
|
||||
return {
|
||||
action: "platform_cloudtentacles_send_sms_code",
|
||||
targetType: "platform_config",
|
||||
targetId:
|
||||
String(result.username || body.username || "").trim() ||
|
||||
"cloudtentacles",
|
||||
action: 'platform_cloudtentacles_send_sms_code',
|
||||
targetType: 'platform_config',
|
||||
targetId: String(result.username || body.username || '').trim() || 'cloudtentacles',
|
||||
data: {
|
||||
baseUrl: result.baseUrl || String(body.baseUrl || "").trim(),
|
||||
phoneMasked: result.phoneMasked || "",
|
||||
baseUrl: result.baseUrl || String(body.baseUrl || '').trim(),
|
||||
phoneMasked: result.phoneMasked || '',
|
||||
},
|
||||
};
|
||||
}
|
||||
},
|
||||
}
|
||||
)
|
||||
);
|
||||
},
|
||||
),
|
||||
)
|
||||
|
||||
router.post(
|
||||
"/cloudtentacles/test-login",
|
||||
'/cloudtentacles/test-login',
|
||||
createJsonHandler(
|
||||
(req) =>
|
||||
testAdminCloudtentaclesLogin(
|
||||
req.body as AdminCloudtentaclesTestLoginRouteBody
|
||||
),
|
||||
(req) => testAdminCloudtentaclesLogin(req.body as AdminCloudtentaclesTestLoginRouteBody),
|
||||
{
|
||||
successMessage: "cloudtentacles 登录测试成功",
|
||||
errorMessage: "cloudtentacles 登录测试失败",
|
||||
scope: "[admin/platform-config/cloudtentacles/test-login]",
|
||||
successMessage: 'cloudtentacles 登录测试成功',
|
||||
errorMessage: 'cloudtentacles 登录测试失败',
|
||||
scope: '[admin/platform-config/cloudtentacles/test-login]',
|
||||
audit: (req, data) => {
|
||||
const body = req.body as AdminCloudtentaclesTestLoginRouteBody;
|
||||
const result = data as JsonRecord;
|
||||
const body = req.body as AdminCloudtentaclesTestLoginRouteBody
|
||||
const result = data as JsonRecord
|
||||
return {
|
||||
action: "platform_cloudtentacles_test_login",
|
||||
targetType: "platform_config",
|
||||
targetId:
|
||||
String(result.username || body.username || "").trim() ||
|
||||
"cloudtentacles",
|
||||
action: 'platform_cloudtentacles_test_login',
|
||||
targetType: 'platform_config',
|
||||
targetId: String(result.username || body.username || '').trim() || 'cloudtentacles',
|
||||
data: {
|
||||
baseUrl: result.baseUrl || String(body.baseUrl || "").trim(),
|
||||
baseUrl: result.baseUrl || String(body.baseUrl || '').trim(),
|
||||
permissionCount: Number(result.session?.permissionCount || 0),
|
||||
},
|
||||
};
|
||||
}
|
||||
},
|
||||
}
|
||||
)
|
||||
);
|
||||
},
|
||||
),
|
||||
)
|
||||
|
||||
router.post(
|
||||
"/cloudtentacles/validate-session",
|
||||
'/cloudtentacles/validate-session',
|
||||
createJsonHandler(
|
||||
(req) =>
|
||||
validateAdminCloudtentaclesSession(
|
||||
req.body as AdminCloudtentaclesValidateSessionRouteBody
|
||||
),
|
||||
validateAdminCloudtentaclesSession(req.body as AdminCloudtentaclesValidateSessionRouteBody),
|
||||
{
|
||||
successMessage: "cloudtentacles 会话校验成功",
|
||||
errorMessage: "cloudtentacles 会话校验失败",
|
||||
scope: "[admin/platform-config/cloudtentacles/validate-session]",
|
||||
successMessage: 'cloudtentacles 会话校验成功',
|
||||
errorMessage: 'cloudtentacles 会话校验失败',
|
||||
scope: '[admin/platform-config/cloudtentacles/validate-session]',
|
||||
audit: (_req, data) => {
|
||||
const result = data as JsonRecord;
|
||||
const result = data as JsonRecord
|
||||
return {
|
||||
action: "platform_cloudtentacles_validate_session",
|
||||
targetType: "platform_config",
|
||||
targetId: "cloudtentacles_session",
|
||||
action: 'platform_cloudtentacles_validate_session',
|
||||
targetType: 'platform_config',
|
||||
targetId: 'cloudtentacles_session',
|
||||
data: {
|
||||
baseUrl: String(result.baseUrl || "").trim(),
|
||||
baseUrl: String(result.baseUrl || '').trim(),
|
||||
permissionCount: Number(result.session?.permissionCount || 0),
|
||||
},
|
||||
};
|
||||
}
|
||||
},
|
||||
}
|
||||
)
|
||||
);
|
||||
},
|
||||
),
|
||||
)
|
||||
|
||||
router.post(
|
||||
"/cloudtentacles/asset",
|
||||
'/cloudtentacles/asset',
|
||||
createJsonHandler(
|
||||
(req) => getAdminCloudtentaclesAsset(req.body as AdminCloudtentaclesCatalogQueryRouteBody),
|
||||
{
|
||||
successMessage: 'cloudtentacles 余额查询成功',
|
||||
errorMessage: 'cloudtentacles 余额查询失败',
|
||||
scope: '[admin/platform-config/cloudtentacles/asset]',
|
||||
},
|
||||
),
|
||||
)
|
||||
|
||||
router.post(
|
||||
'/cloudtentacles/categories',
|
||||
createJsonHandler(
|
||||
(req) => getAdminCloudtentaclesCategories(req.body as AdminCloudtentaclesCatalogQueryRouteBody),
|
||||
{
|
||||
successMessage: 'cloudtentacles 分类查询成功',
|
||||
errorMessage: 'cloudtentacles 分类查询失败',
|
||||
scope: '[admin/platform-config/cloudtentacles/categories]',
|
||||
},
|
||||
),
|
||||
)
|
||||
|
||||
router.post(
|
||||
'/cloudtentacles/sku/list',
|
||||
createJsonHandler(
|
||||
(req) => getAdminCloudtentaclesSkuList(req.body as AdminCloudtentaclesCatalogQueryRouteBody),
|
||||
{
|
||||
successMessage: 'cloudtentacles SKU 列表查询成功',
|
||||
errorMessage: 'cloudtentacles SKU 列表查询失败',
|
||||
scope: '[admin/platform-config/cloudtentacles/sku/list]',
|
||||
},
|
||||
),
|
||||
)
|
||||
|
||||
router.post(
|
||||
'/cloudtentacles/sku/buy',
|
||||
createJsonHandler(
|
||||
(req) => buyAdminCloudtentaclesSku(req.body as AdminCloudtentaclesSkuBuyRouteBody),
|
||||
{
|
||||
successMessage: 'cloudtentacles SKU 购买成功',
|
||||
errorMessage: 'cloudtentacles SKU 购买失败',
|
||||
scope: '[admin/platform-config/cloudtentacles/sku/buy]',
|
||||
},
|
||||
),
|
||||
)
|
||||
|
||||
router.post(
|
||||
'/cloudtentacles/sku/use',
|
||||
createJsonHandler(
|
||||
(req) => useAdminCloudtentaclesSku(req.body as AdminCloudtentaclesSkuUseRouteBody),
|
||||
{
|
||||
successMessage: 'cloudtentacles 发货成功',
|
||||
errorMessage: 'cloudtentacles 发货失败',
|
||||
scope: '[admin/platform-config/cloudtentacles/sku/use]',
|
||||
},
|
||||
),
|
||||
)
|
||||
|
||||
router.post(
|
||||
'/cloudtentacles/knapsack',
|
||||
createJsonHandler(
|
||||
(req) => getAdminCloudtentaclesKnapsack(req.body as AdminCloudtentaclesCatalogQueryRouteBody),
|
||||
{
|
||||
successMessage: 'cloudtentacles 背包查询成功',
|
||||
errorMessage: 'cloudtentacles 背包查询失败',
|
||||
scope: '[admin/platform-config/cloudtentacles/knapsack]',
|
||||
},
|
||||
),
|
||||
)
|
||||
|
||||
router.post(
|
||||
'/cloudtentacles/vn/list',
|
||||
createJsonHandler(
|
||||
(req) =>
|
||||
getAdminCloudtentaclesAsset(
|
||||
req.body as AdminCloudtentaclesCatalogQueryRouteBody
|
||||
),
|
||||
listAdminCloudtentaclesVirtualNumbers(req.body as AdminCloudtentaclesVirtualNumberRouteBody),
|
||||
{
|
||||
successMessage: "cloudtentacles 余额查询成功",
|
||||
errorMessage: "cloudtentacles 余额查询失败",
|
||||
scope: "[admin/platform-config/cloudtentacles/asset]",
|
||||
}
|
||||
)
|
||||
);
|
||||
successMessage: 'cloudtentacles 虚拟号列表查询成功',
|
||||
errorMessage: 'cloudtentacles 虚拟号列表查询失败',
|
||||
scope: '[admin/platform-config/cloudtentacles/vn/list]',
|
||||
},
|
||||
),
|
||||
)
|
||||
|
||||
router.post(
|
||||
"/cloudtentacles/categories",
|
||||
createJsonHandler(
|
||||
(req) =>
|
||||
getAdminCloudtentaclesCategories(
|
||||
req.body as AdminCloudtentaclesCatalogQueryRouteBody
|
||||
),
|
||||
{
|
||||
successMessage: "cloudtentacles 分类查询成功",
|
||||
errorMessage: "cloudtentacles 分类查询失败",
|
||||
scope: "[admin/platform-config/cloudtentacles/categories]",
|
||||
}
|
||||
)
|
||||
);
|
||||
|
||||
router.post(
|
||||
"/cloudtentacles/sku/list",
|
||||
createJsonHandler(
|
||||
(req) =>
|
||||
getAdminCloudtentaclesSkuList(
|
||||
req.body as AdminCloudtentaclesCatalogQueryRouteBody
|
||||
),
|
||||
{
|
||||
successMessage: "cloudtentacles SKU 列表查询成功",
|
||||
errorMessage: "cloudtentacles SKU 列表查询失败",
|
||||
scope: "[admin/platform-config/cloudtentacles/sku/list]",
|
||||
}
|
||||
)
|
||||
);
|
||||
|
||||
router.post(
|
||||
"/cloudtentacles/sku/buy",
|
||||
createJsonHandler(
|
||||
(req) =>
|
||||
buyAdminCloudtentaclesSku(req.body as AdminCloudtentaclesSkuBuyRouteBody),
|
||||
{
|
||||
successMessage: "cloudtentacles SKU 购买成功",
|
||||
errorMessage: "cloudtentacles SKU 购买失败",
|
||||
scope: "[admin/platform-config/cloudtentacles/sku/buy]",
|
||||
}
|
||||
)
|
||||
);
|
||||
|
||||
router.post(
|
||||
"/cloudtentacles/sku/use",
|
||||
createJsonHandler(
|
||||
(req) =>
|
||||
useAdminCloudtentaclesSku(req.body as AdminCloudtentaclesSkuUseRouteBody),
|
||||
{
|
||||
successMessage: "cloudtentacles 发货成功",
|
||||
errorMessage: "cloudtentacles 发货失败",
|
||||
scope: "[admin/platform-config/cloudtentacles/sku/use]",
|
||||
}
|
||||
)
|
||||
);
|
||||
|
||||
router.post(
|
||||
"/cloudtentacles/knapsack",
|
||||
createJsonHandler(
|
||||
(req) =>
|
||||
getAdminCloudtentaclesKnapsack(
|
||||
req.body as AdminCloudtentaclesCatalogQueryRouteBody
|
||||
),
|
||||
{
|
||||
successMessage: "cloudtentacles 背包查询成功",
|
||||
errorMessage: "cloudtentacles 背包查询失败",
|
||||
scope: "[admin/platform-config/cloudtentacles/knapsack]",
|
||||
}
|
||||
)
|
||||
);
|
||||
|
||||
router.post(
|
||||
"/cloudtentacles/vn/list",
|
||||
createJsonHandler(
|
||||
(req) =>
|
||||
listAdminCloudtentaclesVirtualNumbers(
|
||||
req.body as AdminCloudtentaclesVirtualNumberRouteBody
|
||||
),
|
||||
{
|
||||
successMessage: "cloudtentacles 虚拟号列表查询成功",
|
||||
errorMessage: "cloudtentacles 虚拟号列表查询失败",
|
||||
scope: "[admin/platform-config/cloudtentacles/vn/list]",
|
||||
}
|
||||
)
|
||||
);
|
||||
|
||||
router.post(
|
||||
"/cloudtentacles/vn/appoint",
|
||||
'/cloudtentacles/vn/appoint',
|
||||
createJsonHandler(
|
||||
(req) =>
|
||||
appointAdminCloudtentaclesVirtualNumber(
|
||||
req.body as AdminCloudtentaclesVirtualNumberRouteBody
|
||||
req.body as AdminCloudtentaclesVirtualNumberRouteBody,
|
||||
),
|
||||
{
|
||||
successMessage: "cloudtentacles 虚拟号申请成功",
|
||||
errorMessage: "cloudtentacles 虚拟号申请失败",
|
||||
scope: "[admin/platform-config/cloudtentacles/vn/appoint]",
|
||||
}
|
||||
)
|
||||
);
|
||||
successMessage: 'cloudtentacles 虚拟号申请成功',
|
||||
errorMessage: 'cloudtentacles 虚拟号申请失败',
|
||||
scope: '[admin/platform-config/cloudtentacles/vn/appoint]',
|
||||
},
|
||||
),
|
||||
)
|
||||
|
||||
router.post(
|
||||
"/cloudtentacles/vn/generate-login-code",
|
||||
'/cloudtentacles/vn/generate-login-code',
|
||||
createJsonHandler(
|
||||
(req) =>
|
||||
generateAdminCloudtentaclesLoginCode(
|
||||
req.body as AdminCloudtentaclesVirtualNumberRouteBody
|
||||
),
|
||||
generateAdminCloudtentaclesLoginCode(req.body as AdminCloudtentaclesVirtualNumberRouteBody),
|
||||
{
|
||||
successMessage: "cloudtentacles 登录码生成成功",
|
||||
errorMessage: "cloudtentacles 登录码生成失败",
|
||||
scope: "[admin/platform-config/cloudtentacles/vn/generate-login-code]",
|
||||
}
|
||||
)
|
||||
);
|
||||
successMessage: 'cloudtentacles 登录码生成成功',
|
||||
errorMessage: 'cloudtentacles 登录码生成失败',
|
||||
scope: '[admin/platform-config/cloudtentacles/vn/generate-login-code]',
|
||||
},
|
||||
),
|
||||
)
|
||||
|
||||
router.post(
|
||||
"/cloudtentacles/vn/fetch-code",
|
||||
'/cloudtentacles/vn/fetch-code',
|
||||
createJsonHandler(
|
||||
(req) =>
|
||||
fetchAdminCloudtentaclesVirtualNumberCode(
|
||||
req.body as AdminCloudtentaclesVirtualNumberRouteBody
|
||||
req.body as AdminCloudtentaclesVirtualNumberRouteBody,
|
||||
),
|
||||
{
|
||||
successMessage: "cloudtentacles 验证码获取成功",
|
||||
errorMessage: "cloudtentacles 验证码获取失败",
|
||||
scope: "[admin/platform-config/cloudtentacles/vn/fetch-code]",
|
||||
}
|
||||
)
|
||||
);
|
||||
successMessage: 'cloudtentacles 验证码获取成功',
|
||||
errorMessage: 'cloudtentacles 验证码获取失败',
|
||||
scope: '[admin/platform-config/cloudtentacles/vn/fetch-code]',
|
||||
},
|
||||
),
|
||||
)
|
||||
|
||||
router.post(
|
||||
"/cloudtentacles/vn/verify-code",
|
||||
'/cloudtentacles/vn/verify-code',
|
||||
createJsonHandler(
|
||||
(req) =>
|
||||
verifyAdminCloudtentaclesLoginCode(
|
||||
req.body as AdminCloudtentaclesVirtualNumberRouteBody
|
||||
),
|
||||
verifyAdminCloudtentaclesLoginCode(req.body as AdminCloudtentaclesVirtualNumberRouteBody),
|
||||
{
|
||||
successMessage: "cloudtentacles 登录码校验成功",
|
||||
errorMessage: "cloudtentacles 登录码校验失败",
|
||||
scope: "[admin/platform-config/cloudtentacles/vn/verify-code]",
|
||||
}
|
||||
)
|
||||
);
|
||||
successMessage: 'cloudtentacles 登录码校验成功',
|
||||
errorMessage: 'cloudtentacles 登录码校验失败',
|
||||
scope: '[admin/platform-config/cloudtentacles/vn/verify-code]',
|
||||
},
|
||||
),
|
||||
)
|
||||
|
||||
router.post(
|
||||
"/cloudtentacles/vn/bind-url",
|
||||
'/cloudtentacles/vn/bind-url',
|
||||
createJsonHandler(
|
||||
(req) =>
|
||||
getAdminCloudtentaclesBindUrl(
|
||||
req.body as AdminCloudtentaclesVirtualNumberRouteBody
|
||||
),
|
||||
(req) => getAdminCloudtentaclesBindUrl(req.body as AdminCloudtentaclesVirtualNumberRouteBody),
|
||||
{
|
||||
successMessage: "cloudtentacles 兑换链接获取成功",
|
||||
errorMessage: "cloudtentacles 兑换链接获取失败",
|
||||
scope: "[admin/platform-config/cloudtentacles/vn/bind-url]",
|
||||
}
|
||||
)
|
||||
);
|
||||
successMessage: 'cloudtentacles 兑换链接获取成功',
|
||||
errorMessage: 'cloudtentacles 兑换链接获取失败',
|
||||
scope: '[admin/platform-config/cloudtentacles/vn/bind-url]',
|
||||
},
|
||||
),
|
||||
)
|
||||
|
||||
router.post(
|
||||
"/cloudtentacles/vn/back",
|
||||
'/cloudtentacles/vn/back',
|
||||
createJsonHandler(
|
||||
(req) =>
|
||||
backAdminCloudtentaclesVirtualNumber(
|
||||
req.body as AdminCloudtentaclesVirtualNumberRouteBody
|
||||
),
|
||||
backAdminCloudtentaclesVirtualNumber(req.body as AdminCloudtentaclesVirtualNumberRouteBody),
|
||||
{
|
||||
successMessage: "cloudtentacles 号码退还成功",
|
||||
errorMessage: "cloudtentacles 号码退还失败",
|
||||
scope: "[admin/platform-config/cloudtentacles/vn/back]",
|
||||
}
|
||||
)
|
||||
);
|
||||
successMessage: 'cloudtentacles 号码退还成功',
|
||||
errorMessage: 'cloudtentacles 号码退还失败',
|
||||
scope: '[admin/platform-config/cloudtentacles/vn/back]',
|
||||
},
|
||||
),
|
||||
)
|
||||
|
||||
router.post(
|
||||
"/cloudtentacles/debug/full-flow",
|
||||
'/cloudtentacles/debug/full-flow',
|
||||
createJsonHandler(
|
||||
(req) =>
|
||||
runAdminCloudtentaclesFullFlow(
|
||||
req.body as AdminCloudtentaclesFullFlowRouteBody
|
||||
),
|
||||
(req) => runAdminCloudtentaclesFullFlow(req.body as AdminCloudtentaclesFullFlowRouteBody),
|
||||
{
|
||||
successMessage: "cloudtentacles 完整调试流程执行成功",
|
||||
errorMessage: "cloudtentacles 完整调试流程执行失败",
|
||||
scope: "[admin/platform-config/cloudtentacles/debug/full-flow]",
|
||||
}
|
||||
)
|
||||
);
|
||||
successMessage: 'cloudtentacles 完整调试流程执行成功',
|
||||
errorMessage: 'cloudtentacles 完整调试流程执行失败',
|
||||
scope: '[admin/platform-config/cloudtentacles/debug/full-flow]',
|
||||
},
|
||||
),
|
||||
)
|
||||
|
||||
export default router;
|
||||
export default router
|
||||
|
||||
@@ -21,39 +21,33 @@ router.get(
|
||||
|
||||
router.post(
|
||||
'/fulfillment-routing',
|
||||
createJsonHandler(
|
||||
(req) => updateAdminFulfillmentRoutingConfig(req.body as JsonRecord),
|
||||
{
|
||||
successMessage: '履约路由配置已保存',
|
||||
errorMessage: '保存履约路由配置失败',
|
||||
scope: '[admin/platform-config/fulfillment-routing]',
|
||||
audit: (_req, data) => {
|
||||
const result = data as JsonRecord
|
||||
return {
|
||||
action: 'platform_fulfillment_routing_updated',
|
||||
targetType: 'platform_config',
|
||||
targetId: 'fulfillment_routing',
|
||||
data: {
|
||||
filePath: String(result.filePath || '').trim(),
|
||||
enabled: result.enabled !== false,
|
||||
ruleCount: Array.isArray(result.rules) ? result.rules.length : 0,
|
||||
},
|
||||
}
|
||||
},
|
||||
createJsonHandler((req) => updateAdminFulfillmentRoutingConfig(req.body as JsonRecord), {
|
||||
successMessage: '履约路由配置已保存',
|
||||
errorMessage: '保存履约路由配置失败',
|
||||
scope: '[admin/platform-config/fulfillment-routing]',
|
||||
audit: (_req, data) => {
|
||||
const result = data as JsonRecord
|
||||
return {
|
||||
action: 'platform_fulfillment_routing_updated',
|
||||
targetType: 'platform_config',
|
||||
targetId: 'fulfillment_routing',
|
||||
data: {
|
||||
filePath: String(result.filePath || '').trim(),
|
||||
enabled: result.enabled !== false,
|
||||
ruleCount: Array.isArray(result.rules) ? result.rules.length : 0,
|
||||
},
|
||||
}
|
||||
},
|
||||
),
|
||||
}),
|
||||
)
|
||||
|
||||
router.post(
|
||||
'/fulfillment-routing/preview',
|
||||
createJsonHandler(
|
||||
(req) => previewAdminFulfillmentRouting(req.body as JsonRecord),
|
||||
{
|
||||
successMessage: 'ok',
|
||||
errorMessage: '预览履约路由失败',
|
||||
scope: '[admin/platform-config/fulfillment-routing/preview]',
|
||||
},
|
||||
),
|
||||
createJsonHandler((req) => previewAdminFulfillmentRouting(req.body as JsonRecord), {
|
||||
successMessage: 'ok',
|
||||
errorMessage: '预览履约路由失败',
|
||||
scope: '[admin/platform-config/fulfillment-routing/preview]',
|
||||
}),
|
||||
)
|
||||
|
||||
export default router
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Router } from "express";
|
||||
import { Router } from 'express'
|
||||
|
||||
import {
|
||||
createAdminKuaishouFeifeiTestOrder,
|
||||
@@ -8,137 +8,117 @@ import {
|
||||
queryAdminKuaishouFeifeiTestOrder,
|
||||
syncAdminKuaishouFeifeiProductRules,
|
||||
updateAdminKuaishouFeifeiConfig,
|
||||
} from "../../../services/admin/platform-config/kuaishou-feifei-service.js";
|
||||
import { createJsonHandler } from "../session.js";
|
||||
import type { JsonRecord } from "../../../types/json.js";
|
||||
} from '../../../services/admin/platform-config/kuaishou-feifei-service.js'
|
||||
import { createJsonHandler } from '../session.js'
|
||||
import type { JsonRecord } from '../../../types/json.js'
|
||||
|
||||
const router = Router();
|
||||
const router = Router()
|
||||
|
||||
router.get(
|
||||
"/kuaishou-feifei",
|
||||
'/kuaishou-feifei',
|
||||
createJsonHandler(() => getAdminKuaishouFeifeiConfig(), {
|
||||
successMessage: "ok",
|
||||
errorMessage: "读取 kuaishou-feifei 配置失败",
|
||||
scope: "[admin/platform-config/kuaishou-feifei]",
|
||||
})
|
||||
);
|
||||
successMessage: 'ok',
|
||||
errorMessage: '读取 kuaishou-feifei 配置失败',
|
||||
scope: '[admin/platform-config/kuaishou-feifei]',
|
||||
}),
|
||||
)
|
||||
|
||||
router.post(
|
||||
"/kuaishou-feifei",
|
||||
createJsonHandler(
|
||||
(req) => updateAdminKuaishouFeifeiConfig(req.body as JsonRecord),
|
||||
{
|
||||
successMessage: "kuaishou-feifei 配置已保存",
|
||||
errorMessage: "保存 kuaishou-feifei 配置失败",
|
||||
scope: "[admin/platform-config/kuaishou-feifei]",
|
||||
audit: (_req, data) => {
|
||||
const result = data as JsonRecord;
|
||||
const source = result.source as JsonRecord | undefined;
|
||||
return {
|
||||
action: "platform_kuaishou_feifei_config_updated",
|
||||
targetType: "platform_config",
|
||||
targetId: "kuaishou_feifei",
|
||||
data: {
|
||||
filePath: String(result.filePath || "").trim(),
|
||||
enabled: source?.enabled !== false,
|
||||
ruleCount: Array.isArray(source?.productRules)
|
||||
? source.productRules.length
|
||||
: 0,
|
||||
},
|
||||
};
|
||||
},
|
||||
}
|
||||
)
|
||||
);
|
||||
'/kuaishou-feifei',
|
||||
createJsonHandler((req) => updateAdminKuaishouFeifeiConfig(req.body as JsonRecord), {
|
||||
successMessage: 'kuaishou-feifei 配置已保存',
|
||||
errorMessage: '保存 kuaishou-feifei 配置失败',
|
||||
scope: '[admin/platform-config/kuaishou-feifei]',
|
||||
audit: (_req, data) => {
|
||||
const result = data as JsonRecord
|
||||
const source = result.source as JsonRecord | undefined
|
||||
return {
|
||||
action: 'platform_kuaishou_feifei_config_updated',
|
||||
targetType: 'platform_config',
|
||||
targetId: 'kuaishou_feifei',
|
||||
data: {
|
||||
filePath: String(result.filePath || '').trim(),
|
||||
enabled: source?.enabled !== false,
|
||||
ruleCount: Array.isArray(source?.productRules) ? source.productRules.length : 0,
|
||||
},
|
||||
}
|
||||
},
|
||||
}),
|
||||
)
|
||||
|
||||
router.post(
|
||||
"/kuaishou-feifei/match",
|
||||
createJsonHandler(
|
||||
(req) => matchAdminKuaishouFeifeiProduct(req.body as JsonRecord),
|
||||
{
|
||||
successMessage: "ok",
|
||||
errorMessage: "匹配 kuaishou-feifei 商品失败",
|
||||
scope: "[admin/platform-config/kuaishou-feifei/match]",
|
||||
}
|
||||
)
|
||||
);
|
||||
'/kuaishou-feifei/match',
|
||||
createJsonHandler((req) => matchAdminKuaishouFeifeiProduct(req.body as JsonRecord), {
|
||||
successMessage: 'ok',
|
||||
errorMessage: '匹配 kuaishou-feifei 商品失败',
|
||||
scope: '[admin/platform-config/kuaishou-feifei/match]',
|
||||
}),
|
||||
)
|
||||
|
||||
router.post(
|
||||
"/kuaishou-feifei/products",
|
||||
createJsonHandler(
|
||||
(req) => listAdminKuaishouFeifeiProducts(req.body as JsonRecord),
|
||||
{
|
||||
successMessage: "ok",
|
||||
errorMessage: "查询 kuaishou-feifei 商品失败",
|
||||
scope: "[admin/platform-config/kuaishou-feifei/products]",
|
||||
}
|
||||
)
|
||||
);
|
||||
'/kuaishou-feifei/products',
|
||||
createJsonHandler((req) => listAdminKuaishouFeifeiProducts(req.body as JsonRecord), {
|
||||
successMessage: 'ok',
|
||||
errorMessage: '查询 kuaishou-feifei 商品失败',
|
||||
scope: '[admin/platform-config/kuaishou-feifei/products]',
|
||||
}),
|
||||
)
|
||||
|
||||
router.post(
|
||||
"/kuaishou-feifei/sync-products",
|
||||
createJsonHandler(
|
||||
(req) => syncAdminKuaishouFeifeiProductRules(req.body as JsonRecord),
|
||||
{
|
||||
successMessage: "kuaishou-feifei 商品映射已同步",
|
||||
errorMessage: "同步 kuaishou-feifei 商品映射失败",
|
||||
scope: "[admin/platform-config/kuaishou-feifei/sync-products]",
|
||||
audit: (_req, data) => {
|
||||
const result = data as JsonRecord;
|
||||
const sync = result.sync as JsonRecord | undefined;
|
||||
'/kuaishou-feifei/sync-products',
|
||||
createJsonHandler((req) => syncAdminKuaishouFeifeiProductRules(req.body as JsonRecord), {
|
||||
successMessage: 'kuaishou-feifei 商品映射已同步',
|
||||
errorMessage: '同步 kuaishou-feifei 商品映射失败',
|
||||
scope: '[admin/platform-config/kuaishou-feifei/sync-products]',
|
||||
audit: (_req, data) => {
|
||||
const result = data as JsonRecord
|
||||
const sync = result.sync as JsonRecord | undefined
|
||||
|
||||
return {
|
||||
action: "platform_kuaishou_feifei_products_synced",
|
||||
targetType: "platform_config",
|
||||
targetId: "kuaishou_feifei",
|
||||
data: {
|
||||
productCount: Number(sync?.productCount || 0) || 0,
|
||||
ruleCount: Number(sync?.ruleCount || 0) || 0,
|
||||
status: String(sync?.status || "").trim(),
|
||||
},
|
||||
};
|
||||
},
|
||||
}
|
||||
)
|
||||
);
|
||||
return {
|
||||
action: 'platform_kuaishou_feifei_products_synced',
|
||||
targetType: 'platform_config',
|
||||
targetId: 'kuaishou_feifei',
|
||||
data: {
|
||||
productCount: Number(sync?.productCount || 0) || 0,
|
||||
ruleCount: Number(sync?.ruleCount || 0) || 0,
|
||||
status: String(sync?.status || '').trim(),
|
||||
},
|
||||
}
|
||||
},
|
||||
}),
|
||||
)
|
||||
|
||||
router.post(
|
||||
"/kuaishou-feifei/test-order",
|
||||
createJsonHandler(
|
||||
(req) => createAdminKuaishouFeifeiTestOrder(req.body as JsonRecord),
|
||||
{
|
||||
successMessage: "kuaishou-feifei 测试单已创建",
|
||||
errorMessage: "创建 kuaishou-feifei 测试单失败",
|
||||
scope: "[admin/platform-config/kuaishou-feifei/test-order]",
|
||||
audit: (_req, data) => {
|
||||
const result = data as JsonRecord;
|
||||
'/kuaishou-feifei/test-order',
|
||||
createJsonHandler((req) => createAdminKuaishouFeifeiTestOrder(req.body as JsonRecord), {
|
||||
successMessage: 'kuaishou-feifei 测试单已创建',
|
||||
errorMessage: '创建 kuaishou-feifei 测试单失败',
|
||||
scope: '[admin/platform-config/kuaishou-feifei/test-order]',
|
||||
audit: (_req, data) => {
|
||||
const result = data as JsonRecord
|
||||
|
||||
return {
|
||||
action: "platform_kuaishou_feifei_test_order_created",
|
||||
targetType: "platform_config",
|
||||
targetId: "kuaishou_feifei",
|
||||
data: {
|
||||
orderNo: String(result.orderNo || "").trim(),
|
||||
platformOrderNo: String(result.platformOrderNo || "").trim(),
|
||||
productCode: String(result.productCode || "").trim(),
|
||||
rechargeStatus: Number(result.rechargeStatus || 0) || 0,
|
||||
},
|
||||
};
|
||||
},
|
||||
}
|
||||
)
|
||||
);
|
||||
return {
|
||||
action: 'platform_kuaishou_feifei_test_order_created',
|
||||
targetType: 'platform_config',
|
||||
targetId: 'kuaishou_feifei',
|
||||
data: {
|
||||
orderNo: String(result.orderNo || '').trim(),
|
||||
platformOrderNo: String(result.platformOrderNo || '').trim(),
|
||||
productCode: String(result.productCode || '').trim(),
|
||||
rechargeStatus: Number(result.rechargeStatus || 0) || 0,
|
||||
},
|
||||
}
|
||||
},
|
||||
}),
|
||||
)
|
||||
|
||||
router.post(
|
||||
"/kuaishou-feifei/query-order",
|
||||
createJsonHandler(
|
||||
(req) => queryAdminKuaishouFeifeiTestOrder(req.body as JsonRecord),
|
||||
{
|
||||
successMessage: "ok",
|
||||
errorMessage: "查询 kuaishou-feifei 订单失败",
|
||||
scope: "[admin/platform-config/kuaishou-feifei/query-order]",
|
||||
}
|
||||
)
|
||||
);
|
||||
'/kuaishou-feifei/query-order',
|
||||
createJsonHandler((req) => queryAdminKuaishouFeifeiTestOrder(req.body as JsonRecord), {
|
||||
successMessage: 'ok',
|
||||
errorMessage: '查询 kuaishou-feifei 订单失败',
|
||||
scope: '[admin/platform-config/kuaishou-feifei/query-order]',
|
||||
}),
|
||||
)
|
||||
|
||||
export default router;
|
||||
export default router
|
||||
|
||||
@@ -1,77 +1,75 @@
|
||||
import { Router } from "express";
|
||||
import { Router } from 'express'
|
||||
|
||||
import {
|
||||
failAdminNinetyoneOrder,
|
||||
getAdminNinetyoneOrders,
|
||||
retryAdminNinetyoneOrder,
|
||||
} from "../../../services/admin/platform-config/ninetyone-service.js";
|
||||
import type { AdminEntityRouteParams } from "../../../types/admin/route-inputs.js";
|
||||
import { createJsonHandler } from "../session.js";
|
||||
import type { JsonRecord } from "../../../types/json.js";
|
||||
} from '../../../services/admin/platform-config/ninetyone-service.js'
|
||||
import type { AdminEntityRouteParams } from '../../../types/admin/route-inputs.js'
|
||||
import { createJsonHandler } from '../session.js'
|
||||
import type { JsonRecord } from '../../../types/json.js'
|
||||
|
||||
const router = Router();
|
||||
const router = Router()
|
||||
|
||||
router.get(
|
||||
"/ninetyone/orders",
|
||||
'/ninetyone/orders',
|
||||
createJsonHandler((req) => getAdminNinetyoneOrders(req.query), {
|
||||
successMessage: "ok",
|
||||
errorMessage: "读取 91卡券订单失败",
|
||||
scope: "[admin/platform-config/ninetyone/orders]",
|
||||
})
|
||||
);
|
||||
successMessage: 'ok',
|
||||
errorMessage: '读取 91卡券订单失败',
|
||||
scope: '[admin/platform-config/ninetyone/orders]',
|
||||
}),
|
||||
)
|
||||
|
||||
router.post(
|
||||
"/ninetyone/orders/:id/retry",
|
||||
'/ninetyone/orders/:id/retry',
|
||||
createJsonHandler(
|
||||
(req) => retryAdminNinetyoneOrder(String((req.params as AdminEntityRouteParams).id || "")),
|
||||
(req) => retryAdminNinetyoneOrder(String((req.params as AdminEntityRouteParams).id || '')),
|
||||
{
|
||||
successMessage: "91卡券订单已重试",
|
||||
errorMessage: "重试 91卡券订单失败",
|
||||
scope: "[admin/platform-config/ninetyone/orders/:id/retry]",
|
||||
successMessage: '91卡券订单已重试',
|
||||
errorMessage: '重试 91卡券订单失败',
|
||||
scope: '[admin/platform-config/ninetyone/orders/:id/retry]',
|
||||
audit: (_req, data) => {
|
||||
const result = data as JsonRecord;
|
||||
const result = data as JsonRecord
|
||||
return {
|
||||
action: "platform_ninetyone_order_retried",
|
||||
targetType: "order",
|
||||
targetId: String(result.orderId || "").trim(),
|
||||
action: 'platform_ninetyone_order_retried',
|
||||
targetType: 'order',
|
||||
targetId: String(result.orderId || '').trim(),
|
||||
data: {
|
||||
orderNo: String(result.orderNo || "").trim(),
|
||||
orderNo: String(result.orderNo || '').trim(),
|
||||
taskCount: Number(result.taskCount || 0),
|
||||
},
|
||||
};
|
||||
}
|
||||
},
|
||||
}
|
||||
)
|
||||
);
|
||||
},
|
||||
),
|
||||
)
|
||||
|
||||
router.post(
|
||||
"/ninetyone/orders/:id/fail",
|
||||
'/ninetyone/orders/:id/fail',
|
||||
createJsonHandler(
|
||||
(req) =>
|
||||
failAdminNinetyoneOrder(
|
||||
String((req.params as AdminEntityRouteParams).id || ""),
|
||||
req.body as { reason?: string }
|
||||
String((req.params as AdminEntityRouteParams).id || ''),
|
||||
req.body as { reason?: string },
|
||||
),
|
||||
{
|
||||
successMessage: "91卡券订单已标记失败",
|
||||
errorMessage: "标记 91卡券订单失败",
|
||||
scope: "[admin/platform-config/ninetyone/orders/:id/fail]",
|
||||
successMessage: '91卡券订单已标记失败',
|
||||
errorMessage: '标记 91卡券订单失败',
|
||||
scope: '[admin/platform-config/ninetyone/orders/:id/fail]',
|
||||
audit: (req, data) => {
|
||||
const result = data as JsonRecord;
|
||||
const result = data as JsonRecord
|
||||
return {
|
||||
action: "platform_ninetyone_order_failed",
|
||||
targetType: "order",
|
||||
targetId: String(result.orderId || "").trim(),
|
||||
action: 'platform_ninetyone_order_failed',
|
||||
targetType: 'order',
|
||||
targetId: String(result.orderId || '').trim(),
|
||||
data: {
|
||||
orderNo: String(result.orderNo || "").trim(),
|
||||
reason: String(
|
||||
(req.body as { reason?: string }).reason || ""
|
||||
).trim(),
|
||||
orderNo: String(result.orderNo || '').trim(),
|
||||
reason: String((req.body as { reason?: string }).reason || '').trim(),
|
||||
},
|
||||
};
|
||||
}
|
||||
},
|
||||
}
|
||||
)
|
||||
);
|
||||
},
|
||||
),
|
||||
)
|
||||
|
||||
export default router;
|
||||
export default router
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Router } from "express";
|
||||
import { Router } from 'express'
|
||||
|
||||
import {
|
||||
getAdminNotificationConfig,
|
||||
@@ -7,152 +7,132 @@ import {
|
||||
testAdminNotification,
|
||||
updateAdminNotificationConfig,
|
||||
updateAdminScheduledJobsConfig,
|
||||
} from "../../../services/admin/platform-config/notification-service.js";
|
||||
} from '../../../services/admin/platform-config/notification-service.js'
|
||||
import type {
|
||||
AdminEntityRouteParams,
|
||||
AdminNotificationConfigRouteBody,
|
||||
AdminNotificationTestRouteBody,
|
||||
AdminScheduledJobsConfigRouteBody,
|
||||
} from "../../../types/admin/route-inputs.js";
|
||||
import { createJsonHandler } from "../session.js";
|
||||
import type { JsonRecord } from "../../../types/json.js";
|
||||
} from '../../../types/admin/route-inputs.js'
|
||||
import { createJsonHandler } from '../session.js'
|
||||
import type { JsonRecord } from '../../../types/json.js'
|
||||
|
||||
const router = Router();
|
||||
const router = Router()
|
||||
|
||||
router.get(
|
||||
"/notifications",
|
||||
'/notifications',
|
||||
createJsonHandler(() => getAdminNotificationConfig(), {
|
||||
successMessage: "ok",
|
||||
errorMessage: "读取内部通知配置失败",
|
||||
scope: "[admin/platform-config/notifications]",
|
||||
})
|
||||
);
|
||||
successMessage: 'ok',
|
||||
errorMessage: '读取内部通知配置失败',
|
||||
scope: '[admin/platform-config/notifications]',
|
||||
}),
|
||||
)
|
||||
|
||||
router.post(
|
||||
"/notifications",
|
||||
'/notifications',
|
||||
createJsonHandler(
|
||||
(req) =>
|
||||
updateAdminNotificationConfig(
|
||||
req.body as AdminNotificationConfigRouteBody
|
||||
),
|
||||
(req) => updateAdminNotificationConfig(req.body as AdminNotificationConfigRouteBody),
|
||||
{
|
||||
successMessage: "内部通知配置已保存",
|
||||
errorMessage: "保存内部通知配置失败",
|
||||
scope: "[admin/platform-config/notifications]",
|
||||
successMessage: '内部通知配置已保存',
|
||||
errorMessage: '保存内部通知配置失败',
|
||||
scope: '[admin/platform-config/notifications]',
|
||||
audit: (_req, data) => {
|
||||
const result = data as JsonRecord;
|
||||
const result = data as JsonRecord
|
||||
return {
|
||||
action: "platform_notification_config_updated",
|
||||
targetType: "platform_config",
|
||||
targetId: "notifications",
|
||||
action: 'platform_notification_config_updated',
|
||||
targetType: 'platform_config',
|
||||
targetId: 'notifications',
|
||||
data: {
|
||||
filePath: String(result.filePath || "").trim(),
|
||||
filePath: String(result.filePath || '').trim(),
|
||||
enabled: Boolean(result.source?.enabled),
|
||||
barkRecipientCount: Array.isArray(
|
||||
result.source?.channels?.bark?.recipients
|
||||
)
|
||||
barkRecipientCount: Array.isArray(result.source?.channels?.bark?.recipients)
|
||||
? result.source.channels.bark.recipients.length
|
||||
: 0,
|
||||
wpushRecipientCount: Array.isArray(
|
||||
result.source?.channels?.wpush?.recipients
|
||||
)
|
||||
wpushRecipientCount: Array.isArray(result.source?.channels?.wpush?.recipients)
|
||||
? result.source.channels.wpush.recipients.length
|
||||
: 0,
|
||||
},
|
||||
};
|
||||
}
|
||||
},
|
||||
}
|
||||
)
|
||||
);
|
||||
},
|
||||
),
|
||||
)
|
||||
|
||||
router.post(
|
||||
"/notifications/test",
|
||||
createJsonHandler(
|
||||
(req) => testAdminNotification(req.body as AdminNotificationTestRouteBody),
|
||||
{
|
||||
successMessage: "内部通知测试已执行",
|
||||
errorMessage: "内部通知测试失败",
|
||||
scope: "[admin/platform-config/notifications/test]",
|
||||
audit: (_req, data) => {
|
||||
const result = data as JsonRecord;
|
||||
return {
|
||||
action: "platform_notification_test_sent",
|
||||
targetType: "platform_config",
|
||||
targetId: "notifications",
|
||||
data: {
|
||||
channel: String(result.channel || "").trim(),
|
||||
successCount: Number(result.successCount || 0),
|
||||
failedCount: Number(result.failedCount || 0),
|
||||
},
|
||||
};
|
||||
},
|
||||
}
|
||||
)
|
||||
);
|
||||
'/notifications/test',
|
||||
createJsonHandler((req) => testAdminNotification(req.body as AdminNotificationTestRouteBody), {
|
||||
successMessage: '内部通知测试已执行',
|
||||
errorMessage: '内部通知测试失败',
|
||||
scope: '[admin/platform-config/notifications/test]',
|
||||
audit: (_req, data) => {
|
||||
const result = data as JsonRecord
|
||||
return {
|
||||
action: 'platform_notification_test_sent',
|
||||
targetType: 'platform_config',
|
||||
targetId: 'notifications',
|
||||
data: {
|
||||
channel: String(result.channel || '').trim(),
|
||||
successCount: Number(result.successCount || 0),
|
||||
failedCount: Number(result.failedCount || 0),
|
||||
},
|
||||
}
|
||||
},
|
||||
}),
|
||||
)
|
||||
|
||||
router.get(
|
||||
"/scheduled-jobs",
|
||||
'/scheduled-jobs',
|
||||
createJsonHandler(() => getAdminScheduledJobsConfig(), {
|
||||
successMessage: "ok",
|
||||
errorMessage: "读取定时任务配置失败",
|
||||
scope: "[admin/platform-config/scheduled-jobs]",
|
||||
})
|
||||
);
|
||||
successMessage: 'ok',
|
||||
errorMessage: '读取定时任务配置失败',
|
||||
scope: '[admin/platform-config/scheduled-jobs]',
|
||||
}),
|
||||
)
|
||||
|
||||
router.post(
|
||||
"/scheduled-jobs",
|
||||
'/scheduled-jobs',
|
||||
createJsonHandler(
|
||||
(req) =>
|
||||
updateAdminScheduledJobsConfig(
|
||||
req.body as AdminScheduledJobsConfigRouteBody
|
||||
),
|
||||
(req) => updateAdminScheduledJobsConfig(req.body as AdminScheduledJobsConfigRouteBody),
|
||||
{
|
||||
successMessage: "定时任务配置已保存",
|
||||
errorMessage: "保存定时任务配置失败",
|
||||
scope: "[admin/platform-config/scheduled-jobs]",
|
||||
successMessage: '定时任务配置已保存',
|
||||
errorMessage: '保存定时任务配置失败',
|
||||
scope: '[admin/platform-config/scheduled-jobs]',
|
||||
audit: (_req, data) => {
|
||||
const result = data as JsonRecord;
|
||||
const result = data as JsonRecord
|
||||
return {
|
||||
action: "platform_scheduled_jobs_updated",
|
||||
targetType: "platform_config",
|
||||
targetId: "scheduled_jobs",
|
||||
action: 'platform_scheduled_jobs_updated',
|
||||
targetType: 'platform_config',
|
||||
targetId: 'scheduled_jobs',
|
||||
data: {
|
||||
filePath: String(result.filePath || "").trim(),
|
||||
filePath: String(result.filePath || '').trim(),
|
||||
enabled: Boolean(result.source?.enabled),
|
||||
jobCount: Array.isArray(result.source?.jobs)
|
||||
? result.source.jobs.length
|
||||
: 0,
|
||||
jobCount: Array.isArray(result.source?.jobs) ? result.source.jobs.length : 0,
|
||||
},
|
||||
};
|
||||
}
|
||||
},
|
||||
}
|
||||
)
|
||||
);
|
||||
},
|
||||
),
|
||||
)
|
||||
|
||||
router.post(
|
||||
"/scheduled-jobs/:id/run",
|
||||
createJsonHandler(
|
||||
(req) => runAdminScheduledJobNow((req.params as AdminEntityRouteParams).id),
|
||||
{
|
||||
successMessage: "定时任务已执行",
|
||||
errorMessage: "执行定时任务失败",
|
||||
scope: "[admin/platform-config/scheduled-jobs/:id/run]",
|
||||
audit: (req, data) => {
|
||||
const result = data as JsonRecord;
|
||||
return {
|
||||
action: "platform_scheduled_job_run",
|
||||
targetType: "platform_config",
|
||||
targetId: String(
|
||||
(req.params as AdminEntityRouteParams).id || ""
|
||||
).trim(),
|
||||
data: {
|
||||
status: String(result.result?.status || "").trim(),
|
||||
message: String(result.result?.message || "").trim(),
|
||||
},
|
||||
};
|
||||
},
|
||||
}
|
||||
)
|
||||
);
|
||||
'/scheduled-jobs/:id/run',
|
||||
createJsonHandler((req) => runAdminScheduledJobNow((req.params as AdminEntityRouteParams).id), {
|
||||
successMessage: '定时任务已执行',
|
||||
errorMessage: '执行定时任务失败',
|
||||
scope: '[admin/platform-config/scheduled-jobs/:id/run]',
|
||||
audit: (req, data) => {
|
||||
const result = data as JsonRecord
|
||||
return {
|
||||
action: 'platform_scheduled_job_run',
|
||||
targetType: 'platform_config',
|
||||
targetId: String((req.params as AdminEntityRouteParams).id || '').trim(),
|
||||
data: {
|
||||
status: String(result.result?.status || '').trim(),
|
||||
message: String(result.result?.message || '').trim(),
|
||||
},
|
||||
}
|
||||
},
|
||||
}),
|
||||
)
|
||||
|
||||
export default router;
|
||||
export default router
|
||||
|
||||
Reference in New Issue
Block a user