@happyvertical/smrt-education 0.59.1 → 0.60.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/AGENTS.md +3 -1
  2. package/README.md +7 -2
  3. package/agents/class-crunchlabs.md +8 -4
  4. package/agents/course-bundle-import.md +89 -10
  5. package/agents/lesson-materials.md +21 -4
  6. package/dist/chunks/course-authoring-contracts-C4Hqba-e.js.map +1 -1
  7. package/dist/chunks/{course-bundle-zip-5KUe3C5H.js → course-bundle-zip-CGR1Ci0Z.js} +3 -2
  8. package/dist/chunks/course-bundle-zip-CGR1Ci0Z.js.map +1 -0
  9. package/dist/chunks/{workbook-photo-service-CjcB0y8Y.js → workbook-photo-service-DHP5ja82.js} +103 -46
  10. package/dist/chunks/workbook-photo-service-DHP5ja82.js.map +1 -0
  11. package/dist/course-authoring-contracts.d.ts +1 -1
  12. package/dist/course-authoring-contracts.d.ts.map +1 -1
  13. package/dist/course-bundle-contracts.d.ts +2 -0
  14. package/dist/course-bundle-contracts.d.ts.map +1 -1
  15. package/dist/course-bundle-manifest-v2.d.ts +24 -1
  16. package/dist/course-bundle-manifest-v2.d.ts.map +1 -1
  17. package/dist/course-bundle-models.d.ts +88 -0
  18. package/dist/course-bundle-models.d.ts.map +1 -1
  19. package/dist/course-bundle-service.d.ts +153 -7
  20. package/dist/course-bundle-service.d.ts.map +1 -1
  21. package/dist/course-bundle.d.ts +17 -0
  22. package/dist/course-bundle.d.ts.map +1 -1
  23. package/dist/document-converter.d.ts +8 -0
  24. package/dist/document-converter.d.ts.map +1 -1
  25. package/dist/hearth-class-crunchlabs.d.ts +3 -2
  26. package/dist/hearth-class-crunchlabs.d.ts.map +1 -1
  27. package/dist/index.d.ts +2 -2
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +844 -133
  30. package/dist/index.js.map +1 -1
  31. package/dist/ingestion.js +1 -1
  32. package/dist/lesson-assets.d.ts +19 -0
  33. package/dist/lesson-assets.d.ts.map +1 -1
  34. package/dist/manifest.json +1803 -145
  35. package/dist/node.js +1 -1
  36. package/dist/smrt-knowledge.json +571 -15
  37. package/dist/sources/class-crunchlabs.d.ts +7 -0
  38. package/dist/sources/class-crunchlabs.d.ts.map +1 -1
  39. package/dist/submission-service.d.ts +24 -4
  40. package/dist/submission-service.d.ts.map +1 -1
  41. package/package.json +8 -8
  42. package/dist/chunks/course-bundle-zip-5KUe3C5H.js.map +0 -1
  43. package/dist/chunks/workbook-photo-service-CjcB0y8Y.js.map +0 -1
@@ -2,7 +2,7 @@
2
2
  "version": "1.0.0",
3
3
  "timestamp": 0,
4
4
  "packageName": "@happyvertical/smrt-education",
5
- "packageVersion": "0.59.1",
5
+ "packageVersion": "0.60.0",
6
6
  "objects": {
7
7
  "@happyvertical/smrt-education:CatalogProviderCollection": {
8
8
  "name": "catalogprovidercollection",
@@ -6359,7 +6359,7 @@
6359
6359
  ],
6360
6360
  "schema": {
6361
6361
  "tableName": "lesson_assets",
6362
- "ddl": "CREATE TABLE IF NOT EXISTS \"lesson_assets\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"tenant_id\" UUID,\n \"lesson_id\" UUID NOT NULL,\n \"asset_id\" UUID NOT NULL,\n \"relationship\" TEXT NOT NULL DEFAULT 'attachment',\n \"sort_order\" INTEGER NOT NULL DEFAULT 0,\n \"audience\" TEXT DEFAULT ''\n);",
6362
+ "ddl": "CREATE TABLE IF NOT EXISTS \"lesson_assets\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"tenant_id\" UUID,\n \"lesson_id\" UUID NOT NULL,\n \"asset_id\" UUID NOT NULL,\n \"relationship\" TEXT NOT NULL DEFAULT 'attachment',\n \"sort_order\" INTEGER NOT NULL DEFAULT 0,\n \"audience\" TEXT DEFAULT '',\n \"rendition\" TEXT DEFAULT '',\n \"rendition_of_asset_id\" UUID,\n \"thumbnail_asset_id\" UUID\n);",
6363
6363
  "columns": {
6364
6364
  "id": {
6365
6365
  "type": "UUID",
@@ -6427,6 +6427,24 @@
6427
6427
  "notNull": false,
6428
6428
  "unique": false,
6429
6429
  "default": ""
6430
+ },
6431
+ "rendition": {
6432
+ "type": "TEXT",
6433
+ "notNull": false,
6434
+ "unique": false,
6435
+ "default": ""
6436
+ },
6437
+ "rendition_of_asset_id": {
6438
+ "type": "UUID",
6439
+ "referenceKind": "crossPackageRef",
6440
+ "notNull": false,
6441
+ "unique": false
6442
+ },
6443
+ "thumbnail_asset_id": {
6444
+ "type": "UUID",
6445
+ "referenceKind": "crossPackageRef",
6446
+ "notNull": false,
6447
+ "unique": false
6430
6448
  }
6431
6449
  },
6432
6450
  "indexes": [
@@ -6466,9 +6484,21 @@
6466
6484
  "columns": [
6467
6485
  "asset_id"
6468
6486
  ]
6487
+ },
6488
+ {
6489
+ "name": "lesson_assets_rendition_of_asset_id_idx",
6490
+ "columns": [
6491
+ "rendition_of_asset_id"
6492
+ ]
6493
+ },
6494
+ {
6495
+ "name": "lesson_assets_thumbnail_asset_id_idx",
6496
+ "columns": [
6497
+ "thumbnail_asset_id"
6498
+ ]
6469
6499
  }
6470
6500
  ],
6471
- "version": "1bfa06ae"
6501
+ "version": "8e49e3b8"
6472
6502
  },
6473
6503
  "importPath": "@happyvertical/smrt-education"
6474
6504
  },
@@ -16302,11 +16332,1602 @@
16302
16332
  "type": "text",
16303
16333
  "required": false
16304
16334
  },
