mirror of
https://github.com/hanzoai/next.js.git
synced 2026-09-24 17:00:51 +00:00
## Description This PR ensures that the default prettier config is used for examples and templates. This config is compatible with `prettier@3` as well (upgrading prettier is bigger change that can be a future PR). ## Changes - Updated `.prettierrc.json` in root with `"trailingComma": "es5"` (will be needed upgrading to prettier@3) - Added `examples/.prettierrc.json` with default config (this will change every example) - Added `packages/create-next-app/templates/.prettierrc.json` with default config (this will change every template) ## Related - Fixes #54402 - Closes #54409
75 lines
1.4 KiB
TypeScript
75 lines
1.4 KiB
TypeScript
"use server";
|
|
|
|
import { revalidatePath } from "next/cache";
|
|
import postgres from "postgres";
|
|
import { z } from "zod";
|
|
|
|
let sql = postgres(process.env.DATABASE_URL || process.env.POSTGRES_URL!, {
|
|
ssl: "allow",
|
|
});
|
|
|
|
// CREATE TABLE todos (
|
|
// id SERIAL PRIMARY KEY,
|
|
// text TEXT NOT NULL
|
|
// );
|
|
|
|
export async function createTodo(
|
|
prevState: {
|
|
message: string;
|
|
},
|
|
formData: FormData,
|
|
) {
|
|
const schema = z.object({
|
|
todo: z.string().min(1),
|
|
});
|
|
const parse = schema.safeParse({
|
|
todo: formData.get("todo"),
|
|
});
|
|
|
|
if (!parse.success) {
|
|
return { message: "Failed to create todo" };
|
|
}
|
|
|
|
const data = parse.data;
|
|
|
|
try {
|
|
await sql`
|
|
INSERT INTO todos (text)
|
|
VALUES (${data.todo})
|
|
`;
|
|
|
|
revalidatePath("/");
|
|
return { message: `Added todo ${data.todo}` };
|
|
} catch (e) {
|
|
return { message: "Failed to create todo" };
|
|
}
|
|
}
|
|
|
|
export async function deleteTodo(
|
|
prevState: {
|
|
message: string;
|
|
},
|
|
formData: FormData,
|
|
) {
|
|
const schema = z.object({
|
|
id: z.string().min(1),
|
|
todo: z.string().min(1),
|
|
});
|
|
const data = schema.parse({
|
|
id: formData.get("id"),
|
|
todo: formData.get("todo"),
|
|
});
|
|
|
|
try {
|
|
await sql`
|
|
DELETE FROM todos
|
|
WHERE id = ${data.id};
|
|
`;
|
|
|
|
revalidatePath("/");
|
|
return { message: `Deleted todo ${data.todo}` };
|
|
} catch (e) {
|
|
return { message: "Failed to delete todo" };
|
|
}
|
|
}
|