Merge branch 'next' into next-respect

This commit is contained in:
Wyatt Johnson
2018-09-26 10:15:37 -06:00
17 changed files with 410 additions and 52 deletions
+18 -2
View File
@@ -8,6 +8,7 @@ import {
CreateCommentInput,
editComment,
EditCommentInput,
pushChildCommentIDOntoParent,
retrieveComment,
} from "talk-server/models/comment";
import { Tenant } from "talk-server/models/tenant";
@@ -18,7 +19,7 @@ import { Request } from "talk-server/types/express";
export type CreateComment = Omit<
CreateCommentInput,
"status" | "action_counts" | "metadata"
"status" | "action_counts" | "metadata" | "grandparent_ids"
>;
export async function create(
@@ -37,6 +38,7 @@ export async function create(
// TODO: (wyattjoh) Check that the asset was visible.
const grandparentIDs: string[] = [];
if (input.parent_id) {
// Check to see that the reference parent ID exists.
const parent = await retrieveComment(mongo, tenant.id, input.parent_id);
@@ -46,6 +48,13 @@ export async function create(
}
// TODO: (wyattjoh) Check that the parent comment was visible.
// Push the parent's parent id's into the comment's grandparent id's.
grandparentIDs.push(...parent.grandparent_ids);
if (parent.parent_id) {
// If this parent has a parent, push it down as well.
grandparentIDs.push(parent.parent_id);
}
}
// Run the comment through the moderation phases.
@@ -62,6 +71,7 @@ export async function create(
...input,
status,
action_counts: {},
grandparent_ids: grandparentIDs,
metadata,
});
@@ -83,7 +93,13 @@ export async function create(
}
if (input.parent_id) {
// TODO: (wyattjoh) update reply count of parent.
// Push the child's ID onto the parent.
await pushChildCommentIDOntoParent(
mongo,
tenant.id,
input.parent_id,
comment.id
);
}
return comment;
@@ -1,3 +1,6 @@
import striptags from "striptags";
import { isNil } from "lodash";
import {
GQLCOMMENT_FLAG_REASON,
GQLCOMMENT_STATUS,
@@ -9,28 +12,40 @@ import {
IntermediatePhaseResult,
} from "talk-server/services/comments/moderation";
const testCharCount = (settings: Partial<ModerationSettings>, length: number) =>
settings.charCountEnable && settings.charCount && length > settings.charCount;
const testCharCount = (
settings: Partial<ModerationSettings>,
length: number
) => {
// settings.charCount.enable && settings.charCount && length > settings.charCount;
if (settings.charCount && settings.charCount.enabled) {
if (!isNil(settings.charCount.min)) {
if (length < settings.charCount.min) {
return true;
}
}
if (!isNil(settings.charCount.max)) {
if (length > settings.charCount.max) {
return true;
}
}
}
return false;
};
export const commentLength: IntermediateModerationPhase = ({
asset,
tenant,
comment,
}): IntermediatePhaseResult | void => {
const length = comment.body ? comment.body.length : 0;
const length = comment.body ? striptags(comment.body).length : 0;
// Check to see if the body is too short, if it is, then complain about it!
if (length < 2) {
// TODO: (wyattjoh) return better error.
throw new Error("comment body too short");
}
// Reject if the comment is too long
// Reject if the comment is too long or too short.
if (
testCharCount(tenant, length) ||
(asset.settings && testCharCount(asset.settings, length))
) {
// Add the flag related to Trust to the comment.
return {
status: GQLCOMMENT_STATUS.REJECTED,
actions: [