16305
- "retriedByUserId": {
16335
+ "retriedByUserId": {
16336
+ "type": "text",
16337
+ "required": false
16338
+ },
16339
+ "recordedAt": {
16340
+ "type": "text",
16341
+ "required": false
16342
+ }
16343
+ },
16344
+ "methods": {
16345
+ "delete": {
16346
+ "name": "delete",
16347
+ "async": true,
16348
+ "parameters": [],
16349
+ "returnType": "Promise<void>",
16350
+ "isStatic": false,
16351
+ "isPublic": true
16352
+ },
16353
+ "save": {
16354
+ "name": "save",
16355
+ "async": true,
16356
+ "parameters": [
16357
+ {
16358
+ "name": "options",
16359
+ "type": "SmrtSaveOptions",
16360
+ "optional": true
16361
+ }
16362
+ ],
16363
+ "returnType": "Promise<this>",
16364
+ "isStatic": false,
16365
+ "isPublic": true
16366
+ }
16367
+ },
16368
+ "decoratorConfig": {
16369
+ "tableName": "course_bundle_renderings",
16370
+ "conflictColumns": [
16371
+ "tenant_id",
16372
+ "import_id",
16373
+ "sha256"
16374
+ ],
16375
+ "indexes": [
16376
+ {
16377
+ "name": "course_bundle_renderings_unique",
16378
+ "columns": [
16379
+ "tenantId",
16380
+ "importId",
16381
+ "sha256"
16382
+ ],
16383
+ "unique": true
16384
+ }
16385
+ ],
16386
+ "api": false,
16387
+ "mcp": false,
16388
+ "cli": false,
16389
+ "tenantScoped": {
16390
+ "mode": "required"
16391
+ }
16392
+ },
16393
+ "extends": "SmrtObject",
16394
+ "exportName": "CourseBundleRendering",
16395
+ "collectionExportName": "CourseBundleRenderingCollection",
16396
+ "validationRules": [
16397
+ {
16398
+ "field": "importId",
16399
+ "rule": "required",
16400
+ "fieldType": "foreignKey"
16401
+ },
16402
+ {
16403
+ "field": "renderedSizeBytes",
16404
+ "rule": "required",
16405
+ "fieldType": "integer"
16406
+ }
16407
+ ],
16408
+ "schema": {
16409
+ "tableName": "course_bundle_renderings",
16410
+ "ddl": "CREATE TABLE IF NOT EXISTS \"course_bundle_renderings\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"tenant_id\" UUID NOT NULL,\n \"import_id\" UUID NOT NULL,\n \"sha256\" TEXT,\n \"rendered_sha256\" TEXT,\n \"rendered_size_bytes\" INTEGER NOT NULL DEFAULT 0,\n \"converter_id\" TEXT,\n \"retried_by_user_id\" TEXT,\n \"recorded_at\" TEXT\n);",
16411
+ "columns": {
16412
+ "id": {
16413
+ "type": "UUID",
16414
+ "primaryKey": true,
16415
+ "referenceKind": "id",
16416
+ "notNull": true
16417
+ },
16418
+ "slug": {
16419
+ "type": "TEXT",
16420
+ "notNull": true
16421
+ },
16422
+ "context": {
16423
+ "type": "TEXT",
16424
+ "notNull": true,
16425
+ "default": ""
16426
+ },
16427
+ "created_at": {
16428
+ "type": "TIMESTAMP",
16429
+ "notNull": true,
16430
+ "default": "current_timestamp"
16431
+ },
16432
+ "updated_at": {
16433
+ "type": "TIMESTAMP",
16434
+ "notNull": true,
16435
+ "default": "current_timestamp"
16436
+ },
16437
+ "tenant_id": {
16438
+ "type": "UUID",
16439
+ "referenceKind": "tenantId",
16440
+ "notNull": true,
16441
+ "unique": false
16442
+ },
16443
+ "import_id": {
16444
+ "type": "UUID",
16445
+ "referenceKind": "foreignKey",
16446
+ "notNull": true,
16447
+ "unique": false,
16448
+ "foreignKey": {
16449
+ "table": "course_bundle_imports",
16450
+ "column": "id",
16451
+ "onDelete": "CASCADE",
16452
+ "onUpdate": "CASCADE"
16453
+ }
16454
+ },
16455
+ "sha256": {
16456
+ "type": "TEXT",
16457
+ "notNull": false,
16458
+ "unique": false
16459
+ },
16460
+ "rendered_sha256": {
16461
+ "type": "TEXT",
16462
+ "notNull": false,
16463
+ "unique": false
16464
+ },
16465
+ "rendered_size_bytes": {
16466
+ "type": "INTEGER",
16467
+ "notNull": true,
16468
+ "unique": false,
16469
+ "default": 0
16470
+ },
16471
+ "converter_id": {
16472
+ "type": "TEXT",
16473
+ "notNull": false,
16474
+ "unique": false
16475
+ },
16476
+ "retried_by_user_id": {
16477
+ "type": "TEXT",
16478
+ "notNull": false,
16479
+ "unique": false
16480
+ },
16481
+ "recorded_at": {
16482
+ "type": "TEXT",
16483
+ "notNull": false,
16484
+ "unique": false
16485
+ }
16486
+ },
16487
+ "indexes": [
16488
+ {
16489
+ "name": "course_bundle_renderings_tenant_id_import_id_idx",
16490
+ "columns": [
16491
+ "tenant_id",
16492
+ "import_id",
16493
+ "sha256"
16494
+ ],
16495
+ "unique": true,
16496
+ "nullsNotDistinct": true
16497
+ },
16498
+ {
16499
+ "name": "course_bundle_renderings_slug_context_idx",
16500
+ "columns": [
16501
+ "slug",
16502
+ "context"
16503
+ ]
16504
+ },
16505
+ {
16506
+ "name": "course_bundle_renderings_unique",
16507
+ "columns": [
16508
+ "tenant_id",
16509
+ "import_id",
16510
+ "sha256"
16511
+ ],
16512
+ "unique": true
16513
+ },
16514
+ {
16515
+ "name": "course_bundle_renderings_tenant_id_created_at_idx",
16516
+ "columns": [
16517
+ "tenant_id",
16518
+ "created_at"
16519
+ ]
16520
+ },
16521
+ {
16522
+ "name": "course_bundle_renderings_import_id_idx",
16523
+ "columns": [
16524
+ "import_id"
16525
+ ]
16526
+ }
16527
+ ],
16528
+ "version": "8f393b32"
16529
+ },
16530
+ "importPath": "@happyvertical/smrt-education"
16531
+ },
16532
+ "@happyvertical/smrt-education:CourseBundleRenderingCollection": {
16533
+ "name": "coursebundlerenderingcollection",
16534
+ "className": "CourseBundleRenderingCollection",
16535
+ "qualifiedName": "@happyvertical/smrt-education:CourseBundleRenderingCollection",
16536
+ "collection": "coursebundlerenderings",
16537
+ "filePath": "/home/runner/work/smrt/smrt/packages/education/src/course-bundle-models.ts",
16538
+ "packageName": "@happyvertical/smrt-education",
16539
+ "fields": {},
16540
+ "methods": {},
16541
+ "decoratorConfig": {
16542
+ "tableName": "course_bundle_renderings",
16543
+ "api": false,
16544
+ "mcp": false,
16545
+ "cli": false
16546
+ },
16547
+ "extends": "SmrtCollection",
16548
+ "extendsTypeArg": "CourseBundleRendering",
16549
+ "exportName": "CourseBundleRenderingCollection",
16550
+ "collectionExportName": "CourseBundleRenderingCollectionCollection",
16551
+ "collectionOf": "@happyvertical/smrt-education:CourseBundleRendering",
16552
+ "inheritedExposure": [
16553
+ "api",
16554
+ "mcp",
16555
+ "cli"
16556
+ ],
16557
+ "schema": {
16558
+ "tableName": "course_bundle_renderings",
16559
+ "ddl": "CREATE TABLE IF NOT EXISTS \"course_bundle_renderings\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"tenant_id\" UUID NOT NULL,\n \"import_id\" UUID NOT NULL,\n \"sha256\" TEXT,\n \"rendered_sha256\" TEXT,\n \"rendered_size_bytes\" INTEGER NOT NULL DEFAULT 0,\n \"converter_id\" TEXT,\n \"retried_by_user_id\" TEXT,\n \"recorded_at\" TEXT\n);",
16560
+ "columns": {
16561
+ "id": {
16562
+ "type": "UUID",
16563
+ "primaryKey": true,
16564
+ "referenceKind": "id",
16565
+ "notNull": true
16566
+ },
16567
+ "slug": {
16568
+ "type": "TEXT",
16569
+ "notNull": true
16570
+ },
16571
+ "context": {
16572
+ "type": "TEXT",
16573
+ "notNull": true,
16574
+ "default": ""
16575
+ },
16576
+ "created_at": {
16577
+ "type": "TIMESTAMP",
16578
+ "notNull": true,
16579
+ "default": "current_timestamp"
16580
+ },
16581
+ "updated_at": {
16582
+ "type": "TIMESTAMP",
16583
+ "notNull": true,
16584
+ "default": "current_timestamp"
16585
+ },
16586
+ "tenant_id": {
16587
+ "type": "UUID",
16588
+ "referenceKind": "tenantId",
16589
+ "notNull": true,
16590
+ "unique": false
16591
+ },
16592
+ "import_id": {
16593
+ "type": "UUID",
16594
+ "referenceKind": "foreignKey",
16595
+ "notNull": true,
16596
+ "unique": false,
16597
+ "foreignKey": {
16598
+ "table": "course_bundle_imports",
16599
+ "column": "id",
16600
+ "onDelete": "CASCADE",
16601
+ "onUpdate": "CASCADE"
16602
+ }
16603
+ },
16604
+ "sha256": {
16605
+ "type": "TEXT",
16606
+ "notNull": false,
16607
+ "unique": false
16608
+ },
16609
+ "rendered_sha256": {
16610
+ "type": "TEXT",
16611
+ "notNull": false,
16612
+ "unique": false
16613
+ },
16614
+ "rendered_size_bytes": {
16615
+ "type": "INTEGER",
16616
+ "notNull": true,
16617
+ "unique": false,
16618
+ "default": 0
16619
+ },
16620
+ "converter_id": {
16621
+ "type": "TEXT",
16622
+ "notNull": false,
16623
+ "unique": false
16624
+ },
16625
+ "retried_by_user_id": {
16626
+ "type": "TEXT",
16627
+ "notNull": false,
16628
+ "unique": false
16629
+ },
16630
+ "recorded_at": {
16631
+ "type": "TEXT",
16632
+ "notNull": false,
16633
+ "unique": false
16634
+ }
16635
+ },
16636
+ "indexes": [
16637
+ {
16638
+ "name": "course_bundle_renderings_tenant_id_import_id_idx",
16639
+ "columns": [
16640
+ "tenant_id",
16641
+ "import_id",
16642
+ "sha256"
16643
+ ],
16644
+ "unique": true,
16645
+ "nullsNotDistinct": true
16646
+ },
16647
+ {
16648
+ "name": "course_bundle_renderings_slug_context_idx",
16649
+ "columns": [
16650
+ "slug",
16651
+ "context"
16652
+ ]
16653
+ },
16654
+ {
16655
+ "name": "course_bundle_renderings_unique",
16656
+ "columns": [
16657
+ "tenant_id",
16658
+ "import_id",
16659
+ "sha256"
16660
+ ],
16661
+ "unique": true
16662
+ },
16663
+ {
16664
+ "name": "course_bundle_renderings_tenant_id_created_at_idx",
16665
+ "columns": [
16666
+ "tenant_id",
16667
+ "created_at"
16668
+ ]
16669
+ },
16670
+ {
16671
+ "name": "course_bundle_renderings_import_id_idx",
16672
+ "columns": [
16673
+ "import_id"
16674
+ ]
16675
+ }
16676
+ ],
16677
+ "version": "8f393b32"
16678
+ },
16679
+ "importPath": "@happyvertical/smrt-education"
16680
+ },
16681
+ "@happyvertical/smrt-education:CourseBundleAttachment": {
16682
+ "name": "coursebundleattachment",
16683
+ "className": "CourseBundleAttachment",
16684
+ "qualifiedName": "@happyvertical/smrt-education:CourseBundleAttachment",
16685
+ "collection": "coursebundleattachments",
16686
+ "description": "Append-only record that one imported bundle (a part of a unit) was attached to a family course (SMRT #4632).",
16687
+ "filePath": "/home/runner/work/smrt/smrt/packages/education/src/course-bundle-models.ts",
16688
+ "packageName": "@happyvertical/smrt-education",
16689
+ "fields": {
16690
+ "tenantId": {
16691
+ "type": "text",
16692
+ "required": true,
16693
+ "_meta": {
16694
+ "sqlType": "UUID",
16695
+ "__tenancy": {
16696
+ "isTenantIdField": true,
16697
+ "autoFilter": true,
16698
+ "required": true,
16699
+ "autoPopulate": true,
16700
+ "nullable": false,
16701
+ "mode": "required",
16702
+ "field": "tenantId",
16703
+ "allowSuperAdminBypass": false
16704
+ }
16705
+ }
16706
+ },
16707
+ "importId": {
16708
+ "type": "foreignKey",
16709
+ "required": true,
16710
+ "related": "CourseBundleImport",
16711
+ "_meta": {
16712
+ "required": true
16713
+ }
16714
+ },
16715
+ "courseId": {
16716
+ "type": "foreignKey",
16717
+ "required": true,
16718
+ "related": "Course",
16719
+ "_meta": {
16720
+ "required": true
16721
+ }
16722
+ },
16723
+ "unitKey": {
16724
+ "type": "text",
16725
+ "required": false
16726
+ },
16727
+ "partIndex": {
16728
+ "type": "integer",
16729
+ "required": true,
16730
+ "default": 1
16731
+ },
16732
+ "partCount": {
16733
+ "type": "integer",
16734
+ "required": true,
16735
+ "default": 1
16736
+ },
16737
+ "attachedByUserId": {
16738
+ "type": "text",
16739
+ "required": false
16740
+ },
16741
+ "recordedAt": {
16742
+ "type": "text",
16743
+ "required": false
16744
+ }
16745
+ },
16746
+ "methods": {
16747
+ "delete": {
16748
+ "name": "delete",
16749
+ "async": true,
16750
+ "parameters": [],
16751
+ "returnType": "Promise<void>",
16752
+ "isStatic": false,
16753
+ "isPublic": true
16754
+ },
16755
+ "save": {
16756
+ "name": "save",
16757
+ "async": true,
16758
+ "parameters": [
16759
+ {
16760
+ "name": "options",
16761
+ "type": "SmrtSaveOptions",
16762
+ "optional": true
16763
+ }
16764
+ ],
16765
+ "returnType": "Promise<this>",
16766
+ "isStatic": false,
16767
+ "isPublic": true
16768
+ }
16769
+ },
16770
+ "decoratorConfig": {
16771
+ "tableName": "course_bundle_attachments",
16772
+ "conflictColumns": [
16773
+ "tenant_id",
16774
+ "import_id"
16775
+ ],
16776
+ "indexes": [
16777
+ {
16778
+ "name": "course_bundle_attachments_import_unique",
16779
+ "columns": [
16780
+ "tenantId",
16781
+ "importId"
16782
+ ],
16783
+ "unique": true
16784
+ },
16785
+ {
16786
+ "name": "course_bundle_attachments_part_unique",
16787
+ "columns": [
16788
+ "tenantId",
16789
+ "courseId",
16790
+ "partIndex"
16791
+ ],
16792
+ "unique": true
16793
+ }
16794
+ ],
16795
+ "api": false,
16796
+ "mcp": false,
16797
+ "cli": false,
16798
+ "tenantScoped": {
16799
+ "mode": "required"
16800
+ }
16801
+ },
16802
+ "extends": "SmrtObject",
16803
+ "exportName": "CourseBundleAttachment",
16804
+ "collectionExportName": "CourseBundleAttachmentCollection",
16805
+ "validationRules": [
16806
+ {
16807
+ "field": "importId",
16808
+ "rule": "required",
16809
+ "fieldType": "foreignKey"
16810
+ },
16811
+ {
16812
+ "field": "courseId",
16813
+ "rule": "required",
16814
+ "fieldType": "foreignKey"
16815
+ },
16816
+ {
16817
+ "field": "partIndex",
16818
+ "rule": "required",
16819
+ "fieldType": "integer"
16820
+ },
16821
+ {
16822
+ "field": "partCount",
16823
+ "rule": "required",
16824
+ "fieldType": "integer"
16825
+ }
16826
+ ],
16827
+ "schema": {
16828
+ "tableName": "course_bundle_attachments",
16829
+ "ddl": "CREATE TABLE IF NOT EXISTS \"course_bundle_attachments\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"tenant_id\" UUID NOT NULL,\n \"import_id\" UUID NOT NULL,\n \"course_id\" UUID NOT NULL,\n \"unit_key\" TEXT,\n \"part_index\" INTEGER NOT NULL DEFAULT 1,\n \"part_count\" INTEGER NOT NULL DEFAULT 1,\n \"attached_by_user_id\" TEXT,\n \"recorded_at\" TEXT\n);",
16830
+ "columns": {
16831
+ "id": {
16832
+ "type": "UUID",
16833
+ "primaryKey": true,
16834
+ "referenceKind": "id",
16835
+ "notNull": true
16836
+ },
16837
+ "slug": {
16838
+ "type": "TEXT",
16839
+ "notNull": true
16840
+ },
16841
+ "context": {
16842
+ "type": "TEXT",
16843
+ "notNull": true,
16844
+ "default": ""
16845
+ },
16846
+ "created_at": {
16847
+ "type": "TIMESTAMP",
16848
+ "notNull": true,
16849
+ "default": "current_timestamp"
16850
+ },
16851
+ "updated_at": {
16852
+ "type": "TIMESTAMP",
16853
+ "notNull": true,
16854
+ "default": "current_timestamp"
16855
+ },
16856
+ "tenant_id": {
16857
+ "type": "UUID",
16858
+ "referenceKind": "tenantId",
16859
+ "notNull": true,
16860
+ "unique": false
16861
+ },
16862
+ "import_id": {
16863
+ "type": "UUID",
16864
+ "referenceKind": "foreignKey",
16865
+ "notNull": true,
16866
+ "unique": false,
16867
+ "foreignKey": {
16868
+ "table": "course_bundle_imports",
16869
+ "column": "id",
16870
+ "onDelete": "CASCADE",
16871
+ "onUpdate": "CASCADE"
16872
+ }
16873
+ },
16874
+ "course_id": {
16875
+ "type": "UUID",
16876
+ "referenceKind": "foreignKey",
16877
+ "notNull": true,
16878
+ "unique": false,
16879
+ "foreignKey": {
16880
+ "table": "courses",
16881
+ "column": "id",
16882
+ "onDelete": "NO ACTION",
16883
+ "onUpdate": "CASCADE"
16884
+ }
16885
+ },
16886
+ "unit_key": {
16887
+ "type": "TEXT",
16888
+ "notNull": false,
16889
+ "unique": false
16890
+ },
16891
+ "part_index": {
16892
+ "type": "INTEGER",
16893
+ "notNull": true,
16894
+ "unique": false,
16895
+ "default": 1
16896
+ },
16897
+ "part_count": {
16898
+ "type": "INTEGER",
16899
+ "notNull": true,
16900
+ "unique": false,
16901
+ "default": 1
16902
+ },
16903
+ "attached_by_user_id": {
16904
+ "type": "TEXT",
16905
+ "notNull": false,
16906
+ "unique": false
16907
+ },
16908
+ "recorded_at": {
16909
+ "type": "TEXT",
16910
+ "notNull": false,
16911
+ "unique": false
16912
+ }
16913
+ },
16914
+ "indexes": [
16915
+ {
16916
+ "name": "course_bundle_attachments_tenant_id_import_id_idx",
16917
+ "columns": [
16918
+ "tenant_id",
16919
+ "import_id"
16920
+ ],
16921
+ "unique": true
16922
+ },
16923
+ {
16924
+ "name": "course_bundle_attachments_slug_context_idx",
16925
+ "columns": [
16926
+ "slug",
16927
+ "context"
16928
+ ]
16929
+ },
16930
+ {
16931
+ "name": "course_bundle_attachments_import_unique",
16932
+ "columns": [
16933
+ "tenant_id",
16934
+ "import_id"
16935
+ ],
16936
+ "unique": true
16937
+ },
16938
+ {
16939
+ "name": "course_bundle_attachments_part_unique",
16940
+ "columns": [
16941
+ "tenant_id",
16942
+ "course_id",
16943
+ "part_index"
16944
+ ],
16945
+ "unique": true
16946
+ },
16947
+ {
16948
+ "name": "course_bundle_attachments_tenant_id_created_at_idx",
16949
+ "columns": [
16950
+ "tenant_id",
16951
+ "created_at"
16952
+ ]
16953
+ },
16954
+ {
16955
+ "name": "course_bundle_attachments_import_id_idx",
16956
+ "columns": [
16957
+ "import_id"
16958
+ ]
16959
+ },
16960
+ {
16961
+ "name": "course_bundle_attachments_course_id_idx",
16962
+ "columns": [
16963
+ "course_id"
16964
+ ]
16965
+ }
16966
+ ],
16967
+ "version": "669267da"
16968
+ },
16969
+ "importPath": "@happyvertical/smrt-education"
16970
+ },
16971
+ "@happyvertical/smrt-education:CourseBundleAttachmentCollection": {
16972
+ "name": "coursebundleattachmentcollection",
16973
+ "className": "CourseBundleAttachmentCollection",
16974
+ "qualifiedName": "@happyvertical/smrt-education:CourseBundleAttachmentCollection",
16975
+ "collection": "coursebundleattachments",
16976
+ "filePath": "/home/runner/work/smrt/smrt/packages/education/src/course-bundle-models.ts",
16977
+ "packageName": "@happyvertical/smrt-education",
16978
+ "fields": {},
16979
+ "methods": {},
16980
+ "decoratorConfig": {
16981
+ "tableName": "course_bundle_attachments",
16982
+ "api": false,
16983
+ "mcp": false,
16984
+ "cli": false
16985
+ },
16986
+ "extends": "SmrtCollection",
16987
+ "extendsTypeArg": "CourseBundleAttachment",
16988
+ "exportName": "CourseBundleAttachmentCollection",
16989
+ "collectionExportName": "CourseBundleAttachmentCollectionCollection",
16990
+ "collectionOf": "@happyvertical/smrt-education:CourseBundleAttachment",
16991
+ "inheritedExposure": [
16992
+ "api",
16993
+ "mcp",
16994
+ "cli"
16995
+ ],
16996
+ "schema": {
16997
+ "tableName": "course_bundle_attachments",
16998
+ "ddl": "CREATE TABLE IF NOT EXISTS \"course_bundle_attachments\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"tenant_id\" UUID NOT NULL,\n \"import_id\" UUID NOT NULL,\n \"course_id\" UUID NOT NULL,\n \"unit_key\" TEXT,\n \"part_index\" INTEGER NOT NULL DEFAULT 1,\n \"part_count\" INTEGER NOT NULL DEFAULT 1,\n \"attached_by_user_id\" TEXT,\n \"recorded_at\" TEXT\n);",
16999
+ "columns": {
17000
+ "id": {
17001
+ "type": "UUID",
17002
+ "primaryKey": true,
17003
+ "referenceKind": "id",
17004
+ "notNull": true
17005
+ },
17006
+ "slug": {
17007
+ "type": "TEXT",
17008
+ "notNull": true
17009
+ },
17010
+ "context": {
17011
+ "type": "TEXT",
17012
+ "notNull": true,
17013
+ "default": ""
17014
+ },
17015
+ "created_at": {
17016
+ "type": "TIMESTAMP",
17017
+ "notNull": true,
17018
+ "default": "current_timestamp"
17019
+ },
17020
+ "updated_at": {
17021
+ "type": "TIMESTAMP",
17022
+ "notNull": true,
17023
+ "default": "current_timestamp"
17024
+ },
17025
+ "tenant_id": {
17026
+ "type": "UUID",
17027
+ "referenceKind": "tenantId",
17028
+ "notNull": true,
17029
+ "unique": false
17030
+ },
17031
+ "import_id": {
17032
+ "type": "UUID",
17033
+ "referenceKind": "foreignKey",
17034
+ "notNull": true,
17035
+ "unique": false,
17036
+ "foreignKey": {
17037
+ "table": "course_bundle_imports",
17038
+ "column": "id",
17039
+ "onDelete": "CASCADE",
17040
+ "onUpdate": "CASCADE"
17041
+ }
17042
+ },
17043
+ "course_id": {
17044
+ "type": "UUID",
17045
+ "referenceKind": "foreignKey",
17046
+ "notNull": true,
17047
+ "unique": false,
17048
+ "foreignKey": {
17049
+ "table": "courses",
17050
+ "column": "id",
17051
+ "onDelete": "NO ACTION",
17052
+ "onUpdate": "CASCADE"
17053
+ }
17054
+ },
17055
+ "unit_key": {
17056
+ "type": "TEXT",
17057
+ "notNull": false,
17058
+ "unique": false
17059
+ },
17060
+ "part_index": {
17061
+ "type": "INTEGER",
17062
+ "notNull": true,
17063
+ "unique": false,
17064
+ "default": 1
17065
+ },
17066
+ "part_count": {
17067
+ "type": "INTEGER",
17068
+ "notNull": true,
17069
+ "unique": false,
17070
+ "default": 1
17071
+ },
17072
+ "attached_by_user_id": {
17073
+ "type": "TEXT",
17074
+ "notNull": false,
17075
+ "unique": false
17076
+ },
17077
+ "recorded_at": {
17078
+ "type": "TEXT",
17079
+ "notNull": false,
17080
+ "unique": false
17081
+ }
17082
+ },
17083
+ "indexes": [
17084
+ {
17085
+ "name": "course_bundle_attachments_tenant_id_import_id_idx",
17086
+ "columns": [
17087
+ "tenant_id",
17088
+ "import_id"
17089
+ ],
17090
+ "unique": true
17091
+ },
17092
+ {
17093
+ "name": "course_bundle_attachments_slug_context_idx",
17094
+ "columns": [
17095
+ "slug",
17096
+ "context"
17097
+ ]
17098
+ },
17099
+ {
17100
+ "name": "course_bundle_attachments_import_unique",
17101
+ "columns": [
17102
+ "tenant_id",
17103
+ "import_id"
17104
+ ],
17105
+ "unique": true
17106
+ },
17107
+ {
17108
+ "name": "course_bundle_attachments_part_unique",
17109
+ "columns": [
17110
+ "tenant_id",
17111
+ "course_id",
17112
+ "part_index"
17113
+ ],
17114
+ "unique": true
17115
+ },
17116
+ {
17117
+ "name": "course_bundle_attachments_tenant_id_created_at_idx",
17118
+ "columns": [
17119
+ "tenant_id",
17120
+ "created_at"
17121
+ ]
17122
+ },
17123
+ {
17124
+ "name": "course_bundle_attachments_import_id_idx",
17125
+ "columns": [
17126
+ "import_id"
17127
+ ]
17128
+ },
17129
+ {
17130
+ "name": "course_bundle_attachments_course_id_idx",
17131
+ "columns": [
17132
+ "course_id"
17133
+ ]
17134
+ }
17135
+ ],
17136
+ "version": "669267da"
17137
+ },
17138
+ "importPath": "@happyvertical/smrt-education"
17139
+ },
17140
+ "@happyvertical/smrt-education:CourseBundleAudienceChoice": {
17141
+ "name": "coursebundleaudiencechoice",
17142
+ "className": "CourseBundleAudienceChoice",
17143
+ "qualifiedName": "@happyvertical/smrt-education:CourseBundleAudienceChoice",
17144
+ "collection": "coursebundleaudiencechoices",
17145
+ "description": "A guardian's audience choice for one material of an import, made in review before the bundle is attached (SMRT #4632). One row per (import, target); a later choice replaces the earlier one.",
17146
+ "filePath": "/home/runner/work/smrt/smrt/packages/education/src/course-bundle-models.ts",
17147
+ "packageName": "@happyvertical/smrt-education",
17148
+ "fields": {
17149
+ "tenantId": {
17150
+ "type": "text",
17151
+ "required": true,
17152
+ "_meta": {
17153
+ "sqlType": "UUID",
17154
+ "__tenancy": {
17155
+ "isTenantIdField": true,
17156
+ "autoFilter": true,
17157
+ "required": true,
17158
+ "autoPopulate": true,
17159
+ "nullable": false,
17160
+ "mode": "required",
17161
+ "field": "tenantId",
17162
+ "allowSuperAdminBypass": false
17163
+ }
17164
+ }
17165
+ },
17166
+ "importId": {
17167
+ "type": "foreignKey",
17168
+ "required": true,
17169
+ "related": "CourseBundleImport",
17170
+ "_meta": {
17171
+ "required": true
17172
+ }
17173
+ },
17174
+ "target": {
17175
+ "type": "text",
17176
+ "required": false
17177
+ },
17178
+ "audience": {
17179
+ "type": "text",
17180
+ "required": false
17181
+ },
17182
+ "chosenByUserId": {
17183
+ "type": "text",
17184
+ "required": false
17185
+ },
17186
+ "chosenAt": {
17187
+ "type": "text",
17188
+ "required": false
17189
+ }
17190
+ },
17191
+ "methods": {
17192
+ "save": {
17193
+ "name": "save",
17194
+ "async": true,
17195
+ "parameters": [
17196
+ {
17197
+ "name": "options",
17198
+ "type": "SmrtSaveOptions",
17199
+ "optional": true
17200
+ }
17201
+ ],
17202
+ "returnType": "Promise<this>",
17203
+ "isStatic": false,
17204
+ "isPublic": true
17205
+ }
17206
+ },
17207
+ "decoratorConfig": {
17208
+ "tableName": "course_bundle_audience_choices",
17209
+ "conflictColumns": [
17210
+ "tenant_id",
17211
+ "import_id",
17212
+ "target"
17213
+ ],
17214
+ "indexes": [
17215
+ {
17216
+ "name": "course_bundle_audience_choices_unique",
17217
+ "columns": [
17218
+ "tenantId",
17219
+ "importId",
17220
+ "target"
17221
+ ],
17222
+ "unique": true
17223
+ }
17224
+ ],
17225
+ "api": false,
17226
+ "mcp": false,
17227
+ "cli": false,
17228
+ "tenantScoped": {
17229
+ "mode": "required"
17230
+ }
17231
+ },
17232
+ "extends": "SmrtObject",
17233
+ "exportName": "CourseBundleAudienceChoice",
17234
+ "collectionExportName": "CourseBundleAudienceChoiceCollection",
17235
+ "validationRules": [
17236
+ {
17237
+ "field": "importId",
17238
+ "rule": "required",
17239
+ "fieldType": "foreignKey"
17240
+ }
17241
+ ],
17242
+ "schema": {
17243
+ "tableName": "course_bundle_audience_choices",
17244
+ "ddl": "CREATE TABLE IF NOT EXISTS \"course_bundle_audience_choices\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"tenant_id\" UUID NOT NULL,\n \"import_id\" UUID NOT NULL,\n \"target\" TEXT,\n \"audience\" TEXT,\n \"chosen_by_user_id\" TEXT,\n \"chosen_at\" TEXT\n);",
17245
+ "columns": {
17246
+ "id": {
17247
+ "type": "UUID",
17248
+ "primaryKey": true,
17249
+ "referenceKind": "id",
17250
+ "notNull": true
17251
+ },
17252
+ "slug": {
17253
+ "type": "TEXT",
17254
+ "notNull": true
17255
+ },
17256
+ "context": {
17257
+ "type": "TEXT",
17258
+ "notNull": true,
17259
+ "default": ""
17260
+ },
17261
+ "created_at": {
17262
+ "type": "TIMESTAMP",
17263
+ "notNull": true,
17264
+ "default": "current_timestamp"
17265
+ },
17266
+ "updated_at": {
17267
+ "type": "TIMESTAMP",
17268
+ "notNull": true,
17269
+ "default": "current_timestamp"
17270
+ },
17271
+ "tenant_id": {
17272
+ "type": "UUID",
17273
+ "referenceKind": "tenantId",
17274
+ "notNull": true,
17275
+ "unique": false
17276
+ },
17277
+ "import_id": {
17278
+ "type": "UUID",
17279
+ "referenceKind": "foreignKey",
17280
+ "notNull": true,
17281
+ "unique": false,
17282
+ "foreignKey": {
17283
+ "table": "course_bundle_imports",
17284
+ "column": "id",
17285
+ "onDelete": "CASCADE",
17286
+ "onUpdate": "CASCADE"
17287
+ }
17288
+ },
17289
+ "target": {
17290
+ "type": "TEXT",
17291
+ "notNull": false,
17292
+ "unique": false
17293
+ },
17294
+ "audience": {
17295
+ "type": "TEXT",
17296
+ "notNull": false,
17297
+ "unique": false
17298
+ },
17299
+ "chosen_by_user_id": {
17300
+ "type": "TEXT",
17301
+ "notNull": false,
17302
+ "unique": false
17303
+ },
17304
+ "chosen_at": {
17305
+ "type": "TEXT",
17306
+ "notNull": false,
17307
+ "unique": false
17308
+ }
17309
+ },
17310
+ "indexes": [
17311
+ {
17312
+ "name": "course_bundle_audience_choices_tenant_id_import_id_idx",
17313
+ "columns": [
17314
+ "tenant_id",
17315
+ "import_id",
17316
+ "target"
17317
+ ],
17318
+ "unique": true,
17319
+ "nullsNotDistinct": true
17320
+ },
17321
+ {
17322
+ "name": "course_bundle_audience_choices_slug_context_idx",
17323
+ "columns": [
17324
+ "slug",
17325
+ "context"
17326
+ ]
17327
+ },
17328
+ {
17329
+ "name": "course_bundle_audience_choices_unique",
17330
+ "columns": [
17331
+ "tenant_id",
17332
+ "import_id",
17333
+ "target"
17334
+ ],
17335
+ "unique": true
17336
+ },
17337
+ {
17338
+ "name": "course_bundle_audience_choices_tenant_id_created_at_idx",
17339
+ "columns": [
17340
+ "tenant_id",
17341
+ "created_at"
17342
+ ]
17343
+ },
17344
+ {
17345
+ "name": "course_bundle_audience_choices_import_id_idx",
17346
+ "columns": [
17347
+ "import_id"
17348
+ ]
17349
+ }
17350
+ ],
17351
+ "version": "bef1a807"
17352
+ },
17353
+ "importPath": "@happyvertical/smrt-education"
17354
+ },
17355
+ "@happyvertical/smrt-education:CourseBundleAudienceChoiceCollection": {
17356
+ "name": "coursebundleaudiencechoicecollection",
17357
+ "className": "CourseBundleAudienceChoiceCollection",
17358
+ "qualifiedName": "@happyvertical/smrt-education:CourseBundleAudienceChoiceCollection",
17359
+ "collection": "coursebundleaudiencechoices",
17360
+ "filePath": "/home/runner/work/smrt/smrt/packages/education/src/course-bundle-models.ts",
17361
+ "packageName": "@happyvertical/smrt-education",
17362
+ "fields": {},
17363
+ "methods": {},
17364
+ "decoratorConfig": {
17365
+ "tableName": "course_bundle_audience_choices",
17366
+ "api": false,
17367
+ "mcp": false,
17368
+ "cli": false
17369
+ },
17370
+ "extends": "SmrtCollection",
17371
+ "extendsTypeArg": "CourseBundleAudienceChoice",
17372
+ "exportName": "CourseBundleAudienceChoiceCollection",
17373
+ "collectionExportName": "CourseBundleAudienceChoiceCollectionCollection",
17374
+ "collectionOf": "@happyvertical/smrt-education:CourseBundleAudienceChoice",
17375
+ "inheritedExposure": [
17376
+ "api",
17377
+ "mcp",
17378
+ "cli"
17379
+ ],
17380
+ "schema": {
17381
+ "tableName": "course_bundle_audience_choices",
17382
+ "ddl": "CREATE TABLE IF NOT EXISTS \"course_bundle_audience_choices\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"tenant_id\" UUID NOT NULL,\n \"import_id\" UUID NOT NULL,\n \"target\" TEXT,\n \"audience\" TEXT,\n \"chosen_by_user_id\" TEXT,\n \"chosen_at\" TEXT\n);",
17383
+ "columns": {
17384
+ "id": {
17385
+ "type": "UUID",
17386
+ "primaryKey": true,
17387
+ "referenceKind": "id",
17388
+ "notNull": true
17389
+ },
17390
+ "slug": {
17391
+ "type": "TEXT",
17392
+ "notNull": true
17393
+ },
17394
+ "context": {
17395
+ "type": "TEXT",
17396
+ "notNull": true,
17397
+ "default": ""
17398
+ },
17399
+ "created_at": {
17400
+ "type": "TIMESTAMP",
17401
+ "notNull": true,
17402
+ "default": "current_timestamp"
17403
+ },
17404
+ "updated_at": {
17405
+ "type": "TIMESTAMP",
17406
+ "notNull": true,
17407
+ "default": "current_timestamp"
17408
+ },
17409
+ "tenant_id": {
17410
+ "type": "UUID",
17411
+ "referenceKind": "tenantId",
17412
+ "notNull": true,
17413
+ "unique": false
17414
+ },
17415
+ "import_id": {
17416
+ "type": "UUID",
17417
+ "referenceKind": "foreignKey",
17418
+ "notNull": true,
17419
+ "unique": false,
17420
+ "foreignKey": {
17421
+ "table": "course_bundle_imports",
17422
+ "column": "id",
17423
+ "onDelete": "CASCADE",
17424
+ "onUpdate": "CASCADE"
17425
+ }
17426
+ },
17427
+ "target": {
17428
+ "type": "TEXT",
17429
+ "notNull": false,
17430
+ "unique": false
17431
+ },
17432
+ "audience": {
17433
+ "type": "TEXT",
17434
+ "notNull": false,
17435
+ "unique": false
17436
+ },
17437
+ "chosen_by_user_id": {
17438
+ "type": "TEXT",
17439
+ "notNull": false,
17440
+ "unique": false
17441
+ },
17442
+ "chosen_at": {
17443
+ "type": "TEXT",
17444
+ "notNull": false,
17445
+ "unique": false
17446
+ }
17447
+ },
17448
+ "indexes": [
17449
+ {
17450
+ "name": "course_bundle_audience_choices_tenant_id_import_id_idx",
17451
+ "columns": [
17452
+ "tenant_id",
17453
+ "import_id",
17454
+ "target"
17455
+ ],
17456
+ "unique": true,
17457
+ "nullsNotDistinct": true
17458
+ },
17459
+ {
17460
+ "name": "course_bundle_audience_choices_slug_context_idx",
17461
+ "columns": [
17462
+ "slug",
17463
+ "context"
17464
+ ]
17465
+ },
17466
+ {
17467
+ "name": "course_bundle_audience_choices_unique",
17468
+ "columns": [
17469
+ "tenant_id",
17470
+ "import_id",
17471
+ "target"
17472
+ ],
17473
+ "unique": true
17474
+ },
17475
+ {
17476
+ "name": "course_bundle_audience_choices_tenant_id_created_at_idx",
17477
+ "columns": [
17478
+ "tenant_id",
17479
+ "created_at"
17480
+ ]
17481
+ },
17482
+ {
17483
+ "name": "course_bundle_audience_choices_import_id_idx",
17484
+ "columns": [
17485
+ "import_id"
17486
+ ]
17487
+ }
17488
+ ],
17489
+ "version": "bef1a807"
17490
+ },
17491
+ "importPath": "@happyvertical/smrt-education"
17492
+ },
17493
+ "@happyvertical/smrt-education:CourseBundlePlacement": {
17494
+ "name": "coursebundleplacement",
17495
+ "className": "CourseBundlePlacement",
17496
+ "qualifiedName": "@happyvertical/smrt-education:CourseBundlePlacement",
17497
+ "collection": "coursebundleplacements",
17498
+ "description": "Where a unit's section or lesson sits, and whether its position was declared (SMRT #4632).",
17499
+ "filePath": "/home/runner/work/smrt/smrt/packages/education/src/course-bundle-models.ts",
17500
+ "packageName": "@happyvertical/smrt-education",
17501
+ "fields": {
17502
+ "tenantId": {
17503
+ "type": "text",
17504
+ "required": true,
17505
+ "_meta": {
17506
+ "sqlType": "UUID",
17507
+ "__tenancy": {
17508
+ "isTenantIdField": true,
17509
+ "autoFilter": true,
17510
+ "required": true,
17511
+ "autoPopulate": true,
17512
+ "nullable": false,
17513
+ "mode": "required",
17514
+ "field": "tenantId",
17515
+ "allowSuperAdminBypass": false
17516
+ }
17517
+ }
17518
+ },
17519
+ "courseId": {
17520
+ "type": "foreignKey",
17521
+ "required": true,
17522
+ "related": "Course",
17523
+ "_meta": {
17524
+ "required": true
17525
+ }
17526
+ },
17527
+ "kind": {
17528
+ "type": "text",
17529
+ "required": false
17530
+ },
17531
+ "key": {
17532
+ "type": "text",
17533
+ "required": false
17534
+ },
17535
+ "title": {
17536
+ "type": "text",
17537
+ "required": false
17538
+ },
17539
+ "declaredOrder": {
17540
+ "type": "integer",
17541
+ "required": false,
17542
+ "_meta": {
17543
+ "nullable": true
17544
+ }
17545
+ },
17546
+ "implicitOrder": {
17547
+ "type": "integer",
17548
+ "required": true,
17549
+ "default": 0
17550
+ },
17551
+ "partIndex": {
17552
+ "type": "integer",
17553
+ "required": true,
17554
+ "default": 1
17555
+ }
17556
+ },
17557
+ "methods": {
17558
+ "save": {
17559
+ "name": "save",
17560
+ "async": true,
17561
+ "parameters": [
17562
+ {
17563
+ "name": "options",
17564
+ "type": "SmrtSaveOptions",
17565
+ "optional": true
17566
+ }
17567
+ ],
17568
+ "returnType": "Promise<this>",
17569
+ "isStatic": false,
17570
+ "isPublic": true
17571
+ }
17572
+ },
17573
+ "decoratorConfig": {
17574
+ "tableName": "course_bundle_placements",
17575
+ "conflictColumns": [
17576
+ "tenant_id",
17577
+ "course_id",
17578
+ "kind",
17579
+ "key"
17580
+ ],
17581
+ "indexes": [
17582
+ {
17583
+ "name": "course_bundle_placements_unique",
17584
+ "columns": [
17585
+ "tenantId",
17586
+ "courseId",
17587
+ "kind",
17588
+ "key"
17589
+ ],
17590
+ "unique": true
17591
+ }
17592
+ ],
17593
+ "api": false,
17594
+ "mcp": false,
17595
+ "cli": false,
17596
+ "tenantScoped": {
17597
+ "mode": "required"
17598
+ }
17599
+ },
17600
+ "extends": "SmrtObject",
17601
+ "exportName": "CourseBundlePlacement",
17602
+ "collectionExportName": "CourseBundlePlacementCollection",
17603
+ "displayLabelField": "title",
17604
+ "validationRules": [
17605
+ {
17606
+ "field": "courseId",
17607
+ "rule": "required",
17608
+ "fieldType": "foreignKey"
17609
+ },
17610
+ {
17611
+ "field": "implicitOrder",
17612
+ "rule": "required",
17613
+ "fieldType": "integer"
17614
+ },
17615
+ {
17616
+ "field": "partIndex",
17617
+ "rule": "required",
17618
+ "fieldType": "integer"
17619
+ }
17620
+ ],
17621
+ "schema": {
17622
+ "tableName": "course_bundle_placements",
17623
+ "ddl": "CREATE TABLE IF NOT EXISTS \"course_bundle_placements\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"tenant_id\" UUID NOT NULL,\n \"course_id\" UUID NOT NULL,\n \"kind\" TEXT,\n \"key\" TEXT,\n \"title\" TEXT,\n \"declared_order\" INTEGER,\n \"implicit_order\" INTEGER NOT NULL DEFAULT 0,\n \"part_index\" INTEGER NOT NULL DEFAULT 1\n);",
17624
+ "columns": {
17625
+ "id": {
17626
+ "type": "UUID",
17627
+ "primaryKey": true,
17628
+ "referenceKind": "id",
17629
+ "notNull": true
17630
+ },
17631
+ "slug": {
17632
+ "type": "TEXT",
17633
+ "notNull": true
17634
+ },
17635
+ "context": {
17636
+ "type": "TEXT",
17637
+ "notNull": true,
17638
+ "default": ""
17639
+ },
17640
+ "created_at": {
17641
+ "type": "TIMESTAMP",
17642
+ "notNull": true,
17643
+ "default": "current_timestamp"
17644
+ },
17645
+ "updated_at": {
17646
+ "type": "TIMESTAMP",
17647
+ "notNull": true,
17648
+ "default": "current_timestamp"
17649
+ },
17650
+ "tenant_id": {
17651
+ "type": "UUID",
17652
+ "referenceKind": "tenantId",
17653
+ "notNull": true,
17654
+ "unique": false
17655
+ },
17656
+ "course_id": {
17657
+ "type": "UUID",
17658
+ "referenceKind": "foreignKey",
17659
+ "notNull": true,
17660
+ "unique": false,
17661
+ "foreignKey": {
17662
+ "table": "courses",
17663
+ "column": "id",
17664
+ "onDelete": "CASCADE",
17665
+ "onUpdate": "CASCADE"
17666
+ }
17667
+ },
17668
+ "kind": {
17669
+ "type": "TEXT",
17670
+ "notNull": false,
17671
+ "unique": false
17672
+ },
17673
+ "key": {
17674
+ "type": "TEXT",
17675
+ "notNull": false,
17676
+ "unique": false
17677
+ },
17678
+ "title": {
17679
+ "type": "TEXT",
17680
+ "notNull": false,
17681
+ "unique": false
17682
+ },
17683
+ "declared_order": {
17684
+ "type": "INTEGER",
17685
+ "notNull": false,
17686
+ "unique": false
17687
+ },
17688
+ "implicit_order": {
17689
+ "type": "INTEGER",
17690
+ "notNull": true,
17691
+ "unique": false,
17692
+ "default": 0
17693
+ },
17694
+ "part_index": {
17695
+ "type": "INTEGER",
17696
+ "notNull": true,
17697
+ "unique": false,
17698
+ "default": 1
17699
+ }
17700
+ },
17701
+ "indexes": [
17702
+ {
17703
+ "name": "course_bundle_placements_tenant_id_course_id_idx",
17704
+ "columns": [
17705
+ "tenant_id",
17706
+ "course_id",
17707
+ "kind",
17708
+ "key"
17709
+ ],
17710
+ "unique": true,
17711
+ "nullsNotDistinct": true
17712
+ },
17713
+ {
17714
+ "name": "course_bundle_placements_slug_context_idx",
17715
+ "columns": [
17716
+ "slug",
17717
+ "context"
17718
+ ]
17719
+ },
17720
+ {
17721
+ "name": "course_bundle_placements_unique",
17722
+ "columns": [
17723
+ "tenant_id",
17724
+ "course_id",
17725
+ "kind",
17726
+ "key"
17727
+ ],
17728
+ "unique": true
17729
+ },
17730
+ {
17731
+ "name": "course_bundle_placements_tenant_id_created_at_idx",
17732
+ "columns": [
17733
+ "tenant_id",
17734
+ "created_at"
17735
+ ]
17736
+ },
17737
+ {
17738
+ "name": "course_bundle_placements_course_id_idx",
17739
+ "columns": [
17740
+ "course_id"
17741
+ ]
17742
+ }
17743
+ ],
17744
+ "version": "2d85f069"
17745
+ },
17746
+ "importPath": "@happyvertical/smrt-education"
17747
+ },
17748
+ "@happyvertical/smrt-education:CourseBundlePlacementCollection": {
17749
+ "name": "coursebundleplacementcollection",
17750
+ "className": "CourseBundlePlacementCollection",
17751
+ "qualifiedName": "@happyvertical/smrt-education:CourseBundlePlacementCollection",
17752
+ "collection": "coursebundleplacements",
17753
+ "filePath": "/home/runner/work/smrt/smrt/packages/education/src/course-bundle-models.ts",
17754
+ "packageName": "@happyvertical/smrt-education",
17755
+ "fields": {},
17756
+ "methods": {},
17757
+ "decoratorConfig": {
17758
+ "tableName": "course_bundle_placements",
17759
+ "api": false,
17760
+ "mcp": false,
17761
+ "cli": false
17762
+ },
17763
+ "extends": "SmrtCollection",
17764
+ "extendsTypeArg": "CourseBundlePlacement",
17765
+ "exportName": "CourseBundlePlacementCollection",
17766
+ "collectionExportName": "CourseBundlePlacementCollectionCollection",
17767
+ "collectionOf": "@happyvertical/smrt-education:CourseBundlePlacement",
17768
+ "inheritedExposure": [
17769
+ "api",
17770
+ "mcp",
17771
+ "cli"
17772
+ ],
17773
+ "schema": {
17774
+ "tableName": "course_bundle_placements",
17775
+ "ddl": "CREATE TABLE IF NOT EXISTS \"course_bundle_placements\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"tenant_id\" UUID NOT NULL,\n \"course_id\" UUID NOT NULL,\n \"kind\" TEXT,\n \"key\" TEXT,\n \"title\" TEXT,\n \"declared_order\" INTEGER,\n \"implicit_order\" INTEGER NOT NULL DEFAULT 0,\n \"part_index\" INTEGER NOT NULL DEFAULT 1\n);",
17776
+ "columns": {
17777
+ "id": {
17778
+ "type": "UUID",
17779
+ "primaryKey": true,
17780
+ "referenceKind": "id",
17781
+ "notNull": true
17782
+ },
17783
+ "slug": {
17784
+ "type": "TEXT",
17785
+ "notNull": true
17786
+ },
17787
+ "context": {
17788
+ "type": "TEXT",
17789
+ "notNull": true,
17790
+ "default": ""
17791
+ },
17792
+ "created_at": {
17793
+ "type": "TIMESTAMP",
17794
+ "notNull": true,
17795
+ "default": "current_timestamp"
17796
+ },
17797
+ "updated_at": {
17798
+ "type": "TIMESTAMP",
17799
+ "notNull": true,
17800
+ "default": "current_timestamp"
17801
+ },
17802
+ "tenant_id": {
17803
+ "type": "UUID",
17804
+ "referenceKind": "tenantId",
17805
+ "notNull": true,
17806
+ "unique": false
17807
+ },
17808
+ "course_id": {
17809
+ "type": "UUID",
17810
+ "referenceKind": "foreignKey",
17811
+ "notNull": true,
17812
+ "unique": false,
17813
+ "foreignKey": {
17814
+ "table": "courses",
17815
+ "column": "id",
17816
+ "onDelete": "CASCADE",
17817
+ "onUpdate": "CASCADE"
17818
+ }
17819
+ },
17820
+ "kind": {
17821
+ "type": "TEXT",
17822
+ "notNull": false,
17823
+ "unique": false
17824
+ },
17825
+ "key": {
17826
+ "type": "TEXT",
17827
+ "notNull": false,
17828
+ "unique": false
17829
+ },
17830
+ "title": {
17831
+ "type": "TEXT",
17832
+ "notNull": false,
17833
+ "unique": false
17834
+ },
17835
+ "declared_order": {
17836
+ "type": "INTEGER",
17837
+ "notNull": false,
17838
+ "unique": false
17839
+ },
17840
+ "implicit_order": {
17841
+ "type": "INTEGER",
17842
+ "notNull": true,
17843
+ "unique": false,
17844
+ "default": 0
17845
+ },
17846
+ "part_index": {
17847
+ "type": "INTEGER",
17848
+ "notNull": true,
17849
+ "unique": false,
17850
+ "default": 1
17851
+ }
17852
+ },
17853
+ "indexes": [
17854
+ {
17855
+ "name": "course_bundle_placements_tenant_id_course_id_idx",
17856
+ "columns": [
17857
+ "tenant_id",
17858
+ "course_id",
17859
+ "kind",
17860
+ "key"
17861
+ ],
17862
+ "unique": true,
17863
+ "nullsNotDistinct": true
17864
+ },
17865
+ {
17866
+ "name": "course_bundle_placements_slug_context_idx",
17867
+ "columns": [
17868
+ "slug",
17869
+ "context"
17870
+ ]
17871
+ },
17872
+ {
17873
+ "name": "course_bundle_placements_unique",
17874
+ "columns": [
17875
+ "tenant_id",
17876
+ "course_id",
17877
+ "kind",
17878
+ "key"
17879
+ ],
17880
+ "unique": true
17881
+ },
17882
+ {
17883
+ "name": "course_bundle_placements_tenant_id_created_at_idx",
17884
+ "columns": [
17885
+ "tenant_id",
17886
+ "created_at"
17887
+ ]
17888
+ },
17889
+ {
17890
+ "name": "course_bundle_placements_course_id_idx",
17891
+ "columns": [
17892
+ "course_id"
17893
+ ]
17894
+ }
17895
+ ],
17896
+ "version": "2d85f069"
17897
+ },
17898
+ "importPath": "@happyvertical/smrt-education"
17899
+ },
17900
+ "@happyvertical/smrt-education:CourseBundleUnit": {
17901
+ "name": "coursebundleunit",
17902
+ "className": "CourseBundleUnit",
17903
+ "qualifiedName": "@happyvertical/smrt-education:CourseBundleUnit",
17904
+ "collection": "coursebundleunits",
17905
+ "description": "The one row every attach of a unit serializes on (SMRT #4632): one per (family, unit key), created if absent and then locked at the start of the attach transaction, before anything that decides the…",
17906
+ "filePath": "/home/runner/work/smrt/smrt/packages/education/src/course-bundle-models.ts",
17907
+ "packageName": "@happyvertical/smrt-education",
17908
+ "fields": {
17909
+ "tenantId": {
17910
+ "type": "text",
17911
+ "required": true,
17912
+ "_meta": {
17913
+ "sqlType": "UUID",
17914
+ "__tenancy": {
17915
+ "isTenantIdField": true,
17916
+ "autoFilter": true,
17917
+ "required": true,
17918
+ "autoPopulate": true,
17919
+ "nullable": false,
17920
+ "mode": "required",
17921
+ "field": "tenantId",
17922
+ "allowSuperAdminBypass": false
17923
+ }
17924
+ }
17925
+ },
17926
+ "unitKey": {
16306
17927
  "type": "text",
16307
17928
  "required": false
16308
17929
  },
16309
- "recordedAt": {
17930
+ "courseId": {
16310
17931
  "type": "text",
16311
17932
  "required": false
16312
17933
  }
@@ -16336,19 +17957,17 @@
16336
17957
  }
16337
17958
  },
16338
17959
  "decoratorConfig": {
16339
- "tableName": "course_bundle_renderings",
17960
+ "tableName": "course_bundle_units",
16340
17961
  "conflictColumns": [
16341
17962
  "tenant_id",
16342
- "import_id",
16343
- "sha256"
17963
+ "unit_key"
16344
17964
  ],
16345
17965
  "indexes": [
16346
17966
  {
16347
- "name": "course_bundle_renderings_unique",
17967
+ "name": "course_bundle_units_unique",
16348
17968
  "columns": [
16349
17969
  "tenantId",
16350
- "importId",
16351
- "sha256"
17970
+ "unitKey"
16352
17971
  ],
16353
17972
  "unique": true
16354
17973
  }
@@ -16361,23 +17980,12 @@
16361
17980
  }
16362
17981
  },
16363
17982
  "extends": "SmrtObject",
16364
- "exportName": "CourseBundleRendering",
16365
- "collectionExportName": "CourseBundleRenderingCollection",
16366
- "validationRules": [
16367
- {
16368
- "field": "importId",
16369
- "rule": "required",
16370
- "fieldType": "foreignKey"
16371
- },
16372
- {
16373
- "field": "renderedSizeBytes",
16374
- "rule": "required",
16375
- "fieldType": "integer"
16376
- }
16377
- ],
17983
+ "exportName": "CourseBundleUnit",
17984
+ "collectionExportName": "CourseBundleUnitCollection",
17985
+ "validationRules": [],
16378
17986
  "schema": {
16379
- "tableName": "course_bundle_renderings",
16380
- "ddl": "CREATE TABLE IF NOT EXISTS \"course_bundle_renderings\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"tenant_id\" UUID NOT NULL,\n \"import_id\" UUID NOT NULL,\n \"sha256\" TEXT,\n \"rendered_sha256\" TEXT,\n \"rendered_size_bytes\" INTEGER NOT NULL DEFAULT 0,\n \"converter_id\" TEXT,\n \"retried_by_user_id\" TEXT,\n \"recorded_at\" TEXT\n);",
17987
+ "tableName": "course_bundle_units",
17988
+ "ddl": "CREATE TABLE IF NOT EXISTS \"course_bundle_units\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"tenant_id\" UUID NOT NULL,\n \"unit_key\" TEXT,\n \"course_id\" TEXT\n);",
16381
17989
  "columns": {
16382
17990
  "id": {
16383
17991
  "type": "UUID",
@@ -16410,45 +18018,12 @@
16410
18018
  "notNull": true,
16411
18019
  "unique": false
16412
18020
  },
16413
- "import_id": {
16414
- "type": "UUID",
16415
- "referenceKind": "foreignKey",
16416
- "notNull": true,
16417
- "unique": false,
16418
- "foreignKey": {
16419
- "table": "course_bundle_imports",
16420
- "column": "id",
16421
- "onDelete": "CASCADE",
16422
- "onUpdate": "CASCADE"
16423
- }
16424
- },
16425
- "sha256": {
16426
- "type": "TEXT",
16427
- "notNull": false,
16428
- "unique": false
16429
- },
16430
- "rendered_sha256": {
16431
- "type": "TEXT",
16432
- "notNull": false,
16433
- "unique": false
16434
- },
16435
- "rendered_size_bytes": {
16436
- "type": "INTEGER",
16437
- "notNull": true,
16438
- "unique": false,
16439
- "default": 0
16440
- },
16441
- "converter_id": {
16442
- "type": "TEXT",
16443
- "notNull": false,
16444
- "unique": false
16445
- },
16446
- "retried_by_user_id": {
18021
+ "unit_key": {
16447
18022
  "type": "TEXT",
16448
18023
  "notNull": false,
16449
18024
  "unique": false
16450
18025
  },
16451
- "recorded_at": {
18026
+ "course_id": {
16452
18027
  "type": "TEXT",
16453
18028
  "notNull": false,
16454
18029
  "unique": false
@@ -16456,77 +18031,69 @@
16456
18031
  },
16457
18032
  "indexes": [
16458
18033
  {
16459
- "name": "course_bundle_renderings_tenant_id_import_id_idx",
18034
+ "name": "course_bundle_units_tenant_id_unit_key_idx",
16460
18035
  "columns": [
16461
18036
  "tenant_id",
16462
- "import_id",
16463
- "sha256"
18037
+ "unit_key"
16464
18038
  ],
16465
18039
  "unique": true,
16466
18040
  "nullsNotDistinct": true
16467
18041
  },
16468
18042
  {
16469
- "name": "course_bundle_renderings_slug_context_idx",
18043
+ "name": "course_bundle_units_slug_context_idx",
16470
18044
  "columns": [
16471
18045
  "slug",
16472
18046
  "context"
16473
18047
  ]
16474
18048
  },
16475
18049
  {
16476
- "name": "course_bundle_renderings_unique",
18050
+ "name": "course_bundle_units_unique",
16477
18051
  "columns": [
16478
18052
  "tenant_id",
16479
- "import_id",
16480
- "sha256"
18053
+ "unit_key"
16481
18054
  ],
16482
18055
  "unique": true
16483
18056
  },
16484
18057
  {
16485
- "name": "course_bundle_renderings_tenant_id_created_at_idx",
18058
+ "name": "course_bundle_units_tenant_id_created_at_idx",
16486
18059
  "columns": [
16487
18060
  "tenant_id",
16488
18061
  "created_at"
16489
18062
  ]
16490
- },
16491
- {
16492
- "name": "course_bundle_renderings_import_id_idx",
16493
- "columns": [
16494
- "import_id"
16495
- ]
16496
18063
  }
16497
18064
  ],
16498
- "version": "8f393b32"
18065
+ "version": "66fbb11b"
16499
18066
  },
16500
18067
  "importPath": "@happyvertical/smrt-education"
16501
18068
  },
16502
- "@happyvertical/smrt-education:CourseBundleRenderingCollection": {
16503
- "name": "coursebundlerenderingcollection",
16504
- "className": "CourseBundleRenderingCollection",
16505
- "qualifiedName": "@happyvertical/smrt-education:CourseBundleRenderingCollection",
16506
- "collection": "coursebundlerenderings",
18069
+ "@happyvertical/smrt-education:CourseBundleUnitCollection": {
18070
+ "name": "coursebundleunitcollection",
18071
+ "className": "CourseBundleUnitCollection",
18072
+ "qualifiedName": "@happyvertical/smrt-education:CourseBundleUnitCollection",
18073
+ "collection": "coursebundleunits",
16507
18074
  "filePath": "/home/runner/work/smrt/smrt/packages/education/src/course-bundle-models.ts",
16508
18075
  "packageName": "@happyvertical/smrt-education",
16509
18076
  "fields": {},
16510
18077
  "methods": {},
16511
18078
  "decoratorConfig": {
16512
- "tableName": "course_bundle_renderings",
18079
+ "tableName": "course_bundle_units",
16513
18080
  "api": false,
16514
18081
  "mcp": false,
16515
18082
  "cli": false
16516
18083
  },
16517
18084
  "extends": "SmrtCollection",
16518
- "extendsTypeArg": "CourseBundleRendering",
16519
- "exportName": "CourseBundleRenderingCollection",
16520
- "collectionExportName": "CourseBundleRenderingCollectionCollection",
16521
- "collectionOf": "@happyvertical/smrt-education:CourseBundleRendering",
18085
+ "extendsTypeArg": "CourseBundleUnit",
18086
+ "exportName": "CourseBundleUnitCollection",
18087
+ "collectionExportName": "CourseBundleUnitCollectionCollection",
18088
+ "collectionOf": "@happyvertical/smrt-education:CourseBundleUnit",
16522
18089
  "inheritedExposure": [
16523
18090
  "api",
16524
18091
  "mcp",
16525
18092
  "cli"
16526
18093
  ],
16527
18094
  "schema": {
16528
- "tableName": "course_bundle_renderings",
16529
- "ddl": "CREATE TABLE IF NOT EXISTS \"course_bundle_renderings\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"tenant_id\" UUID NOT NULL,\n \"import_id\" UUID NOT NULL,\n \"sha256\" TEXT,\n \"rendered_sha256\" TEXT,\n \"rendered_size_bytes\" INTEGER NOT NULL DEFAULT 0,\n \"converter_id\" TEXT,\n \"retried_by_user_id\" TEXT,\n \"recorded_at\" TEXT\n);",
18095
+ "tableName": "course_bundle_units",
18096
+ "ddl": "CREATE TABLE IF NOT EXISTS \"course_bundle_units\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"tenant_id\" UUID NOT NULL,\n \"unit_key\" TEXT,\n \"course_id\" TEXT\n);",
16530
18097
  "columns": {
16531
18098
  "id": {
16532
18099
  "type": "UUID",
@@ -16559,45 +18126,12 @@
16559
18126
  "notNull": true,
16560
18127
  "unique": false
16561
18128
  },
16562
- "import_id": {
16563
- "type": "UUID",
16564
- "referenceKind": "foreignKey",
16565
- "notNull": true,
16566
- "unique": false,
16567
- "foreignKey": {
16568
- "table": "course_bundle_imports",
16569
- "column": "id",
16570
- "onDelete": "CASCADE",
16571
- "onUpdate": "CASCADE"
16572
- }
16573
- },
16574
- "sha256": {
16575
- "type": "TEXT",
16576
- "notNull": false,
16577
- "unique": false
16578
- },
16579
- "rendered_sha256": {
16580
- "type": "TEXT",
16581
- "notNull": false,
16582
- "unique": false
16583
- },
16584
- "rendered_size_bytes": {
16585
- "type": "INTEGER",
16586
- "notNull": true,
16587
- "unique": false,
16588
- "default": 0
16589
- },
16590
- "converter_id": {
16591
- "type": "TEXT",
16592
- "notNull": false,
16593
- "unique": false
16594
- },
16595
- "retried_by_user_id": {
18129
+ "unit_key": {
16596
18130
  "type": "TEXT",
16597
18131
  "notNull": false,
16598
18132
  "unique": false
16599
18133
  },
16600
- "recorded_at": {
18134
+ "course_id": {
16601
18135
  "type": "TEXT",
16602
18136
  "notNull": false,
16603
18137
  "unique": false
@@ -16605,46 +18139,38 @@
16605
18139
  },
16606
18140
  "indexes": [
16607
18141
  {
16608
- "name": "course_bundle_renderings_tenant_id_import_id_idx",
18142
+ "name": "course_bundle_units_tenant_id_unit_key_idx",
16609
18143
  "columns": [
16610
18144
  "tenant_id",
16611
- "import_id",
16612
- "sha256"
18145
+ "unit_key"
16613
18146
  ],
16614
18147
  "unique": true,
16615
18148
  "nullsNotDistinct": true
16616
18149
  },
16617
18150
  {
16618
- "name": "course_bundle_renderings_slug_context_idx",
18151
+ "name": "course_bundle_units_slug_context_idx",
16619
18152
  "columns": [
16620
18153
  "slug",
16621
18154
  "context"
16622
18155
  ]
16623
18156
  },
16624
18157
  {
16625
- "name": "course_bundle_renderings_unique",
18158
+ "name": "course_bundle_units_unique",
16626
18159
  "columns": [
16627
18160
  "tenant_id",
16628
- "import_id",
16629
- "sha256"
18161
+ "unit_key"
16630
18162
  ],
16631
18163
  "unique": true
16632
18164
  },
16633
18165
  {
16634
- "name": "course_bundle_renderings_tenant_id_created_at_idx",
18166
+ "name": "course_bundle_units_tenant_id_created_at_idx",
16635
18167
  "columns": [
16636
18168
  "tenant_id",
16637
18169
  "created_at"
16638
18170
  ]
16639
- },
16640
- {
16641
- "name": "course_bundle_renderings_import_id_idx",
16642
- "columns": [
16643
- "import_id"
16644
- ]
16645
18171
  }
16646
18172
  ],
16647
- "version": "8f393b32"
18173
+ "version": "66fbb11b"
16648
18174
  },
16649
18175
  "importPath": "@happyvertical/smrt-education"
16650
18176
  },
@@ -29016,6 +30542,27 @@
29016
30542
  "guardian",
29017
30543
  ""
29018
30544
  ]
30545
+ },
30546
+ "rendition": {
30547
+ "type": "text",
30548
+ "required": false,
30549
+ "default": ""
30550
+ },
30551
+ "renditionOfAssetId": {
30552
+ "type": "crossPackageRef",
30553
+ "required": false,
30554
+ "related": "@happyvertical/smrt-assets:Asset",
30555
+ "_meta": {
30556
+ "nullable": true
30557
+ }
30558
+ },
30559
+ "thumbnailAssetId": {
30560
+ "type": "crossPackageRef",
30561
+ "required": false,
30562
+ "related": "@happyvertical/smrt-assets:Asset",
30563
+ "_meta": {
30564
+ "nullable": true
30565
+ }
29019
30566
  }
29020
30567
  },
29021
30568
  "methods": {
@@ -29076,7 +30623,7 @@
29076
30623
  ],
29077
30624
  "schema": {
29078
30625
  "tableName": "lesson_assets",
29079
- "ddl": "CREATE TABLE IF NOT EXISTS \"lesson_assets\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"tenant_id\" UUID,\n \"lesson_id\" UUID NOT NULL,\n \"asset_id\" UUID NOT NULL,\n \"relationship\" TEXT NOT NULL DEFAULT 'attachment',\n \"sort_order\" INTEGER NOT NULL DEFAULT 0,\n \"audience\" TEXT DEFAULT ''\n);",
30626
+ "ddl": "CREATE TABLE IF NOT EXISTS \"lesson_assets\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"tenant_id\" UUID,\n \"lesson_id\" UUID NOT NULL,\n \"asset_id\" UUID NOT NULL,\n \"relationship\" TEXT NOT NULL DEFAULT 'attachment',\n \"sort_order\" INTEGER NOT NULL DEFAULT 0,\n \"audience\" TEXT DEFAULT '',\n \"rendition\" TEXT DEFAULT '',\n \"rendition_of_asset_id\" UUID,\n \"thumbnail_asset_id\" UUID\n);",
29080
30627
  "columns": {
29081
30628
  "id": {
29082
30629
  "type": "UUID",
@@ -29144,6 +30691,24 @@
29144
30691
  "notNull": false,
29145
30692
  "unique": false,
29146
30693
  "default": ""
30694
+ },
30695
+ "rendition": {
30696
+ "type": "TEXT",
30697
+ "notNull": false,
30698
+ "unique": false,
30699
+ "default": ""
30700
+ },
30701
+ "rendition_of_asset_id": {
30702
+ "type": "UUID",
30703
+ "referenceKind": "crossPackageRef",
30704
+ "notNull": false,
30705
+ "unique": false
30706
+ },
30707
+ "thumbnail_asset_id": {
30708
+ "type": "UUID",
30709
+ "referenceKind": "crossPackageRef",
30710
+ "notNull": false,
30711
+ "unique": false
29147
30712
  }
29148
30713
  },
29149
30714
  "indexes": [
@@ -29183,9 +30748,21 @@
29183
30748
  "columns": [
29184
30749
  "asset_id"
29185
30750
  ]
30751
+ },
30752
+ {
30753
+ "name": "lesson_assets_rendition_of_asset_id_idx",
30754
+ "columns": [
30755
+ "rendition_of_asset_id"
30756
+ ]
30757
+ },
30758
+ {
30759
+ "name": "lesson_assets_thumbnail_asset_id_idx",
30760
+ "columns": [
30761
+ "thumbnail_asset_id"
30762
+ ]
29186
30763
  }
29187
30764
  ],
29188
- "version": "1bfa06ae"
30765
+ "version": "8e49e3b8"
29189
30766
  },
29190
30767
  "importPath": "@happyvertical/smrt-education"
29191
30768
  },
@@ -29255,6 +30832,27 @@
29255
30832
  "type": "integer",
29256
30833
  "required": true,
29257
30834
  "default": 0
30835
+ },
30836
+ "rendition": {
30837
+ "type": "text",
30838
+ "required": false,
30839
+ "default": ""
30840
+ },
30841
+ "renditionOfAssetId": {
30842
+ "type": "crossPackageRef",
30843
+ "required": false,
30844
+ "related": "@happyvertical/smrt-assets:Asset",
30845
+ "_meta": {
30846
+ "nullable": true
30847
+ }
30848
+ },
30849
+ "thumbnailAssetId": {
30850
+ "type": "crossPackageRef",
30851
+ "required": false,
30852
+ "related": "@happyvertical/smrt-assets:Asset",
30853
+ "_meta": {
30854
+ "nullable": true
30855
+ }
29258
30856
  }
29259
30857
  },
