Improve ISAC libraries, roles, and public profiles
This commit is contained in:
@@ -9,6 +9,7 @@ import { getPagination, getRegistrySearch, getRegistrySort } from '$lib/server/p
|
||||
import { error, fail } from '@sveltejs/kit';
|
||||
import { randomUUID } from 'node:crypto';
|
||||
import type { Actions, PageServerLoad } from './$types';
|
||||
import { agentProfileHref } from '$lib/agents';
|
||||
|
||||
const COMMENT_PERMISSION = 'community.comments.moderate';
|
||||
const PROFILE_PERMISSION = 'community.profiles.moderate';
|
||||
@@ -27,9 +28,12 @@ const requiredReason = (value: FormDataEntryValue | null) => {
|
||||
return reason.length >= 3 ? reason : null;
|
||||
};
|
||||
|
||||
const targetHref = (targetType: string, targetId: unknown, slug: unknown) =>
|
||||
const targetHref = (targetType: string, targetId: unknown, slug: unknown, publicSlug?: unknown) =>
|
||||
targetType === 'profile'
|
||||
? `/agents/${encodeURIComponent(String(targetId))}#profile-comments`
|
||||
? agentProfileHref({
|
||||
id: String(targetId),
|
||||
publicSlug: typeof publicSlug === 'string' ? publicSlug : null
|
||||
}, 'profile-comments')
|
||||
: `/builds/${encodeURIComponent(String(slug ?? ''))}#comments`;
|
||||
|
||||
const parseAuditSnapshot = (value: unknown) => {
|
||||
@@ -77,15 +81,21 @@ const queueTargetHref = (
|
||||
contentId: unknown,
|
||||
targetType: unknown,
|
||||
targetId: unknown,
|
||||
slug: unknown
|
||||
slug: unknown,
|
||||
publicSlug?: unknown
|
||||
) => {
|
||||
if (contentType === 'profile_bio') return `/agents/${encodeURIComponent(String(contentId))}`;
|
||||
if (contentType === 'profile_bio') {
|
||||
return agentProfileHref({
|
||||
id: String(contentId),
|
||||
publicSlug: typeof publicSlug === 'string' ? publicSlug : null
|
||||
});
|
||||
}
|
||||
if (contentType === 'guide') {
|
||||
return slug
|
||||
? `/builds/${encodeURIComponent(String(slug))}`
|
||||
: `/builds/${encodeURIComponent(String(contentId))}`;
|
||||
}
|
||||
return targetHref(String(targetType), targetId, slug);
|
||||
return targetHref(String(targetType), targetId, slug, publicSlug);
|
||||
};
|
||||
|
||||
const queueActionFailure = (status: number, message: string) => fail(status, {
|
||||
@@ -235,6 +245,7 @@ export const load: PageServerLoad = async ({ cookies, url }) => {
|
||||
const scanQueue = `SELECT
|
||||
scan.id AS queue_id,'scan' AS item_source,scan.content_type,scan.content_id,
|
||||
scan.author_id,COALESCE(author_profile.display_name,author.username,'Deleted Agent') AS display_name,
|
||||
author_profile.public_slug AS author_public_slug,
|
||||
author_avatar.source AS avatar_source,author_avatar.value AS avatar_value,
|
||||
author_avatar.updated_at AS avatar_updated_at,
|
||||
COALESCE(revision.body_markdown,comments.body_markdown,target_build.guide_body,'') AS body_markdown,
|
||||
@@ -249,7 +260,7 @@ export const load: PageServerLoad = async ({ cookies, url }) => {
|
||||
THEN COALESCE(target_build.title,'Build guide')
|
||||
ELSE COALESCE(target_build.title,target_profile.display_name,target_user.username,'Community content')
|
||||
END AS target_title,
|
||||
target_build.slug
|
||||
target_build.slug,COALESCE(target_profile.public_slug,author_profile.public_slug) AS target_public_slug
|
||||
FROM content_moderation_scans scan
|
||||
LEFT JOIN content_moderation_reviews review ON review.scan_id=scan.id
|
||||
LEFT JOIN moderated_content_revisions revision ON revision.id=scan.revision_id
|
||||
@@ -271,6 +282,7 @@ export const load: PageServerLoad = async ({ cookies, url }) => {
|
||||
report.id AS queue_id,'report' AS item_source,report.content_type,report.content_id,
|
||||
COALESCE(comments.author_id,profile.user_id,target_build.owner_id) AS author_id,
|
||||
COALESCE(author_profile.display_name,author.username,'Deleted Agent') AS display_name,
|
||||
author_profile.public_slug AS author_public_slug,
|
||||
author_avatar.source AS avatar_source,author_avatar.value AS avatar_value,
|
||||
author_avatar.updated_at AS avatar_updated_at,
|
||||
COALESCE(comments.body_markdown,profile.bio_markdown,target_build.guide_body,'') AS body_markdown,
|
||||
@@ -287,7 +299,7 @@ export const load: PageServerLoad = async ({ cookies, url }) => {
|
||||
THEN COALESCE(target_build.title,'Build guide')
|
||||
ELSE COALESCE(target_build.title,target_profile.display_name,target_user.username,'Community content')
|
||||
END AS target_title,
|
||||
target_build.slug
|
||||
target_build.slug,COALESCE(target_profile.public_slug,profile.public_slug) AS target_public_slug
|
||||
FROM user_content_reports report
|
||||
LEFT JOIN comments ON report.content_type='comment' AND comments.id=report.content_id
|
||||
LEFT JOIN comment_threads thread ON thread.id=comments.thread_id
|
||||
@@ -387,11 +399,13 @@ export const load: PageServerLoad = async ({ cookies, url }) => {
|
||||
row.content_id,
|
||||
row.target_type,
|
||||
row.target_id,
|
||||
row.slug
|
||||
row.slug,
|
||||
row.target_public_slug
|
||||
),
|
||||
author: {
|
||||
id: String(row.author_id ?? ''),
|
||||
displayName: String(row.display_name),
|
||||
publicSlug: row.author_public_slug ? String(row.author_public_slug) : null,
|
||||
avatarUrl: avatarUrl(
|
||||
row.avatar_source,
|
||||
row.avatar_value,
|
||||
@@ -458,6 +472,7 @@ export const load: PageServerLoad = async ({ cookies, url }) => {
|
||||
const rows = await (await database.prepare(`SELECT comments.id,comments.body_markdown,comments.status,
|
||||
comments.created_at,comments.updated_at,comments.removal_reason,
|
||||
comments.author_id,COALESCE(profile.display_name,users.username,'Deleted Agent') AS display_name,
|
||||
profile.public_slug AS author_public_slug,target_profile.public_slug AS target_public_slug,
|
||||
avatar.source AS avatar_source,avatar.value AS avatar_value,avatar.updated_at AS avatar_updated_at,
|
||||
thread.target_type,thread.target_id,builds.slug,
|
||||
COALESCE(builds.title,target_profile.display_name,target_user.username,'Community content') AS target_title
|
||||
@@ -477,10 +492,11 @@ export const load: PageServerLoad = async ({ cookies, url }) => {
|
||||
moderationReason: row.removal_reason ? String(row.removal_reason) : null,
|
||||
targetType: String(row.target_type),
|
||||
targetTitle: String(row.target_title),
|
||||
targetHref: targetHref(String(row.target_type), row.target_id, row.slug),
|
||||
targetHref: targetHref(String(row.target_type), row.target_id, row.slug, row.target_public_slug),
|
||||
author: {
|
||||
id: String(row.author_id),
|
||||
displayName: String(row.display_name),
|
||||
publicSlug: row.author_public_slug ? String(row.author_public_slug) : null,
|
||||
avatarUrl: avatarUrl(row.avatar_source, row.avatar_value, String(row.author_id), row.avatar_updated_at)
|
||||
}
|
||||
})),
|
||||
@@ -521,7 +537,7 @@ export const load: PageServerLoad = async ({ cookies, url }) => {
|
||||
LEFT JOIN profile_moderation moderation ON moderation.user_id=profile.user_id
|
||||
${where}`)).get(...args))?.count ?? 0);
|
||||
const pagination = getPagination(url, total);
|
||||
const rows = await (await database.prepare(`SELECT profile.user_id,profile.bio_markdown,profile.is_public,
|
||||
const rows = await (await database.prepare(`SELECT profile.user_id,profile.public_slug,profile.bio_markdown,profile.is_public,
|
||||
profile.updated_at,COALESCE(profile.display_name,users.username) AS display_name,
|
||||
avatar.source AS avatar_source,avatar.value AS avatar_value,avatar.updated_at AS avatar_updated_at,
|
||||
moderation.reason AS moderation_reason
|
||||
@@ -545,6 +561,7 @@ export const load: PageServerLoad = async ({ cookies, url }) => {
|
||||
agent: {
|
||||
id: String(row.user_id),
|
||||
displayName: String(row.display_name),
|
||||
publicSlug: row.public_slug ? String(row.public_slug) : null,
|
||||
avatarUrl: avatarUrl(row.avatar_source, row.avatar_value, String(row.user_id), row.avatar_updated_at)
|
||||
}
|
||||
})),
|
||||
|
||||
Reference in New Issue
Block a user