This commit is contained in:
2026-04-13 10:05:22 +07:00
parent 406d7039d6
commit 409706457a
3 changed files with 19 additions and 4 deletions

View File

@@ -3,7 +3,10 @@
<component name="MaterialThemeProjectNewConfig">
<option name="metadata">
<MTProjectMetadataState>
<option name="userId" value="3d6f1b06:19d820f26b8:-7ffd" />
<option name="migrated" value="true" />
<option name="pristineConfig" value="false" />
<option name="userId" value="2c1a2bb7:18a988f44a2:-8000" />
<option name="version" value="8.13.2" />
</MTProjectMetadataState>
</option>
</component>

View File

@@ -17,7 +17,7 @@ export function WritingChecker() {
const [improvedExpanded, setImprovedExpanded] = useState(false)
const [remaining, setRemaining] = useState(getRemainingChecks)
const { mutate: checkWriting, isPending, isError, error, data: feedback } = useWritingCheck()
const { mutate: checkWriting, isPending, isError, error, data: feedback, reset: resetMutation } = useWritingCheck()
const { requireAuth } = useRequireAuth()
const user = useAuthStore((s) => s.user)
const { mutate: awardActivity } = useAwardActivity()
@@ -28,12 +28,13 @@ export function WritingChecker() {
useEffect(() => {
if (!user) {
setRemaining(getRemainingChecks())
resetMutation()
return
}
countTodayWritingSubmissions(user.id).then((used) => {
setRemaining(AUTH_LIMIT - used)
})
}, [user])
}, [user, resetMutation])
const charCount = text.length
const canSubmit = text.trim().length > 0 && remaining > 0 && charCount <= MAX_CHARS && !isPending

View File

@@ -13,7 +13,18 @@ async function callEdgeFunction(content: string): Promise<WritingFeedback> {
body: { content },
})
if (error) throw new Error(error.message ?? "Đã có lỗi khi chấm bài. Vui lòng thử lại.")
if (error) {
// The Supabase SDK wraps non-2xx responses in a generic FunctionsHttpError.
// Try to parse the actual error body returned by the edge function.
try {
const body = await (error as unknown as { context: Response }).context.json()
if (body?.error) throw new Error(body.error)
} catch {
// ignore parse failure, fall through to generic message
}
throw new Error("Đã có lỗi khi chấm bài. Vui lòng thử lại.")
}
if (!data) throw new Error("Phản hồi từ AI không hợp lệ. Vui lòng thử lại.")
return data