125 lines
4.4 KiB
JavaScript
125 lines
4.4 KiB
JavaScript
const baseModel = require("../../middleware/baseModel");
|
|
const { build_search_where } = require("../utils/query_helpers");
|
|
const logic = require("../service/biz_subscription_logic");
|
|
const audit = require("../utils/biz_audit");
|
|
|
|
function subscription_rows_with_names(instances) {
|
|
return instances.map((r) => {
|
|
const j = r.toJSON();
|
|
const u = j.biz_user;
|
|
const p = j.biz_plan;
|
|
const { biz_user, biz_plan, ...rest } = j;
|
|
return {
|
|
...rest,
|
|
user_name: u ? [u.name, u.mobile].filter(Boolean).join(" ").trim() : "",
|
|
plan_name: p ? String(p.plan_name || p.plan_code || "").trim() : "",
|
|
};
|
|
});
|
|
}
|
|
|
|
module.exports = {
|
|
"POST /biz_subscription/page": async (ctx) => {
|
|
const body = ctx.getBody();
|
|
const param = body.param || body;
|
|
const page_option = param.pageOption || {};
|
|
const seach_option = param.seachOption || {};
|
|
const page_num = parseInt(page_option.page, 10) || 1;
|
|
const page_size = parseInt(page_option.pageSize, 10) || 20;
|
|
const offset = (page_num - 1) * page_size;
|
|
const biz_subscription = baseModel.biz_subscription;
|
|
const where = build_search_where(biz_subscription, seach_option);
|
|
const { count, rows } = await biz_subscription.findAndCountAll({
|
|
where,
|
|
offset,
|
|
limit: page_size,
|
|
order: [["id", "DESC"]],
|
|
include: [
|
|
{ model: baseModel.biz_user, as: "biz_user", attributes: ["name", "mobile"] },
|
|
{ model: baseModel.biz_plan, as: "biz_plan", attributes: ["plan_name", "plan_code"] },
|
|
],
|
|
distinct: true,
|
|
});
|
|
ctx.success({ rows: subscription_rows_with_names(rows), count });
|
|
},
|
|
"GET /biz_subscription/detail": async (ctx) => {
|
|
const q = ctx.query || {};
|
|
const id = q.id || q.ID;
|
|
if (id === undefined || id === null || id === "") throw new Error("缺少 id");
|
|
const row = await baseModel.biz_subscription.findByPk(id);
|
|
ctx.success(row);
|
|
},
|
|
"GET /biz_subscription/by_user": async (ctx) => {
|
|
const q = ctx.query || {};
|
|
const user_id = q.user_id || q.userId;
|
|
if (!user_id) return ctx.fail("缺少 user_id");
|
|
const rows = await baseModel.biz_subscription.findAll({
|
|
where: { user_id },
|
|
order: [["id", "DESC"]],
|
|
});
|
|
ctx.success(rows);
|
|
},
|
|
"POST /biz_subscription/open": async (ctx) => {
|
|
const body = ctx.getBody();
|
|
const row = await logic.openSubscription(body);
|
|
await audit.logAudit({
|
|
admin_user_id: audit.pickAdminId(ctx),
|
|
biz_user_id: body.user_id,
|
|
action: "biz_subscription.open",
|
|
resource_type: "biz_subscription",
|
|
resource_id: row.id,
|
|
detail: { plan_id: body.plan_id, status: row.status },
|
|
});
|
|
ctx.success(row);
|
|
},
|
|
"POST /biz_subscription/upgrade": async (ctx) => {
|
|
const body = ctx.getBody();
|
|
const row = await logic.upgradeSubscription(body);
|
|
await audit.logAudit({
|
|
admin_user_id: audit.pickAdminId(ctx),
|
|
action: "biz_subscription.upgrade",
|
|
resource_type: "biz_subscription",
|
|
resource_id: body.subscription_id,
|
|
detail: { new_plan_id: body.new_plan_id },
|
|
});
|
|
ctx.success(row);
|
|
},
|
|
"POST /biz_subscription/renew": async (ctx) => {
|
|
const body = ctx.getBody();
|
|
const row = await logic.renewSubscription(body);
|
|
await audit.logAudit({
|
|
admin_user_id: audit.pickAdminId(ctx),
|
|
action: "biz_subscription.renew",
|
|
resource_type: "biz_subscription",
|
|
resource_id: body.subscription_id,
|
|
});
|
|
ctx.success(row);
|
|
},
|
|
"POST /biz_subscription/cancel": async (ctx) => {
|
|
const body = ctx.getBody();
|
|
const row = await logic.cancelSubscription(body);
|
|
await audit.logAudit({
|
|
admin_user_id: audit.pickAdminId(ctx),
|
|
action: "biz_subscription.cancel",
|
|
resource_type: "biz_subscription",
|
|
resource_id: body.subscription_id,
|
|
});
|
|
ctx.success(row);
|
|
},
|
|
"POST /biz_subscription/export": async (ctx) => {
|
|
const body = ctx.getBody();
|
|
const param = body.param || body;
|
|
const biz_subscription = baseModel.biz_subscription;
|
|
const where = build_search_where(biz_subscription, param.seachOption || {});
|
|
const rows = await biz_subscription.findAll({
|
|
where,
|
|
limit: 10000,
|
|
order: [["id", "DESC"]],
|
|
include: [
|
|
{ model: baseModel.biz_user, as: "biz_user", attributes: ["name", "mobile"] },
|
|
{ model: baseModel.biz_plan, as: "biz_plan", attributes: ["plan_name", "plan_code"] },
|
|
],
|
|
});
|
|
ctx.success({ rows: subscription_rows_with_names(rows) });
|
|
},
|
|
};
|