-
Notifications
You must be signed in to change notification settings - Fork 34
Expand file tree
/
Copy pathtypes.ts
More file actions
285 lines (274 loc) · 6.25 KB
/
Copy pathtypes.ts
File metadata and controls
285 lines (274 loc) · 6.25 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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
import type { PointReason, UserRole, UserStatus } from '@prisma/client'
import { z } from 'zod'
import { getLength } from '~/utils'
export const regRequestSchema = z
.object({
username: z.string(),
password: z.string().min(6, '密码最少6个字符'),
repeatPassword: z.string().min(6, '密码最少6个字符'),
email: z.string().email('请填写正确的邮箱地址'),
inviteCode: z.string().optional(),
emailCode: z.string().optional(),
emailCodeKey: z.string().optional(),
token: z.string().optional(),
})
.refine(data => data.password === data.repeatPassword, {
message: '两次密码不一致',
path: ['repeatPassword'],
}).refine(data => getLength(data.username) >= 3, {
message: '用户名最少3个字符,中文一个算2个字符',
path: ['username'],
}).refine(data => !data.inviteCode || getLength(data.inviteCode) > 0, {
message: '请填写邀请码',
path: ['inviteCode'],
})
export const saveSettingsRequestSchema = z.object({
password: z.string().optional(),
email: z.string().email('请填写正确邮箱地址'),
headImg: z.union([z.string().url('请填写正确的URL'), z.string().nullish()]),
css: z.string().optional().nullish(),
js: z.string().optional().nullish(),
signature: z.string().max(300, '最大不超过300个字符').optional().nullish(),
})
export const loginRequestSchema = z.object({
username: z.string(),
password: z.string().min(6, '密码最少6个字符'),
token: z.string().optional(),
}).refine(data => getLength(data.username) >= 3, {
message: '用户名最少3个字符,中文一个算2个字符',
path: ['username'],
})
export const createPostSchema = z.object({
title: z
.string()
.min(4, '标题不少于6个字符')
.max(120, '标题不能超过120个字符'),
content: z.string({ message: '内容是必填的' }),
tagId: z.number({ message: '标签是必选的' }),
pid: z.string().optional(),
readRole: z.number({ message: '阅读范围是必选的' }),
token: z.string().optional(),
hide: z.boolean().optional(),
hideContent: z.string().optional(),
payPoint: z.number().optional(),
}).refine(data => getLength(data.content) >= 6, {
message: '内容最少6个字符,中文一个算2个字符',
path: ['username'],
})
export interface JwtPayload {
uid: string
userId: number
username: string
}
export interface UserDTO {
createdAt: string
uid: string
username: string
email: string
avatarUrl: string | null
headImg?: string
point: number
postCount: number
commentCount: number
role: UserRole
status: UserStatus
lastLogin: string
level: number
bannedEnd: string
unRead: number
css?: string
js?: string
signature?: string
lastActive?: string
secretKey?: string
tgChatID?: string
privateMsgCount?: number
_count: {
fav: number
comments: number
posts: number
ReceiveMessage: number
}
titles: TitleDTO[]
unreadMessageCount: number
unreadPrivateMessageCount: number
}
export interface TagDTO {
id: number
name: string
desc: string
enName: string
count: number
}
export interface TitleDTO {
id: number
style: string
status: boolean
title: string
}
export interface CommentDTO {
content: string
cid: string
createdAt: string
updatedAt: string
mentioned: Array<string>
author: UserDTO
likeCount?: number
dislikeCount?: number
like?: boolean
dislike?: boolean
post?: PostDTO
floor: number
}
export interface PointHistoryDTO {
createdAt: string
pid: string
cid: string
post: PostDTO
comment: CommentDTO
reason: PointReason
}
export interface PostDTO {
title: string
content?: string
pid: string
uid: string
createdAt: string
viewCount: number
replyCount: number
likeCount: number
disLikeCount: number
minLevel: number
author: UserDTO
comments?: Array<CommentDTO>
tagId: number
readRole: number
tag: TagDTO
support?: boolean
_count: {
comments: number
commentLike: number
commentDisLike: number
PostSupport: number
}
fav?: boolean
pinned: boolean
lastCommentTime?: string
lastCommentUid?: string
lastCommentUser?: UserDTO
point: number
hide: boolean
payPoint?: number
payUser?: Array<string>
}
export interface SysConfigDTO {
websiteName: string
favicon: string
websiteUrl: string
webBgimage: string
websiteKeywords: string
websiteDescription: string
pointPerPost: number
pointPerPostByDay: number
pointPerComment: number
pointPerCommentByDay: number
pointPerLikeOrDislike: number
pointPerDaySignInMin: number
pointPerDaySignInMax: number
websiteAnnouncement: string
css: string
js: string
postUrlFormat: {
type: 'UUID' | 'Date' | 'Number'
minNumber: number
dateFormat: string
}
invite: string
createInviteCodePoint: number
ForwardUrl: string
email: {
host: string
port: number
secure: boolean
username: string
password: string
senderName: string
}
regWithEmailCodeVerify: boolean
googleRecaptcha: {
siteKey: string
secretKey: string
enable: boolean
}
proxyUrl: string
enableUploadLocalImage: boolean
notify: {
tgBotEnabled: false
tgBotToken: string
tgBotName: string
tgSecret: string
tgProxyUrl: string
}
s3: {
endpoint: string
domain: string
ak: string
sk: string
bucket: string
region: string
suffix: string
}
upload: {
imgStrategy: 'tencent' | 'local' | 's3'
attachmentStrategy: 'none' | 'loall' | 's3'
}
}
export interface MessageDTO {
id: number
from: UserDTO
to: UserDTO
content: string
read: boolean
createdAt: string
}
export interface inviteInfo {
id: number
createdAt: string
endAt: string
fromUid: string
toUid: string
content: string
}
export interface recaptchaResponse {
success: boolean
challenge_ts: string
hostname: string
score: number
action: string
}
export interface TGMessage {
update_id: number
message: {
message_id: number
from: {
id: number
is_bot: boolean
first_name: string
username: string
language_code: string
}
chat: {
id: number
first_name: string
username: string
type: string
}
date: number
text: string
entities: Array<{
offset: number
length: number
type: string
}>
}
}