tariffs/src/services/permission/permission.service.ts
2023-05-12 07:03:11 +03:00

59 lines
1.5 KiB
TypeScript

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<boolean> {
try {
const role = await this.accountService.determineAccountRole(account);
if (!role.permissions[PERMISSIONS.deleteAccount]) {
return false;
}
return true;
} catch {
return false;
}
}
public async getAllPermissions(): Promise<Permission[]> {
const permissions = await PermissionModel.find({}).lean();
return [...permissions, ...PERMISSION_LIST];
}
public async removePermission(id: string, permission: Permission): Promise<Permission> {
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;
}
}