feat: widgets and ai chat

This commit is contained in:
Rotimi Best
2026-04-27 11:40:38 +01:00
parent ae1801f85f
commit 5717dd8004
391 changed files with 28177 additions and 22467 deletions
+7
View File
@@ -25,6 +25,7 @@ import { getProfileById } from '@cio/db/queries/auth';
import { buildEmailFromName, sendEmail } from '@cio/email';
import { getProfileByEmail, markUserAndProfileEmailVerified } from '@cio/db/queries/auth';
import { generateSlug } from '@cio/utils/functions';
import { ensureComplianceEnrollmentRecordsForProfiles } from './compliance';
type InviteStatus = 'ACTIVE' | 'EXPIRED' | 'USED_UP' | 'REVOKED';
type InvitePreset = 'ONE_TIME_24H' | 'MULTI_USE_7D' | 'MULTI_USE_30D' | 'CUSTOM';
@@ -647,6 +648,8 @@ export async function enrollInCourse(
.limit(1);
if (existingMember) {
await ensureComplianceEnrollmentRecordsForProfiles([courseId], [user.id]);
return {
success: true,
alreadyJoined: true,
@@ -677,6 +680,8 @@ export async function enrollInCourse(
email: normalizedEmail
});
await ensureComplianceEnrollmentRecordsForProfiles([courseId], [user.id]);
await sendStudentJoinEmails({
courseId,
courseName: title,
@@ -1071,6 +1076,8 @@ export async function acceptStudentInvite(token: string, user: TAuthUser, contex
};
});
await ensureComplianceEnrollmentRecordsForProfiles([result.courseId], [user.id]);
if (!result.alreadyJoined) {
await sendStudentJoinEmails({
courseId: result.courseId,