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({ entityID: { $in: entityIDs } }) .toArray(); export const getRolesByEntity = async (entityID: string) => await db.collection("roles").find({ entityID }).toArray(); export const getRoles = async (ids?: string[]) => await db.collection("roles").find(!ids ? {} : { id: { $in: ids } }).toArray(); export const getRole = async (id: string) => (await db.collection("roles").findOne({ id })) ?? undefined; export const getDefaultRole = async (entityID: string) => await db.collection("roles").findOne({ 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 }] } );