@citolab/qti-backend-firebase 0.0.3 → 0.0.5

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 (78) hide show
  1. package/dist/api/app-specific/base/application-specific-base.d.ts +11 -20
  2. package/dist/api/app-specific/base/application-specific-base.d.ts.map +1 -1
  3. package/dist/api/app-specific/base/application-specific-base.js +73 -88
  4. package/dist/api/app-specific/base/application-specific-base.js.map +1 -1
  5. package/dist/api/app-specific/baseImplementation.d.ts +2 -3
  6. package/dist/api/app-specific/baseImplementation.d.ts.map +1 -1
  7. package/dist/api/app-specific/baseImplementation.js +2 -6
  8. package/dist/api/app-specific/baseImplementation.js.map +1 -1
  9. package/dist/api/app-specific/index.d.ts +1 -0
  10. package/dist/api/app-specific/index.d.ts.map +1 -1
  11. package/dist/api/app-specific/index.js +1 -0
  12. package/dist/api/app-specific/index.js.map +1 -1
  13. package/dist/api/app-specific/interface/IApplicationSpecific.d.ts +10 -20
  14. package/dist/api/app-specific/interface/IApplicationSpecific.d.ts.map +1 -1
  15. package/dist/api/qti-data.d.ts.map +1 -1
  16. package/dist/api/qti-data.js +619 -271
  17. package/dist/api/qti-data.js.map +1 -1
  18. package/dist/api/qti-resources.d.ts.map +1 -1
  19. package/dist/api/qti-resources.js +134 -131
  20. package/dist/api/qti-resources.js.map +1 -1
  21. package/dist/api/qti-teacher.d.ts.map +1 -1
  22. package/dist/api/qti-teacher.js +563 -424
  23. package/dist/api/qti-teacher.js.map +1 -1
  24. package/dist/api/qti-tools.d.ts.map +1 -1
  25. package/dist/api/qti-tools.js +213 -41
  26. package/dist/api/qti-tools.js.map +1 -1
  27. package/dist/helpers/database.d.ts +35 -24
  28. package/dist/helpers/database.d.ts.map +1 -1
  29. package/dist/helpers/database.js +47 -36
  30. package/dist/helpers/database.js.map +1 -1
  31. package/dist/helpers/db.d.ts +1 -1
  32. package/dist/helpers/db.d.ts.map +1 -1
  33. package/dist/helpers/db.js +3 -7
  34. package/dist/helpers/db.js.map +1 -1
  35. package/dist/helpers/endpoint-helpers.d.ts +2 -2
  36. package/dist/helpers/endpoint-helpers.d.ts.map +1 -1
  37. package/dist/helpers/endpoint-helpers.js +59 -17
  38. package/dist/helpers/endpoint-helpers.js.map +1 -1
  39. package/dist/helpers/excel-helper.d.ts +29 -0
  40. package/dist/helpers/excel-helper.d.ts.map +1 -0
  41. package/dist/helpers/excel-helper.js +150 -0
  42. package/dist/helpers/excel-helper.js.map +1 -0
  43. package/dist/helpers/general.d.ts +15 -0
  44. package/dist/helpers/general.d.ts.map +1 -0
  45. package/dist/helpers/general.js +148 -0
  46. package/dist/helpers/general.js.map +1 -0
  47. package/dist/helpers/index.d.ts +2 -0
  48. package/dist/helpers/index.d.ts.map +1 -1
  49. package/dist/helpers/index.js +2 -0
  50. package/dist/helpers/index.js.map +1 -1
  51. package/dist/helpers/logic.d.ts +100 -41
  52. package/dist/helpers/logic.d.ts.map +1 -1
  53. package/dist/helpers/logic.js +523 -413
  54. package/dist/helpers/logic.js.map +1 -1
  55. package/dist/helpers/package-upload.d.ts.map +1 -1
  56. package/dist/helpers/package-upload.js +2 -3
  57. package/dist/helpers/package-upload.js.map +1 -1
  58. package/dist/helpers/package.d.ts +3 -4
  59. package/dist/helpers/package.d.ts.map +1 -1
  60. package/dist/helpers/package.js +12 -17
  61. package/dist/helpers/package.js.map +1 -1
  62. package/dist/helpers/request-headers.d.ts +4 -0
  63. package/dist/helpers/request-headers.d.ts.map +1 -1
  64. package/dist/helpers/request-headers.js +2 -2
  65. package/dist/helpers/request-headers.js.map +1 -1
  66. package/dist/helpers/resource-cache.d.ts +35 -0
  67. package/dist/helpers/resource-cache.d.ts.map +1 -0
  68. package/dist/helpers/resource-cache.js +171 -0
  69. package/dist/helpers/resource-cache.js.map +1 -0
  70. package/dist/helpers/storage.d.ts +2 -2
  71. package/dist/helpers/storage.d.ts.map +1 -1
  72. package/dist/helpers/storage.js +16 -15
  73. package/dist/helpers/storage.js.map +1 -1
  74. package/dist/helpers/utils.d.ts +4 -3
  75. package/dist/helpers/utils.d.ts.map +1 -1
  76. package/dist/helpers/utils.js +73 -51
  77. package/dist/helpers/utils.js.map +1 -1
  78. package/package.json +12 -9
