-
Notifications
You must be signed in to change notification settings - Fork 718
Expand file tree
/
Copy pathadminController.js
More file actions
96 lines (83 loc) · 2.83 KB
/
Copy pathadminController.js
File metadata and controls
96 lines (83 loc) · 2.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import { ok } from "../utils/response.js";
import {
applyDisputeRuling,
applyModerationDecision,
getAdminMetrics,
getAdminOverview,
getAdminUserProfile,
getPlatformControls,
listAdminUsers,
listAuditLogs,
listDisputes,
listFlaggedListings,
updateAdminUserStatus,
updatePlatformControl
} from "../services/adminService.js";
import { fail } from "../utils/response.js";
import {
auditLogQuerySchema,
disputeQuerySchema,
disputeRulingSchema,
moderationDecisionSchema,
moderationQuerySchema,
platformControlSchema,
userQuerySchema,
userStatusSchema
} from "../validators/admin.js";
function adminId(req) {
return req.user?.sub ?? "unknown_admin";
}
export async function metrics(req, res) {
return ok(res, await getAdminMetrics());
}
export async function overview(req, res) {
return ok(res, await getAdminOverview());
}
export async function users(req, res) {
const query = userQuerySchema.parse(req.query);
return ok(res, await listAdminUsers(query));
}
export async function userProfile(req, res) {
const profile = await getAdminUserProfile(req.params.userId);
if (!profile) return fail(res, "User not found", 404);
return ok(res, profile);
}
export async function updateUserStatus(req, res) {
const payload = userStatusSchema.parse(req.body);
const result = await updateAdminUserStatus(req.params.userId, payload, adminId(req));
if (!result) return fail(res, "User not found", 404);
return ok(res, result);
}
export async function moderationQueue(req, res) {
const query = moderationQuerySchema.parse(req.query);
return ok(res, await listFlaggedListings(query));
}
export async function moderationDecision(req, res) {
const payload = moderationDecisionSchema.parse(req.body);
const result = await applyModerationDecision(req.params.listingId, payload, adminId(req));
if (!result) return fail(res, "Flagged listing not found", 404);
return ok(res, result);
}
export async function disputeQueue(req, res) {
const query = disputeQuerySchema.parse(req.query);
return ok(res, await listDisputes(query));
}
export async function disputeRuling(req, res) {
const payload = disputeRulingSchema.parse(req.body);
const result = await applyDisputeRuling(req.params.disputeId, payload, adminId(req));
if (!result) return fail(res, "Dispute not found", 404);
return ok(res, result);
}
export async function controls(req, res) {
return ok(res, await getPlatformControls());
}
export async function updateControl(req, res) {
const payload = platformControlSchema.parse(req.body);
const result = await updatePlatformControl(req.params.control, payload, adminId(req));
if (!result) return fail(res, "Unknown platform control", 404);
return ok(res, result);
}
export async function auditLog(req, res) {
const query = auditLogQuerySchema.parse(req.query);
return ok(res, await listAuditLogs(query));
}