create-mithaq 0.0.0-stage → 0.2.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.
- package/LICENSE +22 -0
- package/LICENSES/openstatus-time-picker.txt +21 -0
- package/LICENSES/payload.txt +22 -0
- package/LICENSES/ponytail.txt +21 -0
- package/index.js +521 -0
- package/package.json +19 -4
- package/template/apps/asas-backoffice/components.json +25 -0
- package/template/apps/asas-backoffice/gitignore +3 -0
- package/template/apps/asas-backoffice/package.json +57 -0
- package/template/apps/asas-backoffice/public/favicon.svg +1 -0
- package/template/apps/asas-backoffice/src/api.ts +147 -0
- package/template/apps/asas-backoffice/src/auth-frame.tsx +150 -0
- package/template/apps/asas-backoffice/src/components/ui/accordion.tsx +74 -0
- package/template/apps/asas-backoffice/src/components/ui/alert-dialog.tsx +185 -0
- package/template/apps/asas-backoffice/src/components/ui/avatar.tsx +106 -0
- package/template/apps/asas-backoffice/src/components/ui/badge.tsx +48 -0
- package/template/apps/asas-backoffice/src/components/ui/breadcrumb.tsx +124 -0
- package/template/apps/asas-backoffice/src/components/ui/button-group.tsx +87 -0
- package/template/apps/asas-backoffice/src/components/ui/button.tsx +55 -0
- package/template/apps/asas-backoffice/src/components/ui/calendar.tsx +223 -0
- package/template/apps/asas-backoffice/src/components/ui/card.tsx +102 -0
- package/template/apps/asas-backoffice/src/components/ui/chart.tsx +371 -0
- package/template/apps/asas-backoffice/src/components/ui/checkbox.tsx +28 -0
- package/template/apps/asas-backoffice/src/components/ui/collapsible.tsx +19 -0
- package/template/apps/asas-backoffice/src/components/ui/combobox.tsx +308 -0
- package/template/apps/asas-backoffice/src/components/ui/dialog.tsx +158 -0
- package/template/apps/asas-backoffice/src/components/ui/direction.tsx +6 -0
- package/template/apps/asas-backoffice/src/components/ui/directional-icon.tsx +20 -0
- package/template/apps/asas-backoffice/src/components/ui/dropdown-menu.tsx +267 -0
- package/template/apps/asas-backoffice/src/components/ui/field.tsx +236 -0
- package/template/apps/asas-backoffice/src/components/ui/input-group.tsx +155 -0
- package/template/apps/asas-backoffice/src/components/ui/input-otp.tsx +84 -0
- package/template/apps/asas-backoffice/src/components/ui/input.tsx +19 -0
- package/template/apps/asas-backoffice/src/components/ui/label.tsx +19 -0
- package/template/apps/asas-backoffice/src/components/ui/popover.tsx +90 -0
- package/template/apps/asas-backoffice/src/components/ui/radio-group.tsx +37 -0
- package/template/apps/asas-backoffice/src/components/ui/resizable.tsx +47 -0
- package/template/apps/asas-backoffice/src/components/ui/scroll-area.tsx +54 -0
- package/template/apps/asas-backoffice/src/components/ui/select.tsx +204 -0
- package/template/apps/asas-backoffice/src/components/ui/separator.tsx +24 -0
- package/template/apps/asas-backoffice/src/components/ui/sheet.tsx +139 -0
- package/template/apps/asas-backoffice/src/components/ui/sidebar.tsx +714 -0
- package/template/apps/asas-backoffice/src/components/ui/skeleton.tsx +13 -0
- package/template/apps/asas-backoffice/src/components/ui/slider.tsx +55 -0
- package/template/apps/asas-backoffice/src/components/ui/spinner.tsx +10 -0
- package/template/apps/asas-backoffice/src/components/ui/switch.tsx +29 -0
- package/template/apps/asas-backoffice/src/components/ui/table.tsx +115 -0
- package/template/apps/asas-backoffice/src/components/ui/tabs.tsx +79 -0
- package/template/apps/asas-backoffice/src/components/ui/textarea.tsx +17 -0
- package/template/apps/asas-backoffice/src/components/ui/toggle-group.tsx +89 -0
- package/template/apps/asas-backoffice/src/components/ui/toggle.tsx +44 -0
- package/template/apps/asas-backoffice/src/components/ui/tooltip.tsx +63 -0
- package/template/apps/asas-backoffice/src/components.ts +35 -0
- package/template/apps/asas-backoffice/src/copy.ts +1 -0
- package/template/apps/asas-backoffice/src/first-user.ts +14 -0
- package/template/apps/asas-backoffice/src/hooks/use-mobile.ts +19 -0
- package/template/apps/asas-backoffice/src/lib/utils.ts +1 -0
- package/template/apps/asas-backoffice/src/links.ts +38 -0
- package/template/apps/asas-backoffice/src/locale-switch.tsx +28 -0
- package/template/apps/asas-backoffice/src/no-organization.tsx +5 -0
- package/template/apps/asas-backoffice/src/redirect.ts +1 -0
- package/template/apps/asas-backoffice/src/request-headers.ts +11 -0
- package/template/apps/asas-backoffice/src/routeTree.gen.ts +206 -0
- package/template/apps/asas-backoffice/src/router.tsx +18 -0
- package/template/apps/asas-backoffice/src/routes/(screens)/backoffice/files.ts +10 -0
- package/template/apps/asas-backoffice/src/routes/(screens)/backoffice/screen.json +3971 -0
- package/template/apps/asas-backoffice/src/routes/(screens)/backoffice/types.ts +163 -0
- package/template/apps/asas-backoffice/src/routes/(screens)/backoffice.$.tsx +17 -0
- package/template/apps/asas-backoffice/src/routes/(screens)/backoffice.index.tsx +10 -0
- package/template/apps/asas-backoffice/src/routes/(screens)/backoffice.tsx +13 -0
- package/template/apps/asas-backoffice/src/routes/__root.tsx +95 -0
- package/template/apps/asas-backoffice/src/routes/api/$.ts +34 -0
- package/template/apps/asas-backoffice/src/routes/auth.create-first-user.tsx +113 -0
- package/template/apps/asas-backoffice/src/routes/auth.sign-in.tsx +77 -0
- package/template/apps/asas-backoffice/src/routes/unauthorized.tsx +134 -0
- package/template/apps/asas-backoffice/src/screen-form.tsx +36 -0
- package/template/apps/asas-backoffice/src/screen-list.tsx +140 -0
- package/template/apps/asas-backoffice/src/screen-names.ts +10 -0
- package/template/apps/asas-backoffice/src/screens.tsx +888 -0
- package/template/apps/asas-backoffice/src/server.ts +30 -0
- package/template/apps/asas-backoffice/src/slide.ts +22 -0
- package/template/apps/asas-backoffice/src/start.ts +42 -0
- package/template/apps/asas-backoffice/src/styles.css +202 -0
- package/template/apps/asas-backoffice/src/theme.ts +2 -0
- package/template/apps/asas-backoffice/tsconfig.json +19 -0
- package/template/apps/asas-backoffice/vite.config.ts +32 -0
- package/template/apps/asas-tanstack/components.json +25 -0
- package/template/apps/asas-tanstack/gitignore +3 -0
- package/template/apps/asas-tanstack/package.json +58 -0
- package/template/apps/asas-tanstack/public/favicon.svg +1 -0
- package/template/apps/asas-tanstack/src/api.ts +147 -0
- package/template/apps/asas-tanstack/src/auth-frame.tsx +150 -0
- package/template/apps/asas-tanstack/src/choose-password.tsx +150 -0
- package/template/apps/asas-tanstack/src/components/ui/accordion.tsx +10 -0
- package/template/apps/asas-tanstack/src/components/ui/alert-dialog.tsx +173 -0
- package/template/apps/asas-tanstack/src/components/ui/avatar.tsx +104 -0
- package/template/apps/asas-tanstack/src/components/ui/badge.tsx +48 -0
- package/template/apps/asas-tanstack/src/components/ui/breadcrumb.tsx +125 -0
- package/template/apps/asas-tanstack/src/components/ui/button-group.tsx +87 -0
- package/template/apps/asas-tanstack/src/components/ui/button.tsx +56 -0
- package/template/apps/asas-tanstack/src/components/ui/calendar.tsx +223 -0
- package/template/apps/asas-tanstack/src/components/ui/card.tsx +94 -0
- package/template/apps/asas-tanstack/src/components/ui/chart.tsx +369 -0
- package/template/apps/asas-tanstack/src/components/ui/checkbox.tsx +27 -0
- package/template/apps/asas-tanstack/src/components/ui/collapsible.tsx +19 -0
- package/template/apps/asas-tanstack/src/components/ui/combobox.tsx +300 -0
- package/template/apps/asas-tanstack/src/components/ui/dialog.tsx +149 -0
- package/template/apps/asas-tanstack/src/components/ui/direction.tsx +5 -0
- package/template/apps/asas-tanstack/src/components/ui/directional-icon.tsx +20 -0
- package/template/apps/asas-tanstack/src/components/ui/dropdown-menu.tsx +267 -0
- package/template/apps/asas-tanstack/src/components/ui/field.tsx +225 -0
- package/template/apps/asas-tanstack/src/components/ui/input-group.tsx +147 -0
- package/template/apps/asas-tanstack/src/components/ui/input-otp.tsx +20 -0
- package/template/apps/asas-tanstack/src/components/ui/input.tsx +20 -0
- package/template/apps/asas-tanstack/src/components/ui/label.tsx +18 -0
- package/template/apps/asas-tanstack/src/components/ui/popover.tsx +50 -0
- package/template/apps/asas-tanstack/src/components/ui/radio-group.tsx +10 -0
- package/template/apps/asas-tanstack/src/components/ui/resizable.tsx +47 -0
- package/template/apps/asas-tanstack/src/components/ui/scroll-area.tsx +52 -0
- package/template/apps/asas-tanstack/src/components/ui/select.tsx +190 -0
- package/template/apps/asas-tanstack/src/components/ui/separator.tsx +23 -0
- package/template/apps/asas-tanstack/src/components/ui/sheet.tsx +127 -0
- package/template/apps/asas-tanstack/src/components/ui/sidebar.tsx +716 -0
- package/template/apps/asas-tanstack/src/components/ui/skeleton.tsx +13 -0
- package/template/apps/asas-tanstack/src/components/ui/slider.tsx +13 -0
- package/template/apps/asas-tanstack/src/components/ui/spinner.tsx +11 -0
- package/template/apps/asas-tanstack/src/components/ui/switch.tsx +8 -0
- package/template/apps/asas-tanstack/src/components/ui/table.tsx +119 -0
- package/template/apps/asas-tanstack/src/components/ui/tabs.tsx +80 -0
- package/template/apps/asas-tanstack/src/components/ui/textarea.tsx +18 -0
- package/template/apps/asas-tanstack/src/components/ui/toggle-group.tsx +8 -0
- package/template/apps/asas-tanstack/src/components/ui/toggle.tsx +44 -0
- package/template/apps/asas-tanstack/src/components/ui/tooltip.tsx +68 -0
- package/template/apps/asas-tanstack/src/components.ts +35 -0
- package/template/apps/asas-tanstack/src/copy.ts +1207 -0
- package/template/apps/asas-tanstack/src/first-run.ts +16 -0
- package/template/apps/asas-tanstack/src/hooks/use-mobile.ts +19 -0
- package/template/apps/asas-tanstack/src/lib/utils.ts +6 -0
- package/template/apps/asas-tanstack/src/links.ts +38 -0
- package/template/apps/asas-tanstack/src/locale-switch.tsx +28 -0
- package/template/apps/asas-tanstack/src/no-organization.tsx +108 -0
- package/template/apps/asas-tanstack/src/quiet-abort.ts +25 -0
- package/template/apps/asas-tanstack/src/redirect.ts +39 -0
- package/template/apps/asas-tanstack/src/request-headers.ts +11 -0
- package/template/apps/asas-tanstack/src/routeTree.gen.ts +424 -0
- package/template/apps/asas-tanstack/src/router.tsx +18 -0
- package/template/apps/asas-tanstack/src/routes/(screens)/dashboard/files.ts +11 -0
- package/template/apps/asas-tanstack/src/routes/(screens)/dashboard/screen.json +4242 -0
- package/template/apps/asas-tanstack/src/routes/(screens)/dashboard/types.ts +160 -0
- package/template/apps/asas-tanstack/src/routes/(screens)/dashboard.$.tsx +17 -0
- package/template/apps/asas-tanstack/src/routes/(screens)/dashboard.index.tsx +10 -0
- package/template/apps/asas-tanstack/src/routes/(screens)/dashboard.tsx +13 -0
- package/template/apps/asas-tanstack/src/routes/(screens)/portal/files.ts +9 -0
- package/template/apps/asas-tanstack/src/routes/(screens)/portal/screen.json +1564 -0
- package/template/apps/asas-tanstack/src/routes/(screens)/portal/types.ts +94 -0
- package/template/apps/asas-tanstack/src/routes/(screens)/portal.$.tsx +17 -0
- package/template/apps/asas-tanstack/src/routes/(screens)/portal.index.tsx +10 -0
- package/template/apps/asas-tanstack/src/routes/(screens)/portal.tsx +13 -0
- package/template/apps/asas-tanstack/src/routes/__root.tsx +99 -0
- package/template/apps/asas-tanstack/src/routes/api/$.ts +11 -0
- package/template/apps/asas-tanstack/src/routes/auth.accept-invitation.tsx +108 -0
- package/template/apps/asas-tanstack/src/routes/auth.first-run.tsx +114 -0
- package/template/apps/asas-tanstack/src/routes/auth.forgot-password.tsx +94 -0
- package/template/apps/asas-tanstack/src/routes/auth.handoff.ts +39 -0
- package/template/apps/asas-tanstack/src/routes/auth.reset-password.tsx +16 -0
- package/template/apps/asas-tanstack/src/routes/auth.set-password.tsx +16 -0
- package/template/apps/asas-tanstack/src/routes/auth.sign-in.tsx +98 -0
- package/template/apps/asas-tanstack/src/routes/auth.sign-up.tsx +143 -0
- package/template/apps/asas-tanstack/src/routes/index.tsx +146 -0
- package/template/apps/asas-tanstack/src/routes/unauthorized.tsx +134 -0
- package/template/apps/asas-tanstack/src/screen-form.tsx +36 -0
- package/template/apps/asas-tanstack/src/screen-list.tsx +140 -0
- package/template/apps/asas-tanstack/src/screen-names.ts +10 -0
- package/template/apps/asas-tanstack/src/screens.tsx +888 -0
- package/template/apps/asas-tanstack/src/server.ts +26 -0
- package/template/apps/asas-tanstack/src/slide.ts +22 -0
- package/template/apps/asas-tanstack/src/start.ts +57 -0
- package/template/apps/asas-tanstack/src/styles.css +163 -0
- package/template/apps/asas-tanstack/src/theme.ts +5 -0
- package/template/apps/asas-tanstack/tsconfig.json +19 -0
- package/template/apps/asas-tanstack/vite.config.ts +34 -0
- package/template/package.json +16 -0
- package/template/templates/asas/.claude/skills/add-field/SKILL.md +27 -0
- package/template/templates/asas/.claude/skills/add-kayan/SKILL.md +26 -0
- package/template/templates/asas/.claude/skills/eject-admin-piece/SKILL.md +28 -0
- package/template/templates/asas/.claude/skills/upgrade-mithaq/SKILL.md +35 -0
- package/template/templates/asas/.env.example +33 -0
- package/template/templates/asas/AGENTS.md +101 -0
- package/template/templates/asas/CLAUDE.md +1 -0
- package/template/templates/asas/README.md +1056 -0
- package/template/templates/asas/mithaq.hints.json +25 -0
- package/template/templates/asas/package.json +53 -0
- package/template/templates/asas/src/asas.ts +118 -0
- package/template/templates/asas/src/backoffice-http.ts +117 -0
- package/template/templates/asas/src/dev-setup.ts +112 -0
- package/template/templates/asas/src/local-database.ts +22 -0
- package/template/templates/asas/src/messages/account.json +132 -0
- package/template/templates/asas/src/messages/auditLog.json +304 -0
- package/template/templates/asas/src/messages/backofficeLog.json +132 -0
- package/template/templates/asas/src/messages/courses.json +312 -0
- package/template/templates/asas/src/messages/enrollments.json +60 -0
- package/template/templates/asas/src/messages/invitation.json +82 -0
- package/template/templates/asas/src/messages/localUsers.json +48 -0
- package/template/templates/asas/src/messages/media.json +76 -0
- package/template/templates/asas/src/messages/member.json +62 -0
- package/template/templates/asas/src/messages/memberRoles.json +48 -0
- package/template/templates/asas/src/messages/mithaq.json +214 -0
- package/template/templates/asas/src/messages/organization.json +72 -0
- package/template/templates/asas/src/messages/organizationRole.json +62 -0
- package/template/templates/asas/src/messages/roles.json +72 -0
- package/template/templates/asas/src/messages/session.json +102 -0
- package/template/templates/asas/src/messages/sessions.json +136 -0
- package/template/templates/asas/src/messages/settings.json +64 -0
- package/template/templates/asas/src/messages/tags.json +48 -0
- package/template/templates/asas/src/messages/user.json +112 -0
- package/template/templates/asas/src/messages/verification.json +62 -0
- package/template/templates/asas/src/migrations/20260920080701_parched_tombstone/migration.sql +177 -0
- package/template/templates/asas/src/migrations/20260920080701_parched_tombstone/snapshot.json +2169 -0
- package/template/templates/asas/src/migrations/20260920230505_zippy_ben_urich/migration.sql +1 -0
- package/template/templates/asas/src/migrations/20260920230505_zippy_ben_urich/snapshot.json +2182 -0
- package/template/templates/asas/src/migrations/20260920231219_slim_retro_girl/migration.sql +20 -0
- package/template/templates/asas/src/migrations/20260920231219_slim_retro_girl/snapshot.json +2409 -0
- package/template/templates/asas/src/migrations/20260922082945_military_ironclad/migration.sql +15 -0
- package/template/templates/asas/src/migrations/20260922082945_military_ironclad/snapshot.json +2627 -0
- package/template/templates/asas/src/migrations/20260922112630_bitter_chat/migration.sql +5 -0
- package/template/templates/asas/src/migrations/20260922112630_bitter_chat/snapshot.json +2691 -0
- package/template/templates/asas/src/migrations/20260923235915_foamy_rachel_grey/migration.sql +8 -0
- package/template/templates/asas/src/migrations/20260923235915_foamy_rachel_grey/snapshot.json +2795 -0
- package/template/templates/asas/src/migrations/20260926145709_clean_the_initiative/migration.sql +3 -0
- package/template/templates/asas/src/migrations/20260926145709_clean_the_initiative/snapshot.json +2834 -0
- package/template/templates/asas/src/migrations/20260927212525_bent_prowler/migration.sql +9 -0
- package/template/templates/asas/src/migrations/20260927212525_bent_prowler/snapshot.json +2870 -0
- package/template/templates/asas/src/migrations/20260927223441_tranquil_bromley/migration.sql +1 -0
- package/template/templates/asas/src/migrations/20260927223441_tranquil_bromley/snapshot.json +2881 -0
- package/template/templates/asas/src/migrations/20260928030047_outgoing_wraith/migration.sql +15 -0
- package/template/templates/asas/src/migrations/20260928030047_outgoing_wraith/snapshot.json +3073 -0
- package/template/templates/asas/src/migrations/20260929024407_grey_morlun/migration.sql +21 -0
- package/template/templates/asas/src/migrations/20260929024407_grey_morlun/snapshot.json +3098 -0
- package/template/templates/asas/src/migrations/20260929130530_bored_jackal/migration.sql +21 -0
- package/template/templates/asas/src/migrations/20260929130530_bored_jackal/snapshot.json +3124 -0
- package/template/templates/asas/src/migrations/20260930102924_material_newton_destine/migration.sql +32 -0
- package/template/templates/asas/src/migrations/20260930102924_material_newton_destine/snapshot.json +3324 -0
- package/template/templates/asas/src/migrations/20261003022353_clumsy_taskmaster/migration.sql +2 -0
- package/template/templates/asas/src/migrations/20261003022353_clumsy_taskmaster/snapshot.json +3350 -0
- package/template/templates/asas/src/migrations/20261003143249_premium_red_shift/migration.sql +21 -0
- package/template/templates/asas/src/migrations/20261003143249_premium_red_shift/snapshot.json +3635 -0
- package/template/templates/asas/src/migrations/20261008215349_square_norrin_radd/migration.sql +8 -0
- package/template/templates/asas/src/migrations/20261008215349_square_norrin_radd/snapshot.json +3635 -0
- package/template/templates/asas/src/migrations/20261008230204_many_scarecrow/migration.sql +18 -0
- package/template/templates/asas/src/migrations/20261008230204_many_scarecrow/snapshot.json +3635 -0
- package/template/templates/asas/src/migrations/20261010005521_elite_giant_girl/migration.sql +18 -0
- package/template/templates/asas/src/migrations/20261010005521_elite_giant_girl/snapshot.json +3635 -0
- package/template/templates/asas/src/migrations/20261010120822_needy_thunderbolt/migration.sql +11 -0
- package/template/templates/asas/src/migrations/20261010120822_needy_thunderbolt/snapshot.json +3667 -0
- package/template/templates/asas/src/migrations/20261012000752_organization_ownership/migration.sql +48 -0
- package/template/templates/asas/src/migrations/20261012000752_organization_ownership/snapshot.json +3891 -0
- package/template/templates/asas/src/migrations/20261014221355_tags_restrict/migration.sql +1 -0
- package/template/templates/asas/src/migrations/20261014221355_tags_restrict/snapshot.json +3881 -0
- package/template/templates/asas/src/migrations/20261014222218_one_seat_per_session/migration.sql +1 -0
- package/template/templates/asas/src/migrations/20261014222218_one_seat_per_session/snapshot.json +3894 -0
- package/template/templates/asas/src/migrations/20261014223522_session_archive_reason/migration.sql +1 -0
- package/template/templates/asas/src/migrations/20261014223522_session_archive_reason/snapshot.json +3907 -0
- package/template/templates/asas/src/migrations/20261014225728_course_archive_by_operation/migration.sql +1 -0
- package/template/templates/asas/src/migrations/20261014225728_course_archive_by_operation/snapshot.json +3907 -0
- package/template/templates/asas/src/migrations/20261015042444_organization_names/migration.sql +1 -0
- package/template/templates/asas/src/migrations/20261015042444_organization_names/snapshot.json +3920 -0
- package/template/templates/asas/src/migrations/20261015053212_member_last_seen/migration.sql +1 -0
- package/template/templates/asas/src/migrations/20261015053212_member_last_seen/snapshot.json +3933 -0
- package/template/templates/asas/src/migrations/20261015093203_activity_and_staff_history/migration.sql +15 -0
- package/template/templates/asas/src/migrations/20261015093203_activity_and_staff_history/snapshot.json +4113 -0
- package/template/templates/asas/src/migrations/20261015095752_portal/migration.sql +2 -0
- package/template/templates/asas/src/migrations/20261015095752_portal/snapshot.json +4113 -0
- package/template/templates/asas/src/migrations/20261015135529_better_auth_indexes/migration.sql +9 -0
- package/template/templates/asas/src/migrations/20261015135529_better_auth_indexes/snapshot.json +4302 -0
- package/template/templates/asas/src/migrations/20261015162438_audit_changes_json/migration.sql +27 -0
- package/template/templates/asas/src/migrations/20261015162438_audit_changes_json/snapshot.json +4289 -0
- package/template/templates/asas/src/migrations/drizzle.config.ts +11 -0
- package/template/templates/asas/src/migrations/schema.ts +30 -0
- package/template/templates/asas/src/mithaq.ts +4 -0
- package/template/templates/asas/src/organizations.ts +3 -0
- package/template/templates/asas/src/seed.ts +427 -0
- package/template/templates/asas/src/ui-backoffice/home.tsx +63 -0
- package/template/templates/asas/src/ui-backoffice/organization-actions.tsx +121 -0
- package/template/templates/asas/src/ui-backoffice/record-page.tsx +30 -0
- package/template/templates/asas/src/ui-backoffice/role-cells.tsx +59 -0
- package/template/templates/asas/src/ui-backoffice/user-actions.tsx +249 -0
- package/template/templates/asas/src/ui-dashboard/dashboard.tsx +300 -0
- package/template/templates/asas/src/ui-dashboard/home.tsx +73 -0
- package/template/templates/asas/src/ui-dashboard/members-card.tsx +147 -0
- package/template/templates/asas/src/ui-dashboard/members.tsx +829 -0
- package/template/templates/asas/src/ui-dashboard/theme-provider.tsx +10 -0
- package/template/templates/asas/src/ui-dashboard/versions.tsx +446 -0
- package/template/templates/asas/src/ui-portal/courses-home.tsx +96 -0
- package/template/templates/asas/src/ui-portal/home.tsx +73 -0
- package/template/templates/asas/src/ui-portal/page.tsx +11 -0
- package/template/templates/features/audit-log/audit-log/audit-log.ts +284 -0
- package/template/templates/features/audit-log/backoffice-log/backoffice-log.ts +67 -0
- package/template/templates/features/audit-log/index.ts +4 -0
- package/template/templates/features/audit-log/package.json +13 -0
- package/template/templates/features/auth/index.ts +11 -0
- package/template/templates/features/auth/local-users/local-users.ts +143 -0
- package/template/templates/features/auth/package.json +13 -0
- package/template/templates/features/auth/user/account.access.ts +8 -0
- package/template/templates/features/auth/user/account.ts +31 -0
- package/template/templates/features/auth/user/index.ts +18 -0
- package/template/templates/features/auth/user/invitation.access.ts +4 -0
- package/template/templates/features/auth/user/invitation.ts +27 -0
- package/template/templates/features/auth/user/member.access.ts +10 -0
- package/template/templates/features/auth/user/member.screens.ts +37 -0
- package/template/templates/features/auth/user/member.ts +26 -0
- package/template/templates/features/auth/user/organization.access.ts +20 -0
- package/template/templates/features/auth/user/organization.screens.ts +37 -0
- package/template/templates/features/auth/user/organization.ts +25 -0
- package/template/templates/features/auth/user/organizationRole.access.ts +8 -0
- package/template/templates/features/auth/user/organizationRole.ts +25 -0
- package/template/templates/features/auth/user/session.access.ts +8 -0
- package/template/templates/features/auth/user/session.ts +28 -0
- package/template/templates/features/auth/user/user.access.ts +30 -0
- package/template/templates/features/auth/user/user.screens.ts +45 -0
- package/template/templates/features/auth/user/user.ts +31 -0
- package/template/templates/features/auth/user/verification.access.ts +8 -0
- package/template/templates/features/auth/user/verification.ts +23 -0
- package/template/templates/features/courses/courses/courses.ts +601 -0
- package/template/templates/features/courses/courses/cover-reads.ts +33 -0
- package/template/templates/features/courses/courses/ui/archived-badge.tsx +9 -0
- package/template/templates/features/courses/courses/ui/fee-cell.tsx +19 -0
- package/template/templates/features/courses/courses/ui/no-courses.tsx +13 -0
- package/template/templates/features/courses/courses/ui/status-cell.tsx +33 -0
- package/template/templates/features/courses/courses/ui/unpublish-button.tsx +15 -0
- package/template/templates/features/courses/domain/archive.ts +39 -0
- package/template/templates/features/courses/domain/on-offer.ts +6 -0
- package/template/templates/features/courses/enrollments/enrollments.ts +309 -0
- package/template/templates/features/courses/enrollments/ui/session-cell.tsx +75 -0
- package/template/templates/features/courses/enrollments/ui/session-labels.tsx +36 -0
- package/template/templates/features/courses/index.ts +8 -0
- package/template/templates/features/courses/package.json +24 -0
- package/template/templates/features/courses/portal/ui/catalogue.tsx +86 -0
- package/template/templates/features/courses/portal/ui/course.tsx +176 -0
- package/template/templates/features/courses/portal/ui/enrollments.tsx +170 -0
- package/template/templates/features/courses/portal/ui/parts.tsx +95 -0
- package/template/templates/features/courses/portal/ui/reads.ts +76 -0
- package/template/templates/features/courses/portal/ui/rules.ts +87 -0
- package/template/templates/features/courses/portal/ui/shell.tsx +194 -0
- package/template/templates/features/courses/sessions/seats.ts +42 -0
- package/template/templates/features/courses/sessions/sessions.ts +186 -0
- package/template/templates/features/media/index.ts +10 -0
- package/template/templates/features/media/media/media.ts +131 -0
- package/template/templates/features/media/media/ui/preview.tsx +143 -0
- package/template/templates/features/media/package.json +19 -0
- package/template/templates/features/roles/index.ts +4 -0
- package/template/templates/features/roles/member-roles/member-roles.ts +207 -0
- package/template/templates/features/roles/package.json +21 -0
- package/template/templates/features/roles/roles/roles.ts +184 -0
- package/template/templates/features/roles/roles/ui/role-form.tsx +267 -0
- package/template/templates/features/roles/roles/ui/roles.tsx +190 -0
- package/template/templates/features/settings/index.ts +3 -0
- package/template/templates/features/settings/package.json +13 -0
- package/template/templates/features/settings/settings/settings.ts +64 -0
- package/template/templates/features/tags/index.ts +3 -0
- package/template/templates/features/tags/package.json +14 -0
- package/template/templates/features/tags/tags/tags.ts +80 -0
- package/template/templates/mithaq/components.json +22 -0
- package/template/templates/mithaq/package.json +33 -0
- package/template/templates/mithaq/src/mail/index.ts +32 -0
- package/template/templates/mithaq/src/mail/mailers.ts +36 -0
- package/template/templates/mithaq/src/mithaq/audit-sink.ts +111 -0
- package/template/templates/mithaq/src/mithaq/auth/backoffice-roles.ts +108 -0
- package/template/templates/mithaq/src/mithaq/auth/index.ts +1859 -0
- package/template/templates/mithaq/src/mithaq/auth/organizations.ts +80 -0
- package/template/templates/mithaq/src/mithaq/pages.ts +83 -0
- package/template/templates/mithaq/src/mithaq/rich-text-nodes.ts +19 -0
- package/template/templates/mithaq/src/mithaq.ts +593 -0
- package/template/templates/mithaq/src/roles/default-member-roles.ts +29 -0
- package/template/templates/mithaq/src/roles/grants.ts +47 -0
- package/template/templates/mithaq/src/roles/member-access.ts +11 -0
- package/template/templates/mithaq/src/roles/statements.ts +13 -0
- package/template/templates/mithaq/src/roles/system-roles.ts +16 -0
- package/template/templates/mithaq/src/roles/tenant-access.ts +260 -0
- package/template/templates/mithaq/src/roles/tenant-roles.ts +321 -0
- package/template/templates/mithaq/src/steps/expected-updated-at.ts +41 -0
- package/template/templates/mithaq/src/storage/defaults.ts +156 -0
- package/template/templates/mithaq/src/storage/index.ts +97 -0
- package/template/templates/mithaq/src/storage/local.ts +143 -0
- package/template/templates/mithaq/src/storage/r2.ts +5 -0
- package/template/templates/mithaq/src/storage/s3.ts +91 -0
- package/template/templates/mithaq/src/storage/uploadthing.ts +59 -0
- package/template/templates/mithaq/src/ui/activity-page.tsx +33 -0
- package/template/templates/mithaq/src/ui/activity.tsx +527 -0
- package/template/templates/mithaq/src/ui/app-shell.tsx +268 -0
- package/template/templates/mithaq/src/ui/kpi-card.tsx +25 -0
- package/template/templates/mithaq/src/ui/record-page.tsx +50 -0
- package/template/templates/mithaq/src/ui/rich-text-nodes.tsx +33 -0
- package/template/templates/mithaq/src/ui/screen-nav.tsx +28 -0
- package/template/templates/mithaq/src/ui/table-page.tsx +9 -0
- package/template/templates/mithaq/src/ui/top-shell.tsx +60 -0
- package/README.md +0 -3
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"contactEmail": {
|
|
3
|
+
"$value": {
|
|
4
|
+
"ar": "بريد التواصل",
|
|
5
|
+
"en": "Contact email"
|
|
6
|
+
},
|
|
7
|
+
"invalid": {
|
|
8
|
+
"ar": "هذا ليس بريدا إلكترونيا.",
|
|
9
|
+
"en": "This is not an email address."
|
|
10
|
+
},
|
|
11
|
+
"required": {
|
|
12
|
+
"ar": "هذا الحقل مطلوب.",
|
|
13
|
+
"en": "This field is required."
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"globalType": {
|
|
17
|
+
"invalid": {
|
|
18
|
+
"ar": "هذا ليس نصا.",
|
|
19
|
+
"en": "This is not text."
|
|
20
|
+
},
|
|
21
|
+
"required": {
|
|
22
|
+
"ar": "هذا الحقل مطلوب.",
|
|
23
|
+
"en": "This field is required."
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"id": {
|
|
27
|
+
"invalid": {
|
|
28
|
+
"ar": "هذا ليس معرفا فريدا.",
|
|
29
|
+
"en": "This is not a unique identifier."
|
|
30
|
+
},
|
|
31
|
+
"required": {
|
|
32
|
+
"ar": "هذا الحقل مطلوب.",
|
|
33
|
+
"en": "This field is required."
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"maintenance": {
|
|
37
|
+
"$value": {
|
|
38
|
+
"ar": "الصيانة",
|
|
39
|
+
"en": "Maintenance"
|
|
40
|
+
},
|
|
41
|
+
"description": {
|
|
42
|
+
"ar": "ما دام هذا مفعلا، تخبر البوابة الطلاب بأنها مغلقة للصيانة. ويواصل الموظفون عملهم.",
|
|
43
|
+
"en": "While this is on, the portal tells students it is closed for maintenance. Staff keep working."
|
|
44
|
+
},
|
|
45
|
+
"invalid": {
|
|
46
|
+
"ar": "يجاب على هذا بنعم أو لا.",
|
|
47
|
+
"en": "This is answered yes or no."
|
|
48
|
+
},
|
|
49
|
+
"required": {
|
|
50
|
+
"ar": "هذا الحقل مطلوب.",
|
|
51
|
+
"en": "This field is required."
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"organization": {
|
|
55
|
+
"ar": "المؤسسة",
|
|
56
|
+
"en": "Organization"
|
|
57
|
+
},
|
|
58
|
+
"page": {
|
|
59
|
+
"description": {
|
|
60
|
+
"ar": "أين يتواصل الطلاب مع المدرسة، وهل البوابة مفتوحة لهم.",
|
|
61
|
+
"en": "Where students reach the school, and whether the portal is open to them."
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": {
|
|
3
|
+
"invalid": {
|
|
4
|
+
"ar": "هذا ليس معرفا فريدا.",
|
|
5
|
+
"en": "This is not a unique identifier."
|
|
6
|
+
},
|
|
7
|
+
"required": {
|
|
8
|
+
"ar": "هذا الحقل مطلوب.",
|
|
9
|
+
"en": "This field is required."
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
"name": {
|
|
13
|
+
"$value": {
|
|
14
|
+
"ar": "الاسم",
|
|
15
|
+
"en": "Name"
|
|
16
|
+
},
|
|
17
|
+
"invalid": {
|
|
18
|
+
"ar": "هذا ليس نصا.",
|
|
19
|
+
"en": "This is not text."
|
|
20
|
+
},
|
|
21
|
+
"maxLength": {
|
|
22
|
+
"ar": "القيمة طويلة جدًا.",
|
|
23
|
+
"en": "The value is too long."
|
|
24
|
+
},
|
|
25
|
+
"required": {
|
|
26
|
+
"ar": "هذا الحقل مطلوب.",
|
|
27
|
+
"en": "This field is required."
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"organization": {
|
|
31
|
+
"ar": "المؤسسة",
|
|
32
|
+
"en": "Organization"
|
|
33
|
+
},
|
|
34
|
+
"page": {
|
|
35
|
+
"description": {
|
|
36
|
+
"ar": "تسميات تجمع بها المؤسسة سجلاتها.",
|
|
37
|
+
"en": "Labels the organization groups its records by."
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"plural": {
|
|
41
|
+
"ar": "الوسوم",
|
|
42
|
+
"en": "Tags"
|
|
43
|
+
},
|
|
44
|
+
"singular": {
|
|
45
|
+
"ar": "وسم",
|
|
46
|
+
"en": "Tag"
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
{
|
|
2
|
+
"banExpires": {
|
|
3
|
+
"invalid": {
|
|
4
|
+
"ar": "هذا ليس تاريخا ووقتا.",
|
|
5
|
+
"en": "This is not a date and time."
|
|
6
|
+
},
|
|
7
|
+
"required": {
|
|
8
|
+
"ar": "هذا الحقل مطلوب.",
|
|
9
|
+
"en": "This field is required."
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
"banReason": {
|
|
13
|
+
"invalid": {
|
|
14
|
+
"ar": "هذا ليس نصا.",
|
|
15
|
+
"en": "This is not text."
|
|
16
|
+
},
|
|
17
|
+
"required": {
|
|
18
|
+
"ar": "هذا الحقل مطلوب.",
|
|
19
|
+
"en": "This field is required."
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"banned": {
|
|
23
|
+
"invalid": {
|
|
24
|
+
"ar": "يجاب على هذا بنعم أو لا.",
|
|
25
|
+
"en": "This is answered yes or no."
|
|
26
|
+
},
|
|
27
|
+
"required": {
|
|
28
|
+
"ar": "هذا الحقل مطلوب.",
|
|
29
|
+
"en": "This field is required."
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"createdAt": {
|
|
33
|
+
"invalid": {
|
|
34
|
+
"ar": "هذا ليس تاريخا ووقتا.",
|
|
35
|
+
"en": "This is not a date and time."
|
|
36
|
+
},
|
|
37
|
+
"required": {
|
|
38
|
+
"ar": "هذا الحقل مطلوب.",
|
|
39
|
+
"en": "This field is required."
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"email": {
|
|
43
|
+
"invalid": {
|
|
44
|
+
"ar": "هذا ليس نصا.",
|
|
45
|
+
"en": "This is not text."
|
|
46
|
+
},
|
|
47
|
+
"required": {
|
|
48
|
+
"ar": "هذا الحقل مطلوب.",
|
|
49
|
+
"en": "This field is required."
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"emailVerified": {
|
|
53
|
+
"invalid": {
|
|
54
|
+
"ar": "يجاب على هذا بنعم أو لا.",
|
|
55
|
+
"en": "This is answered yes or no."
|
|
56
|
+
},
|
|
57
|
+
"required": {
|
|
58
|
+
"ar": "هذا الحقل مطلوب.",
|
|
59
|
+
"en": "This field is required."
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
"id": {
|
|
63
|
+
"invalid": {
|
|
64
|
+
"ar": "هذا ليس نصا.",
|
|
65
|
+
"en": "This is not text."
|
|
66
|
+
},
|
|
67
|
+
"required": {
|
|
68
|
+
"ar": "هذا الحقل مطلوب.",
|
|
69
|
+
"en": "This field is required."
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
"image": {
|
|
73
|
+
"invalid": {
|
|
74
|
+
"ar": "هذا ليس نصا.",
|
|
75
|
+
"en": "This is not text."
|
|
76
|
+
},
|
|
77
|
+
"required": {
|
|
78
|
+
"ar": "هذا الحقل مطلوب.",
|
|
79
|
+
"en": "This field is required."
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
"name": {
|
|
83
|
+
"invalid": {
|
|
84
|
+
"ar": "هذا ليس نصا.",
|
|
85
|
+
"en": "This is not text."
|
|
86
|
+
},
|
|
87
|
+
"required": {
|
|
88
|
+
"ar": "هذا الحقل مطلوب.",
|
|
89
|
+
"en": "This field is required."
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
"role": {
|
|
93
|
+
"invalid": {
|
|
94
|
+
"ar": "هذا ليس نصا.",
|
|
95
|
+
"en": "This is not text."
|
|
96
|
+
},
|
|
97
|
+
"required": {
|
|
98
|
+
"ar": "هذا الحقل مطلوب.",
|
|
99
|
+
"en": "This field is required."
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
"updatedAt": {
|
|
103
|
+
"invalid": {
|
|
104
|
+
"ar": "هذا ليس تاريخا ووقتا.",
|
|
105
|
+
"en": "This is not a date and time."
|
|
106
|
+
},
|
|
107
|
+
"required": {
|
|
108
|
+
"ar": "هذا الحقل مطلوب.",
|
|
109
|
+
"en": "This field is required."
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"createdAt": {
|
|
3
|
+
"invalid": {
|
|
4
|
+
"ar": "هذا ليس تاريخا ووقتا.",
|
|
5
|
+
"en": "This is not a date and time."
|
|
6
|
+
},
|
|
7
|
+
"required": {
|
|
8
|
+
"ar": "هذا الحقل مطلوب.",
|
|
9
|
+
"en": "This field is required."
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
"expiresAt": {
|
|
13
|
+
"invalid": {
|
|
14
|
+
"ar": "هذا ليس تاريخا ووقتا.",
|
|
15
|
+
"en": "This is not a date and time."
|
|
16
|
+
},
|
|
17
|
+
"required": {
|
|
18
|
+
"ar": "هذا الحقل مطلوب.",
|
|
19
|
+
"en": "This field is required."
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"id": {
|
|
23
|
+
"invalid": {
|
|
24
|
+
"ar": "هذا ليس نصا.",
|
|
25
|
+
"en": "This is not text."
|
|
26
|
+
},
|
|
27
|
+
"required": {
|
|
28
|
+
"ar": "هذا الحقل مطلوب.",
|
|
29
|
+
"en": "This field is required."
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"identifier": {
|
|
33
|
+
"invalid": {
|
|
34
|
+
"ar": "هذا ليس نصا.",
|
|
35
|
+
"en": "This is not text."
|
|
36
|
+
},
|
|
37
|
+
"required": {
|
|
38
|
+
"ar": "هذا الحقل مطلوب.",
|
|
39
|
+
"en": "This field is required."
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"updatedAt": {
|
|
43
|
+
"invalid": {
|
|
44
|
+
"ar": "هذا ليس تاريخا ووقتا.",
|
|
45
|
+
"en": "This is not a date and time."
|
|
46
|
+
},
|
|
47
|
+
"required": {
|
|
48
|
+
"ar": "هذا الحقل مطلوب.",
|
|
49
|
+
"en": "This field is required."
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"value": {
|
|
53
|
+
"invalid": {
|
|
54
|
+
"ar": "هذا ليس نصا.",
|
|
55
|
+
"en": "This is not text."
|
|
56
|
+
},
|
|
57
|
+
"required": {
|
|
58
|
+
"ar": "هذا الحقل مطلوب.",
|
|
59
|
+
"en": "This field is required."
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
CREATE TABLE "account" (
|
|
2
|
+
"id" text PRIMARY KEY,
|
|
3
|
+
"account_id" text NOT NULL,
|
|
4
|
+
"provider_id" text NOT NULL,
|
|
5
|
+
"user_id" text NOT NULL,
|
|
6
|
+
"access_token" text,
|
|
7
|
+
"refresh_token" text,
|
|
8
|
+
"id_token" text,
|
|
9
|
+
"access_token_expires_at" timestamp(3) with time zone,
|
|
10
|
+
"refresh_token_expires_at" timestamp(3) with time zone,
|
|
11
|
+
"scope" text,
|
|
12
|
+
"password" text,
|
|
13
|
+
"created_at" timestamp(3) with time zone NOT NULL,
|
|
14
|
+
"updated_at" timestamp(3) with time zone NOT NULL
|
|
15
|
+
);
|
|
16
|
+
--> statement-breakpoint
|
|
17
|
+
CREATE TABLE "courses" (
|
|
18
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
19
|
+
"title" varchar(120) NOT NULL,
|
|
20
|
+
"summary" varchar(200),
|
|
21
|
+
"fee" numeric,
|
|
22
|
+
"archived" boolean,
|
|
23
|
+
"archive_reason" varchar(200),
|
|
24
|
+
"tenant_id" text,
|
|
25
|
+
"updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL,
|
|
26
|
+
"created_at" timestamp(3) with time zone DEFAULT now() NOT NULL
|
|
27
|
+
);
|
|
28
|
+
--> statement-breakpoint
|
|
29
|
+
CREATE TABLE "enrollments" (
|
|
30
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
31
|
+
"session_id" uuid,
|
|
32
|
+
"student_id" text,
|
|
33
|
+
"deleted_at" timestamp(3) with time zone,
|
|
34
|
+
"tenant_id" text,
|
|
35
|
+
"updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL,
|
|
36
|
+
"created_at" timestamp(3) with time zone DEFAULT now() NOT NULL
|
|
37
|
+
);
|
|
38
|
+
--> statement-breakpoint
|
|
39
|
+
CREATE TABLE "invitation" (
|
|
40
|
+
"id" text PRIMARY KEY,
|
|
41
|
+
"organization_id" text NOT NULL,
|
|
42
|
+
"email" text NOT NULL,
|
|
43
|
+
"role" text,
|
|
44
|
+
"status" text NOT NULL,
|
|
45
|
+
"expires_at" timestamp(3) with time zone NOT NULL,
|
|
46
|
+
"created_at" timestamp(3) with time zone NOT NULL,
|
|
47
|
+
"inviter_id" text NOT NULL,
|
|
48
|
+
"updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL
|
|
49
|
+
);
|
|
50
|
+
--> statement-breakpoint
|
|
51
|
+
CREATE TABLE "local_users" (
|
|
52
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
53
|
+
"email" text NOT NULL UNIQUE,
|
|
54
|
+
"hash" text NOT NULL,
|
|
55
|
+
"salt" text NOT NULL,
|
|
56
|
+
"sessions" text,
|
|
57
|
+
"login_attempts" numeric DEFAULT '0',
|
|
58
|
+
"lock_until" timestamp(3) with time zone,
|
|
59
|
+
"reset_password_token" text,
|
|
60
|
+
"reset_password_expiration" timestamp(3) with time zone,
|
|
61
|
+
"_verified" boolean DEFAULT false,
|
|
62
|
+
"_verification_token" text,
|
|
63
|
+
"updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL,
|
|
64
|
+
"created_at" timestamp(3) with time zone DEFAULT now() NOT NULL
|
|
65
|
+
);
|
|
66
|
+
--> statement-breakpoint
|
|
67
|
+
CREATE TABLE "member" (
|
|
68
|
+
"id" text PRIMARY KEY,
|
|
69
|
+
"organization_id" text NOT NULL,
|
|
70
|
+
"user_id" text NOT NULL,
|
|
71
|
+
"role" text NOT NULL,
|
|
72
|
+
"created_at" timestamp(3) with time zone NOT NULL,
|
|
73
|
+
"updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL
|
|
74
|
+
);
|
|
75
|
+
--> statement-breakpoint
|
|
76
|
+
CREATE TABLE "organization" (
|
|
77
|
+
"id" text PRIMARY KEY,
|
|
78
|
+
"name" text NOT NULL,
|
|
79
|
+
"slug" text NOT NULL UNIQUE,
|
|
80
|
+
"logo" text,
|
|
81
|
+
"created_at" timestamp(3) with time zone NOT NULL,
|
|
82
|
+
"metadata" text,
|
|
83
|
+
"updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL
|
|
84
|
+
);
|
|
85
|
+
--> statement-breakpoint
|
|
86
|
+
CREATE TABLE "organization_role" (
|
|
87
|
+
"id" text PRIMARY KEY,
|
|
88
|
+
"organization_id" text NOT NULL,
|
|
89
|
+
"role" text NOT NULL,
|
|
90
|
+
"permission" text NOT NULL,
|
|
91
|
+
"created_at" timestamp(3) with time zone NOT NULL,
|
|
92
|
+
"updated_at" timestamp(3) with time zone
|
|
93
|
+
);
|
|
94
|
+
--> statement-breakpoint
|
|
95
|
+
CREATE TABLE "roles" (
|
|
96
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
97
|
+
"name" varchar(60) NOT NULL,
|
|
98
|
+
"permissions" text[] NOT NULL,
|
|
99
|
+
"tenant_id" text,
|
|
100
|
+
"updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL,
|
|
101
|
+
"created_at" timestamp(3) with time zone DEFAULT now() NOT NULL
|
|
102
|
+
);
|
|
103
|
+
--> statement-breakpoint
|
|
104
|
+
CREATE TABLE "session" (
|
|
105
|
+
"id" text PRIMARY KEY,
|
|
106
|
+
"expires_at" timestamp(3) with time zone NOT NULL,
|
|
107
|
+
"token" text NOT NULL UNIQUE,
|
|
108
|
+
"created_at" timestamp(3) with time zone NOT NULL,
|
|
109
|
+
"updated_at" timestamp(3) with time zone NOT NULL,
|
|
110
|
+
"ip_address" text,
|
|
111
|
+
"user_agent" text,
|
|
112
|
+
"user_id" text NOT NULL,
|
|
113
|
+
"active_organization_id" text
|
|
114
|
+
);
|
|
115
|
+
--> statement-breakpoint
|
|
116
|
+
CREATE TABLE "course_sessions" (
|
|
117
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
118
|
+
"course_id" uuid NOT NULL,
|
|
119
|
+
"starts_at" timestamp(3) with time zone NOT NULL,
|
|
120
|
+
"capacity" numeric,
|
|
121
|
+
"tenant_id" text,
|
|
122
|
+
"updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL,
|
|
123
|
+
"created_at" timestamp(3) with time zone DEFAULT now() NOT NULL
|
|
124
|
+
);
|
|
125
|
+
--> statement-breakpoint
|
|
126
|
+
CREATE TABLE "settings" (
|
|
127
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
128
|
+
"site_title" varchar(120) NOT NULL,
|
|
129
|
+
"maintenance" boolean,
|
|
130
|
+
"tenant_id" text NOT NULL UNIQUE,
|
|
131
|
+
"global_type" text DEFAULT 'settings' NOT NULL,
|
|
132
|
+
"updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL,
|
|
133
|
+
"created_at" timestamp(3) with time zone DEFAULT now() NOT NULL
|
|
134
|
+
);
|
|
135
|
+
--> statement-breakpoint
|
|
136
|
+
CREATE TABLE "user" (
|
|
137
|
+
"id" text PRIMARY KEY,
|
|
138
|
+
"name" text NOT NULL,
|
|
139
|
+
"email" text NOT NULL UNIQUE,
|
|
140
|
+
"email_verified" boolean NOT NULL,
|
|
141
|
+
"image" text,
|
|
142
|
+
"created_at" timestamp(3) with time zone NOT NULL,
|
|
143
|
+
"updated_at" timestamp(3) with time zone NOT NULL
|
|
144
|
+
);
|
|
145
|
+
--> statement-breakpoint
|
|
146
|
+
CREATE TABLE "verification" (
|
|
147
|
+
"id" text PRIMARY KEY,
|
|
148
|
+
"identifier" text NOT NULL,
|
|
149
|
+
"value" text NOT NULL,
|
|
150
|
+
"expires_at" timestamp(3) with time zone NOT NULL,
|
|
151
|
+
"created_at" timestamp(3) with time zone NOT NULL,
|
|
152
|
+
"updated_at" timestamp(3) with time zone NOT NULL
|
|
153
|
+
);
|
|
154
|
+
--> statement-breakpoint
|
|
155
|
+
CREATE INDEX "courses_title_index" ON "courses" ("title");--> statement-breakpoint
|
|
156
|
+
CREATE INDEX "courses_created_at_index" ON "courses" ("created_at");--> statement-breakpoint
|
|
157
|
+
CREATE INDEX "enrollments_created_at_index" ON "enrollments" ("created_at");--> statement-breakpoint
|
|
158
|
+
CREATE INDEX "local_users_created_at_index" ON "local_users" ("created_at");--> statement-breakpoint
|
|
159
|
+
CREATE INDEX "roles_name_index" ON "roles" ("name");--> statement-breakpoint
|
|
160
|
+
CREATE INDEX "roles_created_at_index" ON "roles" ("created_at");--> statement-breakpoint
|
|
161
|
+
CREATE INDEX "course_sessions_created_at_index" ON "course_sessions" ("created_at");--> statement-breakpoint
|
|
162
|
+
CREATE INDEX "settings_created_at_index" ON "settings" ("created_at");--> statement-breakpoint
|
|
163
|
+
ALTER TABLE "account" ADD CONSTRAINT "account_user_id_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "user"("id") ON DELETE CASCADE;--> statement-breakpoint
|
|
164
|
+
ALTER TABLE "courses" ADD CONSTRAINT "courses_tenant_id_organization_id_fkey" FOREIGN KEY ("tenant_id") REFERENCES "organization"("id") ON DELETE SET NULL;--> statement-breakpoint
|
|
165
|
+
ALTER TABLE "enrollments" ADD CONSTRAINT "enrollments_session_id_course_sessions_id_fkey" FOREIGN KEY ("session_id") REFERENCES "course_sessions"("id") ON DELETE SET NULL;--> statement-breakpoint
|
|
166
|
+
ALTER TABLE "enrollments" ADD CONSTRAINT "enrollments_student_id_user_id_fkey" FOREIGN KEY ("student_id") REFERENCES "user"("id") ON DELETE SET NULL;--> statement-breakpoint
|
|
167
|
+
ALTER TABLE "enrollments" ADD CONSTRAINT "enrollments_tenant_id_organization_id_fkey" FOREIGN KEY ("tenant_id") REFERENCES "organization"("id") ON DELETE SET NULL;--> statement-breakpoint
|
|
168
|
+
ALTER TABLE "invitation" ADD CONSTRAINT "invitation_organization_id_organization_id_fkey" FOREIGN KEY ("organization_id") REFERENCES "organization"("id") ON DELETE CASCADE;--> statement-breakpoint
|
|
169
|
+
ALTER TABLE "invitation" ADD CONSTRAINT "invitation_inviter_id_user_id_fkey" FOREIGN KEY ("inviter_id") REFERENCES "user"("id") ON DELETE CASCADE;--> statement-breakpoint
|
|
170
|
+
ALTER TABLE "member" ADD CONSTRAINT "member_organization_id_organization_id_fkey" FOREIGN KEY ("organization_id") REFERENCES "organization"("id") ON DELETE CASCADE;--> statement-breakpoint
|
|
171
|
+
ALTER TABLE "member" ADD CONSTRAINT "member_user_id_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "user"("id") ON DELETE CASCADE;--> statement-breakpoint
|
|
172
|
+
ALTER TABLE "organization_role" ADD CONSTRAINT "organization_role_organization_id_organization_id_fkey" FOREIGN KEY ("organization_id") REFERENCES "organization"("id") ON DELETE CASCADE;--> statement-breakpoint
|
|
173
|
+
ALTER TABLE "roles" ADD CONSTRAINT "roles_tenant_id_organization_id_fkey" FOREIGN KEY ("tenant_id") REFERENCES "organization"("id") ON DELETE SET NULL;--> statement-breakpoint
|
|
174
|
+
ALTER TABLE "session" ADD CONSTRAINT "session_user_id_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "user"("id") ON DELETE CASCADE;--> statement-breakpoint
|
|
175
|
+
ALTER TABLE "course_sessions" ADD CONSTRAINT "course_sessions_course_id_courses_id_fkey" FOREIGN KEY ("course_id") REFERENCES "courses"("id") ON DELETE RESTRICT;--> statement-breakpoint
|
|
176
|
+
ALTER TABLE "course_sessions" ADD CONSTRAINT "course_sessions_tenant_id_organization_id_fkey" FOREIGN KEY ("tenant_id") REFERENCES "organization"("id") ON DELETE SET NULL;--> statement-breakpoint
|
|
177
|
+
ALTER TABLE "settings" ADD CONSTRAINT "settings_tenant_id_organization_id_fkey" FOREIGN KEY ("tenant_id") REFERENCES "organization"("id") ON DELETE RESTRICT;
|