backend
無料Backend Java — Spring Boot controllers/services, JUnit controller tests, MakeMe. Read this first for any backend work. Use when working on the Java Spring backend.
日本語の概要は準備中です。原文の説明を表示しています。
Frontend API integration — generated SDK, apiCallWithLoading, blockUi, wrapped responses, toOpenApiError. Use when calling the generated backend API from the frontend.
日本語の概要は準備中です。原文の説明を表示しています。
実行スコア 未検証
インストール方法を見るインストールする前に、エージェントに与えられる指示の中身を確認できます。
@generated/donut-backend-api/sdk.gen.{ data, error, request, response }.apiCallWithLoading (loading bar + error toasts).import { UserController } from "@generated/donut-backend-api/sdk.gen"
import { apiCallWithLoading } from "@/managedApi/clientSetup"
const { data: newUser, error } = await apiCallWithLoading(() =>
UserController.createUser({ body: formData })
)
const { data: users, error: loadError } = await UserController.getUserProfile()
apiCallWithLoading drives two global surfaces from DonutApp.vue:
{ blockUi: true }. Native <dialog showModal()>, so it paints above other top-layer dialogs.Use { blockUi: true, message?: string } when the rest of the UI must wait (view transition, or a mutation where partial interaction would confuse state). Show the blocker only after any confirmation. Do not add component-local LoadingModal refs.
const { data, error } = await apiCallWithLoading(
() => AssimilationController.next({ query: { timezone: timezoneParam() } }),
{ blockUi: true, message: "Loading next note..." }
)
Keep local loading (inline spinner, disabled control) when the user should still use the rest of the page. Those calls can still use apiCallWithLoading without blockUi.
For safe read-only blockers, pass { blockUi: true, cancelable: true, message?: string }. Returns CancelableApiResult<T> ({ status: "completed"; result } | { status: "cancelled" }). Narrow on status before using result; do not treat cancel as an API error.
const outcome = await apiCallWithLoading(
(signal) =>
AiController.generateRefinementSuggestions({
path: { note: noteId },
signal,
}),
{
blockUi: true,
cancelable: true,
message: "AI is generating refinement layout...",
}
)
if (outcome.status === "cancelled") {
return
}
const { data, error } = outcome.result
Accepted cancel is silent (no toast). Abort is client-only. Do not opt mutations or irreversible writes into cancelable: true. Do not invent AbortError-name matching or a cancelable runWithBlockingApiLoading.
cancelable: true is allowlisted in frontend/tests/managedApi/cancelableAllowlist.spec.ts (ALLOWED_CANCELABLE_FILES). Add a site there when introducing a new cancelable call; do not add cancelable: true outside that set.
For one continuous blocker across multiple calls, wrap them in runWithBlockingApiLoading(operation, message) (noncancelable). Inner apiCallWithLoading calls keep thin bar + toasts only.
Every new { blockUi: true } or runWithBlockingApiLoading site is cancelable, intentionally noncancelable, or nonblocking. Classify it; do not leave it unclassified.
cancelableAllowlist.spec.ts).apiCallWithLoading without blockUi, or a direct SDK call.Loading UI that means unfinished work marks data-app-busy (LoadingThinBar, ContentLoader, LoadingModal; gated by frontend/tests/components/commons/AppBusyMarker.contract.spec.ts). E2E: waitUntilAppIsNotBusy() from e2e_test/start/pageBase.ts. The wait means busy UI cleared, not success.
The global client uses responseStyle: "fields" and throwOnError: false.
const { data: updatedUser, error } = await updateUser(...).!error before using data; no separate data check.error is undefined, TypeScript types data as the success shape.else if (data) after checking error.For 400 field errors, toOpenApiError(error) ({ errors?: Record<string, string>; message?: string }). apiCallWithLoading already toasts; extract errors only for form fields.
import { toOpenApiError } from "@/managedApi/openApiError"
if (error) {
errors.value = toOpenApiError(error).errors || {}
} else {
errors.value = {}
user.value = updatedUser
}
まだレビューはありません。使ってみた感想をお寄せください。
ログインなしで書き込めます。使ってみた感想、質問、動かなかった環境などを気軽にどうぞ。
まだコメントはありません。最初のコメントを書いてみませんか。
Backend Java — Spring Boot controllers/services, JUnit controller tests, MakeMe. Read this first for any backend work. Use when working on the Java Spring backend.
日本語の概要は準備中です。原文の説明を表示しています。
Backend Java production code, Spring Boot controllers/services/repositories, controller return values, imports, schema ERD pointer. Use when editing backend production Java.
日本語の概要は準備中です。原文の説明を表示しています。
Backend Java tests, controller-level stable-boundary tests, JUnit, @Nested, MakeMe builders, @Transactional, parameterized tests. Use when writing or changing backend JUnit tests.
日本語の概要は準備中です。原文の説明を表示しています。
related to donut CLI. Use when working on donut-cli.
日本語の概要は準備中です。原文の説明を表示しています。
Set up and run the Donut dev environment on Cursor Cloud VM (no Nix). Use when working on Cloud VM, running tests on Cloud VM, or encountering command errors related to missing nix. Triggers on: cloud VM, cloud agent, no nix available, /workspace path.
日本語の概要は準備中です。原文の説明を表示しています。
Regenerate docs/database-erd.md from MySQL information_schema (Mermaid ERD: foreign keys and key columns). Use after Flyway schema changes, new migrations, or when the diagram is stale. Triggers on: database ERD, database-erd.md, export_database_erd, schema diagram, ER diagram after migration.
日本語の概要は準備中です。原文の説明を表示しています。