Initialize Stage 0: Next.js 16 scaffold with auth and role-based routing
- Next.js 16.2.2 + React 19 + TypeScript + Tailwind v4 - Better Auth with email/password and role system (student/curator/admin) - Prisma 7 schema: User, Session, Account, Verification + full LMS model - Role-based dashboards: student /dashboard, curator /curator/dashboard, admin /admin/dashboard - Auth pages: login, register, verify-email - Better Auth API route handler - Middleware for route protection - Docker Compose with PostgreSQL 16 - Seed script with test users (admin/curator/student) - CLAUDE.md and ROADMAP.md project documentation Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
import "dotenv/config";
|
||||
import { PrismaClient } from "../src/generated/prisma";
|
||||
import bcrypt from "bcryptjs";
|
||||
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
async function main() {
|
||||
console.log("Seeding database...");
|
||||
|
||||
const hashedPassword = await bcrypt.hash("Password123!", 10);
|
||||
|
||||
// Admin
|
||||
const admin = await prisma.user.upsert({
|
||||
where: { email: "admin@second-brain.ru" },
|
||||
update: {},
|
||||
create: {
|
||||
email: "admin@second-brain.ru",
|
||||
name: "Администратор",
|
||||
emailVerified: true,
|
||||
role: "admin",
|
||||
accounts: {
|
||||
create: {
|
||||
accountId: "admin@second-brain.ru",
|
||||
providerId: "credential",
|
||||
password: hashedPassword,
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
// Curator
|
||||
const curator = await prisma.user.upsert({
|
||||
where: { email: "curator@second-brain.ru" },
|
||||
update: {},
|
||||
create: {
|
||||
email: "curator@second-brain.ru",
|
||||
name: "Куратор",
|
||||
emailVerified: true,
|
||||
role: "curator",
|
||||
accounts: {
|
||||
create: {
|
||||
accountId: "curator@second-brain.ru",
|
||||
providerId: "credential",
|
||||
password: hashedPassword,
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
// Student
|
||||
const student = await prisma.user.upsert({
|
||||
where: { email: "student@second-brain.ru" },
|
||||
update: {},
|
||||
create: {
|
||||
email: "student@second-brain.ru",
|
||||
name: "Ученик",
|
||||
emailVerified: true,
|
||||
role: "student",
|
||||
accounts: {
|
||||
create: {
|
||||
accountId: "student@second-brain.ru",
|
||||
providerId: "credential",
|
||||
password: hashedPassword,
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
console.log("Created users:");
|
||||
console.log(` Admin: ${admin.email}`);
|
||||
console.log(` Curator: ${curator.email}`);
|
||||
console.log(` Student: ${student.email}`);
|
||||
console.log(" Password for all: Password123!");
|
||||
console.log("Done.");
|
||||
}
|
||||
|
||||
main()
|
||||
.catch(console.error)
|
||||
.finally(() => prisma.$disconnect());
|
||||
Reference in New Issue
Block a user