import {Entity, EntityWithRoles, Role} from "@/interfaces/entity"; import client from "@/lib/mongodb"; import { v4 } from "uuid"; import {getRolesByEntities, getRolesByEntity} from "./roles.be"; const db = client.db(process.env.MONGODB_DB); export const getEntityWithRoles = async (id: string): Promise => { const entity = await getEntity(id); if (!entity) return undefined; const roles = await getRolesByEntity(id); return {...entity, roles}; }; export const getEntity = async (id: string) => { return (await db.collection("entities").findOne({id})) ?? undefined; }; export const getEntitiesWithRoles = async (ids?: string[]): Promise => { const entities = await db .collection("entities") .find(ids ? {id: {$in: ids}} : {}) .toArray(); const roles = await getRolesByEntities(entities.map((x) => x.id)); return entities.map((x) => ({...x, roles: roles.filter((y) => y.entityID === x.id) || []})); }; export const getEntities = async (ids?: string[]) => { return await db .collection("entities") .find(ids ? {id: {$in: ids}} : {}) .toArray(); }; export const createEntity = async (entity: Entity) => { await db.collection("entities").insertOne(entity) await db.collection("roles").insertOne({ id: v4(), label: "Default", permissions: [], entityID: entity.id }) } export const deleteEntity = async (entity: Entity) => { await db.collection("entities").deleteOne({id: entity.id}) await db.collection("roles").deleteMany({entityID: entity.id}) await db.collection("users").updateMany( {"entities.id": entity.id}, { // @ts-expect-error $pull: { entities: {id: entity.id}, }, }, ); }