@@ -0,0 +1,150 @@
1
+ import Excel from "exceljs";
2
+ export class ExcelHelper {
3
+ filename;
4
+ worksheetName;
5
+ workbook = new Excel.Workbook();
6
+ worksheet = undefined;
7
+ columnsByIndex = new Map();
8
+ columnsByName = new Map();
9
+ rows = [];
10
+ constructor(filename, worksheetName) {
11
+ this.filename = filename;
12
+ this.worksheetName = worksheetName;
13
+ }
14
+ async save() {
15
+ await this.workbook.xlsx.writeFile(this.filename);
16
+ }
17
+ async init() {
18
+ await this.workbook.xlsx.readFile(this.filename);
19
+ if (this.worksheetName) {
20
+ this.workbook.worksheets.forEach((w) => {
21
+ if (w.name === this.worksheetName) {
22
+ this.worksheet = w;
23
+ }
24
+ });
25
+ }
26
+ else {
27
+ this.worksheet = this.workbook.getWorksheet(1);
28
+ }
29
+ if (!this.worksheet) {
30
+ throw new Error(`Worksheet ${this.worksheetName} not found in file ${this.filename}`);
31
+ }
32
+ this.worksheet.getRow(1).eachCell((cell, colNumber) => {
33
+ if (cell.value?.toString()) {
34
+ this.columnsByIndex.set(colNumber, cell.value.toString().toLowerCase());
35
+ this.columnsByName.set(cell.value.toString().toLowerCase(), colNumber);
36
+ }
37
+ });
38
+ // this loads the rows
39
+ this.clearFilter();
40
+ }
41
+ getCellValue(row, key) {
42
+ const cellKey = this.columnsByName.get(key);
43
+ if (!cellKey) {
44
+ console.error(`Column ${key} not found in worksheet`);
45
+ return "";
46
+ }
47
+ return row.getCell(cellKey).value?.toString() || "";
48
+ }
49
+ uniqueValuesInColumn(key) {
50
+ const values = [];
51
+ const columnIndex = this.columnsByName.get(key);
52
+ if (!this.worksheet || !columnIndex) {
53
+ return values;
54
+ }
55
+ this.worksheet.eachRow((row, rowNumber) => {
56
+ if (rowNumber === 1)
57
+ return;
58
+ const value = row.getCell(columnIndex)?.value || "";
59
+ if (!value)
60
+ return;
61
+ if (!values.includes(value.toString())) {
62
+ values.push(value.toString());
63
+ }
64
+ });
65
+ return values;
66
+ }
67
+ clearFilter() {
68
+ if (!this.worksheet) {
69
+ throw new Error("Worksheet not initialized");
70
+ }
71
+ this.rows = Array.from(this.worksheet.getRows(2, this.worksheet.rowCount - 1) || []).map((r) => new ExcelHelperRow(r, this.columnsByName));
72
+ }
73
+ filterSheetByColumnValue(filter) {
74
+ const filterWithColumnNumber = filter.map(({ columnName, value }) => {
75
+ const columnNumber = this.columnsByName.get(columnName.toLowerCase());
76
+ return { columnNumber, value, columnName };
77
+ });
78
+ // get the rows with column Packagenaam = bb-bi-22-examenvariant-1
79
+ const filteredRows = [];
80
+ if (!this.worksheet) {
81
+ throw new Error("Worksheet not initialized");
82
+ }
83
+ this.worksheet.eachRow((row, rowNumber) => {
84
+ let matchesFilter = true;
85
+ for (const { columnNumber, value } of filterWithColumnNumber) {
86
+ if (columnNumber === undefined || columnNumber === null) {
87
+ console.error(`Column ${columnNumber} not found in worksheet`);
88
+ matchesFilter = false;
89
+ break;
90
+ }
91
+ if (row.getCell(columnNumber).value?.toString() !== value?.toString()) {
92
+ matchesFilter = false;
93
+ break;
94
+ }
95
+ }
96
+ if (matchesFilter) {
97
+ filteredRows.push(row);
98
+ }
99
+ });
100
+ this.rows = filteredRows.map((r) => new ExcelHelperRow(r, this.columnsByName));
101
+ }
102
+ }
103
+ export class ExcelHelperRow {
104
+ row;
105
+ columnsByName;
106
+ constructor(row, columnsByName) {
107
+ this.row = row;
108
+ this.columnsByName = columnsByName;
109
+ }
110
+ getValue(key) {
111
+ if (!this.columnsByName.get(key.toLowerCase())) {
112
+ console.error(`Column ${key} not found in row ${this.row.number}`);
113
+ return "";
114
+ }
115
+ if (!key) {
116
+ return "";
117
+ }
118
+ const columnName = this.columnsByName.get(key.toLowerCase());
119
+ if (!columnName) {
120
+ return "";
121
+ }
122
+ const cellValue = this.row.getCell(columnName)?.value;
123
+ const value = cellValue?.text
124
+ ? cellValue.text
125
+ : cellValue?.toString() || "";
126
+ return value === "[object Object]" ? "" : value;
127
+ }
128
+ getNumericValue(key) {
129
+ const value = this.getValue(key);
130
+ try {
131
+ const number = parseFloat(value);
132
+ if (isNaN(number)) {
133
+ return null;
134
+ }
135
+ return number;
136
+ }
137
+ catch (e) {
138
+ return null;
139
+ }
140
+ }
141
+ setValue = (key, value) => {
142
+ const columnName = this.columnsByName.get(key.toLowerCase());
143
+ if (!columnName) {
144
+ console.error(`Column ${key} not found in row ${this.row.number}`);
145
+ return;
146
+ }
147
+ this.row.getCell(columnName).value = value;
148
+ };
149
+ }
150
+ //# sourceMappingURL=excel-helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel-helper.js","sourceRoot":"","sources":["../../src/helpers/excel-helper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { DATABASE } from "./database";
2
+ import { IApplicationSpecific } from "../api/app-specific";
3
+ export declare function syncStudentResultsToTeacher(specificImplementation: IApplicationSpecific, db: DATABASE, filterByIds?: string[]): Promise<void>;
4
+ export declare function addUserByEmail(email: string, application: string, password: string | undefined, isAdmin: boolean | undefined, db: DATABASE): Promise<string>;
5
+ export declare function manualScored(xml: string): boolean;
6
+ export declare const getFolderNames: (parentFolder: string) => Promise<string[]>;
7
+ interface UploadOptions {
8
+ checkForManualFix?: (filename: string) => Promise<string>;
9
+ overrideOther?: boolean;
10
+ overrideXml?: boolean;
11
+ }
12
+ export declare function uploadFolderToStorage(folder: string, storageDestinationPath: string, uploadFiles: Promise<unknown>[], options?: UploadOptions): Promise<void>;
13
+ export declare function addAssessmentResources(backendUrl: string, db: DATABASE, specificImplementation: IApplicationSpecific): Promise<void>;
14
+ export {};
15
+ //# sourceMappingURL=general.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"general.d.ts","sourceRoot":"","sources":["../../src/helpers/general.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,wBAAsB,2BAA2B,CAC/C,sBAAsB,EAAE,oBAAoB,EAC5C,EAAE,EAAE,QAAQ,EACZ,WAAW,GAAE,MAAM,EAAO,iBAmD3B;AAED,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,QAAQ,oBAAK,EACb,OAAO,qBAAQ,EACf,EAAE,EAAE,QAAQ,mBAkCb;AAOD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,WAEvC;AAED,eAAO,MAAM,cAAc,GAAU,cAAc,MAAM,sBAWxD,CAAC;AAEF,UAAU,aAAa;IACrB,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1D,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,sBAAsB,EAAE,MAAM,EAC9B,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,EAC/B,OAAO,GAAE,aAAkB,iBAkD5B;AAED,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,QAAQ,EACZ,sBAAsB,EAAE,oBAAoB,iBAqB7C"}
@@ -0,0 +1,148 @@
1
+ /* eslint-disable @typescript-eslint/no-unused-vars */
2
+ import { getAuth, getFirestore, getStorage } from "../helpers/firebase";
3
+ import fs from "fs/promises";
4
+ import mime from "mime";
5
+ import path from "path";
6
+ export async function syncStudentResultsToTeacher(specificImplementation, db, filterByIds = []) {
7
+ const firestore = getFirestore();
8
+ const batch = firestore.batch();
9
+ const allSessionsReferences = await firestore
10
+ .collection(db.SESSION.COLLECTION())
11
+ .get();
12
+ const allSessions = allSessionsReferences.docs.map((d) => d.data());
13
+ // const applicationSpecific = getSpecificImplementation(applicationId);
14
+ for (const session of allSessions) {
15
+ const code = session.code;
16
+ if (filterByIds.length > 0 && !filterByIds.includes(code)) {
17
+ continue;
18
+ }
19
+ // const studentSessions = await firestore
20
+ // .collection(db.SESSION.COLLECTION(code))
21
+ // .get();
22
+ // for (const session of studentSessions.docs) {
23
+ const assessmentId = session.id;
24
+ const testContextRef = await firestore
25
+ .doc(db.SESSION.TEST_CONTEXT(code))
26
+ .get();
27
+ const testContext = testContextRef.exists
28
+ ? testContextRef.data()
29
+ : null;
30
+ if (!testContext) {
31
+ console.error(`No test context found for student ${code} assessment ${assessmentId}`);
32
+ continue;
33
+ }
34
+ if (!testContext.state) {
35
+ if (session.sessionState) {
36
+ testContext.state = session.sessionState;
37
+ }
38
+ }
39
+ await specificImplementation.testContextToTeacher(code, assessmentId, session.deliveryId, session.teacherId, testContext, batch);
40
+ await batch.commit();
41
+ }
42
+ }
43
+ export async function addUserByEmail(email, application, password = "", isAdmin = false, db) {
44
+ let emailVerifyLink = "";
45
+ const auth = getAuth();
46
+ // check if user exists
47
+ let user = null;
48
+ try {
49
+ user = await auth.getUserByEmail(email);
50
+ }
51
+ catch {
52
+ // not found results in an error
53
+ }
54
+ if (!user) {
55
+ user = await auth.createUser({
56
+ displayName: email.split("@")[0],
57
+ email,
58
+ password: password || generatePassword(),
59
+ emailVerified: true,
60
+ });
61
+ if (!password) {
62
+ emailVerifyLink = await auth.generatePasswordResetLink(email);
63
+ }
64
+ }
65
+ const firestore = getFirestore();
66
+ const docRef = firestore.doc(db.AUTH.CHECK_APP_RIGHTS(user.uid, application));
67
+ const doc = await docRef.get();
68
+ if (!doc.exists) {
69
+ await docRef.set({ email, userId: user.uid, application });
70
+ }
71
+ if (isAdmin) {
72
+ const userDoc = firestore.doc(db.AUTH.DOC(user.uid));
73
+ await userDoc.set({ admin: true });
74
+ }
75
+ return emailVerifyLink;
76
+ }
77
+ function generatePassword() {
78
+ const password = Math.random().toString(36).slice(-8);
79
+ return password;
80
+ }
81
+ export function manualScored(xml) {
82
+ return xml.includes('use="instructions" view="scorer">');
83
+ }
84
+ export const getFolderNames = async (parentFolder) => {
85
+ const folderNames = [];
86
+ const folderReader = await fs.readdir(parentFolder, {
87
+ withFileTypes: true,
88
+ });
89
+ for (const folder of folderReader) {
90
+ if (folder.isDirectory()) {
91
+ folderNames.push(`${parentFolder}/${folder.name}`);
92
+ }
93
+ }
94
+ return folderNames;
95
+ };
96
+ export async function uploadFolderToStorage(folder, storageDestinationPath, uploadFiles, options = {} // default empty object
97
+ ) {
98
+ const storage = getStorage();
99
+ const bucket = storage.bucket();
100
+ const files = await fs.readdir(folder);
101
+ for (const file of files) {
102
+ if (file === ".DS_Store") {
103
+ continue;
104
+ }
105
+ const filePath = `${folder}/${file}`;
106
+ const stat = await fs.stat(filePath);
107
+ if (stat.isDirectory()) {
108
+ // Recursively upload files in subfolder
109
+ await uploadFolderToStorage(filePath, `${storageDestinationPath}/${file}`, uploadFiles, options);
110
+ }
111
+ else {
112
+ console.log(`uploading ${filePath}`);
113
+ let fileToUpload = path.join(folder, file);
114
+ // Allow manual filename fix
115
+ if (options.checkForManualFix) {
116
+ fileToUpload = await options.checkForManualFix(fileToUpload);
117
+ }
118
+ const fileExtension = path.extname(file).toLowerCase();
119
+ if ((fileExtension === ".xml" && options.overrideXml === false) ||
120
+ (fileExtension !== ".xml" && options.overrideOther === false)) {
121
+ console.log(`Skipping ${filePath} due to override settings.`);
122
+ continue;
123
+ }
124
+ uploadFiles.push(bucket.upload(fileToUpload, {
125
+ destination: `${storageDestinationPath}/${file}`,
126
+ metadata: {
127
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
128
+ contentType: mime.getType(file),
129
+ },
130
+ }));
131
+ }
132
+ }
133
+ }
134
+ export async function addAssessmentResources(backendUrl, db, specificImplementation) {
135
+ const fs = getFirestore();
136
+ const assessmentCollection = await fs
137
+ .collection(db.ASSESSMENT.COLLECTION())
138
+ .get();
139
+ const assessments = assessmentCollection.docs.map((d) => d.data());
140
+ const digitalAssessments = assessments.filter((a) => a.isDigital !== false);
141
+ const packageLocation = `packages`;
142
+ for (const assessment of digitalAssessments) {
143
+ await specificImplementation.convertPackageAndAddToDatabase(packageLocation, `${backendUrl}/${assessment.packageId}/`, backendUrl, {
144
+ examenId: assessment.id,
145
+ });
146
+ }
147
+ }
148
+ //# sourceMappingURL=general.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"general.js","sourceRoot":"","sources":["../../src/helpers/general.ts"],"names":[],"mappings":"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"}
@@ -8,4 +8,6 @@ export * from "./firebase";
8
8
  export * from "./logic";
