Barazo AppView backend
barazo.forum
1import { z } from 'zod'
2
3// ---------------------------------------------------------------------------
4// Mod notes
5// ---------------------------------------------------------------------------
6
7export const createModNoteSchema = z
8 .object({
9 subjectDid: z.string().min(1).optional(),
10 subjectUri: z.string().min(1).optional(),
11 content: z.string().min(1).max(5000),
12 })
13 .refine(
14 (data) => {
15 const hasDid = data.subjectDid !== undefined
16 const hasUri = data.subjectUri !== undefined
17 return (hasDid && !hasUri) || (!hasDid && hasUri)
18 },
19 { message: 'Exactly one of subjectDid or subjectUri must be provided' },
20 )
21
22export const modNoteQuerySchema = z.object({
23 subjectDid: z.string().optional(),
24 subjectUri: z.string().optional(),
25 cursor: z.string().optional(),
26 limit: z.coerce.number().int().min(1).max(100).default(25),
27})
28
29export const deleteModNoteSchema = z.object({
30 id: z.coerce.number().int().positive(),
31})
32
33// ---------------------------------------------------------------------------
34// Topic notices
35// ---------------------------------------------------------------------------
36
37export const createTopicNoticeSchema = z.object({
38 topicUri: z.string().min(1),
39 noticeType: z.enum(['closed', 'moved', 'outdated', 'announcement', 'custom']),
40 headline: z.string().min(1).max(200),
41 body: z.string().max(2000).optional(),
42})
43
44export const dismissTopicNoticeSchema = z.object({
45 id: z.coerce.number().int().positive(),
46})
47
48export const topicNoticeQuerySchema = z.object({
49 topicUri: z.string().optional(),
50 cursor: z.string().optional(),
51 limit: z.coerce.number().int().min(1).max(100).default(25),
52})
53
54// ---------------------------------------------------------------------------
55// Mod warnings
56// ---------------------------------------------------------------------------
57
58export const createWarningSchema = z.object({
59 targetDid: z.string().min(1),
60 warningType: z.enum(['off_topic', 'harassment', 'rule_violation', 'other', 'custom']),
61 message: z.string().min(1).max(2000),
62 modComment: z.string().max(300).optional(),
63 internalNote: z.string().max(5000).optional(),
64})
65
66export const warningQuerySchema = z.object({
67 targetDid: z.string().optional(),
68 cursor: z.string().optional(),
69 limit: z.coerce.number().int().min(1).max(100).default(25),
70})
71
72export const acknowledgeWarningSchema = z.object({
73 id: z.coerce.number().int().positive(),
74})