62 lines
1.7 KiB
TypeScript
62 lines
1.7 KiB
TypeScript
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<EntityWithRoles | undefined> => {
|
|
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<Entity>({id})) ?? undefined;
|
|
};
|
|
|
|
export const getEntitiesWithRoles = async (ids?: string[]): Promise<EntityWithRoles[]> => {
|
|
const entities = await db
|
|
.collection("entities")
|
|
.find<Entity>(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<Entity>(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},
|
|
},
|
|
},
|
|
);
|
|
}
|