oak-general-business/lib/checkers/applicationPassport.js

120 lines
4.2 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const uuid_1 = require("oak-domain/lib/utils/uuid");
const executor_1 = require("oak-domain/lib/utils/executor");
const assert_1 = require("oak-domain/lib/utils/assert");
const checkers = [
{
entity: 'applicationPassport',
type: 'logical',
action: 'create',
checker(operation, context, option) {
const { data } = operation;
if (data) {
const { id, applicationId, isDefault } = data;
if (applicationId && isDefault) {
return context.operate('applicationPassport', {
id: (0, uuid_1.generateNewId)(),
action: 'update',
data: {
isDefault: false,
},
filter: {
applicationId,
isDefault: true,
id: {
$ne: id,
},
}
}, option);
}
}
}
},
{
entity: 'applicationPassport',
type: 'logical',
action: 'update',
checker(operation, context, option) {
const { data, filter } = operation;
if (data?.isDefault) {
return (0, executor_1.pipeline)(() => context.select('applicationPassport', {
data: {
id: 1,
applicationId: 1,
},
filter,
}, {}), (applicationPassports) => {
(0, assert_1.assert)(applicationPassports.length === 1);
const [applicationPassport] = applicationPassports;
const { applicationId, id } = applicationPassport;
return context.operate('applicationPassport', {
id: (0, uuid_1.generateNewId)(),
action: 'update',
data: {
isDefault: false,
},
filter: {
applicationId,
isDefault: true,
id: {
$ne: id,
},
}
}, option);
});
}
}
},
{
entity: 'applicationPassport',
type: 'logical',
action: 'remove',
checker(operation, context, option) {
const { filter } = operation;
(0, assert_1.assert)(filter);
return (0, executor_1.pipeline)(() => context.select('applicationPassport', {
data: {
id: 1,
applicationId: 1,
isDefault: 1,
},
filter,
}, { forUpdate: true }), (removes) => {
const removeIds = removes?.map(ele => ele.id);
const applicationId = removes?.[0]?.applicationId;
return context.select('applicationPassport', {
data: {
id: 1,
applicationId: 1,
isDefault: 1,
},
filter: {
id: {
$nin: removeIds,
},
isDefault: false,
applicationId,
},
indexFrom: 0,
count: 1,
}, {});
}, (other) => {
if (other && other.length === 1) {
return context.operate('applicationPassport', {
id: (0, uuid_1.generateNewId)(),
action: 'update',
data: {
isDefault: true,
},
filter: {
id: other[0].id,
},
}, option);
}
});
}
},
];
exports.default = checkers;