@quesmed/types 1.0.27 → 1.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.
@@ -0,0 +1,14 @@
1
+ import { Id } from './Type';
2
+ export interface IAuthor {
3
+ id: Id;
4
+ createdAt: string | Date;
5
+ updatedAt: string | Date;
6
+ name: string;
7
+ qualifications: string | null;
8
+ title: string;
9
+ description: string;
10
+ avatar: string;
11
+ linkedIn: string;
12
+ twitter: string;
13
+ facebook: string;
14
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,22 @@
1
+ import { IAuthor } from './Author';
2
+ import { Id } from './Type';
3
+ export interface IBook {
4
+ id: Id;
5
+ createdAt: string | Date;
6
+ updatedAt: string | Date;
7
+ name: string;
8
+ publisher: string;
9
+ publishDate: string | Date;
10
+ pages: number;
11
+ format: string;
12
+ language: string;
13
+ type: string;
14
+ ISBN: number;
15
+ price: number;
16
+ avatar: string;
17
+ heroImg: string;
18
+ description: string;
19
+ chapters: string | string[];
20
+ stripePriceId: string;
21
+ authors: IAuthor[];
22
+ }
package/models/Book.js ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,12 +1,13 @@
1
1
  import { IFile } from './File';
2
2
  import { IChapterPicture } from './Picture';
3
+ import { ETopicType } from './Topic';
3
4
  import { Id } from './Type';
4
5
  export interface IChapter {
5
6
  id: Id;
6
7
  createdAt: string | Date;
7
8
  updatedAt: string | Date;
8
- explanation: string;
9
- clinical: boolean;
9
+ explanation: string | null;
10
+ typeId: ETopicType | null;
10
11
  pictures: IChapterPicture[];
11
12
  files: IFile[];
12
13
  }
@@ -0,0 +1,6 @@
1
+ export declare enum EDifficultyType {
2
+ ALL = 0,
3
+ CORE = 1,
4
+ CHALLENGING = 2,
5
+ DIFFICULT = 3
6
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EDifficultyType = void 0;
4
+ var EDifficultyType;
5
+ (function (EDifficultyType) {
6
+ EDifficultyType[EDifficultyType["ALL"] = 0] = "ALL";
7
+ EDifficultyType[EDifficultyType["CORE"] = 1] = "CORE";
8
+ EDifficultyType[EDifficultyType["CHALLENGING"] = 2] = "CHALLENGING";
9
+ EDifficultyType[EDifficultyType["DIFFICULT"] = 3] = "DIFFICULT";
10
+ })(EDifficultyType = exports.EDifficultyType || (exports.EDifficultyType = {}));
@@ -9,9 +9,9 @@ export interface IMarksheet {
9
9
  mockTestId: number | null;
10
10
  }
11
11
  export declare enum EQuestionLike {
12
- LIKE = 0,
13
- DISLIKE = 1,
14
- REMOVE = 2
12
+ NONE = 0,
13
+ LIKE = 1,
14
+ DISLIKE = 2
15
15
  }
16
16
  export declare type IMarksheetMarkJSONB = string | [string] | [IQuestionQAAnswer] | [string[], string[]] | [IPrescribeMark] | null;
17
17
  export interface IMarksheetMark {
@@ -26,7 +26,7 @@ export interface IMarksheetMark {
26
26
  mark: IMarksheetMarkJSONB;
27
27
  like: number;
28
28
  dislike: number;
29
- isLikeByMe: string;
29
+ isLikeByMe: EQuestionLike;
30
30
  discussion: IDiscussion[];
31
31
  }
32
32
  export interface IDiscussion {
@@ -36,7 +36,7 @@ export interface IDiscussion {
36
36
  comment: string;
37
37
  like: number;
38
38
  dislike: number;
39
- isLikeByMe: string;
39
+ isLikeByMe: EQuestionLike;
40
40
  commentId: number;
41
41
  questionId: number;
42
42
  reply: IDiscussion[];
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.EQuestionLike = void 0;
4
4
  var EQuestionLike;
5
5
  (function (EQuestionLike) {
6
- EQuestionLike[EQuestionLike["LIKE"] = 0] = "LIKE";
7
- EQuestionLike[EQuestionLike["DISLIKE"] = 1] = "DISLIKE";
8
- EQuestionLike[EQuestionLike["REMOVE"] = 2] = "REMOVE";
6
+ EQuestionLike[EQuestionLike["NONE"] = 0] = "NONE";
7
+ EQuestionLike[EQuestionLike["LIKE"] = 1] = "LIKE";
8
+ EQuestionLike[EQuestionLike["DISLIKE"] = 2] = "DISLIKE";
9
9
  })(EQuestionLike = exports.EQuestionLike || (exports.EQuestionLike = {}));
@@ -1,9 +1,10 @@
1
1
  import { IQuestion } from './Question';
2
+ import { ETopicType } from './Topic';
2
3
  import { Id } from './Type';
3
4
  export interface IMockTest {
4
5
  id: Id;
5
6
  title: string;
6
- clinical: boolean;
7
+ typeId: ETopicType | null;
7
8
  passingMark: number;
8
9
  public: boolean;
9
10
  questions: IQuestion[];
@@ -1,4 +1,5 @@
1
1
  import { IConcept } from './Concept';
2
+ import { EDifficultyType } from './Difficulty';
2
3
  import { Id } from './Type';
3
4
  export interface IOsceType {
4
5
  id: Id;
@@ -25,7 +26,7 @@ export interface IOsceStation {
25
26
  name: string;
26
27
  osceTypeId: Id;
27
28
  osceType?: IOsceType;
28
- difficulty: number;
29
+ difficulty: EDifficultyType;
29
30
  candidateBrief: string;
30
31
  examinerBrief: string;
31
32
  actorBrief: string;
@@ -1,4 +1,5 @@
1
1
  import { IConcept } from './Concept';
2
+ import { EDifficultyType } from './Difficulty';
2
3
  import { IQuestionPicture } from './Picture';
3
4
  import { Id } from './Type';
4
5
  export declare enum EPsaSectionType {
@@ -31,14 +32,14 @@ export interface IQuestion {
31
32
  totalVotes: number;
32
33
  choices: IQuestionChoice[];
33
34
  pictures: IQuestionPicture[];
34
- difficulty: number;
35
+ difficulty: EDifficultyType;
35
36
  elo: number;
36
37
  psaSectionId: EPsaSectionType;
37
38
  }
38
39
  export interface IQuestionChoice {
39
40
  id: Id;
40
41
  name: string;
41
- explanation: string;
42
+ explanation: string | null;
42
43
  label: string;
43
44
  answer: boolean;
44
45
  votes: number;
package/models/Topic.d.ts CHANGED
@@ -1,8 +1,16 @@
1
1
  import { IConcept } from './Concept';
2
2
  import { Id } from './Type';
3
+ export declare enum ETopicType {
4
+ ALL = 0,
5
+ BASIC_SCIENCE = 1,
6
+ CLINICAL = 2,
7
+ ANATOMY = 3,
8
+ DATA_INTERPRETATION = 4,
9
+ PSA = 5
10
+ }
3
11
  export interface ITopic {
4
12
  id: Id;
5
13
  name: string;
6
- clinical: boolean;
14
+ typeId: ETopicType | null;
7
15
  concepts?: IConcept[];
8
16
  }
package/models/Topic.js CHANGED
@@ -1,2 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ETopicType = void 0;
4
+ var ETopicType;
5
+ (function (ETopicType) {
6
+ ETopicType[ETopicType["ALL"] = 0] = "ALL";
7
+ ETopicType[ETopicType["BASIC_SCIENCE"] = 1] = "BASIC_SCIENCE";
8
+ ETopicType[ETopicType["CLINICAL"] = 2] = "CLINICAL";
9
+ ETopicType[ETopicType["ANATOMY"] = 3] = "ANATOMY";
10
+ ETopicType[ETopicType["DATA_INTERPRETATION"] = 4] = "DATA_INTERPRETATION";
11
+ ETopicType[ETopicType["PSA"] = 5] = "PSA";
12
+ })(ETopicType = exports.ETopicType || (exports.ETopicType = {}));
package/models/Type.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export declare type Id = number;
2
2
  export declare type Count = {
3
- count: number;
4
- }[];
3
+ count: string;
4
+ };
5
5
  export declare type Sum = {
6
- sum: number;
7
- }[];
6
+ sum: string;
7
+ };
package/models/index.d.ts CHANGED
@@ -1,6 +1,9 @@
1
+ export * from './Author';
2
+ export * from './Book';
1
3
  export * from './Card';
2
4
  export * from './Chapter';
3
5
  export * from './Concept';
6
+ export * from './Difficulty';
4
7
  export * from './Feedback';
5
8
  export * from './File';
6
9
  export * from './Marksheet';
package/models/index.js CHANGED
@@ -10,9 +10,12 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
10
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./Author"), exports);
14
+ __exportStar(require("./Book"), exports);
13
15
  __exportStar(require("./Card"), exports);
14
16
  __exportStar(require("./Chapter"), exports);
15
17
  __exportStar(require("./Concept"), exports);
18
+ __exportStar(require("./Difficulty"), exports);
16
19
  __exportStar(require("./Feedback"), exports);
17
20
  __exportStar(require("./File"), exports);
18
21
  __exportStar(require("./Marksheet"), exports);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quesmed/types",
3
- "version": "1.0.27",
3
+ "version": "1.2.0",
4
4
  "description": "Typescript types for Quesmed",
5
5
  "main": "index.js",
6
6
  "types": "dist/index.d.ts",
@@ -0,0 +1,3 @@
1
+ import { IAuthor } from '../../models';
2
+ export interface IAuthorData extends IAuthor {
3
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,6 @@
1
+ import { IBook } from '../../models';
2
+ export interface IBookData extends IBook {
3
+ }
4
+ export interface IBookVar {
5
+ id: number;
6
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,3 +1,5 @@
1
+ export * from './author';
2
+ export * from './book';
1
3
  export * from './feedback';
2
4
  export * from './sampleCards';
3
5
  export * from './sampleQuestions';
@@ -10,6 +10,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
10
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./author"), exports);
14
+ __exportStar(require("./book"), exports);
13
15
  __exportStar(require("./feedback"), exports);
14
16
  __exportStar(require("./sampleCards"), exports);
15
17
  __exportStar(require("./sampleQuestions"), exports);
@@ -1,4 +1,4 @@
1
- import { Id, IMarksheet, IUserFlaggedQuestions } from '../../../models';
1
+ import { EDifficultyType, Id, IMarksheet, IUserFlaggedQuestions } from '../../../models';
2
2
  import { IPreBuildMarksheet } from '../../mutation/restricted';
3
3
  export interface IMarksheetVar {
4
4
  id: Id;
@@ -10,7 +10,7 @@ export interface IPreBuildMarksheetVar {
10
10
  conceptIds: number[];
11
11
  search: string;
12
12
  source: string;
13
- difficulty?: number[];
13
+ difficulty?: EDifficultyType[];
14
14
  }
15
15
  export interface IPreBuildMarksheetData extends IPreBuildMarksheet {
16
16
  }
@@ -1,9 +1,10 @@
1
1
  import { Id, IUserMockTest } from '../../../models';
2
+ import { ETopicType } from './../../../models/Topic';
2
3
  export interface IMockTestVar {
3
4
  id: Id;
4
5
  }
5
6
  export declare type IMockTestData = IUserMockTest;
6
7
  export interface IMockTestsVar {
7
- clinical: boolean;
8
+ typeIds?: ETopicType[];
8
9
  }
9
10
  export declare type IMockTestsData = IUserMockTest[];
@@ -1,4 +1,4 @@
1
- import { Id, IDashboardOsce, IOsceMarksheet, IOsceStation, IOsceStationItem } from '../../../models';
1
+ import { EDifficultyType, Id, IDashboardOsce, IOsceMarksheet, IOsceStation, IOsceStationItem } from '../../../models';
2
2
  export interface IDashboardOsceVar {
3
3
  solo: boolean;
4
4
  }
@@ -22,7 +22,7 @@ export interface IOsceStationsVar {
22
22
  osceTypeId?: Id;
23
23
  solo: boolean;
24
24
  attempted: boolean;
25
- difficulty: number[];
25
+ difficulty: EDifficultyType[];
26
26
  }
27
27
  export declare type IOsceStationsData = IOsceStationItem[];
28
28
  export interface ISearchOsceStationsVar {
@@ -1,10 +1,10 @@
1
- import { Id, ITopic } from '../../../models';
1
+ import { ETopicType, Id, ITopic } from '../../../models';
2
2
  export interface ITopicVar {
3
3
  id: Id;
4
4
  }
5
5
  export declare type ITopicData = ITopic;
6
6
  export interface ITopicsVar {
7
- filter: 'clinical' | 'pre-clinical' | 'interpretation';
7
+ filter: ETopicType;
8
8
  }
9
9
  export interface ITopicInfo {
10
10
  id: number;
@@ -105,69 +105,94 @@ function correctMark(mark) {
105
105
  if (!mark || !mark.mark) {
106
106
  return data;
107
107
  }
108
- const qKeys = Object.keys(mark.question);
109
- const answerKey = qKeys.find((k) => answerRegex.exec(k)) || 'answer';
110
- const answer = mark.question[answerKey];
111
- const flatAnswer = answer[0];
112
- const flatAttempt = mark.mark[0];
113
- if (models_1.EQuestionType.SINGLE_BEST_ANSWER === mark.question.typeId) {
114
- const answer = flatAnswer;
115
- const attempt = flatAttempt;
116
- if (answer === attempt) {
117
- data.correct = true;
118
- }
119
- else {
120
- data.incorrect = true;
121
- }
122
- }
123
- else if (models_1.EQuestionType.QUESTION_ANSWER === mark.question.typeId) {
124
- const answer = flatAnswer.dose.toLowerCase().replace(/\s/g, '');
125
- const attempt = flatAttempt.toLowerCase().replace(/\s/g, '');
126
- if (answer === attempt) {
127
- data.correct = true;
128
- }
129
- else {
130
- data.incorrect = true;
131
- }
132
- }
133
- else if (models_1.EQuestionType.MULTIPLE_ANSWERS === mark.question.typeId) {
134
- const [answerA, answerB] = answer.map((x) => x.sort());
135
- const [attemptA, attemptB] = mark.mark.map((x) => x.sort());
136
- if (answerA.length !== attemptA.length || answerB.length !== attemptB.length) {
137
- data.incorrect = true;
138
- }
139
- else if (attemptA.every((x, i) => x === answerA[i]) && attemptB.every((x, i) => answerB[i])) {
140
- data.correct = true;
141
- }
142
- else {
143
- data.incorrect = true;
108
+ try {
109
+ const qKeys = Object.keys(mark.question);
110
+ const answerKey = qKeys.find((k) => answerRegex.exec(k)) || 'answer';
111
+ const answer = mark.question[answerKey];
112
+ const flatAnswer = answer[0];
113
+ const flatAttempt = mark.mark[0];
114
+ if (models_1.EQuestionType.SINGLE_BEST_ANSWER === mark.question.typeId) {
115
+ const answer = flatAnswer;
116
+ const attempt = flatAttempt;
117
+ if (answer === attempt) {
118
+ data.correct = true;
119
+ }
120
+ else {
121
+ data.incorrect = true;
122
+ }
144
123
  }
145
- }
146
- else if (models_1.EQuestionType.PRESCRIPTION_ANSWER === mark.question.typeId) {
147
- const answers = answer.map(formatPrescribeAnswer);
148
- const attempt = formatPrescribeAnswer(mapPrescribeMarkToAnswer(flatAttempt));
149
- let foundCorrect = false;
150
- let index = 0;
151
- for (const answer of answers) {
152
- if (answer.dose.value === attempt.dose.value &&
153
- answer.drug.value === attempt.drug.value &&
154
- answer.duration.value.split(',').includes(attempt.duration.value) &&
155
- answer.frequency.value === attempt.frequency.value &&
156
- answer.route.value === attempt.route.value &&
157
- answer.units.value === attempt.units.value) {
158
- foundCorrect = true;
159
- break;
124
+ else if (models_1.EQuestionType.QUESTION_ANSWER === mark.question.typeId) {
125
+ const answer = flatAnswer.dose.toLowerCase().replace(/\s/g, '');
126
+ let attempt = '';
127
+ if (flatAttempt) {
128
+ attempt = flatAttempt.toLowerCase().replace(/\s/g, '');
129
+ }
130
+ if (answer === attempt) {
131
+ data.correct = true;
132
+ }
133
+ else {
134
+ data.incorrect = true;
160
135
  }
161
- index++;
162
136
  }
163
- if (foundCorrect) {
164
- data.correct = true;
165
- data.correctIndex = index;
137
+ else if (models_1.EQuestionType.MULTIPLE_ANSWERS === mark.question.typeId) {
138
+ const [answerA, answerB] = answer.map((x) => x.sort());
139
+ let [attemptA, attemptB] = [[], []];
140
+ if (Array.isArray(mark.mark) &&
141
+ mark.mark.length === 2 &&
142
+ Array.isArray(mark.mark[0]) &&
143
+ Array.isArray(mark.mark[1])) {
144
+ [attemptA, attemptB] = mark.mark.map((x) => x.sort());
145
+ }
146
+ if (answerA.length !== attemptA.length || answerB.length !== attemptB.length) {
147
+ data.incorrect = true;
148
+ }
149
+ else if (attemptA.every((x, i) => x === answerA[i]) &&
150
+ attemptB.every((_, i) => answerB[i])) {
151
+ data.correct = true;
152
+ }
153
+ else {
154
+ data.incorrect = true;
155
+ }
166
156
  }
167
- else {
168
- data.incorrect = true;
157
+ else if (models_1.EQuestionType.PRESCRIPTION_ANSWER === mark.question.typeId) {
158
+ const answers = answer.map(formatPrescribeAnswer);
159
+ let attempt = formatPrescribeAnswer(mapPrescribeMarkToAnswer({
160
+ drug: '',
161
+ dose: -1,
162
+ units: '',
163
+ route: '',
164
+ frequency: '',
165
+ duration: '',
166
+ }));
167
+ if (typeof flatAttempt === 'object' && Object.keys(flatAttempt).length === 6) {
168
+ attempt = formatPrescribeAnswer(mapPrescribeMarkToAnswer(flatAttempt));
169
+ }
170
+ let foundCorrect = false;
171
+ let index = 0;
172
+ for (const answer of answers) {
173
+ if (answer.dose.value === attempt.dose.value &&
174
+ answer.drug.value === attempt.drug.value &&
175
+ answer.duration.value.split(',').includes(attempt.duration.value) &&
176
+ answer.frequency.value === attempt.frequency.value &&
177
+ answer.route.value === attempt.route.value &&
178
+ answer.units.value === attempt.units.value) {
179
+ foundCorrect = true;
180
+ break;
181
+ }
182
+ index++;
183
+ }
184
+ if (foundCorrect) {
185
+ data.correct = true;
186
+ data.correctIndex = index;
187
+ }
188
+ else {
189
+ data.incorrect = true;
190
+ }
169
191
  }
170
192
  }
193
+ catch (e) {
194
+ console.error(e);
195
+ }
171
196
  return data;
172
197
  }
173
198
  exports.correctMark = correctMark;