fix: 删除文章分类、文章时 级联删除extraFile

This commit is contained in:
wkj 2025-09-10 15:31:15 +08:00
parent 81d02f4ee4
commit 82279251f1
18 changed files with 194 additions and 36 deletions

5
es/checkers/article.d.ts vendored Normal file
View File

@ -0,0 +1,5 @@
import { Checker } from "oak-domain/lib/types";
import { EntityDict } from '../oak-app-domain';
import { RuntimeCxt } from '../types/RuntimeCxt';
declare const checkers: Checker<EntityDict, 'article', RuntimeCxt<EntityDict>>[];
export default checkers;

21
es/checkers/article.js Normal file
View File

@ -0,0 +1,21 @@
import { generateNewId } from 'oak-domain/lib/utils/uuid';
const checkers = [
{
// 删除文章级联删除extraFile
action: 'remove',
type: 'logical',
entity: 'article',
checker(operation, context) {
const { filter } = operation;
return context.operate('extraFile', {
id: generateNewId(),
action: 'remove',
data: {},
filter: {
article: filter,
},
}, {});
},
},
];
export default checkers;

5
es/checkers/articleMenu.d.ts vendored Normal file
View File

@ -0,0 +1,5 @@
import { Checker } from "oak-domain/lib/types";
import { EntityDict } from '../oak-app-domain';
import { RuntimeCxt } from '../types/RuntimeCxt';
declare const checkers: Checker<EntityDict, 'articleMenu', RuntimeCxt<EntityDict>>[];
export default checkers;

View File

@ -0,0 +1,21 @@
import { generateNewId } from 'oak-domain/lib/utils/uuid';
const checkers = [
{
// 删除文章分类级联删除extraFile
action: 'remove',
type: 'logical',
entity: 'articleMenu',
checker(operation, context) {
const { filter } = operation;
return context.operate('extraFile', {
id: generateNewId(),
action: 'remove',
data: {},
filter: {
articleMenu: filter,
},
}, {});
},
},
];
export default checkers;

View File

@ -1,2 +1,2 @@
declare const checkers: (import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "mobile", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "user", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "address", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "application", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "applicationPassport", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "token", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "message", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "parasite", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "system", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "platform", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>>)[];
declare const checkers: (import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "article", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "mobile", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "address", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "token", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "user", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "application", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "message", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "parasite", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "applicationPassport", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "system", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "platform", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "articleMenu", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>>)[];
export default checkers;

View File