29260
30858
  "methods": {
@@ -29316,7 +30914,7 @@
29316
30914
  ],
29317
30915
  "schema": {
29318
30916
  "tableName": "course_assets",
29319
- "ddl": "CREATE TABLE IF NOT EXISTS \"course_assets\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"tenant_id\" UUID,\n \"course_id\" UUID NOT NULL,\n \"asset_id\" UUID NOT NULL,\n \"relationship\" TEXT NOT NULL DEFAULT 'attachment',\n \"audience\" TEXT DEFAULT '',\n \"title\" TEXT,\n \"sort_order\" INTEGER NOT NULL DEFAULT 0\n);",
30917
+ "ddl": "CREATE TABLE IF NOT EXISTS \"course_assets\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"tenant_id\" UUID,\n \"course_id\" UUID NOT NULL,\n \"asset_id\" UUID NOT NULL,\n \"relationship\" TEXT NOT NULL DEFAULT 'attachment',\n \"audience\" TEXT DEFAULT '',\n \"title\" TEXT,\n \"sort_order\" INTEGER NOT NULL DEFAULT 0,\n \"rendition\" TEXT DEFAULT '',\n \"rendition_of_asset_id\" UUID,\n \"thumbnail_asset_id\" UUID\n);",
29320
30918
  "columns": {
29321
30919
  "id": {
29322
30920
  "type": "UUID",
@@ -29389,6 +30987,24 @@
29389
30987
  "notNull": true,
29390
30988
  "unique": false,
29391
30989
  "default": 0
30990
+ },
30991
+ "rendition": {
30992
+ "type": "TEXT",
30993
+ "notNull": false,
30994
+ "unique": false,
30995
+ "default": ""
30996
+ },
30997
+ "rendition_of_asset_id": {
30998
+ "type": "UUID",
30999
+ "referenceKind": "crossPackageRef",
31000
+ "notNull": false,
31001
+ "unique": false
31002
+ },
31003
+ "thumbnail_asset_id": {
31004
+ "type": "UUID",
31005
+ "referenceKind": "crossPackageRef",
31006
+ "notNull": false,
31007
+ "unique": false
29392
31008
  }
29393
31009
  },
29394
31010
  "indexes": [
@@ -29428,9 +31044,21 @@
29428
31044
  "columns": [
29429
31045
  "asset_id"
29430
31046
  ]
31047
+ },
31048
+ {
31049
+ "name": "course_assets_rendition_of_asset_id_idx",
31050
+ "columns": [
31051
+ "rendition_of_asset_id"
31052
+ ]
31053
+ },
31054
+ {
31055
+ "name": "course_assets_thumbnail_asset_id_idx",
31056
+ "columns": [
31057
+ "thumbnail_asset_id"
31058
+ ]
29431
31059
  }
29432
31060
  ],
