"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;