@studious-lms/server 1.1.26 → 1.2.6
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/.coderabbit.yaml +9 -0
- package/.env.example +53 -0
- package/.env.test.example +37 -0
- package/README.md +34 -7
- package/dist/exportType.d.ts.map +1 -1
- package/dist/exportType.js +4 -0
- package/dist/exportType.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +212 -51
- package/dist/index.js.map +1 -0
- package/dist/instrument.d.ts +2 -0
- package/dist/instrument.d.ts.map +1 -0
- package/dist/instrument.js +18 -0
- package/dist/instrument.js.map +1 -0
- package/dist/lib/config/env.d.ts +190 -0
- package/dist/lib/config/env.d.ts.map +1 -0
- package/dist/lib/config/env.js +121 -0
- package/dist/lib/config/env.js.map +1 -0
- package/dist/lib/fileUpload.d.ts +2 -2
- package/dist/lib/fileUpload.d.ts.map +1 -1
- package/dist/lib/fileUpload.js +15 -5
- package/dist/lib/fileUpload.js.map +1 -0
- package/dist/lib/googleCloudStorage.d.ts +6 -0
- package/dist/lib/googleCloudStorage.d.ts.map +1 -1
- package/dist/lib/googleCloudStorage.js +26 -6
- package/dist/lib/googleCloudStorage.js.map +1 -0
- package/dist/lib/jsonConversion.d.ts.map +1 -1
- package/dist/lib/jsonConversion.js +16 -14
- package/dist/lib/jsonConversion.js.map +1 -0
- package/dist/lib/jsonStyles.d.ts.map +1 -1
- package/dist/lib/jsonStyles.js +4 -0
- package/dist/lib/jsonStyles.js.map +1 -0
- package/dist/lib/notificationHandler.d.ts +2 -2
- package/dist/lib/notificationHandler.d.ts.map +1 -1
- package/dist/lib/notificationHandler.js +4 -0
- package/dist/lib/notificationHandler.js.map +1 -0
- package/dist/lib/prisma.d.ts +2 -2
- package/dist/lib/prisma.d.ts.map +1 -1
- package/dist/lib/prisma.js +24 -1
- package/dist/lib/prisma.js.map +1 -0
- package/dist/lib/pusher.d.ts +4 -1
- package/dist/lib/pusher.d.ts.map +1 -1
- package/dist/lib/pusher.js +14 -6
- package/dist/lib/pusher.js.map +1 -0
- package/dist/lib/redis.d.ts +5 -0
- package/dist/lib/redis.d.ts.map +1 -0
- package/dist/lib/redis.js +53 -0
- package/dist/lib/redis.js.map +1 -0
- package/dist/lib/thumbnailGenerator.d.ts +0 -21
- package/dist/lib/thumbnailGenerator.d.ts.map +1 -1
- package/dist/lib/thumbnailGenerator.js +159 -158
- package/dist/lib/thumbnailGenerator.js.map +1 -0
- package/dist/middleware/auth.d.ts.map +1 -1
- package/dist/middleware/auth.js +41 -93
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware/logging.d.ts.map +1 -1
- package/dist/middleware/logging.js +4 -0
- package/dist/middleware/logging.js.map +1 -0
- package/dist/middleware/security.d.ts +5 -0
- package/dist/middleware/security.d.ts.map +1 -0
- package/dist/middleware/security.js +77 -0
- package/dist/middleware/security.js.map +1 -0
- package/dist/models/agenda.d.ts +97 -0
- package/dist/models/agenda.d.ts.map +1 -0
- package/dist/models/agenda.js +40 -0
- package/dist/models/agenda.js.map +1 -0
- package/dist/models/announcement.d.ts +223 -0
- package/dist/models/announcement.d.ts.map +1 -0
- package/dist/models/announcement.js +120 -0
- package/dist/models/announcement.js.map +1 -0
- package/dist/models/assignment.d.ts +1292 -0
- package/dist/models/assignment.d.ts.map +1 -0
- package/dist/models/assignment.js +309 -0
- package/dist/models/assignment.js.map +1 -0
- package/dist/models/attendance.d.ts +180 -0
- package/dist/models/attendance.d.ts.map +1 -0
- package/dist/models/attendance.js +188 -0
- package/dist/models/attendance.js.map +1 -0
- package/dist/models/auth.d.ts +153 -0
- package/dist/models/auth.d.ts.map +1 -0
- package/dist/models/auth.js +217 -0
- package/dist/models/auth.js.map +1 -0
- package/dist/models/class.d.ts +439 -0
- package/dist/models/class.d.ts.map +1 -0
- package/dist/models/class.js +546 -0
- package/dist/models/class.js.map +1 -0
- package/dist/models/comment.d.ts +171 -0
- package/dist/models/comment.d.ts.map +1 -0
- package/dist/models/comment.js +138 -0
- package/dist/models/comment.js.map +1 -0
- package/dist/models/conversation.d.ts +164 -0
- package/dist/models/conversation.d.ts.map +1 -0
- package/dist/models/conversation.js +175 -0
- package/dist/models/conversation.js.map +1 -0
- package/dist/models/event.d.ts +295 -0
- package/dist/models/event.d.ts.map +1 -0
- package/dist/models/event.js +145 -0
- package/dist/models/event.js.map +1 -0
- package/dist/models/file.d.ts +536 -0
- package/dist/models/file.d.ts.map +1 -0
- package/dist/models/file.js +126 -0
- package/dist/models/file.js.map +1 -0
- package/dist/models/folder.d.ts +295 -0
- package/dist/models/folder.d.ts.map +1 -0
- package/dist/models/folder.js +202 -0
- package/dist/models/folder.js.map +1 -0
- package/dist/models/labChat.d.ts +243 -0
- package/dist/models/labChat.d.ts.map +1 -0
- package/dist/models/labChat.js +204 -0
- package/dist/models/labChat.js.map +1 -0
- package/dist/models/marketing.d.ts +72 -0
- package/dist/models/marketing.d.ts.map +1 -0
- package/dist/models/marketing.js +26 -0
- package/dist/models/marketing.js.map +1 -0
- package/dist/models/message.d.ts +100 -0
- package/dist/models/message.d.ts.map +1 -0
- package/dist/models/message.js +131 -0
- package/dist/models/message.js.map +1 -0
- package/dist/models/newtonChat.d.ts +72 -0
- package/dist/models/newtonChat.d.ts.map +1 -0
- package/dist/models/newtonChat.js +61 -0
- package/dist/models/newtonChat.js.map +1 -0
- package/dist/models/notification.d.ts +65 -0
- package/dist/models/notification.d.ts.map +1 -0
- package/dist/models/notification.js +46 -0
- package/dist/models/notification.js.map +1 -0
- package/dist/models/section.d.ts +102 -0
- package/dist/models/section.d.ts.map +1 -0
- package/dist/models/section.js +83 -0
- package/dist/models/section.js.map +1 -0
- package/dist/models/user.d.ts +39 -0
- package/dist/models/user.d.ts.map +1 -0
- package/dist/models/user.js +38 -0
- package/dist/models/user.js.map +1 -0
- package/dist/models/worksheet.d.ts +460 -0
- package/dist/models/worksheet.d.ts.map +1 -0
- package/dist/models/worksheet.js +200 -0
- package/dist/models/worksheet.js.map +1 -0
- package/dist/pipelines/aiLabChat.d.ts +21 -0
- package/dist/pipelines/aiLabChat.d.ts.map +1 -0
- package/dist/pipelines/aiLabChat.js +460 -0
- package/dist/pipelines/aiLabChat.js.map +1 -0
- package/dist/pipelines/aiNewtonChat.d.ts +30 -0
- package/dist/pipelines/aiNewtonChat.d.ts.map +1 -0
- package/dist/pipelines/aiNewtonChat.js +289 -0
- package/dist/pipelines/aiNewtonChat.js.map +1 -0
- package/dist/pipelines/gradeWorksheet.d.ts +30 -0
- package/dist/pipelines/gradeWorksheet.d.ts.map +1 -0
- package/dist/pipelines/gradeWorksheet.js +252 -0
- package/dist/pipelines/gradeWorksheet.js.map +1 -0
- package/dist/routers/_app.d.ts +6438 -3910
- package/dist/routers/_app.d.ts.map +1 -1
- package/dist/routers/_app.js +10 -0
- package/dist/routers/_app.js.map +1 -0
- package/dist/routers/agenda.d.ts +58 -6
- package/dist/routers/agenda.d.ts.map +1 -1
- package/dist/routers/agenda.js +6 -58
- package/dist/routers/agenda.js.map +1 -0
- package/dist/routers/announcement.d.ts +325 -6
- package/dist/routers/announcement.d.ts.map +1 -1
- package/dist/routers/announcement.js +543 -77
- package/dist/routers/announcement.js.map +1 -0
- package/dist/routers/assignment.d.ts +419 -357
- package/dist/routers/assignment.d.ts.map +1 -1
- package/dist/routers/assignment.js +100 -1689
- package/dist/routers/assignment.js.map +1 -0
- package/dist/routers/attendance.d.ts +20 -9
- package/dist/routers/attendance.d.ts.map +1 -1
- package/dist/routers/attendance.js +10 -263
- package/dist/routers/attendance.js.map +1 -0
- package/dist/routers/auth.d.ts +21 -1
- package/dist/routers/auth.d.ts.map +1 -1
- package/dist/routers/auth.js +37 -241
- package/dist/routers/auth.js.map +1 -0
- package/dist/routers/class.d.ts +198 -68
- package/dist/routers/class.d.ts.map +1 -1
- package/dist/routers/class.js +88 -909
- package/dist/routers/class.js.map +1 -0
- package/dist/routers/comment.d.ts +153 -0
- package/dist/routers/comment.d.ts.map +1 -0
- package/dist/routers/comment.js +58 -0
- package/dist/routers/comment.js.map +1 -0
- package/dist/routers/conversation.d.ts +73 -3
- package/dist/routers/conversation.d.ts.map +1 -1
- package/dist/routers/conversation.js +23 -265
- package/dist/routers/conversation.js.map +1 -0
- package/dist/routers/event.d.ts +46 -37
- package/dist/routers/event.d.ts.map +1 -1
- package/dist/routers/event.js +15 -431
- package/dist/routers/event.js.map +1 -0
- package/dist/routers/file.d.ts +4 -2
- package/dist/routers/file.d.ts.map +1 -1
- package/dist/routers/file.js +11 -298
- package/dist/routers/file.js.map +1 -0
- package/dist/routers/folder.d.ts +21 -14
- package/dist/routers/folder.d.ts.map +1 -1
- package/dist/routers/folder.js +36 -743
- package/dist/routers/folder.js.map +1 -0
- package/dist/routers/labChat.d.ts +12 -9
- package/dist/routers/labChat.d.ts.map +1 -1
- package/dist/routers/labChat.js +21 -885
- package/dist/routers/labChat.js.map +1 -0
- package/dist/routers/marketing.d.ts +2 -2
- package/dist/routers/marketing.d.ts.map +1 -1
- package/dist/routers/marketing.js +9 -54
- package/dist/routers/marketing.js.map +1 -0
- package/dist/routers/message.d.ts +2 -1
- package/dist/routers/message.d.ts.map +1 -1
- package/dist/routers/message.js +29 -519
- package/dist/routers/message.js.map +1 -0
- package/dist/routers/newtonChat.d.ts +55 -0
- package/dist/routers/newtonChat.d.ts.map +1 -0
- package/dist/routers/newtonChat.js +22 -0
- package/dist/routers/newtonChat.js.map +1 -0
- package/dist/routers/notifications.d.ts +8 -8
- package/dist/routers/notifications.d.ts.map +1 -1
- package/dist/routers/notifications.js +20 -81
- package/dist/routers/notifications.js.map +1 -0
- package/dist/routers/section.d.ts +23 -8
- package/dist/routers/section.d.ts.map +1 -1
- package/dist/routers/section.js +23 -273
- package/dist/routers/section.js.map +1 -0
- package/dist/routers/user.d.ts +1 -1
- package/dist/routers/user.d.ts.map +1 -1
- package/dist/routers/user.js +34 -204
- package/dist/routers/user.js.map +1 -0
- package/dist/routers/worksheet.d.ts +362 -0
- package/dist/routers/worksheet.d.ts.map +1 -0
- package/dist/routers/worksheet.js +153 -0
- package/dist/routers/worksheet.js.map +1 -0
- package/dist/seedDatabase.d.ts +2 -3
- package/dist/seedDatabase.d.ts.map +1 -1
- package/dist/seedDatabase.js +309 -288
- package/dist/seedDatabase.js.map +1 -0
- package/dist/server/pipelines/aiLabChat.d.ts +21 -0
- package/dist/server/pipelines/aiLabChat.d.ts.map +1 -0
- package/dist/server/pipelines/aiLabChat.js +456 -0
- package/dist/server/pipelines/aiLabChat.js.map +1 -0
- package/dist/server/pipelines/aiNewtonChat.d.ts +30 -0
- package/dist/server/pipelines/aiNewtonChat.d.ts.map +1 -0
- package/dist/server/pipelines/aiNewtonChat.js +285 -0
- package/dist/server/pipelines/aiNewtonChat.js.map +1 -0
- package/dist/server/pipelines/gradeWorksheet.d.ts +30 -0
- package/dist/server/pipelines/gradeWorksheet.d.ts.map +1 -0
- package/dist/server/pipelines/gradeWorksheet.js +248 -0
- package/dist/server/pipelines/gradeWorksheet.js.map +1 -0
- package/dist/services/agenda.d.ts +100 -0
- package/dist/services/agenda.d.ts.map +1 -0
- package/dist/services/agenda.js +21 -0
- package/dist/services/agenda.js.map +1 -0
- package/dist/services/announcement.d.ts +135 -0
- package/dist/services/announcement.d.ts.map +1 -0
- package/dist/services/announcement.js +223 -0
- package/dist/services/announcement.js.map +1 -0
- package/dist/services/assignment.d.ts +1462 -0
- package/dist/services/assignment.d.ts.map +1 -0
- package/dist/services/assignment.js +898 -0
- package/dist/services/assignment.js.map +1 -0
- package/dist/services/attendance.d.ts +93 -0
- package/dist/services/attendance.d.ts.map +1 -0
- package/dist/services/attendance.js +61 -0
- package/dist/services/attendance.js.map +1 -0
- package/dist/services/auth.d.ts +68 -0
- package/dist/services/auth.d.ts.map +1 -0
- package/dist/services/auth.js +218 -0
- package/dist/services/auth.js.map +1 -0
- package/dist/services/class.d.ts +621 -0
- package/dist/services/class.d.ts.map +1 -0
- package/dist/services/class.js +474 -0
- package/dist/services/class.js.map +1 -0
- package/dist/services/comment.d.ts +100 -0
- package/dist/services/comment.d.ts.map +1 -0
- package/dist/services/comment.js +83 -0
- package/dist/services/comment.js.map +1 -0
- package/dist/services/conversation.d.ts +159 -0
- package/dist/services/conversation.d.ts.map +1 -0
- package/dist/services/conversation.js +138 -0
- package/dist/services/conversation.js.map +1 -0
- package/dist/services/event.d.ts +216 -0
- package/dist/services/event.d.ts.map +1 -0
- package/dist/services/event.js +168 -0
- package/dist/services/event.js.map +1 -0
- package/dist/services/file.d.ts +74 -0
- package/dist/services/file.d.ts.map +1 -0
- package/dist/services/file.js +133 -0
- package/dist/services/file.js.map +1 -0
- package/dist/services/folder.d.ts +239 -0
- package/dist/services/folder.d.ts.map +1 -0
- package/dist/services/folder.js +248 -0
- package/dist/services/folder.js.map +1 -0
- package/dist/services/labChat.d.ts +165 -0
- package/dist/services/labChat.d.ts.map +1 -0
- package/dist/services/labChat.js +289 -0
- package/dist/services/labChat.js.map +1 -0
- package/dist/services/marketing.d.ts +50 -0
- package/dist/services/marketing.d.ts.map +1 -0
- package/dist/services/marketing.js +32 -0
- package/dist/services/marketing.js.map +1 -0
- package/dist/services/message.d.ts +95 -0
- package/dist/services/message.d.ts.map +1 -0
- package/dist/services/message.js +350 -0
- package/dist/services/message.js.map +1 -0
- package/dist/services/newtonChat.d.ts +22 -0
- package/dist/services/newtonChat.d.ts.map +1 -0
- package/dist/services/newtonChat.js +174 -0
- package/dist/services/newtonChat.js.map +1 -0
- package/dist/services/notification.d.ts +65 -0
- package/dist/services/notification.d.ts.map +1 -0
- package/dist/services/notification.js +33 -0
- package/dist/services/notification.js.map +1 -0
- package/dist/services/section.d.ts +53 -0
- package/dist/services/section.d.ts.map +1 -0
- package/dist/services/section.js +199 -0
- package/dist/services/section.js.map +1 -0
- package/dist/services/user.d.ts +48 -0
- package/dist/services/user.d.ts.map +1 -0
- package/dist/services/user.js +141 -0
- package/dist/services/user.js.map +1 -0
- package/dist/services/worksheet.d.ts +239 -0
- package/dist/services/worksheet.d.ts.map +1 -0
- package/dist/services/worksheet.js +235 -0
- package/dist/services/worksheet.js.map +1 -0
- package/dist/socket/handlers.d.ts.map +1 -1
- package/dist/socket/handlers.js +4 -0
- package/dist/socket/handlers.js.map +1 -0
- package/dist/trpc.d.ts.map +1 -1
- package/dist/trpc.js +4 -0
- package/dist/trpc.js.map +1 -0
- package/dist/types/trpc.d.ts.map +1 -1
- package/dist/types/trpc.js +4 -0
- package/dist/types/trpc.js.map +1 -0
- package/dist/utils/aiUser.d.ts +1 -3
- package/dist/utils/aiUser.d.ts.map +1 -1
- package/dist/utils/aiUser.js +8 -3
- package/dist/utils/aiUser.js.map +1 -0
- package/dist/utils/email.d.ts +12 -1
- package/dist/utils/email.d.ts.map +1 -1
- package/dist/utils/email.js +26 -4
- package/dist/utils/email.js.map +1 -0
- package/dist/utils/generateInviteCode.d.ts +1 -2
- package/dist/utils/generateInviteCode.d.ts.map +1 -1
- package/dist/utils/generateInviteCode.js +5 -2
- package/dist/utils/generateInviteCode.js.map +1 -0
- package/dist/utils/inference.d.ts +8 -0
- package/dist/utils/inference.d.ts.map +1 -1
- package/dist/utils/inference.js +78 -10
- package/dist/utils/inference.js.map +1 -0
- package/dist/utils/logger.d.ts +3 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +8 -1
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/prismaErrorHandler.d.ts.map +1 -1
- package/dist/utils/prismaErrorHandler.js +7 -0
- package/dist/utils/prismaErrorHandler.js.map +1 -0
- package/dist/utils/prismaWrapper.d.ts +1 -0
- package/dist/utils/prismaWrapper.d.ts.map +1 -1
- package/dist/utils/prismaWrapper.js +8 -0
- package/dist/utils/prismaWrapper.js.map +1 -0
- package/docker-compose.yml +19 -0
- package/package.json +21 -4
- package/prisma/migrations/20251109122857_annuoncements_comments/migration.sql +30 -0
- package/prisma/migrations/20251109135555_reactions_announcements_comments/migration.sql +35 -0
- package/prisma/schema.prisma +180 -12
- package/scripts/test-pre-push.ts +14 -0
- package/src/index.ts +247 -52
- package/src/instrument.ts +15 -0
- package/src/lib/config/env.ts +132 -0
- package/src/lib/fileUpload.ts +13 -6
- package/src/lib/googleCloudStorage.ts +23 -6
- package/src/lib/jsonConversion.ts +12 -14
- package/src/lib/prisma.ts +23 -2
- package/src/lib/pusher.ts +11 -6
- package/src/lib/redis.ts +56 -0
- package/src/lib/thumbnailGenerator.ts +170 -168
- package/src/middleware/auth.ts +86 -137
- package/src/middleware/security.ts +80 -0
- package/src/models/agenda.ts +46 -0
- package/src/models/announcement.ts +134 -0
- package/src/models/assignment.ts +322 -0
- package/src/models/attendance.ts +208 -0
- package/src/models/auth.ts +247 -0
- package/src/models/class.ts +598 -0
- package/src/models/comment.ts +152 -0
- package/src/models/conversation.ts +200 -0
- package/src/models/event.ts +177 -0
- package/src/models/file.ts +129 -0
- package/src/models/folder.ts +225 -0
- package/src/models/labChat.ts +213 -0
- package/src/models/marketing.ts +45 -0
- package/src/models/message.ts +153 -0
- package/src/models/newtonChat.ts +70 -0
- package/src/models/notification.ts +54 -0
- package/src/models/section.ts +98 -0
- package/src/models/user.ts +47 -0
- package/src/models/worksheet.ts +294 -0
- package/src/pipelines/aiLabChat.ts +511 -0
- package/src/pipelines/aiNewtonChat.ts +347 -0
- package/src/pipelines/gradeWorksheet.ts +286 -0
- package/src/routers/_app.ts +6 -0
- package/src/routers/agenda.ts +3 -61
- package/src/routers/announcement.ts +616 -79
- package/src/routers/assignment.ts +148 -1827
- package/src/routers/attendance.ts +16 -277
- package/src/routers/auth.ts +79 -313
- package/src/routers/class.ts +265 -1038
- package/src/routers/comment.ts +76 -0
- package/src/routers/conversation.ts +53 -284
- package/src/routers/event.ts +50 -481
- package/src/routers/file.ts +45 -344
- package/src/routers/folder.ts +107 -836
- package/src/routers/labChat.ts +29 -969
- package/src/routers/marketing.ts +35 -77
- package/src/routers/message.ts +45 -571
- package/src/routers/newtonChat.ts +36 -0
- package/src/routers/notifications.ts +32 -82
- package/src/routers/section.ts +58 -322
- package/src/routers/user.ts +49 -226
- package/src/routers/worksheet.ts +252 -0
- package/src/seedDatabase.ts +328 -289
- package/src/services/agenda.ts +21 -0
- package/src/services/announcement.ts +290 -0
- package/src/services/assignment.ts +1198 -0
- package/src/services/attendance.ts +85 -0
- package/src/services/auth.ts +277 -0
- package/src/services/class.ts +622 -0
- package/src/services/comment.ts +106 -0
- package/src/services/conversation.ts +213 -0
- package/src/services/event.ts +231 -0
- package/src/services/file.ts +167 -0
- package/src/services/folder.ts +316 -0
- package/src/services/labChat.ts +352 -0
- package/src/services/marketing.ts +57 -0
- package/src/services/message.ts +461 -0
- package/src/services/newtonChat.ts +222 -0
- package/src/services/notification.ts +50 -0
- package/src/services/section.ts +283 -0
- package/src/services/user.ts +172 -0
- package/src/services/worksheet.ts +358 -0
- package/src/trpc.ts +4 -0
- package/src/utils/aiUser.ts +4 -3
- package/src/utils/email.ts +33 -4
- package/src/utils/generateInviteCode.ts +1 -3
- package/src/utils/inference.ts +89 -10
- package/src/utils/logger.ts +4 -1
- package/src/utils/prismaErrorHandler.ts +3 -0
- package/src/utils/prismaWrapper.ts +4 -0
- package/tests/globalSetup.ts +62 -0
- package/tests/helpers.ts +22 -0
- package/tests/middleware/security.test.ts +42 -0
- package/tests/routers/agenda.test.ts +138 -0
- package/tests/routers/announcement.test.ts +490 -0
- package/tests/routers/assignment.test.ts +837 -0
- package/tests/routers/attendance.test.ts +160 -0
- package/tests/routers/auth.test.ts +171 -0
- package/tests/{class.test.ts → routers/class.test.ts} +163 -92
- package/tests/routers/comment.test.ts +126 -0
- package/tests/routers/conversation.test.ts +145 -0
- package/tests/routers/event.test.ts +289 -0
- package/tests/routers/folder.test.ts +178 -0
- package/tests/routers/labChat.test.ts +115 -0
- package/tests/routers/marketing.test.ts +59 -0
- package/tests/routers/message.test.ts +123 -0
- package/tests/routers/notification.test.ts +69 -0
- package/tests/routers/section.test.ts +208 -0
- package/tests/server/rateLimit.test.ts +73 -0
- package/tests/setup.ts +39 -59
- package/tests/user.test.ts +136 -0
- package/tests/utils/aiUser.test.ts +22 -0
- package/tests/utils/generateInviteCode.test.ts +24 -0
- package/tests/utils/logger.test.ts +74 -0
- package/tests/utils/prismaErrorHandler.test.ts +101 -0
- package/tests/utils/prismaWrapper.test.ts +82 -0
- package/tests/worksheet.test.ts +181 -0
- package/tsconfig.json +9 -2
- package/vitest.config.ts +30 -1
- package/vitest.unit.config.ts +21 -0
- package/API_SPECIFICATION.md +0 -1597
- package/BASE64_REMOVAL_SUMMARY.md +0 -164
- package/CHAT_API_SPEC.md +0 -579
- package/LAB_CHAT_API_SPEC.md +0 -518
- package/dist/routers/school.d.ts +0 -208
- package/dist/routers/school.d.ts.map +0 -1
- package/dist/routers/school.js +0 -481
- package/src/lib/notificationHandler.ts +0 -36
- package/tests/auth.test.ts +0 -25
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
-- AlterTable
|
|
2
|
+
ALTER TABLE "public"."Announcement" ADD COLUMN "modifiedAt" TIMESTAMP(3);
|
|
3
|
+
|
|
4
|
+
-- AlterTable
|
|
5
|
+
ALTER TABLE "public"."File" ADD COLUMN "announcementId" TEXT;
|
|
6
|
+
|
|
7
|
+
-- CreateTable
|
|
8
|
+
CREATE TABLE "public"."AnnouncementComment" (
|
|
9
|
+
"id" TEXT NOT NULL,
|
|
10
|
+
"content" TEXT NOT NULL,
|
|
11
|
+
"authorId" TEXT NOT NULL,
|
|
12
|
+
"announcementId" TEXT NOT NULL,
|
|
13
|
+
"parentCommentId" TEXT,
|
|
14
|
+
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
15
|
+
"modifiedAt" TIMESTAMP(3),
|
|
16
|
+
|
|
17
|
+
CONSTRAINT "AnnouncementComment_pkey" PRIMARY KEY ("id")
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
-- AddForeignKey
|
|
21
|
+
ALTER TABLE "public"."File" ADD CONSTRAINT "File_announcementId_fkey" FOREIGN KEY ("announcementId") REFERENCES "public"."Announcement"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
22
|
+
|
|
23
|
+
-- AddForeignKey
|
|
24
|
+
ALTER TABLE "public"."AnnouncementComment" ADD CONSTRAINT "AnnouncementComment_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "public"."User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
25
|
+
|
|
26
|
+
-- AddForeignKey
|
|
27
|
+
ALTER TABLE "public"."AnnouncementComment" ADD CONSTRAINT "AnnouncementComment_announcementId_fkey" FOREIGN KEY ("announcementId") REFERENCES "public"."Announcement"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
28
|
+
|
|
29
|
+
-- AddForeignKey
|
|
30
|
+
ALTER TABLE "public"."AnnouncementComment" ADD CONSTRAINT "AnnouncementComment_parentCommentId_fkey" FOREIGN KEY ("parentCommentId") REFERENCES "public"."AnnouncementComment"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
-- CreateEnum
|
|
2
|
+
CREATE TYPE "public"."ReactionType" AS ENUM ('THUMBSUP', 'CELEBRATE', 'CARE', 'HEART', 'IDEA', 'HAPPY');
|
|
3
|
+
|
|
4
|
+
-- CreateTable
|
|
5
|
+
CREATE TABLE "public"."Reaction" (
|
|
6
|
+
"id" TEXT NOT NULL,
|
|
7
|
+
"type" "public"."ReactionType" NOT NULL,
|
|
8
|
+
"userId" TEXT NOT NULL,
|
|
9
|
+
"announcementId" TEXT,
|
|
10
|
+
"commentId" TEXT,
|
|
11
|
+
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
12
|
+
|
|
13
|
+
CONSTRAINT "Reaction_pkey" PRIMARY KEY ("id")
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
-- CreateIndex
|
|
17
|
+
CREATE INDEX "Reaction_announcementId_idx" ON "public"."Reaction"("announcementId");
|
|
18
|
+
|
|
19
|
+
-- CreateIndex
|
|
20
|
+
CREATE INDEX "Reaction_commentId_idx" ON "public"."Reaction"("commentId");
|
|
21
|
+
|
|
22
|
+
-- CreateIndex
|
|
23
|
+
CREATE UNIQUE INDEX "Reaction_userId_announcementId_key" ON "public"."Reaction"("userId", "announcementId");
|
|
24
|
+
|
|
25
|
+
-- CreateIndex
|
|
26
|
+
CREATE UNIQUE INDEX "Reaction_userId_commentId_key" ON "public"."Reaction"("userId", "commentId");
|
|
27
|
+
|
|
28
|
+
-- AddForeignKey
|
|
29
|
+
ALTER TABLE "public"."Reaction" ADD CONSTRAINT "Reaction_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
30
|
+
|
|
31
|
+
-- AddForeignKey
|
|
32
|
+
ALTER TABLE "public"."Reaction" ADD CONSTRAINT "Reaction_announcementId_fkey" FOREIGN KEY ("announcementId") REFERENCES "public"."Announcement"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
33
|
+
|
|
34
|
+
-- AddForeignKey
|
|
35
|
+
ALTER TABLE "public"."Reaction" ADD CONSTRAINT "Reaction_commentId_fkey" FOREIGN KEY ("commentId") REFERENCES "public"."AnnouncementComment"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
package/prisma/schema.prisma
CHANGED
|
@@ -9,6 +9,11 @@ generator client {
|
|
|
9
9
|
// output = "../generated/prisma"
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
+
// @todo: add type safety to json fields.
|
|
13
|
+
// generator json {
|
|
14
|
+
// provider = "prisma-json-types-generator"
|
|
15
|
+
// }
|
|
16
|
+
|
|
12
17
|
datasource db {
|
|
13
18
|
provider = "postgresql"
|
|
14
19
|
url = env("DATABASE_URL")
|
|
@@ -42,6 +47,33 @@ enum UploadStatus {
|
|
|
42
47
|
CANCELLED
|
|
43
48
|
}
|
|
44
49
|
|
|
50
|
+
enum GenerationStatus {
|
|
51
|
+
NOT_STARTED
|
|
52
|
+
PENDING
|
|
53
|
+
GENERATING
|
|
54
|
+
COMPLETED
|
|
55
|
+
FAILED
|
|
56
|
+
CANCELLED
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
enum WorksheetQuestionType {
|
|
60
|
+
MULTIPLE_CHOICE
|
|
61
|
+
TRUE_FALSE
|
|
62
|
+
SHORT_ANSWER
|
|
63
|
+
LONG_ANSWER
|
|
64
|
+
MATH_EXPRESSION
|
|
65
|
+
ESSAY
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
enum ReactionType {
|
|
69
|
+
THUMBSUP
|
|
70
|
+
CELEBRATE
|
|
71
|
+
CARE
|
|
72
|
+
HEART
|
|
73
|
+
IDEA
|
|
74
|
+
HAPPY
|
|
75
|
+
}
|
|
76
|
+
|
|
45
77
|
model School {
|
|
46
78
|
id String @id @default(uuid())
|
|
47
79
|
name String
|
|
@@ -63,8 +95,6 @@ model User {
|
|
|
63
95
|
verified Boolean @default(false)
|
|
64
96
|
role UserRole @default(NONE)
|
|
65
97
|
|
|
66
|
-
profileId String? @unique
|
|
67
|
-
|
|
68
98
|
teacherIn Class[] @relation("UserTeacherToClass")
|
|
69
99
|
studentIn Class[] @relation("UserStudentToClass")
|
|
70
100
|
|
|
@@ -72,10 +102,13 @@ model User {
|
|
|
72
102
|
sessions Session[]
|
|
73
103
|
files File[]
|
|
74
104
|
assignments Assignment[]
|
|
105
|
+
specificAssignments Assignment[] @relation("SpecificAssignmentAssignedTo")
|
|
75
106
|
events Event[]
|
|
76
107
|
announcements Announcement[]
|
|
77
108
|
notificationsSent Notification[] @relation("SentNotifications")
|
|
78
109
|
notificationsReceived Notification[] @relation("ReceivedNotifications")
|
|
110
|
+
studentQuestionProgress StudentQuestionProgress[]
|
|
111
|
+
studentWorksheetResponses StudentWorksheetResponse[]
|
|
79
112
|
|
|
80
113
|
presentAttendance Attendance[] @relation("PresentAttendance")
|
|
81
114
|
lateAttendance Attendance[] @relation("LateAttendance")
|
|
@@ -89,6 +122,8 @@ model User {
|
|
|
89
122
|
sentMessages Message[] @relation("SentMessages")
|
|
90
123
|
mentions Mention[] @relation("UserMentions")
|
|
91
124
|
createdLabChats LabChat[] @relation("CreatedLabChats")
|
|
125
|
+
comments Comment[]
|
|
126
|
+
reactions Reaction[]
|
|
92
127
|
|
|
93
128
|
}
|
|
94
129
|
|
|
@@ -121,14 +156,16 @@ model Class {
|
|
|
121
156
|
events Event[]
|
|
122
157
|
sections Section[]
|
|
123
158
|
sessions Session[]
|
|
159
|
+
worksheets Worksheet[]
|
|
124
160
|
students User[] @relation("UserStudentToClass")
|
|
125
161
|
teachers User[] @relation("UserTeacherToClass")
|
|
126
|
-
markSchemes MarkScheme[] @relation("ClassToMarkScheme")
|
|
127
|
-
gradingBoundaries GradingBoundary[] @relation("ClassToGradingBoundary")
|
|
162
|
+
// markSchemes MarkScheme[] @relation("ClassToMarkScheme")
|
|
163
|
+
// gradingBoundaries GradingBoundary[] @relation("ClassToGradingBoundary")
|
|
128
164
|
draftFiles File[] @relation("ClassDraftFiles")
|
|
129
165
|
classFiles Folder? @relation("ClassFiles")
|
|
130
166
|
labChats LabChat[] @relation("ClassLabChats")
|
|
131
|
-
|
|
167
|
+
markSchemes MarkScheme[]
|
|
168
|
+
gradingBoundaries GradingBoundary[]
|
|
132
169
|
school School? @relation(fields: [schoolId], references: [id])
|
|
133
170
|
schoolId String?
|
|
134
171
|
}
|
|
@@ -136,7 +173,8 @@ model Class {
|
|
|
136
173
|
model MarkScheme {
|
|
137
174
|
id String @id @default(uuid())
|
|
138
175
|
classId String
|
|
139
|
-
class Class[] @relation("ClassToMarkScheme")
|
|
176
|
+
// class Class[] @relation("ClassToMarkScheme")
|
|
177
|
+
class Class? @relation(fields: [classId], references: [id], onDelete: Cascade)
|
|
140
178
|
structured String
|
|
141
179
|
assignments Assignment[]
|
|
142
180
|
}
|
|
@@ -144,7 +182,8 @@ model MarkScheme {
|
|
|
144
182
|
model GradingBoundary {
|
|
145
183
|
id String @id @default(uuid())
|
|
146
184
|
classId String
|
|
147
|
-
class Class[] @relation("ClassToGradingBoundary")
|
|
185
|
+
// class Class[] @relation("ClassToGradingBoundary")
|
|
186
|
+
class Class? @relation(fields: [classId], references: [id], onDelete: Cascade)
|
|
148
187
|
structured String
|
|
149
188
|
assignments Assignment[]
|
|
150
189
|
}
|
|
@@ -207,6 +246,9 @@ model File {
|
|
|
207
246
|
messageId String?
|
|
208
247
|
message Message? @relation("MessageAttachments", fields: [messageId], references: [id], onDelete: Cascade)
|
|
209
248
|
|
|
249
|
+
announcement Announcement? @relation("AnnouncementAttachments", fields: [announcementId], references: [id], onDelete: Cascade)
|
|
250
|
+
announcementId String?
|
|
251
|
+
|
|
210
252
|
schools School[]
|
|
211
253
|
|
|
212
254
|
schoolDevelopementProgram SchoolDevelopementProgram? @relation("SchoolDevelopementProgramSupportingDocumentation", fields: [schoolDevelopementProgramId], references: [id], onDelete: Cascade)
|
|
@@ -225,7 +267,15 @@ model Assignment {
|
|
|
225
267
|
class Class @relation(fields: [classId], references: [id], onDelete: Cascade)
|
|
226
268
|
classId String
|
|
227
269
|
attachments File[]
|
|
270
|
+
acceptFiles Boolean @default(false)
|
|
271
|
+
acceptExtendedResponse Boolean @default(false)
|
|
272
|
+
acceptWorksheet Boolean @default(false)
|
|
273
|
+
gradeWithAI Boolean @default(false)
|
|
274
|
+
|
|
275
|
+
aiPolicyLevel Int @default(0)
|
|
276
|
+
|
|
228
277
|
submissions Submission[]
|
|
278
|
+
assignedTo User[] @relation("SpecificAssignmentAssignedTo")
|
|
229
279
|
section Section? @relation(fields: [sectionId], references: [id], onDelete: Cascade)
|
|
230
280
|
sectionId String?
|
|
231
281
|
graded Boolean @default(false)
|
|
@@ -241,6 +291,7 @@ model Assignment {
|
|
|
241
291
|
order Int?
|
|
242
292
|
gradingBoundary GradingBoundary? @relation(fields: [gradingBoundaryId], references: [id], onDelete: Cascade)
|
|
243
293
|
gradingBoundaryId String?
|
|
294
|
+
worksheets Worksheet[] @relation("AssignmentWorksheets")
|
|
244
295
|
}
|
|
245
296
|
|
|
246
297
|
|
|
@@ -251,8 +302,47 @@ model Announcement {
|
|
|
251
302
|
teacher User @relation(fields: [teacherId], references: [id])
|
|
252
303
|
teacherId String
|
|
253
304
|
createdAt DateTime @default(now())
|
|
305
|
+
modifiedAt DateTime? @updatedAt
|
|
254
306
|
class Class @relation(fields: [classId], references: [id], onDelete: Cascade)
|
|
255
307
|
classId String
|
|
308
|
+
attachments File[] @relation("AnnouncementAttachments")
|
|
309
|
+
comments Comment[]
|
|
310
|
+
reactions Reaction[]
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
model Comment {
|
|
314
|
+
id String @id @default(uuid())
|
|
315
|
+
content String
|
|
316
|
+
author User @relation(fields: [authorId], references: [id], onDelete: Cascade)
|
|
317
|
+
authorId String
|
|
318
|
+
announcement Announcement? @relation(fields: [announcementId], references: [id], onDelete: Cascade)
|
|
319
|
+
announcementId String?
|
|
320
|
+
parentComment Comment? @relation("CommentReplies", fields: [parentCommentId], references: [id], onDelete: Cascade)
|
|
321
|
+
parentCommentId String?
|
|
322
|
+
status GenerationStatus?
|
|
323
|
+
replies Comment[] @relation("CommentReplies")
|
|
324
|
+
reactions Reaction[]
|
|
325
|
+
createdAt DateTime @default(now())
|
|
326
|
+
modifiedAt DateTime? @updatedAt
|
|
327
|
+
studentQuestionProgress StudentQuestionProgress? @relation("StudentQuestionProgressComments", fields: [studentQuestionProgressId], references: [id], onDelete: Cascade)
|
|
328
|
+
studentQuestionProgressId String?
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
model Reaction {
|
|
332
|
+
id String @id @default(uuid())
|
|
333
|
+
type ReactionType
|
|
334
|
+
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
335
|
+
userId String
|
|
336
|
+
announcement Announcement? @relation(fields: [announcementId], references: [id], onDelete: Cascade)
|
|
337
|
+
announcementId String?
|
|
338
|
+
comment Comment? @relation(fields: [commentId], references: [id], onDelete: Cascade)
|
|
339
|
+
commentId String?
|
|
340
|
+
createdAt DateTime @default(now())
|
|
341
|
+
|
|
342
|
+
@@unique([userId, announcementId])
|
|
343
|
+
@@unique([userId, commentId])
|
|
344
|
+
@@index([announcementId])
|
|
345
|
+
@@index([commentId])
|
|
256
346
|
}
|
|
257
347
|
|
|
258
348
|
model Submission {
|
|
@@ -268,7 +358,8 @@ model Submission {
|
|
|
268
358
|
|
|
269
359
|
attachments File[] @relation("SubmissionFile")
|
|
270
360
|
annotations File[] @relation("SubmissionAnnotations")
|
|
271
|
-
|
|
361
|
+
worksheetResponses StudentWorksheetResponse[]
|
|
362
|
+
extendedResponse String?
|
|
272
363
|
gradeReceived Int?
|
|
273
364
|
|
|
274
365
|
rubricState String?
|
|
@@ -277,6 +368,18 @@ model Submission {
|
|
|
277
368
|
submittedAt DateTime?
|
|
278
369
|
submitted Boolean? @default(false)
|
|
279
370
|
returned Boolean? @default(false)
|
|
371
|
+
newtonTutors NewtonChat[]
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
model NewtonChat {
|
|
375
|
+
id String @id @default(uuid())
|
|
376
|
+
submissionId String
|
|
377
|
+
submission Submission @relation(fields: [submissionId], references: [id], onDelete: Cascade)
|
|
378
|
+
conversationId String @unique
|
|
379
|
+
conversation Conversation @relation(fields: [conversationId], references: [id], onDelete: Cascade)
|
|
380
|
+
createdAt DateTime @default(now())
|
|
381
|
+
updatedAt DateTime @updatedAt
|
|
382
|
+
title String @default("Session with Newton Tutor")
|
|
280
383
|
}
|
|
281
384
|
|
|
282
385
|
model Section {
|
|
@@ -364,6 +467,7 @@ model Conversation {
|
|
|
364
467
|
members ConversationMember[]
|
|
365
468
|
messages Message[]
|
|
366
469
|
labChat LabChat?
|
|
470
|
+
newtonChat NewtonChat?
|
|
367
471
|
}
|
|
368
472
|
|
|
369
473
|
model LabChat {
|
|
@@ -374,8 +478,7 @@ model LabChat {
|
|
|
374
478
|
conversationId String @unique
|
|
375
479
|
createdById String // Teacher who created the lab
|
|
376
480
|
createdAt DateTime @default(now())
|
|
377
|
-
updatedAt DateTime @updatedAt
|
|
378
|
-
|
|
481
|
+
updatedAt DateTime @updatedAt
|
|
379
482
|
class Class @relation("ClassLabChats", fields: [classId], references: [id], onDelete: Cascade)
|
|
380
483
|
conversation Conversation @relation(fields: [conversationId], references: [id], onDelete: Cascade)
|
|
381
484
|
createdBy User @relation("CreatedLabChats", fields: [createdById], references: [id], onDelete: NoAction)
|
|
@@ -402,11 +505,13 @@ model Message {
|
|
|
402
505
|
senderId String
|
|
403
506
|
conversationId String
|
|
404
507
|
createdAt DateTime @default(now())
|
|
405
|
-
|
|
508
|
+
status GenerationStatus? @default(NOT_STARTED)
|
|
406
509
|
sender User @relation("SentMessages", fields: [senderId], references: [id], onDelete: Cascade)
|
|
407
510
|
conversation Conversation @relation(fields: [conversationId], references: [id], onDelete: Cascade)
|
|
408
511
|
mentions Mention[]
|
|
409
512
|
attachments File[] @relation("MessageAttachments")
|
|
513
|
+
|
|
514
|
+
meta Json? @default("{}")
|
|
410
515
|
}
|
|
411
516
|
|
|
412
517
|
model Mention {
|
|
@@ -421,6 +526,69 @@ model Mention {
|
|
|
421
526
|
@@unique([messageId, userId])
|
|
422
527
|
}
|
|
423
528
|
|
|
529
|
+
model Worksheet {
|
|
530
|
+
id String @id @default(uuid())
|
|
531
|
+
name String
|
|
532
|
+
createdAt DateTime @default(now())
|
|
533
|
+
updatedAt DateTime @updatedAt
|
|
534
|
+
classId String
|
|
535
|
+
class Class? @relation(fields: [classId], references: [id], onDelete: Cascade)
|
|
536
|
+
assignments Assignment[] @relation("AssignmentWorksheets")
|
|
537
|
+
questions WorksheetQuestion[]
|
|
538
|
+
studentWorksheetResponses StudentWorksheetResponse[]
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
model WorksheetQuestion {
|
|
542
|
+
id String @id @default(uuid())
|
|
543
|
+
worksheetId String
|
|
544
|
+
worksheet Worksheet @relation(fields: [worksheetId], references: [id], onDelete: Cascade)
|
|
545
|
+
type WorksheetQuestionType
|
|
546
|
+
question String
|
|
547
|
+
answer String
|
|
548
|
+
options Json? @default("{}")
|
|
549
|
+
markScheme Json? @default("{}")
|
|
550
|
+
points Int @default(0)
|
|
551
|
+
order Int? @default(0)
|
|
552
|
+
createdAt DateTime @default(now())
|
|
553
|
+
updatedAt DateTime @updatedAt
|
|
554
|
+
studentResponses StudentQuestionProgress[]
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
model StudentWorksheetResponse {
|
|
558
|
+
id String @id @default(uuid())
|
|
559
|
+
studentId String
|
|
560
|
+
student User @relation(fields: [studentId], references: [id], onDelete: Cascade)
|
|
561
|
+
worksheetId String
|
|
562
|
+
worksheet Worksheet @relation(fields: [worksheetId], references: [id], onDelete: Cascade)
|
|
563
|
+
responses StudentQuestionProgress[]
|
|
564
|
+
submission Submission? @relation(fields: [submissionId], references: [id], onDelete: Cascade)
|
|
565
|
+
submissionId String?
|
|
566
|
+
createdAt DateTime @default(now())
|
|
567
|
+
updatedAt DateTime @updatedAt
|
|
568
|
+
submittedAt DateTime?
|
|
569
|
+
submitted Boolean @default(false)
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
model StudentQuestionProgress {
|
|
573
|
+
id String @id @default(uuid())
|
|
574
|
+
studentId String
|
|
575
|
+
student User @relation(fields: [studentId], references: [id], onDelete: Cascade)
|
|
576
|
+
questionId String
|
|
577
|
+
question WorksheetQuestion @relation(fields: [questionId], references: [id], onDelete: Cascade)
|
|
578
|
+
response String
|
|
579
|
+
isCorrect Boolean @default(false)
|
|
580
|
+
markschemeState Json? @default("{}")
|
|
581
|
+
points Int @default(0)
|
|
582
|
+
comments Comment[] @relation("StudentQuestionProgressComments")
|
|
583
|
+
feedback String?
|
|
584
|
+
createdAt DateTime @default(now())
|
|
585
|
+
updatedAt DateTime? @updatedAt
|
|
586
|
+
studentWorksheetResponseId String?
|
|
587
|
+
studentWorksheetResponse StudentWorksheetResponse? @relation(fields: [studentWorksheetResponseId], references: [id], onDelete: Cascade)
|
|
588
|
+
status GenerationStatus? @default(NOT_STARTED)
|
|
589
|
+
|
|
590
|
+
@@index([studentId, questionId])
|
|
591
|
+
}
|
|
424
592
|
|
|
425
593
|
model SchoolDevelopementProgram {
|
|
426
594
|
id String @id
|
|
@@ -443,7 +611,7 @@ model SchoolDevelopementProgram {
|
|
|
443
611
|
submittedAt DateTime? @default(now())
|
|
444
612
|
reviewedAt DateTime?
|
|
445
613
|
|
|
446
|
-
status String @default("
|
|
614
|
+
status String @default("NOT_STARTED") // NOT_STARTED, PENDING, APPROVED, REJECTED, REFERRED
|
|
447
615
|
|
|
448
616
|
supportingDocumentation File[] @relation("SchoolDevelopementProgramSupportingDocumentation")
|
|
449
617
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { execSync } from 'child_process';
|
|
2
|
+
import { logger } from '../src/utils/logger';
|
|
3
|
+
import dotenv from 'dotenv';
|
|
4
|
+
import { resolve } from 'path';
|
|
5
|
+
|
|
6
|
+
dotenv.config({ path: resolve(process.cwd(), '.env.test') });
|
|
7
|
+
|
|
8
|
+
logger.info("Syncing Prisma schema to test database...");
|
|
9
|
+
|
|
10
|
+
execSync("npx prisma db push --force-reset --skip-generate", {
|
|
11
|
+
stdio: 'inherit',
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
logger.info("Test database is ready!");
|