29433
- "version": "0d71b7eb"
31061
+ "version": "3652c3d9"
29434
31062
  },
29435
31063
  "importPath": "@happyvertical/smrt-education"
29436
31064
  },
@@ -29461,7 +31089,7 @@
29461
31089
  ],
29462
31090
  "schema": {
29463
31091
  "tableName": "course_assets",
29464
- "ddl": "CREATE TABLE IF NOT EXISTS \"course_assets\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"tenant_id\" UUID,\n \"course_id\" UUID NOT NULL,\n \"asset_id\" UUID NOT NULL,\n \"relationship\" TEXT NOT NULL DEFAULT 'attachment',\n \"audience\" TEXT DEFAULT '',\n \"title\" TEXT,\n \"sort_order\" INTEGER NOT NULL DEFAULT 0\n);",
31092
+ "ddl": "CREATE TABLE IF NOT EXISTS \"course_assets\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"tenant_id\" UUID,\n \"course_id\" UUID NOT NULL,\n \"asset_id\" UUID NOT NULL,\n \"relationship\" TEXT NOT NULL DEFAULT 'attachment',\n \"audience\" TEXT DEFAULT '',\n \"title\" TEXT,\n \"sort_order\" INTEGER NOT NULL DEFAULT 0,\n \"rendition\" TEXT DEFAULT '',\n \"rendition_of_asset_id\" UUID,\n \"thumbnail_asset_id\" UUID\n);",
29465
31093
  "columns": {
29466
31094
  "id": {
29467
31095
  "type": "UUID",
@@ -29534,6 +31162,24 @@
29534
31162
  "notNull": true,
29535
31163
  "unique": false,
29536
31164
  "default": 0
31165
+ },
31166
+ "rendition": {
31167
+ "type": "TEXT",
31168
+ "notNull": false,
31169
+ "unique": false,
31170
+ "default": ""
31171
+ },
31172
+ "rendition_of_asset_id": {
31173
+ "type": "UUID",
31174
+ "referenceKind": "crossPackageRef",
31175
+ "notNull": false,
31176
+ "unique": false
31177
+ },
31178
+ "thumbnail_asset_id": {
31179
+ "type": "UUID",
31180
+ "referenceKind": "crossPackageRef",
31181
+ "notNull": false,
31182
+ "unique": false
29537
31183
  }
29538
31184
  },
29539
31185
  "indexes": [
@@ -29573,9 +31219,21 @@
29573
31219
  "columns": [
29574
31220
  "asset_id"
29575
31221
  ]
31222
+ },
31223
+ {
31224
+ "name": "course_assets_rendition_of_asset_id_idx",
31225
+ "columns": [
31226
+ "rendition_of_asset_id"
31227
+ ]
31228
+ },
31229
+ {
31230
+ "name": "course_assets_thumbnail_asset_id_idx",
31231
+ "columns": [
31232
+ "thumbnail_asset_id"
31233
+ ]
29576
31234
  }
29577
31235
  ],
29578
- "version": "0d71b7eb"
31236
+ "version": "3652c3d9"
29579
31237
  },
29580
31238
  "importPath": "@happyvertical/smrt-education"
29581
31239
  },