@avonjs/avonjs
Version:
A fluent Node.js API generator.
62 lines (61 loc) • 2.48 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const Avon_1 = __importDefault(require("../../Avon"));
const Contracts_1 = require("../../Contracts");
const Responses_1 = require("../Responses");
const Controller_1 = __importDefault(require("./Controller"));
class ResourceDeleteController 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.delete}" access on "${request.resourceName()}".`);
await resource.authorizeTo(request, Contracts_1.Ability.delete);
if (resource.softDeletes()) {
request.logger()?.dump(`Soft deleting "${request.resourceName()}" ...`);
}
else {
request.logger()?.dump(`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.beforeDelete(request);
await repository.delete(request.resourceId());
await resource.afterDelete(request);
if (resource.softDeletes()) {
await resource.recordDeletionEvent(transaction, Avon_1.default.userId(request));
}
else {
await resource.flushActionEvents(transaction);
}
});
if (!resource.softDeletes()) {
request
.logger()
?.dump(`Resource "${request.resourceName()}" by id "${request.resourceId()}" "deleted".`);
await resource.deleted(request);
}
else {
request
.logger()
?.dump(`Resource "${request.resourceName()}" "soft deleted".`);
}
request.logger()?.dump('Preparing response ...');
return new Responses_1.EmptyResponse();
}
}
exports.default = ResourceDeleteController;