9
9
  export * from "./request-headers";
10
10
  export * from "./endpoint-helpers";
11
+ export * from "./excel-helper";
12
+ export * from "./resource-cache";
11
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,MAAM,CAAC;AACrB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,MAAM,CAAC;AACrB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC"}
@@ -8,4 +8,6 @@ export * from "./firebase";
8
8
  export * from "./logic";
9
9
  export * from "./request-headers";
10
10
  export * from "./endpoint-helpers";
11
+ export * from "./excel-helper";
12
+ export * from "./resource-cache";
11
13
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,MAAM,CAAC;AACrB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,MAAM,CAAC;AACrB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC"}
@@ -1,38 +1,54 @@
1
1
  import { DATABASE } from "./database";
2
- import { ApplicationInfo, ApplicationInfoWithUsers, AssessmentInfo, PlannedSessions, SessionInfoTeacher, SessionStateType, StudentAppSessionInfo, UniqueResponse, ItemStatisticsWithResponses } from "@citolab/qti-api";
2
+ import { Assessment, SessionStateType, UniqueResponse, ItemStatisticsWithResponses, Session, Delivery, TestsetSession, TestsetStateType, Testset } from "@citolab/qti-api";
3
3
  import * as cheerio from "cheerio";
4
+ import { Request } from "express";
4
5
  export declare function uploadFolderToStorage(folder: string, storageDestinationPath: string, uploadFiles: Promise<unknown>[], subfolder?: string): Promise<void>;
