175 lines
4.5 KiB
TypeScript
175 lines
4.5 KiB
TypeScript
import { prisma } from "../db";
|
|
|
|
export interface PlanQuota {
|
|
name: string;
|
|
slTrackedClicks: number;
|
|
slNewLinks: number;
|
|
slAnalyticsRetention: number;
|
|
slDomains: number;
|
|
slAdvancedAnalytics: boolean;
|
|
slCustomQrCodeLogo: boolean;
|
|
rcNewRecords: number;
|
|
emEmailAddresses: number;
|
|
emDomains: number;
|
|
emSendEmails: number;
|
|
stMaxFileSize: string;
|
|
stMaxTotalSize: string;
|
|
stMaxFileCount: number;
|
|
appSupport: string;
|
|
appApiAccess: boolean;
|
|
isActive: boolean;
|
|
}
|
|
|
|
export interface PlanQuotaFormData extends PlanQuota {
|
|
id?: string;
|
|
createdAt?: Date;
|
|
updatedAt?: Date;
|
|
}
|
|
|
|
// 获取计划配额
|
|
export async function getPlanQuota(planName: string) {
|
|
const plan = await prisma.plan.findUnique({
|
|
where: { name: planName },
|
|
});
|
|
|
|
if (!plan) {
|
|
return {
|
|
name: planName,
|
|
slTrackedClicks: 0,
|
|
slNewLinks: 0,
|
|
slAnalyticsRetention: 0,
|
|
slDomains: 0,
|
|
slAdvancedAnalytics: false,
|
|
slCustomQrCodeLogo: false,
|
|
rcNewRecords: 0,
|
|
emEmailAddresses: 0,
|
|
emDomains: 0,
|
|
emSendEmails: 0,
|
|
stMaxFileSize: "26214400",
|
|
stMaxTotalSize: "524288000",
|
|
stMaxFileCount: 1000,
|
|
appSupport: "BASIC",
|
|
appApiAccess: true,
|
|
isActive: true,
|
|
};
|
|
}
|
|
|
|
return {
|
|
name: planName,
|
|
slTrackedClicks: plan.slTrackedClicks,
|
|
slNewLinks: plan.slNewLinks,
|
|
slAnalyticsRetention: plan.slAnalyticsRetention,
|
|
slDomains: plan.slDomains,
|
|
slAdvancedAnalytics: plan.slAdvancedAnalytics,
|
|
slCustomQrCodeLogo: plan.slCustomQrCodeLogo,
|
|
rcNewRecords: plan.rcNewRecords,
|
|
emEmailAddresses: plan.emEmailAddresses,
|
|
emDomains: plan.emDomains,
|
|
emSendEmails: plan.emSendEmails,
|
|
stMaxFileSize: plan.stMaxFileSize,
|
|
stMaxTotalSize: plan.stMaxTotalSize,
|
|
stMaxFileCount: plan.stMaxFileCount,
|
|
appSupport: plan.appSupport.toLowerCase(),
|
|
appApiAccess: plan.appApiAccess,
|
|
isActive: plan.isActive,
|
|
};
|
|
}
|
|
|
|
// 获取所有计划
|
|
export async function getAllPlans(page = 1, size = 10, target: string = "") {
|
|
let option: any;
|
|
|
|
if (target) {
|
|
option = {
|
|
name: {
|
|
contains: target,
|
|
},
|
|
};
|
|
}
|
|
|
|
const [total, list] = await prisma.$transaction([
|
|
prisma.plan.count({
|
|
where: option,
|
|
}),
|
|
prisma.plan.findMany({
|
|
where: option,
|
|
skip: (page - 1) * size,
|
|
take: size,
|
|
orderBy: {
|
|
slTrackedClicks: "asc",
|
|
},
|
|
}),
|
|
]);
|
|
return { list, total };
|
|
}
|
|
|
|
// 获取计划所有名称
|
|
export async function getPlanNames() {
|
|
const data = await prisma.plan.findMany({
|
|
where: { isActive: true },
|
|
select: { name: true },
|
|
orderBy: { name: "asc" },
|
|
});
|
|
|
|
return data.map((item) => item.name);
|
|
}
|
|
|
|
// 更新计划配额
|
|
export async function updatePlanQuota(plan: PlanQuotaFormData) {
|
|
return await prisma.plan.update({
|
|
where: { id: plan.id },
|
|
data: {
|
|
// name: plan.name,
|
|
slTrackedClicks: plan.slTrackedClicks,
|
|
slNewLinks: plan.slNewLinks,
|
|
slAnalyticsRetention: plan.slAnalyticsRetention,
|
|
slDomains: plan.slDomains,
|
|
slAdvancedAnalytics: plan.slAdvancedAnalytics,
|
|
slCustomQrCodeLogo: plan.slCustomQrCodeLogo,
|
|
rcNewRecords: plan.rcNewRecords,
|
|
emEmailAddresses: plan.emEmailAddresses,
|
|
emDomains: plan.emDomains,
|
|
emSendEmails: plan.emSendEmails,
|
|
stMaxFileSize: plan.stMaxFileSize,
|
|
stMaxTotalSize: plan.stMaxTotalSize,
|
|
stMaxFileCount: plan.stMaxFileCount,
|
|
appSupport: plan.appSupport.toUpperCase() as any,
|
|
appApiAccess: plan.appApiAccess,
|
|
isActive: plan.isActive,
|
|
updatedAt: new Date(),
|
|
},
|
|
});
|
|
}
|
|
|
|
// 创建新计划
|
|
export async function createPlan(plan: PlanQuota) {
|
|
return await prisma.plan.create({
|
|
data: {
|
|
name: plan.name,
|
|
slTrackedClicks: plan.slTrackedClicks,
|
|
slNewLinks: plan.slNewLinks,
|
|
slAnalyticsRetention: plan.slAnalyticsRetention,
|
|
slDomains: plan.slDomains,
|
|
slAdvancedAnalytics: plan.slAdvancedAnalytics,
|
|
slCustomQrCodeLogo: plan.slCustomQrCodeLogo,
|
|
rcNewRecords: plan.rcNewRecords,
|
|
emEmailAddresses: plan.emEmailAddresses,
|
|
emDomains: plan.emDomains,
|
|
emSendEmails: plan.emSendEmails,
|
|
stMaxFileSize: plan.stMaxFileSize,
|
|
stMaxTotalSize: plan.stMaxTotalSize,
|
|
stMaxFileCount: plan.stMaxFileCount,
|
|
appSupport: plan.appSupport.toUpperCase() as any,
|
|
appApiAccess: plan.appApiAccess,
|
|
isActive: true,
|
|
},
|
|
});
|
|
}
|
|
|
|
// 删除计划(软删除)
|
|
export async function deletePlan(id: string) {
|
|
return await prisma.plan.delete({
|
|
where: { id },
|
|
});
|
|
}
|