feat: certification rules, content sanitization, handle draft course updates and reset content, better redis logging

This commit is contained in:
Rotimi Best
2026-03-30 08:24:55 +01:00
parent ff2ad59377
commit 5a8f50f67b
131 changed files with 5643 additions and 2134 deletions
@@ -3,14 +3,23 @@ import { db, organizationmember } from '@db/drizzle';
interface SeedOrganizationMember {
testOrgId: string;
adminUserId: string;
studentUserId: string;
enterpriseOrgId: string;
enterpriseAdminUserId: string;
enterpriseStudentUserId: string;
}
export async function seedOrganizationMember({ testOrgId, adminUserId }: SeedOrganizationMember) {
export async function seedOrganizationMember({
testOrgId,
adminUserId,
studentUserId,
enterpriseOrgId,
enterpriseAdminUserId,
enterpriseStudentUserId
}: SeedOrganizationMember) {
const existingOrgMembers = await db.select().from(organizationmember);
const existingOrgMemberKeys = existingOrgMembers.map((om) => `${om.organizationId}-${om.profileId}`);
const studentUserId = '0c256e75-aa40-4f62-8d30-0217ca1c60d9';
const orgMembersToInsert = [
{
organizationId: testOrgId,
@@ -23,6 +32,18 @@ export async function seedOrganizationMember({ testOrgId, adminUserId }: SeedOrg
roleId: 3, // STUDENT
profileId: studentUserId,
verified: false
},
{
organizationId: enterpriseOrgId,
roleId: 1, // ADMIN
profileId: enterpriseAdminUserId,
verified: false
},
{
organizationId: enterpriseOrgId,
roleId: 3, // STUDENT
profileId: enterpriseStudentUserId,
verified: false
}
].filter((om) => !existingOrgMemberKeys.includes(`${om.organizationId}-${om.profileId}`));