Files
encoach_frontend/src/utils/roles.be.ts
2024-12-24 10:31:52 +00:00

37 lines
1.5 KiB
TypeScript

import { Role } from "@/interfaces/entity";
import client from "@/lib/mongodb";
const db = client.db(process.env.MONGODB_DB);
export const getRolesByEntities = async (entityIDs: string[]) =>
await db
.collection("roles")
.find<Role>({ entityID: { $in: entityIDs } })
.toArray();
export const getRolesByEntity = async (entityID: string) => await db.collection("roles").find<Role>({ entityID }).toArray();
export const getRoles = async (ids?: string[]) => await db.collection("roles").find<Role>(!ids ? {} : { id: { $in: ids } }).toArray();
export const getRole = async (id: string) => (await db.collection("roles").findOne<Role>({ id })) ?? undefined;
export const getDefaultRole = async (entityID: string) => await db.collection("roles").findOne<Role>({ isDefault: true, entityID })
export const createRole = async (role: Role) => await db.collection("roles").insertOne(role)
export const deleteRole = async (id: string) => await db.collection("roles").deleteOne({ id })
export const transferRole = async (previousRole: string, newRole: string) =>
await db.collection("users")
.updateMany(
{ "entities.role": previousRole },
{ $set: { 'entities.$[elem].role': newRole } },
{ arrayFilters: [{ 'elem.role': previousRole }] }
);
export const assignRoleToUsers = async (users: string[], entity: string, newRole: string) =>
await db.collection("users")
.updateMany(
{ id: { $in: users } },
{ $set: { 'entities.$[elem].role': newRole } },
{ arrayFilters: [{ 'elem.id': entity }] }
);