@ -11,6 +11,8 @@ import parasite from './parasite';
import applicationPassport from './applicationPassport';
import systems from './system';
import platforms from './platform';
import articles from './article';
import articleMenus from './articleMenu';
const checkers = [
...mobileChecker,
...addressCheckers,
@ -24,6 +26,8 @@ const checkers = [
...parasite,
...applicationPassport,
...systems,
...platforms
...platforms,
...articles,
...articleMenus,
];
export default checkers;

View File

@ -79,7 +79,7 @@ const triggers = [
},
},
{
name: '在删除文章分类前将文章分类的父节点的【isLeaf】置为【false】,同时删除extraFile',
name: '在删除文章分类前将文章分类的父节点的【isLeaf】置为【false】',
entity: 'articleMenu',
action: 'remove',
when: 'before',
@ -97,14 +97,6 @@ const triggers = [
},
filter,
}, {});
await context.operate('extraFile', {
id: await generateNewIdAsync(),
action: 'remove',
data: {},
filter: {
entityId: filter.id,
},
}, {});
if (articleMenu && articleMenu.parentId) {
const articleMenus = await context.select('articleMenu', {
data: {

5
lib/checkers/article.d.ts vendored Normal file
View File

@ -0,0 +1,5 @@
import { Checker } from "oak-domain/lib/types";
import { EntityDict } from '../oak-app-domain';
import { RuntimeCxt } from '../types/RuntimeCxt';
declare const checkers: Checker<EntityDict, 'article', RuntimeCxt<EntityDict>>[];
export default checkers;

23
lib/checkers/article.js Normal file
View File

@ -0,0 +1,23 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const uuid_1 = require("oak-domain/lib/utils/uuid");
const checkers = [
{
// 删除文章级联删除extraFile
action: 'remove',
type: 'logical',
entity: 'article',
checker(operation, context) {
const { filter } = operation;
return context.operate('extraFile', {
id: (0, uuid_1.generateNewId)(),
action: 'remove',
data: {},
filter: {
article: filter,
},
}, {});
},
},
];
exports.default = checkers;

5
lib/checkers/articleMenu.d.ts vendored Normal file
View File

@ -0,0 +1,5 @@
import { Checker } from "oak-domain/lib/types";
import { EntityDict } from '../oak-app-domain';
import { RuntimeCxt } from '../types/RuntimeCxt';
declare const checkers: Checker<EntityDict, 'articleMenu', RuntimeCxt<EntityDict>>[];
export default checkers;

View File

@ -0,0 +1,23 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const uuid_1 = require("oak-domain/lib/utils/uuid");
const checkers = [
{
// 删除文章分类级联删除extraFile
action: 'remove',
type: 'logical',
entity: 'articleMenu',
checker(operation, context) {
const { filter } = operation;
return context.operate('extraFile', {
id: (0, uuid_1.generateNewId)(),
action: 'remove',
data: {},
filter: {
articleMenu: filter,
},
}, {});
},
},
];
exports.default = checkers;

View File

@ -1,2 +1,2 @@
declare const checkers: (import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "address", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "application", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "applicationPassport", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "token", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "user", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "mobile", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "message", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "parasite", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "system", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "platform", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>>)[];
declare const checkers: (import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "article", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "mobile", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "address", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "token", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "user", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "application", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "message", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "parasite", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "applicationPassport", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "system", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "platform", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "articleMenu", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>>)[];
export default checkers;

View File

@ -14,6 +14,8 @@ const parasite_1 = tslib_1.__importDefault(require("./parasite"));
const applicationPassport_1 = tslib_1.__importDefault(require("./applicationPassport"));
const system_1 = tslib_1.__importDefault(require("./system"));
const platform_1 = tslib_1.__importDefault(require("./platform"));
const article_1 = tslib_1.__importDefault(require("./article"));
const articleMenu_1 = tslib_1.__importDefault(require("./articleMenu"));
const checkers = [
...mobile_1.default,
...address_1.default,
@ -27,6 +29,8 @@ const checkers = [
...parasite_1.default,
...applicationPassport_1.default,
...system_1.default,
...platform_1.default
...platform_1.default,
...article_1.default,
...articleMenu_1.default,
];
exports.default = checkers;

View File

@ -81,7 +81,7 @@ const triggers = [
},
},
{
name: '在删除文章分类前将文章分类的父节点的【isLeaf】置为【false】,同时删除extraFile',
name: '在删除文章分类前将文章分类的父节点的【isLeaf】置为【false】',
entity: 'articleMenu',
action: 'remove',
when: 'before',
@ -99,14 +99,6 @@ const triggers = [
},
filter,
}, {});
await context.operate('extraFile', {
id: await (0, uuid_1.generateNewIdAsync)(),
action: 'remove',
data: {},
filter: {
entityId: filter.id,
},
}, {});
if (articleMenu && articleMenu.parentId) {
const articleMenus = await context.select('articleMenu', {
data: {

33
src/checkers/article.ts Normal file
View File

@ -0,0 +1,33 @@
import { isMobile } from 'oak-domain/lib/utils/validator';
import { OakInputIllegalException, Checker } from "oak-domain/lib/types";
import { EntityDict } from '../oak-app-domain';
import { checkAttributesNotNull } from 'oak-domain/lib/utils/validator';
import { RuntimeCxt } from '../types/RuntimeCxt';
import { generateNewId } from 'oak-domain/lib/utils/uuid';
const checkers: Checker<EntityDict, 'article', RuntimeCxt<EntityDict>> [] = [
{
// 删除文章级联删除extraFile
action: 'remove',
type: 'logical',
entity: 'article',
checker(operation, context) {
const { filter } = operation as EntityDict['article']['Remove'];
return context.operate(
'extraFile',
{
id: generateNewId(),
action: 'remove',
data: {},
filter: {
article: filter,
},
},
{}
);
},
},
];
export default checkers;

View File

@ -0,0 +1,33 @@
import { isMobile } from 'oak-domain/lib/utils/validator';
import { OakInputIllegalException, Checker } from "oak-domain/lib/types";
import { EntityDict } from '../oak-app-domain';
import { checkAttributesNotNull } from 'oak-domain/lib/utils/validator';
import { RuntimeCxt } from '../types/RuntimeCxt';
import { generateNewId } from 'oak-domain/lib/utils/uuid';
const checkers: Checker<EntityDict, 'articleMenu', RuntimeCxt<EntityDict>> [] = [
{
// 删除文章分类级联删除extraFile
action: 'remove',
type: 'logical',
entity: 'articleMenu',
checker(operation, context) {
const { filter } = operation as EntityDict['article']['Remove'];
return context.operate(
'extraFile',
{
id: generateNewId(),
action: 'remove',
data: {},
filter: {
articleMenu: filter,
},
},
{}
);
},
},
];
export default checkers;

View File

@ -11,6 +11,8 @@ import parasite from './parasite';
import applicationPassport from './applicationPassport';
import systems from './system';
import platforms from './platform';
import articles from './article';
import articleMenus from './articleMenu';
const checkers = [
...mobileChecker,
@ -25,7 +27,9 @@ const checkers = [
...parasite,
...applicationPassport,
...systems,
...platforms
...platforms,
...articles,
...articleMenus,
];

View File

@ -112,7 +112,7 @@ const triggers: Trigger<
},
} as CreateTrigger<EntityDict, 'articleMenu', BRC<EntityDict>>,
{
name: '在删除文章分类前将文章分类的父节点的【isLeaf】置为【false】,同时删除extraFile',
name: '在删除文章分类前将文章分类的父节点的【isLeaf】置为【false】',
entity: 'articleMenu',
action: 'remove',
when: 'before',
@ -137,18 +137,6 @@ const triggers: Trigger<
},
{}
);
await context.operate(
'extraFile',
{
id: await generateNewIdAsync(),
action: 'remove',
data: {},
filter: {
entityId: filter!.id as string,
},
},
{}
);
if (articleMenu && articleMenu.parentId) {
const articleMenus = await context.select(
'articleMenu',