ff-admin-server/src/command/user/webapi/webapiPermissionCommandHandler.ts

79 lines
2.8 KiB
TypeScript
Raw Normal View History

import { DeleteResult, EntityManager, InsertResult } from "typeorm";
import { dataSource } from "../../../data-source";
2025-01-22 09:39:31 +01:00
import { webapiPermission } from "../../../entity/user/webapi_permission";
import InternalException from "../../../exceptions/internalException";
2025-01-22 09:39:31 +01:00
import WebapiService from "../../../service/user/webapiService";
import {
2025-01-22 09:39:31 +01:00
CreateWebapiPermissionCommand,
DeleteWebapiPermissionCommand,
UpdateWebapiPermissionsCommand,
} from "./webapiPermissionCommand";
import PermissionHelper from "../../../helpers/permissionHelper";
2025-01-22 09:39:31 +01:00
import WebapiPermissionService from "../../../service/user/webapiPermissionService";
import { PermissionString } from "../../../type/permissionTypes";
2025-01-29 09:42:22 +01:00
import DatabaseActionException from "../../../exceptions/databaseActionException";
2025-01-22 09:39:31 +01:00
export default abstract class WebapiPermissionCommandHandler {
/**
* @description update api permissions
2025-01-22 09:39:31 +01:00
* @param {UpdateWebapiPermissionsCommand} updateWebapiPermissions
* @returns {Promise<void>}
*/
2025-01-22 09:39:31 +01:00
static async updatePermissions(updateWebapiPermissions: UpdateWebapiPermissionsCommand): Promise<void> {
2025-01-22 11:57:19 +01:00
let currentPermissions = (await WebapiPermissionService.getByApi(updateWebapiPermissions.webapiId)).map(
2025-01-22 09:39:31 +01:00
(r) => r.permission
);
return await dataSource.manager
.transaction(async (manager) => {
2025-01-22 09:39:31 +01:00
let newPermissions = PermissionHelper.getWhatToAdd(currentPermissions, updateWebapiPermissions.permissions);
let removePermissions = PermissionHelper.getWhatToRemove(
currentPermissions,
updateWebapiPermissions.permissions
);
if (newPermissions.length != 0) {
2025-01-22 11:57:19 +01:00
await this.updatePermissionsAdd(manager, updateWebapiPermissions.webapiId, newPermissions);
}
if (removePermissions.length != 0) {
2025-01-22 11:57:19 +01:00
await this.updatePermissionsRemove(manager, updateWebapiPermissions.webapiId, removePermissions);
}
})
.then(() => {})
.catch((err) => {
2025-01-29 09:42:22 +01:00
throw new DatabaseActionException("UPDATE", "webapiPermission", err);
});
}
private static async updatePermissionsAdd(
manager: EntityManager,
2025-01-22 09:39:31 +01:00
webapiId: number,
permissions: Array<PermissionString>
): Promise<InsertResult> {
return await manager
.createQueryBuilder()
.insert()
2025-01-22 09:39:31 +01:00
.into(webapiPermission)
.values(
permissions.map((p) => ({
permission: p,
2025-01-22 11:57:19 +01:00
webapiId: webapiId,
}))
)
.orIgnore()
.execute();
}
private static async updatePermissionsRemove(
manager: EntityManager,
2025-01-22 09:39:31 +01:00
webapiId: number,
permissions: Array<PermissionString>
): Promise<DeleteResult> {
return await manager
.createQueryBuilder()
.delete()
2025-01-22 09:39:31 +01:00
.from(webapiPermission)
.where("webapiId = :id", { id: webapiId })
.andWhere("permission IN (:...permission)", { permission: permissions })
.execute();
}
}