Skip to content

Commit 6750b2f

Browse files
committed
Includes createdById column to ModerationRule
1 parent d23408d commit 6750b2f

File tree

4 files changed

+34
-23
lines changed

4 files changed

+34
-23
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
-- AlterTable
2+
ALTER TABLE "ModerationRule" ADD COLUMN "createdById" INTEGER NOT NULL;
3+
4+
-- AddForeignKey
5+
ALTER TABLE "ModerationRule" ADD CONSTRAINT "ModerationRule_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;

prisma/schema.prisma

+4
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,7 @@ model User {
346346
cashWithdrawals CashWithdrawal[]
347347
bids Bid[]
348348
recurringBids BidRecurring[]
349+
moderationRules ModerationRule[]
349350
350351
@@index([deletedAt])
351352
}
@@ -3454,6 +3455,9 @@ model ModerationRule {
34543455
enabled Boolean @default(true)
34553456
order Int?
34563457
reason String?
3458+
3459+
createdById Int
3460+
createdBy User @relation(fields: [createdById], references: [id], onDelete: Cascade)
34573461
}
34583462

34593463
/// @view

src/pages/api/mod/mod-rules.ts

+22-23
Original file line numberDiff line numberDiff line change
@@ -3,42 +3,41 @@ import { z } from 'zod';
33
import { dbWrite } from '~/server/db/client';
44
import { bustImageModRulesCache } from '~/server/services/image.service';
55
import { bustModelModRulesCache } from '~/server/services/model.service';
6-
import { handleEndpointError, ModEndpoint } from '~/server/utils/endpoint-helpers';
6+
import { handleEndpointError, WebhookEndpoint } from '~/server/utils/endpoint-helpers';
77
import { handleLogError } from '~/server/utils/errorHandling';
88
import { EntityType, ModerationRuleAction } from '~/shared/utils/prisma/enums';
99

1010
const payloadSchema = z.object({
1111
id: z.number(),
1212
definition: z.object({}).passthrough(),
13+
userId: z.number(),
1314
action: z.nativeEnum(ModerationRuleAction),
1415
entityType: z.enum(['Model', 'Image']),
1516
enabled: z.boolean().optional().default(true),
1617
order: z.number().optional(),
1718
reason: z.string().optional(),
1819
});
1920

20-
const deleteQuerySchema = z.object({
21-
id: z.coerce.number(),
22-
});
21+
const deleteQuerySchema = z.object({ id: z.coerce.number() });
2322

24-
export default ModEndpoint(
25-
async function handler(req, res) {
26-
try {
27-
switch (req.method) {
28-
case 'POST':
29-
return upsertModRule(req, res);
30-
case 'DELETE':
31-
return deleteModRule(req, res);
32-
default: {
33-
return res.status(405).json({ error: 'Method Not Allowed' });
34-
}
23+
export default WebhookEndpoint(async function handler(req, res) {
24+
if (req.method && ['POST', 'DELETE'].includes(req.method))
25+
return res.status(405).json({ error: 'Method Not Allowed' });
26+
27+
try {
28+
switch (req.method) {
29+
case 'POST':
30+
return upsertModRule(req, res);
31+
case 'DELETE':
32+
return deleteModRule(req, res);
33+
default: {
34+
return res.status(405).json({ error: 'Method Not Allowed' });
3535
}
36-
} catch (error) {
37-
return handleEndpointError(res, error);
3836
}
39-
},
40-
['POST', 'DELETE']
41-
);
37+
} catch (error) {
38+
return handleEndpointError(res, error);
39+
}
40+
});
4241

4342
async function upsertModRule(req: NextApiRequest, res: NextApiResponse) {
4443
if (req.body.id) {
@@ -47,7 +46,7 @@ async function upsertModRule(req: NextApiRequest, res: NextApiResponse) {
4746
return res.status(400).json({ error: 'Bad Request', details: schemaResult.error.format() });
4847

4948
try {
50-
const { id, ...data } = schemaResult.data;
49+
const { id, userId, ...data } = schemaResult.data;
5150
await dbWrite.moderationRule.update({ where: { id }, data });
5251
} catch (error) {
5352
return res.status(500).json({ error: 'Could not update rule', details: error });
@@ -58,8 +57,8 @@ async function upsertModRule(req: NextApiRequest, res: NextApiResponse) {
5857
return res.status(400).json({ error: 'Bad Request', details: schemaResult.error.format });
5958

6059
try {
61-
const data = schemaResult.data;
62-
await dbWrite.moderationRule.create({ data });
60+
const { userId: createdById, ...data } = schemaResult.data;
61+
await dbWrite.moderationRule.create({ data: { ...data, createdById } });
6362
} catch (error) {
6463
return res.status(500).json({ error: 'Could not create rule', details: error });
6564
}

src/shared/utils/prisma/models.ts

+3
Original file line numberDiff line numberDiff line change
@@ -407,6 +407,7 @@ export interface User {
407407
cashWithdrawals?: CashWithdrawal[];
408408
bids?: Bid[];
409409
recurringBids?: BidRecurring[];
410+
moderationRules?: ModerationRule[];
410411
}
411412

412413
export interface CustomerSubscription {
@@ -2602,6 +2603,8 @@ export interface ModerationRule {
26022603
enabled: boolean;
26032604
order: number | null;
26042605
reason: string | null;
2606+
createdById: number;
2607+
createdBy?: User;
26052608
}
26062609

26072610
export interface QuestionRank {

0 commit comments

Comments
 (0)