UNPKG

env-manage-plugin

Version:

A dev env plugin that integrates an Express server with request proxying capabilities.

122 lines (121 loc) 3.46 kB
import { AppError } from "../utils/errors.js"; import { getDatabase } from "./database.js"; import { EnvDeleteSchema, } from "../types/index.js"; /** * 环境仓库类 * 负责环境相关数据的持久化操作,封装了数据库交互逻辑 */ class EnvRepo { /** * 获取环境数据集合 * @returns 环境数据集合对象 */ getCollection() { return getDatabase().getCollection("envms"); } /** * 构造函数 */ constructor() { } /** * 获取所有环境信息 * @returns 所有环境信息的数组 */ getAll() { return this.getCollection().find(); } /** * 添加新环境 * @param env - 要添加的环境完整信息对象 */ addEnv(env) { this.getCollection().insert(env); } /** * 删除指定环境 * @param env - 包含要删除环境ID的对象 * @throws {Error} 当验证失败或删除操作出现问题时抛出错误 */ deleteEnv(env) { const target = EnvDeleteSchema.safeParse(env); if (!target.success) { throw new AppError(`删除环境验证失败: ${JSON.stringify(target.error)}`); } this.getCollection().findAndRemove(target.data); } /** * 根据ID查询环境信息 * @param env - 包含要查询环境ID的对象 * @returns 匹配的环境信息对象,若未找到则返回null * @throws {Error} 当验证失败时抛出错误 */ findOne(env) { return this.getCollection().findOne(env); } /** * 根据ID查询环境信息 * @param id - 包含要查询环境ID * @returns 匹配的环境信息对象,若未找到则返回null * @throws {Error} 当验证失败时抛出错误 */ findOneById(id) { return this.findOne({ id, }); } /** * 根据devServerID查询数据 * @param devServerId * @returns */ findEnvsByDevServerId(devServerId) { return this.getCollection().find({ devServerId, }); } /** * 根据状态查询环境 * @param status - 环境状态(如'running'、'stopped'等) * @returns 符合条件的环境数组 */ findAllByStatus(status) { return this.getCollection().find({ status }); } /** * 根据 apiBaseUrl 环境信息查找单个环境 新增前用于判断是否重复 * @param env 环境信息 * @returns 匹配的环境信息或 undefined */ findOneByApiBaseUrl(env) { return this.getCollection().findOne({ apiBaseUrl: env.apiBaseUrl, }); } /** * 根据状态和端口查询 * @param env * @returns */ findOneByPortAndStatus(env) { return this.getCollection().findOne({ port: env.port, status: env.status, }); } /** * 更新环境信息 * @param envmItem - 包含要更新的环境ID及字段的对象 * @throws {AppError} 当未找到对应环境时抛出异常 * @throws {Error} 当更新操作出现问题时抛出错误 */ update(envmItem) { this.getCollection().findAndUpdate({ id: envmItem.id }, (env) => { if (!env) { throw new AppError("未找到对应的环境"); } Object.assign(env, envmItem); return env; }); } } export { EnvRepo };