feat(filter): Add filters to all result data

This commit is contained in:
FoxxMD
2022-02-10 13:43:33 -05:00
parent da206f41ad
commit 9dcf256aa1
5 changed files with 35 additions and 16 deletions

View File

@@ -69,17 +69,24 @@ export abstract class Action {
success: false,
};
try {
const [itemPass, itemFilterType, itemFitlerResults] = await checkItemFilter(item, this.itemIs, this.resources, this.logger);
const [itemPass, itemFilterType, itemFilterResults] = await checkItemFilter(item, this.itemIs, this.resources, this.logger);
if (!itemPass) {
this.logger.verbose(`Activity did not pass 'itemIs' test, Action not run`);
actRes.runReason = `Activity did not pass 'itemIs' test, Action not run`;
actRes.itemIs = itemFilterResults;
return actRes;
} else if(this.itemIs.length > 0) {
actRes.itemIs = itemFilterResults;
}
const [authFilterResult, authFilterType] = await checkAuthorFilter(item, this.authorIs, this.resources, this.logger);
if(!authFilterResult) {
const [authPass, authFilterType, authorFilterResult] = await checkAuthorFilter(item, this.authorIs, this.resources, this.logger);
if(!authPass) {
this.logger.verbose(`${authFilterType} author criteria not matched, Action not run`);
actRes.runReason = `${authFilterType} author criteria not matched`;
actRes.authorIs = authorFilterResult;
return actRes;
} else if(authFilterType !== undefined) {
actRes.authorIs = authorFilterResult;
}
actRes.run = true;

View File

@@ -342,6 +342,11 @@ export abstract class Check implements ICheck {
let allRuleResults: RuleResult[] = [];
let allResults: (RuleResult | RuleSetResult)[] = [];
const checkResult: CheckResult = {
triggered: false,
ruleResults: [],
}
// check cache results
const cacheResult = await this.getCacheResult(item);
if(cacheResult !== undefined) {
@@ -358,14 +363,20 @@ export abstract class Check implements ICheck {
return {
triggered: false,
ruleResults: allRuleResults,
itemIs: itemFilterResults
};
} else if(this.itemIs.length > 0) {
checkResult.itemIs = itemFilterResults;
}
const [authFilterResult, authFilterType] = await checkAuthorFilter(item, this.authorIs, this.resources, this.logger);
if(!authFilterResult) {
const [authPass, authFilterType, authorFilterResults] = await checkAuthorFilter(item, this.authorIs, this.resources, this.logger);
if(!authPass) {
return {
triggered: false,
ruleResults: allRuleResults,
authorIs: authorFilterResults
};
} else if(authFilterType !== undefined) {
checkResult.authorIs = authorFilterResults;
}
if (this.rules.length === 0) {

View File

@@ -1966,6 +1966,8 @@ export interface ActionResult extends ActionProcessResult {
name: string,
run: boolean,
runReason?: string,
itemIs?: FilterResult<TypedActivityState>
authorIs?: FilterResult<AuthorCriteria>
}
export interface ActionProcessResult {
@@ -1990,6 +1992,8 @@ export interface ActionedEvent {
export interface CheckResult {
triggered: boolean
ruleResults: RuleResult[]
itemIs?: FilterResult<TypedActivityState>
authorIs?: FilterResult<AuthorCriteria>
fromCache?: boolean
}
@@ -2007,7 +2011,7 @@ export interface RunResult {
triggered: boolean
reason?: string
error?: string
itemIs?: FilterResult<TypedActivityStates>
itemIs?: FilterResult<TypedActivityState>
authorIs?: FilterResult<AuthorCriteria>
checkResults: CheckSummary[]
}

View File

@@ -3,8 +3,8 @@ import Submission from "snoowrap/dist/objects/Submission";
import {Logger} from "winston";
import {findResultByPremise, mergeArr} from "../util";
import {checkAuthorFilter, checkItemFilter, SubredditResources} from "../Subreddit/SubredditResources";
import {ChecksActivityState, TypedActivityStates} from "../Common/interfaces";
import Author, {AuthorOptions} from "../Author/Author";
import {ChecksActivityState, FilterResult, TypedActivityState, TypedActivityStates} from "../Common/interfaces";
import Author, {AuthorCriteria, AuthorOptions} from "../Author/Author";
export interface RuleOptions {
name?: string;
@@ -32,6 +32,8 @@ export interface RuleResult extends ResultContext {
name: string
triggered: (boolean | null)
fromCache?: boolean
itemIs?: FilterResult<TypedActivityState>
authorIs?: FilterResult<AuthorCriteria>
}
export type FormattedRuleResult = RuleResult & {

View File

@@ -100,12 +100,9 @@ export class Run {
async handle(activity: (Submission | Comment), initAllRuleResults: RuleResult[], existingRunResults: RunResult[] = [], options?: runCheckOptions): Promise<[RunResult, string]> {
let itemIsResults: FilterResult<TypedActivityStates> | undefined;
let authorIsResults: FilterResult<AuthorCriteria> | undefined;
let allRuleResults = initAllRuleResults;
let continueRunIteration = true;
let postBehavior = 'next';
let runError: string | undefined;
const runResult: RunResult = {
name: this.name,
triggered: false,
@@ -136,18 +133,16 @@ export class Run {
try {
const [itemPass, itemFitlerType, itemFilterResults] = await checkItemFilter(activity, this.itemIs, this.resources, this.logger)
const [itemPass, itemFilterType, itemFilterResults] = await checkItemFilter(activity, this.itemIs, this.resources, this.logger)
if (!itemPass) {
this.logger.verbose(`${FAIL} => Item did not pass 'itemIs' test`);
return [{
...runResult,
triggered: false,
// TODO add itemIs results
itemIs: itemIsResults
itemIs: itemFilterResults
}, postBehavior];
} else if (this.itemIs.length > 0) {
// TODO add itemIs results
//runResult.itemIs = itemPass;
runResult.itemIs = itemFilterResults;
}
const [authFilterPass, authFilterType, authorFilterResult] = await checkAuthorFilter(activity, this.authorIs, this.resources, this.logger);