fix(Minor M-1): 站内信内嵌提交改用独立 schema,并修复题号链接
两件事: 1. 内嵌的 submission 之前复用 submissionDetailSchema 并把 info / ip 写死成空值, 于是键仍留在响应里。旧 SubmissionSafeModelSerializer 是 exclude,这三个键 根本不出现。改成独立的 embeddedSubmissionSchema —— 形状对上了,将来有人 把空值改成真值也不会变成泄露,因为这里压根没有这三个字段。 2. 顺带修掉一个评审没覆盖的真回归:内嵌 submission 给的是 problemId(数字主键), 而旧 serializer 的 problem 是 SlugRelatedField(slug_field="_id"),即展示用题号。 oj/user/message.vue:20 拿它拼 /problem/<题号>,迁移后拼出的是 /problem/undefined, 题号那一栏也是空的。改为下发 problem,实测返回 "1004"。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import { z } from "zod"
|
||||
|
||||
import { paginatedSchema, sampleUserSchema } from "./common"
|
||||
import { submissionDetailSchema } from "./submission"
|
||||
import { embeddedSubmissionSchema } from "./submission"
|
||||
|
||||
export const announcementSchema = z.object({
|
||||
id: z.number().int(),
|
||||
@@ -21,7 +21,7 @@ export const messageSchema = z.object({
|
||||
sender: sampleUserSchema,
|
||||
createTime: z.string(),
|
||||
message: z.string(),
|
||||
submission: submissionDetailSchema,
|
||||
submission: embeddedSubmissionSchema,
|
||||
})
|
||||
|
||||
export const messageListSchema = paginatedSchema(messageSchema)
|
||||
|
||||
@@ -46,6 +46,21 @@ export const submissionDetailSchema = z.object({
|
||||
canUnshare: z.boolean(),
|
||||
})
|
||||
|
||||
/**
|
||||
* 内嵌在别处(目前只有站内信)的提交对象。对齐旧后端的
|
||||
* `SubmissionSafeModelSerializer(exclude=("info", "contest", "ip"))` ——
|
||||
* 这三个键**根本不出现**,而不是出现但值为空。
|
||||
*
|
||||
* 独立成一个 schema 而不是复用 submissionDetailSchema 传空值:形状一致了,
|
||||
* 将来有人「顺手」把空值改成真值就不会变成泄露,因为这里压根没有这三个字段。
|
||||
*/
|
||||
export const embeddedSubmissionSchema = submissionDetailSchema
|
||||
.omit({ info: true, ip: true, contestId: true, problemId: true })
|
||||
// 旧 SubmissionSafeModelSerializer 里 problem 是
|
||||
// `SlugRelatedField(slug_field="_id")`,即**展示用题号**而非数字主键。
|
||||
// 站内信页面拿它拼 `/problem/<题号>` 链接,给数字 id 会拼出打不开的地址。
|
||||
.extend({ problem: z.string() })
|
||||
|
||||
export const submissionUpdateSchema = z.object({
|
||||
type: z.literal("submission_update"),
|
||||
submission_id: z.string(),
|
||||
|
||||
Reference in New Issue
Block a user