Files
EpicNext-Cms/src/features/housekeeping/migration/people.ts
T
Simo 8a31556d51
CI / check (pull_request) Successful in 1m9s
CI / release (pull_request) Skipped
CI / deploy (pull_request) Skipped
test(housekeeping): prove 137 route parity
2026-08-30 19:11:14 +02:00

836 lines
22 KiB
TypeScript

import { PERMS } from "@/lib/permission-slugs";
import type { MigrationEntry } from "./types";
type PlannedPeopleEntry = Omit<
MigrationEntry,
"targetDomain" | "requiredTests" | "parityEvidence" | "status" | "notes"
> & {
requiredTests?: MigrationEntry["requiredTests"];
notes?: MigrationEntry["notes"];
};
function plannedPeopleEntry(entry: PlannedPeopleEntry): MigrationEntry {
return {
...entry,
targetDomain: "people",
requiredTests: entry.requiredTests ?? ["integration", "e2e", "visual"],
parityEvidence: [`runtime-parity:${entry.legacyPath}`],
status: entry.decision === "REMOVE" ? "REMOVED" : "VERIFIED",
notes: entry.notes ?? [],
};
}
export const peopleMigrationEntries: readonly MigrationEntry[] = [
// Batch 1: users, aliases, online users, guilds, and applications.
plannedPeopleEntry({
surface: "admin",
legacyPath: "/admin/users",
sourceFile: "src/app/admin/users/page.tsx",
targetPath: "/ase/people/users",
decision: "REBUILD",
capabilities: {
read: [PERMS.USERS_VIEW],
mutate: [PERMS.USERS_EDIT, PERMS.USERS_BAN],
},
dependencies: {
queries: ["fetchAdminList", "User"],
mutations: [
"createUser",
"bulkAdjustCurrency",
"bulkBan",
"bulkGiveBadge",
"bulkUnban",
],
},
auditRequirement: "PRIVILEGED_MUTATION",
localization: "PARTIAL",
accessibility: "PARTIAL",
}),
plannedPeopleEntry({
surface: "admin",
legacyPath: "/admin/users/edit/:id",
sourceFile: "src/app/admin/users/edit/[id]/page.tsx",
targetPath: "/ase/people/users/:id/edit",
decision: "REBUILD",
capabilities: {
read: [PERMS.USERS_EDIT],
mutate: [PERMS.USERS_EDIT, PERMS.USERS_BAN, PERMS.USERS_RESET_PASSWORD],
},
dependencies: {
queries: ["loadUserById", "getWatchedUserIds", "permissions"],
mutations: [
"updateUser",
"giveBadge",
"removeBadge",
"banUser",
"unbanUser",
"alertUser",
"disconnectUser",
"muteUser",
"unmuteUser",
"resetPassword",
"sendCredits",
"setTradeLock",
],
},
auditRequirement: "PRIVILEGED_MUTATION",
localization: "PARTIAL",
accessibility: "PARTIAL",
}),
plannedPeopleEntry({
surface: "admin",
legacyPath: "/admin/users/multi-accounts",
sourceFile: "src/app/admin/users/multi-accounts/page.tsx",
targetPath: "/ase/people/users/multi-accounts",
decision: "REBUILD",
capabilities: { read: [PERMS.USERS_VIEW], mutate: [] },
dependencies: { queries: ["detectMultiAccounts"], mutations: [] },
auditRequirement: "NONE",
localization: "PARTIAL",
accessibility: "PARTIAL",
}),
plannedPeopleEntry({
surface: "admin",
legacyPath: "/admin/users/show/:id",
sourceFile: "src/app/admin/users/show/[id]/page.tsx",
targetPath: "/ase/people/users/:id",
decision: "REBUILD",
capabilities: {
read: [PERMS.USERS_VIEW],
mutate: [PERMS.USERS_EDIT, PERMS.USERS_BAN, PERMS.USERS_RESET_PASSWORD],
},
dependencies: {
queries: ["loadUserById", "loadUserSanctions", "getWatchedUserIds"],
mutations: [
"alertUser",
"disconnectUser",
"muteUser",
"unmuteUser",
"resetPassword",
"sendCredits",
"setTradeLock",
],
},
auditRequirement: "PRIVILEGED_MUTATION",
localization: "PARTIAL",
accessibility: "PARTIAL",
}),
plannedPeopleEntry({
surface: "admin",
legacyPath: "/admin/users/:id",
sourceFile: "src/app/admin/users/[id]/page.tsx",
targetPath: "/ase/people/users/:id",
decision: "MERGE",
capabilities: { read: [PERMS.USERS_VIEW], mutate: [] },
dependencies: { queries: [], mutations: [] },
auditRequirement: "NONE",
localization: "COMPLETE",
accessibility: "COMPLETE",
requiredTests: ["e2e"],
notes: ["Redirect-only duplicate of the canonical user detail route"],
}),
plannedPeopleEntry({
surface: "admin",
legacyPath: "/admin/users/:id/edit",
sourceFile: "src/app/admin/users/[id]/edit/page.tsx",
targetPath: "/ase/people/users/:id/edit",
decision: "MERGE",
capabilities: { read: [PERMS.USERS_EDIT], mutate: [] },
dependencies: { queries: [], mutations: [] },
auditRequirement: "NONE",
localization: "COMPLETE",
accessibility: "COMPLETE",
requiredTests: ["e2e"],
notes: ["Redirect-only duplicate of the canonical user edit route"],
}),
plannedPeopleEntry({
surface: "admin",
legacyPath: "/admin/online",
sourceFile: "src/app/admin/online/page.tsx",
targetPath: "/ase/people/community/online",
decision: "REBUILD",
capabilities: { read: [PERMS.USERS_VIEW], mutate: [] },
dependencies: { queries: ["fetchAdminList", "User"], mutations: [] },
auditRequirement: "NONE",
localization: "COMPLETE",
accessibility: "PARTIAL",
}),
plannedPeopleEntry({
surface: "admin",
legacyPath: "/admin/guilds",
sourceFile: "src/app/admin/guilds/page.tsx",
targetPath: "/ase/people/community/guilds",
decision: "REBUILD",
capabilities: { read: [PERMS.USERS_VIEW], mutate: [] },
dependencies: {
queries: ["Guilds", "GuildsMembers", "User"],
mutations: [],
},
auditRequirement: "NONE",
localization: "COMPLETE",
accessibility: "PARTIAL",
}),
plannedPeopleEntry({
surface: "admin",
legacyPath: "/admin/guilds/:id",
sourceFile: "src/app/admin/guilds/[id]/page.tsx",
targetPath: "/ase/people/community/guilds/:id",
decision: "REBUILD",
capabilities: {
read: [PERMS.USERS_VIEW],
mutate: [PERMS.USERS_EDIT],
},
dependencies: {
queries: ["Guilds", "GuildsForumsThreads", "GuildsMembers", "User"],
mutations: ["disbandGuild"],
},
auditRequirement: "PRIVILEGED_MUTATION",
localization: "COMPLETE",
accessibility: "PARTIAL",
}),
plannedPeopleEntry({
surface: "admin",
legacyPath: "/admin/applications",
sourceFile: "src/app/admin/applications/page.tsx",
targetPath: "/ase/people/staff/applications",
decision: "REBUILD",
capabilities: {
read: [PERMS.USERS_VIEW],
mutate: [PERMS.USERS_EDIT],
},
dependencies: {
queries: ["WebsiteStaffApplications", "User"],
mutations: ["dismissApplication"],
},
auditRequirement: "PRIVILEGED_MUTATION",
localization: "COMPLETE",
accessibility: "PARTIAL",
}),
// Batch 2: staff, moderation, CFH, bans, IP, VPN, and word filter.
plannedPeopleEntry({
surface: "admin",
legacyPath: "/admin/teams",
sourceFile: "src/app/admin/teams/page.tsx",
targetPath: "/ase/people/staff/teams",
decision: "REBUILD",
capabilities: {
read: [PERMS.USERS_VIEW],
mutate: [PERMS.USERS_EDIT],
},
dependencies: {
queries: ["WebsiteTeams"],
mutations: ["createTeam", "deleteTeam"],
},
auditRequirement: "PRIVILEGED_MUTATION",
localization: "COMPLETE",
accessibility: "PARTIAL",
}),
plannedPeopleEntry({
surface: "admin",
legacyPath: "/admin/moderation",
sourceFile: "src/app/admin/moderation/page.tsx",
targetPath: "/ase/people/moderation",
decision: "REBUILD",
capabilities: { read: [PERMS.MODERATION_VIEW], mutate: [] },
dependencies: {
queries: [
"getMinStaffRank",
"AdminAuditLog",
"Ban",
"SupportTickets",
"User",
],
mutations: [],
},
auditRequirement: "NONE",
localization: "PARTIAL",
accessibility: "PARTIAL",
}),
plannedPeopleEntry({
surface: "admin",
legacyPath: "/admin/moderation/actions",
sourceFile: "src/app/admin/moderation/actions/page.tsx",
targetPath: "/ase/people/moderation/actions",
decision: "REBUILD",
capabilities: {
read: [PERMS.MODERATION_EDIT],
mutate: [PERMS.MODERATION_EDIT],
},
dependencies: {
queries: [],
mutations: [
"broadcastAlert",
"quickAlert",
"quickKick",
"quickMute",
"quickRoomKick",
"quickUnmute",
],
},
auditRequirement: "PRIVILEGED_MUTATION",
localization: "PARTIAL",
accessibility: "PARTIAL",
}),
plannedPeopleEntry({
surface: "admin",
legacyPath: "/admin/moderation/cfh",
sourceFile: "src/app/admin/moderation/cfh/page.tsx",
targetPath: "/ase/people/moderation/cfh",
decision: "REBUILD",
capabilities: { read: [PERMS.MODERATION_VIEW], mutate: [] },
dependencies: { queries: ["SupportTickets", "User"], mutations: [] },
auditRequirement: "NONE",
localization: "COMPLETE",
accessibility: "PARTIAL",
}),
plannedPeopleEntry({
surface: "admin",
legacyPath: "/admin/moderation/cfh/:id",
sourceFile: "src/app/admin/moderation/cfh/[id]/page.tsx",
targetPath: "/ase/people/moderation/cfh/:id",
decision: "REBUILD",
capabilities: {
read: [PERMS.MODERATION_VIEW],
mutate: [PERMS.MODERATION_EDIT],
},
dependencies: {
queries: ["Ban", "SupportTickets", "User"],
mutations: [
"assignCfhTicket",
"closeCfhTicket",
"quickAlert",
"quickKick",
"quickMute",
"updateCfhState",
],
},
auditRequirement: "PRIVILEGED_MUTATION",
localization: "PARTIAL",
accessibility: "PARTIAL",
}),
plannedPeopleEntry({
surface: "admin",
legacyPath: "/admin/moderation/team",
sourceFile: "src/app/admin/moderation/team/page.tsx",
targetPath: "/ase/people/staff/moderation-team",
decision: "REBUILD",
capabilities: { read: [PERMS.MODERATION_VIEW], mutate: [] },
dependencies: {
queries: [
"getMinStaffRank",
"AdminAuditLog",
"SupportTickets",
"User",
"WebsiteTicket",
],
mutations: [],
},
auditRequirement: "NONE",
localization: "PARTIAL",
accessibility: "PARTIAL",
}),
plannedPeopleEntry({
surface: "admin",
legacyPath: "/admin/bans",
sourceFile: "src/app/admin/bans/page.tsx",
targetPath: "/ase/people/moderation/bans",
decision: "REBUILD",
capabilities: {
read: [PERMS.BANS_VIEW],
mutate: [PERMS.USERS_BAN],
},
dependencies: {
queries: ["Ban"],
mutations: ["createBan", "liftBan"],
},
auditRequirement: "PRIVILEGED_MUTATION",
localization: "COMPLETE",
accessibility: "PARTIAL",
}),
plannedPeopleEntry({
surface: "admin",
legacyPath: "/admin/ip",
sourceFile: "src/app/admin/ip/page.tsx",
targetPath: "/ase/people/moderation/ip",
decision: "REBUILD",
capabilities: {
read: [PERMS.SETTINGS_VIEW],
mutate: [PERMS.SETTINGS_EDIT],
},
dependencies: {
queries: ["WebsiteIpBlacklist", "WebsiteIpWhitelist"],
mutations: [
"addBlacklist",
"addWhitelist",
"deleteBlacklist",
"deleteWhitelist",
],
},
auditRequirement: "PRIVILEGED_MUTATION",
localization: "COMPLETE",
accessibility: "PARTIAL",
}),
plannedPeopleEntry({
surface: "admin",
legacyPath: "/admin/vpn",
sourceFile: "src/app/admin/vpn/page.tsx",
targetPath: "/ase/people/moderation/vpn",
decision: "REBUILD",
capabilities: {
read: [PERMS.SETTINGS_VIEW],
mutate: [PERMS.SETTINGS_EDIT],
},
dependencies: {
queries: ["siteSettings.getMany"],
mutations: ["saveVpn"],
},
auditRequirement: "PRIVILEGED_MUTATION",
localization: "COMPLETE",
accessibility: "PARTIAL",
}),
plannedPeopleEntry({
surface: "admin",
legacyPath: "/admin/wordfilter",
sourceFile: "src/app/admin/wordfilter/page.tsx",
targetPath: "/ase/people/moderation/word-filter",
decision: "REBUILD",
capabilities: {
read: [PERMS.WORDFILTER_VIEW],
mutate: [PERMS.WORDFILTER_EDIT],
},
dependencies: {
queries: ["WebsiteWordfilter"],
mutations: ["addWord", "deleteWord"],
},
auditRequirement: "PRIVILEGED_MUTATION",
localization: "COMPLETE",
accessibility: "PARTIAL",
}),
// Batch 3: website tickets and help-center tickets.
plannedPeopleEntry({
surface: "admin",
legacyPath: "/admin/tickets",
sourceFile: "src/app/admin/tickets/page.tsx",
targetPath: "/ase/people/support/tickets",
decision: "REBUILD",
capabilities: { read: [PERMS.TICKETS_VIEW], mutate: [] },
dependencies: {
queries: ["fetchUnifiedTicketInbox", "fetchTicketQueueOpenCounts"],
mutations: [],
},
auditRequirement: "NONE",
localization: "COMPLETE",
accessibility: "PARTIAL",
}),
plannedPeopleEntry({
surface: "admin",
legacyPath: "/admin/tickets/desk",
sourceFile: "src/app/admin/tickets/desk/page.tsx",
targetPath: "/ase/people/support/tickets/desk",
decision: "REBUILD",
capabilities: { read: [PERMS.TICKETS_VIEW], mutate: [] },
dependencies: {
queries: ["fetchTicketQueueOpenCounts", "User", "WebsiteTicket"],
mutations: [],
},
auditRequirement: "NONE",
localization: "COMPLETE",
accessibility: "PARTIAL",
}),
plannedPeopleEntry({
surface: "admin",
legacyPath: "/admin/tickets/templates",
sourceFile: "src/app/admin/tickets/templates/page.tsx",
targetPath: "/ase/people/support/tickets/templates",
decision: "REBUILD",
capabilities: {
read: [PERMS.TICKETS_EDIT],
mutate: [PERMS.TICKETS_EDIT],
},
dependencies: {
queries: ["WebsiteTicketTemplate"],
mutations: ["createTemplate", "deleteTemplate", "updateTemplate"],
},
auditRequirement: "PRIVILEGED_MUTATION",
localization: "PARTIAL",
accessibility: "PARTIAL",
}),
plannedPeopleEntry({
surface: "admin",
legacyPath: "/admin/tickets/:id",
sourceFile: "src/app/admin/tickets/[id]/page.tsx",
targetPath: "/ase/people/support/tickets/:id",
decision: "REBUILD",
capabilities: {
read: [PERMS.TICKETS_VIEW],
mutate: [PERMS.TICKETS_EDIT],
},
dependencies: {
queries: [
"getMinStaffRank",
"fetchTicketQueueOpenCounts",
"User",
"WebsiteTicket",
],
mutations: [
"adminReplyTicket",
"assignTicket",
"updateTicketPriority",
"updateTicketStatus",
],
},
auditRequirement: "PRIVILEGED_MUTATION",
localization: "COMPLETE",
accessibility: "PARTIAL",
}),
plannedPeopleEntry({
surface: "admin",
legacyPath: "/admin/help-tickets",
sourceFile: "src/app/admin/help-tickets/page.tsx",
targetPath: "/ase/people/support/help-tickets",
decision: "REBUILD",
capabilities: { read: [PERMS.TICKETS_VIEW], mutate: [] },
dependencies: {
queries: [
"fetchTicketQueueOpenCounts",
"User",
"WebsiteHelpCenterTicketReplies",
"WebsiteHelpCenterTickets",
],
mutations: [],
},
auditRequirement: "NONE",
localization: "COMPLETE",
accessibility: "PARTIAL",
}),
plannedPeopleEntry({
surface: "admin",
legacyPath: "/admin/help-tickets/:id",
sourceFile: "src/app/admin/help-tickets/[id]/page.tsx",
targetPath: "/ase/people/support/help-tickets/:id",
decision: "REBUILD",
capabilities: {
read: [PERMS.TICKETS_VIEW],
mutate: [PERMS.TICKETS_EDIT, PERMS.USERS_BAN],
},
dependencies: {
queries: [
"getMinStaffRank",
"fetchTicketQueueOpenCounts",
"Ban",
"User",
"WebsiteHelpCenterCategories",
"WebsiteHelpCenterTicketReplies",
"WebsiteHelpCenterTickets",
],
mutations: [
"closeHelpCenterTicket",
"liftBanFromHelpTicket",
"reopenHelpCenterTicket",
"replyHelpCenterTicket",
],
},
auditRequirement: "PRIVILEGED_MUTATION",
localization: "COMPLETE",
accessibility: "PARTIAL",
}),
// Batch 4: merge all moderator routes into the People workflows.
plannedPeopleEntry({
surface: "mod",
legacyPath: "/mod",
sourceFile: "src/app/mod/page.tsx",
targetPath: "/ase/people/moderation",
decision: "MERGE",
capabilities: {
read: [
PERMS.MOD_CFH_VIEW,
PERMS.MODERATION_VIEW,
PERMS.MOD_ACTIONS,
PERMS.MODERATION_EDIT,
PERMS.MOD_BANS_VIEW,
PERMS.BANS_VIEW,
PERMS.MOD_TICKETS_VIEW,
PERMS.TICKETS_VIEW,
PERMS.MOD_TEAM_VIEW,
PERMS.MOD_USERS_VIEW,
PERMS.USERS_VIEW,
],
mutate: [],
},
dependencies: {
queries: [
"getMinStaffRank",
"Ban",
"SupportTickets",
"User",
"WebsiteHelpCenterTickets",
"WebsiteTicket",
],
mutations: [],
},
auditRequirement: "NONE",
localization: "COMPLETE",
accessibility: "PARTIAL",
notes: ["Merge the moderator dashboard into capability-gated People work"],
}),
plannedPeopleEntry({
surface: "mod",
legacyPath: "/mod/actions",
sourceFile: "src/app/mod/actions/page.tsx",
targetPath: "/ase/people/moderation/actions",
decision: "MERGE",
capabilities: {
read: [PERMS.MOD_ACTIONS, PERMS.MODERATION_EDIT],
mutate: [PERMS.MOD_ACTIONS, PERMS.MODERATION_EDIT],
},
dependencies: {
queries: [],
mutations: [
"broadcastAlert",
"quickAlert",
"quickKick",
"quickMute",
"quickRoomKick",
"quickUnmute",
],
},
auditRequirement: "PRIVILEGED_MUTATION",
localization: "PARTIAL",
accessibility: "PARTIAL",
}),
plannedPeopleEntry({
surface: "mod",
legacyPath: "/mod/bans",
sourceFile: "src/app/mod/bans/page.tsx",
targetPath: "/ase/people/moderation/bans",
decision: "MERGE",
capabilities: {
read: [PERMS.MOD_BANS_VIEW, PERMS.BANS_VIEW],
mutate: [],
},
dependencies: { queries: ["Ban"], mutations: [] },
auditRequirement: "NONE",
localization: "COMPLETE",
accessibility: "PARTIAL",
}),
plannedPeopleEntry({
surface: "mod",
legacyPath: "/mod/cfh",
sourceFile: "src/app/mod/cfh/page.tsx",
targetPath: "/ase/people/moderation/cfh",
decision: "MERGE",
capabilities: {
read: [PERMS.MOD_CFH_VIEW, PERMS.MODERATION_VIEW],
mutate: [],
},
dependencies: { queries: ["SupportTickets", "User"], mutations: [] },
auditRequirement: "NONE",
localization: "COMPLETE",
accessibility: "PARTIAL",
}),
plannedPeopleEntry({
surface: "mod",
legacyPath: "/mod/cfh/:id",
sourceFile: "src/app/mod/cfh/[id]/page.tsx",
targetPath: "/ase/people/moderation/cfh/:id",
decision: "MERGE",
capabilities: {
read: [PERMS.MOD_CFH_VIEW, PERMS.MODERATION_VIEW],
mutate: [PERMS.MOD_CFH_EDIT, PERMS.MODERATION_EDIT],
},
dependencies: {
queries: ["Ban", "SupportTickets", "User"],
mutations: [
"assignCfhTicket",
"closeCfhTicket",
"quickAlert",
"quickKick",
"quickMute",
"updateCfhState",
],
},
auditRequirement: "PRIVILEGED_MUTATION",
localization: "PARTIAL",
accessibility: "PARTIAL",
}),
plannedPeopleEntry({
surface: "mod",
legacyPath: "/mod/help-tickets",
sourceFile: "src/app/mod/help-tickets/page.tsx",
targetPath: "/ase/people/support/help-tickets",
decision: "MERGE",
capabilities: {
read: [PERMS.MOD_TICKETS_VIEW, PERMS.TICKETS_VIEW],
mutate: [],
},
dependencies: {
queries: [
"fetchTicketQueueOpenCounts",
"User",
"WebsiteHelpCenterTicketReplies",
"WebsiteHelpCenterTickets",
],
mutations: [],
},
auditRequirement: "NONE",
localization: "COMPLETE",
accessibility: "PARTIAL",
}),
plannedPeopleEntry({
surface: "mod",
legacyPath: "/mod/help-tickets/:id",
sourceFile: "src/app/mod/help-tickets/[id]/page.tsx",
targetPath: "/ase/people/support/help-tickets/:id",
decision: "MERGE",
capabilities: {
read: [PERMS.MOD_TICKETS_VIEW, PERMS.TICKETS_VIEW],
mutate: [PERMS.MOD_TICKETS_EDIT, PERMS.TICKETS_EDIT, PERMS.USERS_BAN],
},
dependencies: {
queries: [
"getMinStaffRank",
"fetchTicketQueueOpenCounts",
"User",
"WebsiteHelpCenterTicketReplies",
"WebsiteHelpCenterTickets",
],
mutations: [
"closeHelpCenterTicket",
"liftBanFromHelpTicket",
"reopenHelpCenterTicket",
"replyHelpCenterTicket",
],
},
auditRequirement: "PRIVILEGED_MUTATION",
localization: "COMPLETE",
accessibility: "PARTIAL",
}),
plannedPeopleEntry({
surface: "mod",
legacyPath: "/mod/team",
sourceFile: "src/app/mod/team/page.tsx",
targetPath: "/ase/people/staff/moderation-team",
decision: "MERGE",
capabilities: {
read: [PERMS.MOD_TEAM_VIEW, PERMS.MODERATION_VIEW],
mutate: [],
},
dependencies: {
queries: [
"getMinStaffRank",
"AdminAuditLog",
"SupportTickets",
"User",
"WebsiteTicket",
],
mutations: [],
},
auditRequirement: "NONE",
localization: "PARTIAL",
accessibility: "PARTIAL",
}),
plannedPeopleEntry({
surface: "mod",
legacyPath: "/mod/tickets",
sourceFile: "src/app/mod/tickets/page.tsx",
targetPath: "/ase/people/support/tickets",
decision: "MERGE",
capabilities: {
read: [PERMS.MOD_TICKETS_VIEW, PERMS.TICKETS_VIEW],
mutate: [],
},
dependencies: {
queries: ["fetchUnifiedTicketInbox", "fetchTicketQueueOpenCounts"],
mutations: [],
},
auditRequirement: "NONE",
localization: "COMPLETE",
accessibility: "PARTIAL",
}),
plannedPeopleEntry({
surface: "mod",
legacyPath: "/mod/tickets/desk",
sourceFile: "src/app/mod/tickets/desk/page.tsx",
targetPath: "/ase/people/support/tickets/desk",
decision: "MERGE",
capabilities: {
read: [PERMS.MOD_TICKETS_VIEW, PERMS.TICKETS_VIEW],
mutate: [],
},
dependencies: {
queries: [
"fetchTicketQueueOpenCounts",
"User",
"WebsiteTicket",
"WebsiteTicketMessage",
],
mutations: [],
},
auditRequirement: "NONE",
localization: "COMPLETE",
accessibility: "PARTIAL",
}),
plannedPeopleEntry({
surface: "mod",
legacyPath: "/mod/tickets/:id",
sourceFile: "src/app/mod/tickets/[id]/page.tsx",
targetPath: "/ase/people/support/tickets/:id",
decision: "MERGE",
capabilities: {
read: [PERMS.MOD_TICKETS_VIEW, PERMS.TICKETS_VIEW],
mutate: [PERMS.MOD_TICKETS_EDIT, PERMS.TICKETS_EDIT],
},
dependencies: {
queries: [
"getMinStaffRank",
"fetchTicketQueueOpenCounts",
"User",
"WebsiteTicket",
"WebsiteTicketMessage",
],
mutations: [
"adminReplyTicket",
"assignTicket",
"updateTicketPriority",
"updateTicketStatus",
],
},
auditRequirement: "PRIVILEGED_MUTATION",
localization: "COMPLETE",
accessibility: "PARTIAL",
}),
plannedPeopleEntry({
surface: "mod",
legacyPath: "/mod/users",
sourceFile: "src/app/mod/users/page.tsx",
targetPath: "/ase/people/users",
decision: "MERGE",
capabilities: {
read: [PERMS.MOD_USERS_VIEW, PERMS.USERS_VIEW],
mutate: [],
},
dependencies: { queries: ["User"], mutations: [] },
auditRequirement: "NONE",
localization: "COMPLETE",
accessibility: "PARTIAL",
}),
plannedPeopleEntry({
surface: "mod",
legacyPath: "/mod/users/:id",
sourceFile: "src/app/mod/users/[id]/page.tsx",
targetPath: "/ase/people/users/:id",
decision: "MERGE",
capabilities: {
read: [PERMS.MOD_USERS_VIEW, PERMS.USERS_VIEW],
mutate: [],
},
dependencies: { queries: ["User"], mutations: [] },
auditRequirement: "NONE",
localization: "COMPLETE",
accessibility: "PARTIAL",
}),
];