@avonjs/avonjs
Version:
A fluent Node.js API generator.
44 lines (43 loc) • 1.91 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const Contracts_1 = require("../../Contracts");
const Responses_1 = require("../Responses");
const Controller_1 = __importDefault(require("./Controller"));
class ResourceForceDeleteController extends Controller_1.default {
/**
* Default route handler
*/
async __invoke(request) {
request
.logger()
?.dump(`Searching on "${request.resourceName()}" repository ...`);
const resource = await request.findResourceOrFail();
request
.logger()
?.dump(`Authorizing user for "${Contracts_1.Ability.forceDelete}" access on "${request.resourceName()}".`);
await resource.authorizeTo(request, Contracts_1.Ability.forceDelete);
request.logger()?.dump(`Force deleting "${request.resourceName()}" ...`);
await request.transaction(async (repository, transaction) => {
// handle prunable fields
// await Promise.all(
// resource
// .prunableFields(request, false)
// .map((field) => field.forRequest(request)),
// );
await resource.beforeForceDelete(request);
await repository.forceDelete(resource.resource.getKey());
await resource.afterForceDelete(request);
await resource.flushActionEvents(transaction);
});
request
.logger()
?.dump(`Resource "${request.resourceName()}" by id "${request.resourceId()}" "force deleted".`);
await resource.deleted(request);
request.logger()?.dump('Preparing response ...');
return new Responses_1.EmptyResponse();
}
}
exports.default = ResourceForceDeleteController;