UNPKG

env-manage-plugin

Version:

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

101 lines (100 loc) 4.13 kB
import { v4 as uuidv4 } from "uuid"; /** * 密码服务类 * 负责处理与密码相关的核心业务逻辑,包括密码的增删改查等操作 * 依赖密码仓库(PasswordRepo)实现数据持久化 */ class PasswordService { /** * 构造函数 - 通过依赖注入初始化仓库实例 * @param passwordRepo - 密码仓库实例,用于密码数据的持久化操作 */ constructor(passwordRepo) { this.passwordRepo = passwordRepo; } /** * 获取指定环境的所有密码 * @param envId - 环境ID * @returns 该环境的所有密码数组 */ handleGetByEnvId(envId) { return this.passwordRepo.getByEnvId(envId); } /** * 添加新密码 * 1. 校验输入参数合法性 2. 检查是否已存在相同名称 3. 如果设为默认密码则先清除其他默认密码 4. 生成唯一ID 5. 保存 * @param passwordItem - 待添加的密码信息(不含ID) * @returns 新创建的密码 * @throws {Error} 当输入参数不合法或已存在相同名称时抛出 */ handleAdd(passwordItem) { const { envId, name, isDefault } = passwordItem; // 检查是否已存在相同名称的密码(同一环境下) if (this.passwordRepo.existsByEnvIdAndName(envId, name)) { throw new Error(`添加失败,该环境下已存在名称为【${name}】的密码`); } // 如果设为默认密码,先清除其他默认密码 if (isDefault) { this.passwordRepo.clearDefaultByEnvId(envId); } // 生成唯一ID并组装完整密码信息 const now = new Date().toISOString(); const newPassword = { ...passwordItem, id: uuidv4(), createdAt: now, updatedAt: now, }; // 保存密码 this.passwordRepo.create(newPassword); return newPassword; } /** * 更新密码 * 1. 校验输入参数 2. 检查密码是否存在 3. 如果设为默认密码则先清除其他默认密码 4. 执行更新 * @param passwordItem - 包含待更新密码ID及字段的对象 * @returns 更新后的密码 * @throws {Error} 当输入参数不合法或密码不存在时抛出 */ handleUpdate(passwordItem) { const { id, isDefault } = passwordItem; // 检查密码是否存在 const existingPassword = this.passwordRepo.findOneById(id); if (!existingPassword) { throw new Error(`更新失败,密码【${id}】不存在`); } // 如果更新了名称,检查是否与其他密码冲突 if (passwordItem.name && passwordItem.name !== existingPassword.name) { if (this.passwordRepo.existsByEnvIdAndName(existingPassword.envId, passwordItem.name)) { throw new Error(`更新失败,该环境下已存在名称为【${passwordItem.name}】的密码`); } } // 如果设为默认密码(从false改为true),先清除其他默认密码 if (isDefault && !existingPassword.isDefault) { this.passwordRepo.clearDefaultByEnvId(existingPassword.envId, id); } // 添加更新时间 passwordItem.updatedAt = new Date().toISOString(); // 执行更新 this.passwordRepo.update(passwordItem); // 返回更新后的密码 return this.passwordRepo.findOneById(id); } /** * 删除指定密码 * 1. 校验输入参数 2. 检查密码是否存在 3. 执行删除操作 * @param passwordItem - 包含待删除密码ID的对象 * @throws {Error} 当输入参数不合法或密码不存在时抛出 */ handleDelete(passwordItem) { const { id } = passwordItem; // 检查密码是否存在 const existingPassword = this.passwordRepo.findOneById(id); if (!existingPassword) { throw new Error(`删除失败,密码【${id}】不存在`); } // 执行删除 this.passwordRepo.delete(passwordItem); } } export { PasswordService };