Nuxt coursework boilerplate: Tailwind, Drizzle (MySQL), Redis, Pug page, Vercel deploy workflow

This commit is contained in:
2026-09-06 11:01:04 +02:00
commit 5920325d65
20 changed files with 2226 additions and 0 deletions
+7
View File
@@ -0,0 +1,7 @@
import { redis } from "~~/server/utils/redis";
export default defineEventHandler(async (event) => {
const key = getRouterParam(event, "key");
const value = await redis.get(`student:${process.env.REDIS_USERNAME}:${key}`);
return { key, value };
});
+8
View File
@@ -0,0 +1,8 @@
import { redis } from "~~/server/utils/redis";
export default defineEventHandler(async (event) => {
const key = getRouterParam(event, "key");
const body = await readBody<{ value: string }>(event);
await redis.set(`student:${process.env.REDIS_USERNAME}:${key}`, body.value);
return { ok: true };
});
+6
View File
@@ -0,0 +1,6 @@
import { db } from "~~/server/db";
import { notes } from "~~/server/db/schema";
export default defineEventHandler(async () => {
return db.select().from(notes);
});
+8
View File
@@ -0,0 +1,8 @@
import { db } from "~~/server/db";
import { notes } from "~~/server/db/schema";
export default defineEventHandler(async (event) => {
const body = await readBody<{ title: string; body: string }>(event);
await db.insert(notes).values({ title: body.title, body: body.body });
return { ok: true };
});
+14
View File
@@ -0,0 +1,14 @@
import { drizzle } from "drizzle-orm/mysql2";
import * as schema from "./schema";
export const db = drizzle({
connection: {
host: process.env.MYSQL_HOST ?? "localhost",
port: Number(process.env.MYSQL_PORT ?? 3306),
database: process.env.MYSQL_DATABASE,
user: process.env.MYSQL_USER,
password: process.env.MYSQL_PASSWORD,
},
schema,
mode: "default",
});
+8
View File
@@ -0,0 +1,8 @@
import { mysqlTable, int, varchar, timestamp } from "drizzle-orm/mysql-core";
export const notes = mysqlTable("notes", {
id: int("id").primaryKey().autoincrement(),
title: varchar("title", { length: 255 }).notNull(),
body: varchar("body", { length: 2000 }).notNull(),
createdAt: timestamp("created_at").defaultNow().notNull(),
});
+10
View File
@@ -0,0 +1,10 @@
import { Redis } from "ioredis";
export const redis = new Redis({
host: process.env.REDIS_HOST ?? "localhost",
port: Number(process.env.REDIS_PORT ?? 6379),
username: process.env.REDIS_USERNAME,
password: process.env.REDIS_PASSWORD,
lazyConnect: true,
maxRetriesPerRequest: 2,
});