"use strict";
// oms/src/src/services/messageStrategyService.ts
Object.defineProperty(exports, "__esModule", { value: true });
exports.deleteStrategy = exports.updateStrategy = exports.createStrategy = exports.getStrategyByName = exports.getStrategyById = exports.getStrategies = void 0;
const messageStrategyModel_1 = require("../models/messageStrategyModel");
const messageTemplateModel_1 = require("../models/messageTemplateModel");
/**
 * 获取所有消息策略列表，按创建时间降序排列。
 * @returns 包含消息策略对象的 Promise，其中 templates 字段已填充。
 */
const getStrategies = async () => {
    try {
        const strategies = await messageStrategyModel_1.MessageStrategy.find({})
            .sort({ createdAt: -1 }) // 按创建时间降序排列
            .populate({
            path: "templates",
            select: "templateName description",
            model: messageTemplateModel_1.MessageTemplate,
        })
            .exec();
        return strategies;
    }
    catch (error) {
        console.error("获取消息策略列表失败：", error);
        throw new Error("无法获取消息策略列表。");
    }
};
exports.getStrategies = getStrategies;
/**
 * 根据 ID 获取单个消息策略的详情。
 * @param id 消息策略的 ObjectId
 * @returns 包含单个消息策略对象的 Promise，如果未找到则返回 null。
 */
const getStrategyById = async (id) => {
    try {
        const strategy = await messageStrategyModel_1.MessageStrategy.findById(id)
            .populate({
            path: "templates",
            select: "templateName description",
            model: messageTemplateModel_1.MessageTemplate,
        })
            .exec();
        return strategy;
    }
    catch (error) {
        console.error(`获取 ID 为 ${id} 的消息策略失败：`, error);
        throw new Error(`无法获取 ID 为 ${id} 的消息策略。`);
    }
};
exports.getStrategyById = getStrategyById;
/**
 * 根据 name 获取单个消息策略的详情。
 * @param id 消息策略的 ObjectId
 * @returns 包含单个消息策略对象的 Promise，如果未找到则返回 null。
 */
const getStrategyByName = async (name) => {
    try {
        const strategy = await messageStrategyModel_1.MessageStrategy.findOne({ name })
            .populate({
            path: "templates",
            select: "templateName description",
            model: messageTemplateModel_1.MessageTemplate,
        })
            .exec();
        return strategy;
    }
    catch (error) {
        console.error(`获取 name 为 ${name} 的消息策略失败：`, error);
        throw new Error(`无法获取 ID 为 ${name} 的消息策略。`);
    }
};
exports.getStrategyByName = getStrategyByName;
/**
 * 创建一个新的消息策略。
 * @param strategyData 要创建的策略数据。
 * @returns 创建成功的消息策略对象。
 */
const createStrategy = async (strategyData) => {
    try {
        const newStrategy = new messageStrategyModel_1.MessageStrategy(strategyData);
        const savedStrategy = await newStrategy.save();
        return savedStrategy;
    }
    catch (error) {
        console.error("创建消息策略失败：", error);
        throw new Error("无法创建消息策略。");
    }
};
exports.createStrategy = createStrategy;
/**
 * 根据 ID 更新消息策略。
 * @param id 消息策略的 ObjectId。
 * @param updateData 要更新的字段数据。
 * @returns 更新后的消息策略对象。
 */
const updateStrategy = async (id, updateData) => {
    try {
        const updatedStrategy = await messageStrategyModel_1.MessageStrategy.findByIdAndUpdate(id, updateData, { new: true });
        return updatedStrategy;
    }
    catch (error) {
        console.error(`更新 ID 为 ${id} 的消息策略失败：`, error);
        throw new Error(`无法更新 ID 为 ${id} 的消息策略。`);
    }
};
exports.updateStrategy = updateStrategy;
/**
 * 根据 ID 删除消息策略。
 * @param id 消息策略的 ObjectId。
 * @returns 删除成功的消息策略对象。
 */
const deleteStrategy = async (id) => {
    try {
        const deletedStrategy = await messageStrategyModel_1.MessageStrategy.findByIdAndDelete(id);
        return deletedStrategy;
    }
    catch (error) {
        console.error(`删除 ID 为 ${id} 的消息策略失败：`, error);
        throw new Error(`无法删除 ID 为 ${id} 的消息策略。`);
    }
};
exports.deleteStrategy = deleteStrategy;
