import { Types } from "mongoose"; import { PermissionModel } from "@/models/permission.model"; import { PERMISSIONS, PERMISSION_LIST } from "@/constants/permissions"; import { ERROR_INVALID_PARAMS, ERROR_NOT_FOUND } from "@/constants/errors"; import type { Account } from "@/types/models/account.type"; import type { AccountService } from "./permission.interface"; import type { Permission } from "@/types/models/permission.type"; type PermissionServiceDeps = { readonly accountService: AccountService; }; export class PermissionService { private accountService: AccountService; constructor(deps: PermissionServiceDeps) { this.accountService = deps.accountService; } public async deleteAccount(account: Account): Promise { try { const role = await this.accountService.determineAccountRole(account); if (!role.permissions[PERMISSIONS.deleteAccount]) { return false; } return true; } catch { return false; } } public async getAllPermissions(): Promise { const permissions = await PermissionModel.find({}).lean(); return [...permissions, ...PERMISSION_LIST]; } public async removePermission(id: string, permission: Permission): Promise { if (!Types.ObjectId.isValid(id)) { throw ERROR_INVALID_PARAMS; } const findedPermission = await PermissionModel.findByIdAndUpdate(id, { $set: permission, }); if (!findedPermission) { throw ERROR_NOT_FOUND; } return permission; } }