feat: auto-enroll new signups into free course obsidian-start (freemium)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-17 14:05:52 +05:00
parent 2ea9c6fda0
commit a8cd2cd4d4
2 changed files with 41 additions and 1 deletions
+38 -1
View File
@@ -76,7 +76,7 @@ export async function POST(request: NextRequest) {
process.env.BETTER_AUTH_URL ??
`https://${request.headers.get("host")}`;
return auth.handler(
const response = await auth.handler(
new Request(`${baseUrl}/api/auth/sign-up/email`, {
method: "POST",
headers: new Headers({
@@ -86,4 +86,41 @@ export async function POST(request: NextRequest) {
body: JSON.stringify({ name, email, password, callbackURL: "/dashboard" }),
})
);
// Freemium: при успешной регистрации авто-записываем в бесплатный курс.
// Не валим регистрацию, если enroll не удался.
if (response.ok && email) {
try {
const freeSlug = process.env.FREE_COURSE_SLUG ?? "obsidian-start";
const [user, course] = await Promise.all([
prisma.user.findFirst({
where: { email: { equals: email, mode: "insensitive" } },
select: { id: true },
}),
prisma.course.findUnique({
where: { slug: freeSlug },
select: { id: true },
}),
]);
if (user && course) {
await prisma.courseEnrollment.upsert({
where: { userId_courseId: { userId: user.id, courseId: course.id } },
update: {},
create: { userId: user.id, courseId: course.id },
});
await prisma.accessLog.create({
data: {
courseId: course.id,
userId: user.id,
action: "granted",
method: "free-signup",
},
});
}
} catch (e) {
console.error("free-enroll failed", e);
}
}
return response;
}