5
- export declare const getStudentSessionInfo: (code: string, db: DATABASE, userId?: string) => Promise<StudentAppSessionInfo | null>;
6
- export declare const getStudentGroupSessionInfo: (groupCode: string, db: DATABASE, userId: string, studentIdentification?: string) => Promise<StudentAppSessionInfo | null>;
7
- export declare const updateStudentSessionState: (db: DATABASE, code: string, assessmentId: string, state: SessionStateType, batch: FirebaseFirestore.WriteBatch) => Promise<null | undefined>;
8
- export declare const createAssessmentCode: (db: DATABASE, charCount: number, assessmentId: string, application?: ApplicationInfo) => Promise<string | null>;
9
- export declare const createDemoCodeForAssessment: (db: DATABASE, assessmentId: string, code: string) => Promise<string | undefined>;
10
- export declare const checkAssessmentCode: (db: DATABASE, code: string) => Promise<AssessmentInfo | null>;
11
- export declare const isStartable: (asessment: AssessmentInfo) => boolean;
12
- export declare const getCodeByUserId: (db: DATABASE, userId: string) => Promise<string | null>;
13
- export declare const getTeacherIdByCode: (db: DATABASE, code: string) => Promise<string | null>;
14
- export declare const getApplicationInfo: (db: DATABASE) => Promise<ApplicationInfo | undefined>;
15
- export declare const addApplicationInfo: (db: DATABASE, appInfo: ApplicationInfo) => Promise<void>;
16
- export declare const getApplication: (db: DATABASE) => Promise<ApplicationInfo | null>;
17
- export declare const codeExists: (code: string, db: DATABASE) => Promise<StudentAppSessionInfo | null>;
18
- export declare const hasAccess: (uid: string, appId: string) => Promise<boolean>;
19
- export declare const createSession: (teacherId: string, db: DATABASE, count: number, assessments: {
20
- packageId: string;
21
- assessmentId: string;
22
- name: string;
23
- }[]) => Promise<StudentAppSessionInfo[]>;
24
- export declare const createSessionByIdentifications: (teacherId: string, db: DATABASE, identifications: {
25
- identifier: string;
6
+ export declare const getTestsetSessions: (testsetCode: string, db: DATABASE) => Promise<TestsetSession | null>;
7
+ export declare const getTestsetSessionWithSessions: (testsetCode: string, db: DATABASE, userId: string) => Promise<{
8
+ sessions: (FirebaseFirestore.DocumentData | undefined)[];
9
+ userId: string;
10
+ code: string;
11
+ testsetId: string;
12
+ testset?: Testset;
13
+ teacherId: string;
14
+ identification?: string;
15
+ state: TestsetStateType;
16
+ sessionIds: string[];
17
+ currentSessionIndex?: number;
26
18
  password?: string;
27
- }[], sessionState: "not_available" | "not_started", assessments: {
28
- packageId: string;
29
- assessmentId: string;
30
- name: string;
31
- }[]) => Promise<StudentAppSessionInfo[]>;
32
- export declare const getAllStudents: (db: DATABASE) => Promise<StudentAppSessionInfo[]>;
33
- export declare const getAssessments: (db: DATABASE) => Promise<AssessmentInfo[]>;
34
- export declare const getStartableAssessments: (db: DATABASE) => Promise<AssessmentInfo[]>;
35
- export declare const getAssessmentTest: (db: DATABASE, assessmentId: string) => Promise<AssessmentInfo>;
19
+ startedAt?: number;
20
+ completedAt?: number;
21
+ id: string;
22
+ createdAt: number;
23
+ updatedAt: number;
24
+ createdBy: string;
25
+ } | null>;
26
+ export declare const getSession: (code: string, db: DATABASE, userId?: string) => Promise<Session | null>;
27
+ export declare const getDelivery: (code: string, db: DATABASE) => Promise<Delivery | null>;
28
+ export declare const updateSessionState: (db: DATABASE, code: string, state: SessionStateType, batch: FirebaseFirestore.WriteBatch) => Promise<null | undefined>;
29
+ export declare const isStartable: (asessment: Assessment) => boolean;
30
+ export declare const checkDeliveryCode: (db: DATABASE, deliveryCode: string) => Promise<boolean>;
31
+ export declare const checkTestsetCode: (db: DATABASE, testsetCode: string) => Promise<boolean>;
32
+ export declare const checkSessionCode: (db: DATABASE, studentCode: string) => Promise<boolean>;
33
+ export declare const deleteDelivery: (db: DATABASE, deliveryId: string) => Promise<void>;
34
+ export declare const createDelivery: (db: DATABASE, userId: string, assessmentId: string) => Promise<string | null>;
35
+ export declare const createSessionForDelivery: (db: DATABASE, userId: string, delivery: Delivery) => Promise<Session | undefined>;
36
+ export declare const testsetSessionCodeExists: (code: string, db: DATABASE) => Promise<boolean>;
37
+ export declare const sessionCodeExists: (code: string, db: DATABASE) => Promise<boolean>;
38
+ export declare const deliveryCodeExists: (code: string, db: DATABASE) => Promise<boolean>;
39
+ export declare const createTestsetSessionByIdentifications: (teacherId: string, db: DATABASE, testsetCode: string, identifications: string[], testsessionState?: TestsetStateType, sessionState?: SessionStateType, createPassword?: boolean) => Promise<{
40
+ session: Session[];
41
+ testsetSessions: TestsetSession[];
42
+ } | undefined>;
43
+ export declare const createUniqueCodeForDelivery: (db: DATABASE) => Promise<string | null>;
44
+ export declare const createUniqueCodeForStudentSession: (db: DATABASE) => Promise<string | null>;
45
+ export declare const createUniqueCodeForStudentTestsetSession: (db: DATABASE) => Promise<string | null>;
46
+ export declare const hasAccess: (uid: string, appId: string) => Promise<boolean>;
47
+ export declare const createSessions: (teacherId: string, deliveryCode: string, db: DATABASE, count: number, deliveryIds: string[]) => Promise<Session[]>;
48
+ export declare const getAllStudents: (db: DATABASE) => Promise<Session[]>;
49
+ export declare const getAssessments: (db: DATABASE) => Promise<Assessment[]>;
50
+ export declare const getAssessment: (db: DATABASE, assessmentId: string) => Promise<Assessment>;
51
+ export declare const getTestset: (testsetId: string, db: DATABASE) => Promise<Testset>;
36
52
  export declare const getAssessmentItemRefsFromPackage: ($assessmentTest: cheerio.CheerioAPI) => Promise<{
37
53
  identifier: string | undefined;
38
54
  sequenceNumber: number;
@@ -40,8 +56,8 @@ export declare const getAssessmentItemRefsFromPackage: ($assessmentTest: cheerio
40
56
  }[]>;
41
57
  export declare const getItemsStats: (db: DATABASE, teacherId: string, assessmentId: string, target: "teacher" | "reviewer") => Promise<ItemStatisticsWithResponses<UniqueResponse>[]>;
42
58
  export declare const updateItemStatResponseScore: (db: DATABASE, teacherId: string, assessmentId: string, itemId: string, responseId: string, scoreExternal: number | null, target: "reviewer" | "teacher") => Promise<void>;
43
- export declare const getPlannedStudents: (db: DATABASE, teacherId: string) => Promise<PlannedSessions<SessionInfoTeacher>[]>;
44
- export declare const getPlannedStudent: (db: DATABASE, teacherId: string, code: string) => Promise<PlannedSessions<SessionInfoTeacher>>;
59
+ export declare const getPlannedStudents: (db: DATABASE, teacherId: string) => Promise<Session[]>;
60
+ export declare const getPlannedStudent: (db: DATABASE, teacherId: string, code: string) => Promise<Session>;
45
61
  export declare const deleteStudent: (db: DATABASE, teacherId: string, code: string) => Promise<void>;
46
62
  export declare const getUser: (uid: string) => Promise<{
47
63
  admin?: boolean;
@@ -49,19 +65,26 @@ export declare const getUser: (uid: string) => Promise<{
49
65
  export declare const setUser: (uid: string, user: {
50
66
  admin?: boolean;
51
67
  }) => Promise<void>;
52
- export declare const resetSession: (db: DATABASE, teacherId: string, code: string, assessmentId: string) => Promise<void>;
53
- export declare const getStudentInfoForTeacher: (db: DATABASE, teacherId: string, code: string) => Promise<PlannedSessions<SessionInfoTeacher>>;
54
- export declare const updateStudent: (db: DATABASE, teacherId: string, code: string, identification: string) => Promise<void>;
55
- export declare const getAllApplications: () => Promise<ApplicationInfo[]>;
56
- export declare const createUserForApplication: (email: string, applicationId: string) => Promise<{
68
+ export declare const reopenSession: (db: DATABASE, teacherId: string, code: string) => Promise<void>;
69
+ export declare const resetSession: (db: DATABASE, teacherId: string, code: string) => Promise<void>;
70
+ export declare const getStudentInfoForTeacher: (db: DATABASE, teacherId: string, code: string) => Promise<Session>;
71
+ export declare const updateStudentIdentification: (db: DATABASE, teacherId: string, code: string, identification: string) => Promise<void>;
72
+ export declare const createUser: (email: string) => Promise<{
57
73
  password: string;
58
74
  id: string;
59
75
  } | {
60
76
  id: string;
61
77
  password?: undefined;
62
78
  }>;
63
- export declare const deleteUserForApplication: (id: string, applicationId: string) => Promise<void>;
64
- export declare const getAllApplicationsWithUsers: () => Promise<ApplicationInfoWithUsers[]>;
79
+ export declare const deleteUser: (id: string) => Promise<void>;
80
+ export declare const getAllUsers: () => Promise<{
81
+ name: string;
82
+ users: {
83
+ id: string;
84
+ email: string;
85
+ disabled: boolean;
86
+ }[];
87
+ }[]>;
65
88
  export declare function deleteDocumentAndSubcollections(docRef: FirebaseFirestore.DocumentReference): Promise<void>;
66
89
  export declare function checkAndDeletePackages(dateTime: number): Promise<void>;
67
90
  export declare function fetchUsersInChunks(ids: string[], chunkSize?: number): Promise<{
@@ -69,5 +92,41 @@ export declare function fetchUsersInChunks(ids: string[], chunkSize?: number): P
69
92
  email: string;
70
93
  disabled: boolean;
71
94
  }[]>;
72
- export declare const getPackageIdByAssessment: (db: DATABASE, code: string, assessmentId: string) => Promise<string | null>;
95
+ /**
96
+ * Interface for feedback submission data
97
+ */
98
+ export interface FeedbackSubmissionData {
99
+ type: string;
100
+ description: string;
101
+ feedbackId: string;
102
+ email?: string;
103
+ pageUrl?: string;
104
+ }
105
+ /**
106
+ * Processes feedback submission with optional screenshot
107
+ * @param req - Express request object
108
+ * @param userId - User ID who is submitting feedback
109
+ * @param userType - Type of user ('teacher' or 'student')
110
+ * @returns Promise<{data: FeedbackSubmissionData, fileBuffer: Buffer | null, fileOriginalname: string | null}>
111
+ */
112
+ export declare function processFeedbackSubmission(req: Request): Promise<{
113
+ data: FeedbackSubmissionData;
114
+ fileBuffer: Buffer | null;
115
+ fileOriginalname: string | null;
116
+ }>;
117
+ /**
118
+ * Validates feedback submission data
119
+ * @param data - Feedback data to validate
120
+ * @returns Validation error message or null if valid
121
+ */
122
+ export declare function validateFeedbackData(data: FeedbackSubmissionData): string | null;
123
+ /**
124
+ * Saves feedback to Firestore and optionally uploads screenshot to Storage
125
+ * @param data - Feedback submission data
126
+ * @param userId - User ID who submitted the feedback
127
+ * @param userType - Type of user ('teacher' or 'student')
128
+ * @param fileBuffer - Screenshot file buffer (optional)
129
+ * @returns Promise<void>
130
+ */
131
+ export declare function saveFeedback(data: FeedbackSubmissionData, userId: string, userType: 'teacher' | 'student', fileBuffer?: Buffer | null): Promise<void>;
73
132
  //# sourceMappingURL=logic.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logic.d.ts","sourceRoot":"","sources":["../../src/helpers/logic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logic.d.ts","sourceRoot":"","sources":["../../src/helpers/logic.ts"],"names":[],"mappings":"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"}