@purpleschool/student-works 0.0.22 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/api/controller/http/index.ts +1 -0
  2. package/api/controller/http/page.ts +1 -1
  3. package/api/controller/http/solving-edu-task.ts +14 -0
  4. package/api/routes.ts +32 -0
  5. package/build/api/controller/http/index.js +1 -0
  6. package/build/api/controller/http/page.js +1 -1
  7. package/build/api/controller/http/solving-edu-task.js +16 -0
  8. package/build/api/routes.js +22 -0
  9. package/build/commands/index.js +1 -0
  10. package/build/commands/solving-edu-task/delete-all-solving-edu-task-jobs.command.js +10 -0
  11. package/build/commands/solving-edu-task/delete-solving-edu-task-job-by-uuid.command.js +13 -0
  12. package/build/commands/solving-edu-task/execute-solving-edu-task.command.js +30 -0
  13. package/build/commands/solving-edu-task/find-solving-edu-task-job-by-uuid.command.js +14 -0
  14. package/build/commands/solving-edu-task/find-solving-edu-task-jobs.command.js +18 -0
  15. package/build/commands/solving-edu-task/get-solving-edu-task-config.command.js +11 -0
  16. package/build/commands/solving-edu-task/index.js +25 -0
  17. package/build/commands/solving-edu-task/retry-solving-edu-task-job.command.js +23 -0
  18. package/build/commands/solving-edu-task/set-reaction-to-solving-edu-task-job.command.js +28 -0
  19. package/build/commands/solving-edu-task/update-solving-edu-task-job-title.command.js +17 -0
  20. package/build/constants/common/enums/ai-model-status.enum.js +8 -0
  21. package/build/constants/common/enums/index.js +18 -0
  22. package/build/constants/common/enums/job-status.enum.js +9 -0
  23. package/build/constants/common/index.js +17 -0
  24. package/build/constants/errors/errors.js +61 -0
  25. package/build/constants/files/enums/file-type.enum.js +1 -0
  26. package/build/constants/files/file.constants.js +7 -1
  27. package/build/constants/index.js +1 -0
  28. package/build/models/index.js +1 -0
  29. package/build/models/solving-edu-task/attached-file.schema.js +12 -0
  30. package/build/models/solving-edu-task/index.js +20 -0
  31. package/build/models/solving-edu-task/solving-edu-task-config.schema.js +8 -0
  32. package/build/models/solving-edu-task/solving-edu-task-job.schema.js +24 -0
  33. package/build/models/solving-edu-task/solving-edu-task-model.schema.js +24 -0
  34. package/commands/index.ts +1 -0
  35. package/commands/solving-edu-task/delete-all-solving-edu-task-jobs.command.ts +8 -0
  36. package/commands/solving-edu-task/delete-solving-edu-task-job-by-uuid.command.ts +13 -0
  37. package/commands/solving-edu-task/execute-solving-edu-task.command.ts +31 -0
  38. package/commands/solving-edu-task/find-solving-edu-task-job-by-uuid.command.ts +14 -0
  39. package/commands/solving-edu-task/find-solving-edu-task-jobs.command.ts +18 -0
  40. package/commands/solving-edu-task/get-solving-edu-task-config.command.ts +9 -0
  41. package/commands/solving-edu-task/index.ts +9 -0
  42. package/commands/solving-edu-task/retry-solving-edu-task-job.command.ts +25 -0
  43. package/commands/solving-edu-task/set-reaction-to-solving-edu-task-job.command.ts +33 -0
  44. package/commands/solving-edu-task/update-solving-edu-task-job-title.command.ts +19 -0
  45. package/constants/common/enums/ai-model-status.enum.ts +4 -0
  46. package/constants/common/enums/index.ts +2 -0
  47. package/constants/common/enums/job-status.enum.ts +5 -0
  48. package/constants/common/index.ts +1 -0
  49. package/constants/errors/errors.ts +61 -0
  50. package/constants/files/enums/file-type.enum.ts +1 -0
  51. package/constants/files/file.constants.ts +6 -0
  52. package/constants/index.ts +1 -0
  53. package/models/index.ts +1 -0
  54. package/models/solving-edu-task/attached-file.schema.ts +12 -0
  55. package/models/solving-edu-task/index.ts +4 -0
  56. package/models/solving-edu-task/solving-edu-task-config.schema.ts +8 -0
  57. package/models/solving-edu-task/solving-edu-task-job.schema.ts +27 -0
  58. package/models/solving-edu-task/solving-edu-task-model.schema.ts +27 -0
  59. package/package.json +1 -1
@@ -14,3 +14,4 @@ export * from './writer';
14
14
  export * from './files';
15
15
  export * from './user-balance';
16
16
  export * from './page-question';
17
+ export * from './solving-edu-task';
@@ -4,7 +4,7 @@ export const PAGE_ROUTES = {
4
4
  FIND_BY_CRITERIA: 'search',
5
5
  FIND_BY_UUID: (uuid: string) => `${uuid}`,
6
6
  GET_ALL: '',
7
- FIND_BY_ALIAS: (alias: string) => `${alias}`,
7
+ FIND_BY_ALIAS: (alias: string) => `by/alias/${alias}`,
8
8
  CREATE: '',
9
9
  UPDATE: (uuid: string) => `update/${uuid}`,
10
10
  DELETE: (uuid: string) => `delete/${uuid}`,
@@ -0,0 +1,14 @@
1
+ export const SOLVING_EDU_TASK_CONTROLLER_PRIVATE = 'private/solving-edu-task' as const;
2
+ export const SOLVING_EDU_TASK_CONTROLLER_PUBLIC = 'public/solving-edu-task' as const;
3
+
4
+ export const SOLVING_EDU_TASK_ROUTES = {
5
+ CONFIG: 'config',
6
+ EXECUTE: 'execute',
7
+ RETRY: (uuid: string) => `jobs/${uuid}/retry`,
8
+ GET_JOB: (uuid: string) => `jobs/${uuid}`,
9
+ GET_JOBS: 'jobs',
10
+ SET_REACTION: (uuid: string) => `jobs/${uuid}/reaction`,
11
+ UPDATE: (uuid: string) => `jobs/${uuid}`,
12
+ DELETE: (uuid: string) => `jobs/${uuid}`,
13
+ DELETE_ALL: 'jobs',
14
+ } as const;
package/api/routes.ts CHANGED
@@ -207,4 +207,36 @@ export const REST_API = {
207
207
  DELETE: (uuid: string) =>
208
208
  `${ROOT}/${CONTROLLERS.FILE_PUBLIC_CONTROLLER}/${CONTROLLERS.FILE_ROUTES.DELETE(uuid)}`,
209
209
  },
210
+ SOLVING_EDU_TASK_PRIVATE: {
211
+ CONFIG: `${ROOT}/${CONTROLLERS.SOLVING_EDU_TASK_CONTROLLER_PRIVATE}/${CONTROLLERS.SOLVING_EDU_TASK_ROUTES.CONFIG}`,
212
+ EXECUTE: `${ROOT}/${CONTROLLERS.SOLVING_EDU_TASK_CONTROLLER_PRIVATE}/${CONTROLLERS.SOLVING_EDU_TASK_ROUTES.EXECUTE}`,
213
+ GET_JOBS: `${ROOT}/${CONTROLLERS.SOLVING_EDU_TASK_CONTROLLER_PRIVATE}/${CONTROLLERS.SOLVING_EDU_TASK_ROUTES.GET_JOBS}`,
214
+ GET_JOB: (uuid: string) =>
215
+ `${ROOT}/${CONTROLLERS.SOLVING_EDU_TASK_CONTROLLER_PRIVATE}/${CONTROLLERS.SOLVING_EDU_TASK_ROUTES.GET_JOB(uuid)}`,
216
+ UPDATE: (uuid: string) =>
217
+ `${ROOT}/${CONTROLLERS.SOLVING_EDU_TASK_CONTROLLER_PRIVATE}/${CONTROLLERS.SOLVING_EDU_TASK_ROUTES.UPDATE(uuid)}`,
218
+ SET_REACTION: (uuid: string) =>
219
+ `${ROOT}/${CONTROLLERS.SOLVING_EDU_TASK_CONTROLLER_PRIVATE}/${CONTROLLERS.SOLVING_EDU_TASK_ROUTES.SET_REACTION(uuid)}`,
220
+ DELETE: (uuid: string) =>
221
+ `${ROOT}/${CONTROLLERS.SOLVING_EDU_TASK_CONTROLLER_PRIVATE}/${CONTROLLERS.SOLVING_EDU_TASK_ROUTES.DELETE(uuid)}`,
222
+ DELETE_ALL: `${ROOT}/${CONTROLLERS.SOLVING_EDU_TASK_CONTROLLER_PRIVATE}/${CONTROLLERS.SOLVING_EDU_TASK_ROUTES.DELETE_ALL}`,
223
+ RETRY: (uuid: string) =>
224
+ `${ROOT}/${CONTROLLERS.SOLVING_EDU_TASK_CONTROLLER_PRIVATE}/${CONTROLLERS.SOLVING_EDU_TASK_ROUTES.RETRY(uuid)}`,
225
+ },
226
+ SOLVING_EDU_TASK_PUBLIC: {
227
+ CONFIG: `${ROOT}/${CONTROLLERS.SOLVING_EDU_TASK_CONTROLLER_PUBLIC}/${CONTROLLERS.SOLVING_EDU_TASK_ROUTES.CONFIG}`,
228
+ EXECUTE: `${ROOT}/${CONTROLLERS.SOLVING_EDU_TASK_CONTROLLER_PUBLIC}/${CONTROLLERS.SOLVING_EDU_TASK_ROUTES.EXECUTE}`,
229
+ GET_JOBS: `${ROOT}/${CONTROLLERS.SOLVING_EDU_TASK_CONTROLLER_PUBLIC}/${CONTROLLERS.SOLVING_EDU_TASK_ROUTES.GET_JOBS}`,
230
+ GET_JOB: (uuid: string) =>
231
+ `${ROOT}/${CONTROLLERS.SOLVING_EDU_TASK_CONTROLLER_PUBLIC}/${CONTROLLERS.SOLVING_EDU_TASK_ROUTES.GET_JOB(uuid)}`,
232
+ UPDATE: (uuid: string) =>
233
+ `${ROOT}/${CONTROLLERS.SOLVING_EDU_TASK_CONTROLLER_PUBLIC}/${CONTROLLERS.SOLVING_EDU_TASK_ROUTES.UPDATE(uuid)}`,
234
+ SET_REACTION: (uuid: string) =>
235
+ `${ROOT}/${CONTROLLERS.SOLVING_EDU_TASK_CONTROLLER_PUBLIC}/${CONTROLLERS.SOLVING_EDU_TASK_ROUTES.SET_REACTION(uuid)}`,
236
+ DELETE: (uuid: string) =>
237
+ `${ROOT}/${CONTROLLERS.SOLVING_EDU_TASK_CONTROLLER_PUBLIC}/${CONTROLLERS.SOLVING_EDU_TASK_ROUTES.DELETE(uuid)}`,
238
+ DELETE_ALL: `${ROOT}/${CONTROLLERS.SOLVING_EDU_TASK_CONTROLLER_PUBLIC}/${CONTROLLERS.SOLVING_EDU_TASK_ROUTES.DELETE_ALL}`,
239
+ RETRY: (uuid: string) =>
240
+ `${ROOT}/${CONTROLLERS.SOLVING_EDU_TASK_CONTROLLER_PUBLIC}/${CONTROLLERS.SOLVING_EDU_TASK_ROUTES.RETRY(uuid)}`,
241
+ },
210
242
  } as const;
@@ -30,3 +30,4 @@ __exportStar(require("./writer"), exports);
30
30
  __exportStar(require("./files"), exports);
31
31
  __exportStar(require("./user-balance"), exports);
32
32
  __exportStar(require("./page-question"), exports);
33
+ __exportStar(require("./solving-edu-task"), exports);
@@ -6,7 +6,7 @@ exports.PAGE_ROUTES = {
6
6
  FIND_BY_CRITERIA: 'search',
7
7
  FIND_BY_UUID: (uuid) => `${uuid}`,
8
8
  GET_ALL: '',
9
- FIND_BY_ALIAS: (alias) => `${alias}`,
9
+ FIND_BY_ALIAS: (alias) => `by/alias/${alias}`,
10
10
  CREATE: '',
11
11
  UPDATE: (uuid) => `update/${uuid}`,
12
12
  DELETE: (uuid) => `delete/${uuid}`,
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SOLVING_EDU_TASK_ROUTES = exports.SOLVING_EDU_TASK_CONTROLLER_PUBLIC = exports.SOLVING_EDU_TASK_CONTROLLER_PRIVATE = void 0;
4
+ exports.SOLVING_EDU_TASK_CONTROLLER_PRIVATE = 'private/solving-edu-task';
5
+ exports.SOLVING_EDU_TASK_CONTROLLER_PUBLIC = 'public/solving-edu-task';
6
+ exports.SOLVING_EDU_TASK_ROUTES = {
7
+ CONFIG: 'config',
8
+ EXECUTE: 'execute',
9
+ RETRY: (uuid) => `jobs/${uuid}/retry`,
10
+ GET_JOB: (uuid) => `jobs/${uuid}`,
11
+ GET_JOBS: 'jobs',
12
+ SET_REACTION: (uuid) => `jobs/${uuid}/reaction`,
13
+ UPDATE: (uuid) => `jobs/${uuid}`,
14
+ DELETE: (uuid) => `jobs/${uuid}`,
15
+ DELETE_ALL: 'jobs',
16
+ };
@@ -179,4 +179,26 @@ exports.REST_API = {
179
179
  UPLOAD: `${exports.ROOT}/${CONTROLLERS.FILE_PUBLIC_CONTROLLER}/${CONTROLLERS.FILE_ROUTES.UPLOAD}`,
180
180
  DELETE: (uuid) => `${exports.ROOT}/${CONTROLLERS.FILE_PUBLIC_CONTROLLER}/${CONTROLLERS.FILE_ROUTES.DELETE(uuid)}`,
181
181
  },
182
+ SOLVING_EDU_TASK_PRIVATE: {
183
+ CONFIG: `${exports.ROOT}/${CONTROLLERS.SOLVING_EDU_TASK_CONTROLLER_PRIVATE}/${CONTROLLERS.SOLVING_EDU_TASK_ROUTES.CONFIG}`,
184
+ EXECUTE: `${exports.ROOT}/${CONTROLLERS.SOLVING_EDU_TASK_CONTROLLER_PRIVATE}/${CONTROLLERS.SOLVING_EDU_TASK_ROUTES.EXECUTE}`,
185
+ GET_JOBS: `${exports.ROOT}/${CONTROLLERS.SOLVING_EDU_TASK_CONTROLLER_PRIVATE}/${CONTROLLERS.SOLVING_EDU_TASK_ROUTES.GET_JOBS}`,
186
+ GET_JOB: (uuid) => `${exports.ROOT}/${CONTROLLERS.SOLVING_EDU_TASK_CONTROLLER_PRIVATE}/${CONTROLLERS.SOLVING_EDU_TASK_ROUTES.GET_JOB(uuid)}`,
187
+ UPDATE: (uuid) => `${exports.ROOT}/${CONTROLLERS.SOLVING_EDU_TASK_CONTROLLER_PRIVATE}/${CONTROLLERS.SOLVING_EDU_TASK_ROUTES.UPDATE(uuid)}`,
188
+ SET_REACTION: (uuid) => `${exports.ROOT}/${CONTROLLERS.SOLVING_EDU_TASK_CONTROLLER_PRIVATE}/${CONTROLLERS.SOLVING_EDU_TASK_ROUTES.SET_REACTION(uuid)}`,
189
+ DELETE: (uuid) => `${exports.ROOT}/${CONTROLLERS.SOLVING_EDU_TASK_CONTROLLER_PRIVATE}/${CONTROLLERS.SOLVING_EDU_TASK_ROUTES.DELETE(uuid)}`,
190
+ DELETE_ALL: `${exports.ROOT}/${CONTROLLERS.SOLVING_EDU_TASK_CONTROLLER_PRIVATE}/${CONTROLLERS.SOLVING_EDU_TASK_ROUTES.DELETE_ALL}`,
191
+ RETRY: (uuid) => `${exports.ROOT}/${CONTROLLERS.SOLVING_EDU_TASK_CONTROLLER_PRIVATE}/${CONTROLLERS.SOLVING_EDU_TASK_ROUTES.RETRY(uuid)}`,
192
+ },
193
+ SOLVING_EDU_TASK_PUBLIC: {
194
+ CONFIG: `${exports.ROOT}/${CONTROLLERS.SOLVING_EDU_TASK_CONTROLLER_PUBLIC}/${CONTROLLERS.SOLVING_EDU_TASK_ROUTES.CONFIG}`,
195
+ EXECUTE: `${exports.ROOT}/${CONTROLLERS.SOLVING_EDU_TASK_CONTROLLER_PUBLIC}/${CONTROLLERS.SOLVING_EDU_TASK_ROUTES.EXECUTE}`,
196
+ GET_JOBS: `${exports.ROOT}/${CONTROLLERS.SOLVING_EDU_TASK_CONTROLLER_PUBLIC}/${CONTROLLERS.SOLVING_EDU_TASK_ROUTES.GET_JOBS}`,
197
+ GET_JOB: (uuid) => `${exports.ROOT}/${CONTROLLERS.SOLVING_EDU_TASK_CONTROLLER_PUBLIC}/${CONTROLLERS.SOLVING_EDU_TASK_ROUTES.GET_JOB(uuid)}`,
198
+ UPDATE: (uuid) => `${exports.ROOT}/${CONTROLLERS.SOLVING_EDU_TASK_CONTROLLER_PUBLIC}/${CONTROLLERS.SOLVING_EDU_TASK_ROUTES.UPDATE(uuid)}`,
199
+ SET_REACTION: (uuid) => `${exports.ROOT}/${CONTROLLERS.SOLVING_EDU_TASK_CONTROLLER_PUBLIC}/${CONTROLLERS.SOLVING_EDU_TASK_ROUTES.SET_REACTION(uuid)}`,
200
+ DELETE: (uuid) => `${exports.ROOT}/${CONTROLLERS.SOLVING_EDU_TASK_CONTROLLER_PUBLIC}/${CONTROLLERS.SOLVING_EDU_TASK_ROUTES.DELETE(uuid)}`,
201
+ DELETE_ALL: `${exports.ROOT}/${CONTROLLERS.SOLVING_EDU_TASK_CONTROLLER_PUBLIC}/${CONTROLLERS.SOLVING_EDU_TASK_ROUTES.DELETE_ALL}`,
202
+ RETRY: (uuid) => `${exports.ROOT}/${CONTROLLERS.SOLVING_EDU_TASK_CONTROLLER_PUBLIC}/${CONTROLLERS.SOLVING_EDU_TASK_ROUTES.RETRY(uuid)}`,
203
+ },
182
204
  };
@@ -29,3 +29,4 @@ __exportStar(require("./writer"), exports);
29
29
  __exportStar(require("./account-merge"), exports);
30
30
  __exportStar(require("./files"), exports);
31
31
  __exportStar(require("./user-balance"), exports);
32
+ __exportStar(require("./solving-edu-task"), exports);
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DeleteAllSolvingEduTaskJobsCommand = void 0;
4
+ const zod_1 = require("zod");
5
+ var DeleteAllSolvingEduTaskJobsCommand;
6
+ (function (DeleteAllSolvingEduTaskJobsCommand) {
7
+ DeleteAllSolvingEduTaskJobsCommand.ResponseSchema = zod_1.z.object({
8
+ data: zod_1.z.boolean(),
9
+ });
10
+ })(DeleteAllSolvingEduTaskJobsCommand || (exports.DeleteAllSolvingEduTaskJobsCommand = DeleteAllSolvingEduTaskJobsCommand = {}));
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DeleteSolvingEduTaskJobByUUIDCommand = void 0;
4
+ const zod_1 = require("zod");
5
+ var DeleteSolvingEduTaskJobByUUIDCommand;
6
+ (function (DeleteSolvingEduTaskJobByUUIDCommand) {
7
+ DeleteSolvingEduTaskJobByUUIDCommand.RequestParamsSchema = zod_1.z.object({
8
+ uuid: zod_1.z.string().uuid(),
9
+ });
10
+ DeleteSolvingEduTaskJobByUUIDCommand.ResponseSchema = zod_1.z.object({
11
+ data: zod_1.z.boolean(),
12
+ });
13
+ })(DeleteSolvingEduTaskJobByUUIDCommand || (exports.DeleteSolvingEduTaskJobByUUIDCommand = DeleteSolvingEduTaskJobByUUIDCommand = {}));
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExecuteSolvingEduTaskCommand = void 0;
4
+ const zod_1 = require("zod");
5
+ const models_1 = require("../../models");
6
+ var ExecuteSolvingEduTaskCommand;
7
+ (function (ExecuteSolvingEduTaskCommand) {
8
+ ExecuteSolvingEduTaskCommand.RequestSchema = zod_1.z
9
+ .object({
10
+ prompt: zod_1.z.string().optional(),
11
+ modelId: zod_1.z.string().uuid(),
12
+ params: zod_1.z.object({
13
+ attachedFiles: zod_1.z.array(zod_1.z.string().uuid()),
14
+ }),
15
+ })
16
+ .superRefine((data, ctx) => {
17
+ const hasPrompt = typeof data.prompt === 'string' && data.prompt.length > 0;
18
+ const hasAttachedFiles = data.params.attachedFiles.length > 0;
19
+ if (!hasAttachedFiles && !hasPrompt) {
20
+ ctx.addIssue({
21
+ code: zod_1.z.ZodIssueCode.custom,
22
+ message: 'prompt is required when no attachedFiles provided',
23
+ path: ['prompt'],
24
+ });
25
+ }
26
+ });
27
+ ExecuteSolvingEduTaskCommand.ResponseSchema = zod_1.z.object({
28
+ data: models_1.SolvingEduTaskJobSchema,
29
+ });
30
+ })(ExecuteSolvingEduTaskCommand || (exports.ExecuteSolvingEduTaskCommand = ExecuteSolvingEduTaskCommand = {}));
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FindSolvingEduTaskJobByUUIDCommand = void 0;
4
+ const zod_1 = require("zod");
5
+ const models_1 = require("../../models");
6
+ var FindSolvingEduTaskJobByUUIDCommand;
7
+ (function (FindSolvingEduTaskJobByUUIDCommand) {
8
+ FindSolvingEduTaskJobByUUIDCommand.RequestParamsSchema = zod_1.z.object({
9
+ uuid: zod_1.z.string().uuid(),
10
+ });
11
+ FindSolvingEduTaskJobByUUIDCommand.ResponseSchema = zod_1.z.object({
12
+ data: models_1.SolvingEduTaskJobSchema,
13
+ });
14
+ })(FindSolvingEduTaskJobByUUIDCommand || (exports.FindSolvingEduTaskJobByUUIDCommand = FindSolvingEduTaskJobByUUIDCommand = {}));
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FindSolvingEduTaskJobsCommand = void 0;
4
+ const zod_1 = require("zod");
5
+ const models_1 = require("../../models");
6
+ var FindSolvingEduTaskJobsCommand;
7
+ (function (FindSolvingEduTaskJobsCommand) {
8
+ FindSolvingEduTaskJobsCommand.RequestQuerySchema = zod_1.z.object({
9
+ limit: zod_1.z.coerce.number().min(1).optional(),
10
+ offset: zod_1.z.coerce.number().min(0).default(0).optional(),
11
+ title: zod_1.z.string().optional(),
12
+ });
13
+ FindSolvingEduTaskJobsCommand.ResponseSchema = zod_1.z.object({
14
+ data: zod_1.z.array(models_1.SolvingEduTaskJobSchema),
15
+ totalPages: zod_1.z.number(),
16
+ page: zod_1.z.number(),
17
+ });
18
+ })(FindSolvingEduTaskJobsCommand || (exports.FindSolvingEduTaskJobsCommand = FindSolvingEduTaskJobsCommand = {}));
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GetSolvingEduTaskConfigCommand = void 0;
4
+ const zod_1 = require("zod");
5
+ const models_1 = require("../../models");
6
+ var GetSolvingEduTaskConfigCommand;
7
+ (function (GetSolvingEduTaskConfigCommand) {
8
+ GetSolvingEduTaskConfigCommand.ResponseSchema = zod_1.z.object({
9
+ data: models_1.SolvingEduTaskConfigSchema,
10
+ });
11
+ })(GetSolvingEduTaskConfigCommand || (exports.GetSolvingEduTaskConfigCommand = GetSolvingEduTaskConfigCommand = {}));
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./execute-solving-edu-task.command"), exports);
18
+ __exportStar(require("./retry-solving-edu-task-job.command"), exports);
19
+ __exportStar(require("./find-solving-edu-task-job-by-uuid.command"), exports);
20
+ __exportStar(require("./find-solving-edu-task-jobs.command"), exports);
21
+ __exportStar(require("./get-solving-edu-task-config.command"), exports);
22
+ __exportStar(require("./set-reaction-to-solving-edu-task-job.command"), exports);
23
+ __exportStar(require("./update-solving-edu-task-job-title.command"), exports);
24
+ __exportStar(require("./delete-solving-edu-task-job-by-uuid.command"), exports);
25
+ __exportStar(require("./delete-all-solving-edu-task-jobs.command"), exports);
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RetrySolvingEduTaskJobCommand = void 0;
4
+ const zod_1 = require("zod");
5
+ const models_1 = require("../../models");
6
+ var RetrySolvingEduTaskJobCommand;
7
+ (function (RetrySolvingEduTaskJobCommand) {
8
+ RetrySolvingEduTaskJobCommand.RequestParamsSchema = zod_1.z.object({
9
+ uuid: zod_1.z.string().uuid(),
10
+ });
11
+ RetrySolvingEduTaskJobCommand.RequestBodySchema = zod_1.z.object({
12
+ prompt: zod_1.z.string().optional(),
13
+ modelId: zod_1.z.string().uuid().optional(),
14
+ params: zod_1.z
15
+ .object({
16
+ attachedFiles: zod_1.z.array(zod_1.z.string().uuid()),
17
+ })
18
+ .optional(),
19
+ });
20
+ RetrySolvingEduTaskJobCommand.ResponseSchema = zod_1.z.object({
21
+ data: models_1.SolvingEduTaskJobSchema,
22
+ });
23
+ })(RetrySolvingEduTaskJobCommand || (exports.RetrySolvingEduTaskJobCommand = RetrySolvingEduTaskJobCommand = {}));
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SetReactionToSolvingEduTaskJobCommand = void 0;
4
+ const zod_1 = require("zod");
5
+ const models_1 = require("../../models");
6
+ const constants_1 = require("../../constants");
7
+ var SetReactionToSolvingEduTaskJobCommand;
8
+ (function (SetReactionToSolvingEduTaskJobCommand) {
9
+ SetReactionToSolvingEduTaskJobCommand.RequestSchema = zod_1.z
10
+ .object({
11
+ reaction: zod_1.z.nativeEnum(constants_1.USER_REACTION).nullable(),
12
+ dislikeReason: zod_1.z.string().nullable().default(null),
13
+ })
14
+ .refine((data) => {
15
+ if (data.reaction !== constants_1.USER_REACTION.DISLIKED && data.dislikeReason) {
16
+ return false;
17
+ }
18
+ return true;
19
+ }, {
20
+ message: 'Dislike reason is not allowed when reaction is not DISLIKED',
21
+ });
22
+ SetReactionToSolvingEduTaskJobCommand.RequestParamsSchema = zod_1.z.object({
23
+ uuid: zod_1.z.string().uuid(),
24
+ });
25
+ SetReactionToSolvingEduTaskJobCommand.ResponseSchema = zod_1.z.object({
26
+ data: models_1.SolvingEduTaskJobSchema,
27
+ });
28
+ })(SetReactionToSolvingEduTaskJobCommand || (exports.SetReactionToSolvingEduTaskJobCommand = SetReactionToSolvingEduTaskJobCommand = {}));
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UpdateSolvingEduTaskJobTitleCommand = void 0;
4
+ const zod_1 = require("zod");
5
+ const models_1 = require("../../models");
6
+ var UpdateSolvingEduTaskJobTitleCommand;
7
+ (function (UpdateSolvingEduTaskJobTitleCommand) {
8
+ UpdateSolvingEduTaskJobTitleCommand.RequestSchema = zod_1.z.object({
9
+ title: zod_1.z.string(),
10
+ });
11
+ UpdateSolvingEduTaskJobTitleCommand.RequestParamsSchema = zod_1.z.object({
12
+ uuid: zod_1.z.string().uuid(),
13
+ });
14
+ UpdateSolvingEduTaskJobTitleCommand.ResponseSchema = zod_1.z.object({
15
+ data: models_1.SolvingEduTaskJobSchema,
16
+ });
17
+ })(UpdateSolvingEduTaskJobTitleCommand || (exports.UpdateSolvingEduTaskJobTitleCommand = UpdateSolvingEduTaskJobTitleCommand = {}));
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AI_MODEL_STATUS = void 0;
4
+ var AI_MODEL_STATUS;
5
+ (function (AI_MODEL_STATUS) {
6
+ AI_MODEL_STATUS["ACTIVE"] = "active";
7
+ AI_MODEL_STATUS["INACTIVE"] = "inactive";
8
+ })(AI_MODEL_STATUS || (exports.AI_MODEL_STATUS = AI_MODEL_STATUS = {}));
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./job-status.enum"), exports);
18
+ __exportStar(require("./ai-model-status.enum"), exports);
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.JOB_STATUS = void 0;
4
+ var JOB_STATUS;
5
+ (function (JOB_STATUS) {
6
+ JOB_STATUS["PENDING"] = "pending";
7
+ JOB_STATUS["COMPLETED"] = "completed";
8
+ JOB_STATUS["FAILED"] = "failed";
9
+ })(JOB_STATUS || (exports.JOB_STATUS = JOB_STATUS = {}));
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./enums"), exports);
@@ -1112,4 +1112,65 @@ exports.ERRORS = {
1112
1112
  code: 'PAGE_QUESTION_006',
1113
1113
  httpCode: 500,
1114
1114
  },
1115
+ // SOLVING_EDU_TASK
1116
+ SOLVING_EDU_TASK_MODEL_NOT_FOUND: {
1117
+ message: 'Модель решения задач не найдена',
1118
+ code: 'SOLVING_EDU_TASK_001',
1119
+ httpCode: 404,
1120
+ },
1121
+ SOLVING_EDU_TASK_MODEL_INACTIVE: {
1122
+ message: 'Модель решения задач неактивна',
1123
+ code: 'SOLVING_EDU_TASK_002',
1124
+ httpCode: 400,
1125
+ },
1126
+ SOLVING_EDU_TASK_JOB_NOT_FOUND: {
1127
+ message: 'Задача решения не найдена',
1128
+ code: 'SOLVING_EDU_TASK_003',
1129
+ httpCode: 404,
1130
+ },
1131
+ SOLVING_EDU_TASK_JOB_CREATE_ERROR: {
1132
+ message: 'Ошибка при создании задачи решения',
1133
+ code: 'SOLVING_EDU_TASK_004',
1134
+ httpCode: 500,
1135
+ },
1136
+ SOLVING_EDU_TASK_JOB_FIND_ERROR: {
1137
+ message: 'Ошибка при поиске задачи решения',
1138
+ code: 'SOLVING_EDU_TASK_005',
1139
+ httpCode: 500,
1140
+ },
1141
+ SOLVING_EDU_TASK_JOB_SAVE_ERROR: {
1142
+ message: 'Ошибка при сохранении задачи решения',
1143
+ code: 'SOLVING_EDU_TASK_006',
1144
+ httpCode: 500,
1145
+ },
1146
+ SOLVING_EDU_TASK_JOB_DELETE_ERROR: {
1147
+ message: 'Ошибка при удалении задачи решения',
1148
+ code: 'SOLVING_EDU_TASK_007',
1149
+ httpCode: 500,
1150
+ },
1151
+ SOLVING_EDU_TASK_PROMPT_TOO_LONG: {
1152
+ message: 'Текст задачи слишком длинный',
1153
+ code: 'SOLVING_EDU_TASK_008',
1154
+ httpCode: 400,
1155
+ },
1156
+ SOLVING_EDU_TASK_AI_REQUEST_ERROR: {
1157
+ message: 'Ошибка при запросе к AI для решения задачи',
1158
+ code: 'SOLVING_EDU_TASK_009',
1159
+ httpCode: 500,
1160
+ },
1161
+ SOLVING_EDU_TASK_RETRY_INVALID_STATUS: {
1162
+ message: 'Невозможно повторить задачу с текущим статусом',
1163
+ code: 'SOLVING_EDU_TASK_010',
1164
+ httpCode: 400,
1165
+ },
1166
+ SOLVING_EDU_TASK_INVALID_IMAGE_FILE_TYPE: {
1167
+ message: 'Неподдерживаемый тип изображения. Разрешены только JPEG, PNG и WebP',
1168
+ code: 'SOLVING_EDU_TASK_011',
1169
+ httpCode: 400,
1170
+ },
1171
+ SOLVING_EDU_TASK_TOO_MANY_IMAGES: {
1172
+ message: 'Превышено максимальное количество изображений',
1173
+ code: 'SOLVING_EDU_TASK_012',
1174
+ httpCode: 400,
1175
+ },
1115
1176
  };
@@ -5,5 +5,6 @@ var FILE_TYPE;
5
5
  (function (FILE_TYPE) {
6
6
  FILE_TYPE["PDF"] = "pdf";
7
7
  FILE_TYPE["DOCX"] = "docx";
8
+ FILE_TYPE["IMAGE"] = "image";
8
9
  FILE_TYPE["UNKNOWN"] = "unknown";
9
10
  })(FILE_TYPE || (exports.FILE_TYPE = FILE_TYPE = {}));
@@ -1,13 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SUPPORTED_FILES = exports.MAX_DOCX_UPLOAD_SIZE = exports.MAX_PDF_UPLOAD_SIZE = void 0;
3
+ exports.SUPPORTED_FILES = exports.MAX_IMAGE_UPLOAD_SIZE = exports.MAX_DOCX_UPLOAD_SIZE = exports.MAX_PDF_UPLOAD_SIZE = void 0;
4
4
  const enums_1 = require("./enums");
5
5
  exports.MAX_PDF_UPLOAD_SIZE = 5 * 1024 * 1024; // 5 MB
6
6
  exports.MAX_DOCX_UPLOAD_SIZE = 5 * 1024 * 1024; // 5 MB
7
+ exports.MAX_IMAGE_UPLOAD_SIZE = 5 * 1024 * 1024; // 5 MB
7
8
  exports.SUPPORTED_FILES = new Map([
8
9
  ['application/pdf', { type: enums_1.FILE_TYPE.PDF, size: exports.MAX_PDF_UPLOAD_SIZE }],
9
10
  [
10
11
  'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
11
12
  { type: enums_1.FILE_TYPE.DOCX, size: exports.MAX_DOCX_UPLOAD_SIZE },
12
13
  ],
14
+ // Image formats
15
+ ['image/jpeg', { type: enums_1.FILE_TYPE.IMAGE, size: exports.MAX_IMAGE_UPLOAD_SIZE }],
16
+ ['image/jpg', { type: enums_1.FILE_TYPE.IMAGE, size: exports.MAX_IMAGE_UPLOAD_SIZE }],
17
+ ['image/png', { type: enums_1.FILE_TYPE.IMAGE, size: exports.MAX_IMAGE_UPLOAD_SIZE }],
18
+ ['image/webp', { type: enums_1.FILE_TYPE.IMAGE, size: exports.MAX_IMAGE_UPLOAD_SIZE }],
13
19
  ]);
@@ -29,3 +29,4 @@ __exportStar(require("./domains"), exports);
29
29
  __exportStar(require("./page"), exports);
30
30
  __exportStar(require("./writer"), exports);
31
31
  __exportStar(require("./files"), exports);
32
+ __exportStar(require("./common"), exports);
@@ -37,3 +37,4 @@ __exportStar(require("./subscription-upgrade-schema"), exports);
37
37
  __exportStar(require("./referral-bonus.schema"), exports);
38
38
  __exportStar(require("./user-referrals.schema"), exports);
39
39
  __exportStar(require("./file.schema"), exports);
40
+ __exportStar(require("./solving-edu-task"), exports);
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AttachedFileSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ exports.AttachedFileSchema = zod_1.z.object({
6
+ uuid: zod_1.z.string().uuid(),
7
+ url: zod_1.z.string(),
8
+ name: zod_1.z.string(),
9
+ mimeType: zod_1.z.string(),
10
+ type: zod_1.z.string(),
11
+ size: zod_1.z.number(),
12
+ });
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./solving-edu-task-model.schema"), exports);
18
+ __exportStar(require("./solving-edu-task-job.schema"), exports);
19
+ __exportStar(require("./solving-edu-task-config.schema"), exports);
20
+ __exportStar(require("./attached-file.schema"), exports);
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SolvingEduTaskConfigSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ const solving_edu_task_model_schema_1 = require("./solving-edu-task-model.schema");
6
+ exports.SolvingEduTaskConfigSchema = zod_1.z.object({
7
+ models: zod_1.z.array(solving_edu_task_model_schema_1.SolvingEduTaskModelSchema),
8
+ });
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SolvingEduTaskJobSchema = exports.SolvingEduTaskJobParamsSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ const constants_1 = require("../../constants");
6
+ const attached_file_schema_1 = require("./attached-file.schema");
7
+ exports.SolvingEduTaskJobParamsSchema = zod_1.z.object({
8
+ attachedFiles: zod_1.z.array(attached_file_schema_1.AttachedFileSchema),
9
+ });
10
+ exports.SolvingEduTaskJobSchema = zod_1.z.object({
11
+ uuid: zod_1.z.string().uuid(),
12
+ prompt: zod_1.z.string(),
13
+ aiOutput: zod_1.z.string().nullable().optional(),
14
+ reaction: zod_1.z.nativeEnum(constants_1.USER_REACTION).nullable(),
15
+ title: zod_1.z.string(),
16
+ status: zod_1.z.nativeEnum(constants_1.JOB_STATUS),
17
+ modelId: zod_1.z.string().uuid(),
18
+ price: zod_1.z.number(),
19
+ params: exports.SolvingEduTaskJobParamsSchema,
20
+ error: zod_1.z.string().nullable(),
21
+ userId: zod_1.z.string().uuid().nullable().optional(),
22
+ createdAt: zod_1.z.date(),
23
+ updatedAt: zod_1.z.date(),
24
+ });
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SolvingEduTaskModelSchema = exports.SolvingEduTaskModelParamsSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ const constants_1 = require("../../constants");
6
+ const icon_variants_schema_1 = require("../icon-variants.schema");
7
+ exports.SolvingEduTaskModelParamsSchema = zod_1.z.object({
8
+ imageAttachment: zod_1.z.object({
9
+ supported: zod_1.z.boolean(),
10
+ maxImages: zod_1.z.number(),
11
+ acceptedTypes: zod_1.z.array(zod_1.z.string()),
12
+ }),
13
+ });
14
+ exports.SolvingEduTaskModelSchema = zod_1.z.object({
15
+ uuid: zod_1.z.string().uuid(),
16
+ title: zod_1.z.string(),
17
+ description: zod_1.z.string(),
18
+ price: zod_1.z.number(),
19
+ order: zod_1.z.number(),
20
+ status: zod_1.z.nativeEnum(constants_1.AI_MODEL_STATUS),
21
+ maxPromptLength: zod_1.z.number(),
22
+ params: exports.SolvingEduTaskModelParamsSchema,
23
+ icons: icon_variants_schema_1.IconVariantsSchema,
24
+ });
package/commands/index.ts CHANGED
@@ -13,3 +13,4 @@ export * from './writer';
13
13
  export * from './account-merge';
14
14
  export * from './files';
15
15
  export * from './user-balance';
16
+ export * from './solving-edu-task';
@@ -0,0 +1,8 @@
1
+ import { z } from 'zod';
2
+
3
+ export namespace DeleteAllSolvingEduTaskJobsCommand {
4
+ export const ResponseSchema = z.object({
5
+ data: z.boolean(),
6
+ });
7
+ export type Response = z.infer<typeof ResponseSchema>;
8
+ }
@@ -0,0 +1,13 @@
1
+ import { z } from 'zod';
2
+
3
+ export namespace DeleteSolvingEduTaskJobByUUIDCommand {
4
+ export const RequestParamsSchema = z.object({
5
+ uuid: z.string().uuid(),
6
+ });
7
+ export type RequestParams = z.infer<typeof RequestParamsSchema>;
8
+
9
+ export const ResponseSchema = z.object({
10
+ data: z.boolean(),
11
+ });
12
+ export type Response = z.infer<typeof ResponseSchema>;
13
+ }
@@ -0,0 +1,31 @@
1
+ import { z } from 'zod';
2
+ import { SolvingEduTaskJobSchema } from '../../models';
3
+
4
+ export namespace ExecuteSolvingEduTaskCommand {
5
+ export const RequestSchema = z
6
+ .object({
7
+ prompt: z.string().optional(),
8
+ modelId: z.string().uuid(),
9
+ params: z.object({
10
+ attachedFiles: z.array(z.string().uuid()),
11
+ }),
12
+ })
13
+ .superRefine((data, ctx) => {
14
+ const hasPrompt = typeof data.prompt === 'string' && data.prompt.length > 0;
15
+ const hasAttachedFiles = data.params.attachedFiles.length > 0;
16
+
17
+ if (!hasAttachedFiles && !hasPrompt) {
18
+ ctx.addIssue({
19
+ code: z.ZodIssueCode.custom,
20
+ message: 'prompt is required when no attachedFiles provided',
21
+ path: ['prompt'],
22
+ });
23
+ }
24
+ });
25
+ export type Request = z.infer<typeof RequestSchema>;
26
+
27
+ export const ResponseSchema = z.object({
28
+ data: SolvingEduTaskJobSchema,
29
+ });
30
+ export type Response = z.infer<typeof ResponseSchema>;
31
+ }
@@ -0,0 +1,14 @@
1
+ import { z } from 'zod';
2
+ import { SolvingEduTaskJobSchema } from '../../models';
3
+
4
+ export namespace FindSolvingEduTaskJobByUUIDCommand {
5
+ export const RequestParamsSchema = z.object({
6
+ uuid: z.string().uuid(),
7
+ });
8
+ export type RequestParams = z.infer<typeof RequestParamsSchema>;
9
+
10
+ export const ResponseSchema = z.object({
11
+ data: SolvingEduTaskJobSchema,
12
+ });
13
+ export type Response = z.infer<typeof ResponseSchema>;
14
+ }
@@ -0,0 +1,18 @@
1
+ import { z } from 'zod';
2
+ import { SolvingEduTaskJobSchema } from '../../models';
3
+
4
+ export namespace FindSolvingEduTaskJobsCommand {
5
+ export const RequestQuerySchema = z.object({
6
+ limit: z.coerce.number().min(1).optional(),
7
+ offset: z.coerce.number().min(0).default(0).optional(),
8
+ title: z.string().optional(),
9
+ });
10
+ export type RequestQuery = z.infer<typeof RequestQuerySchema>;
11
+
12
+ export const ResponseSchema = z.object({
13
+ data: z.array(SolvingEduTaskJobSchema),
14
+ totalPages: z.number(),
15
+ page: z.number(),
16
+ });
17
+ export type Response = z.infer<typeof ResponseSchema>;
18
+ }
@@ -0,0 +1,9 @@
1
+ import { z } from 'zod';
2
+ import { SolvingEduTaskConfigSchema } from '../../models';
3
+
4
+ export namespace GetSolvingEduTaskConfigCommand {
5
+ export const ResponseSchema = z.object({
6
+ data: SolvingEduTaskConfigSchema,
7
+ });
8
+ export type Response = z.infer<typeof ResponseSchema>;
9
+ }
@@ -0,0 +1,9 @@
1
+ export * from './execute-solving-edu-task.command';
2
+ export * from './retry-solving-edu-task-job.command';
3
+ export * from './find-solving-edu-task-job-by-uuid.command';
4
+ export * from './find-solving-edu-task-jobs.command';
5
+ export * from './get-solving-edu-task-config.command';
6
+ export * from './set-reaction-to-solving-edu-task-job.command';
7
+ export * from './update-solving-edu-task-job-title.command';
8
+ export * from './delete-solving-edu-task-job-by-uuid.command';
9
+ export * from './delete-all-solving-edu-task-jobs.command';
@@ -0,0 +1,25 @@
1
+ import { z } from 'zod';
2
+ import { SolvingEduTaskJobSchema } from '../../models';
3
+
4
+ export namespace RetrySolvingEduTaskJobCommand {
5
+ export const RequestParamsSchema = z.object({
6
+ uuid: z.string().uuid(),
7
+ });
8
+ export type RequestParams = z.infer<typeof RequestParamsSchema>;
9
+
10
+ export const RequestBodySchema = z.object({
11
+ prompt: z.string().optional(),
12
+ modelId: z.string().uuid().optional(),
13
+ params: z
14
+ .object({
15
+ attachedFiles: z.array(z.string().uuid()),
16
+ })
17
+ .optional(),
18
+ });
19
+ export type RequestBody = z.infer<typeof RequestBodySchema>;
20
+
21
+ export const ResponseSchema = z.object({
22
+ data: SolvingEduTaskJobSchema,
23
+ });
24
+ export type Response = z.infer<typeof ResponseSchema>;
25
+ }
@@ -0,0 +1,33 @@
1
+ import { z } from 'zod';
2
+ import { SolvingEduTaskJobSchema } from '../../models';
3
+ import { USER_REACTION } from '../../constants';
4
+
5
+ export namespace SetReactionToSolvingEduTaskJobCommand {
6
+ export const RequestSchema = z
7
+ .object({
8
+ reaction: z.nativeEnum(USER_REACTION).nullable(),
9
+ dislikeReason: z.string().nullable().default(null),
10
+ })
11
+ .refine(
12
+ (data) => {
13
+ if (data.reaction !== USER_REACTION.DISLIKED && data.dislikeReason) {
14
+ return false;
15
+ }
16
+ return true;
17
+ },
18
+ {
19
+ message: 'Dislike reason is not allowed when reaction is not DISLIKED',
20
+ },
21
+ );
22
+ export type Request = z.infer<typeof RequestSchema>;
23
+
24
+ export const RequestParamsSchema = z.object({
25
+ uuid: z.string().uuid(),
26
+ });
27
+ export type RequestParams = z.infer<typeof RequestParamsSchema>;
28
+
29
+ export const ResponseSchema = z.object({
30
+ data: SolvingEduTaskJobSchema,
31
+ });
32
+ export type Response = z.infer<typeof ResponseSchema>;
33
+ }
@@ -0,0 +1,19 @@
1
+ import { z } from 'zod';
2
+ import { SolvingEduTaskJobSchema } from '../../models';
3
+
4
+ export namespace UpdateSolvingEduTaskJobTitleCommand {
5
+ export const RequestSchema = z.object({
6
+ title: z.string(),
7
+ });
8
+ export type Request = z.infer<typeof RequestSchema>;
9
+
10
+ export const RequestParamsSchema = z.object({
11
+ uuid: z.string().uuid(),
12
+ });
13
+ export type RequestParams = z.infer<typeof RequestParamsSchema>;
14
+
15
+ export const ResponseSchema = z.object({
16
+ data: SolvingEduTaskJobSchema,
17
+ });
18
+ export type Response = z.infer<typeof ResponseSchema>;
19
+ }
@@ -0,0 +1,4 @@
1
+ export enum AI_MODEL_STATUS {
2
+ ACTIVE = 'active',
3
+ INACTIVE = 'inactive',
4
+ }
@@ -0,0 +1,2 @@
1
+ export * from './job-status.enum';
2
+ export * from './ai-model-status.enum';
@@ -0,0 +1,5 @@
1
+ export enum JOB_STATUS {
2
+ PENDING = 'pending',
3
+ COMPLETED = 'completed',
4
+ FAILED = 'failed',
5
+ }
@@ -0,0 +1 @@
1
+ export * from './enums';
@@ -1116,4 +1116,65 @@ export const ERRORS = {
1116
1116
  code: 'PAGE_QUESTION_006',
1117
1117
  httpCode: 500,
1118
1118
  },
1119
+ // SOLVING_EDU_TASK
1120
+ SOLVING_EDU_TASK_MODEL_NOT_FOUND: {
1121
+ message: 'Модель решения задач не найдена',
1122
+ code: 'SOLVING_EDU_TASK_001',
1123
+ httpCode: 404,
1124
+ },
1125
+ SOLVING_EDU_TASK_MODEL_INACTIVE: {
1126
+ message: 'Модель решения задач неактивна',
1127
+ code: 'SOLVING_EDU_TASK_002',
1128
+ httpCode: 400,
1129
+ },
1130
+ SOLVING_EDU_TASK_JOB_NOT_FOUND: {
1131
+ message: 'Задача решения не найдена',
1132
+ code: 'SOLVING_EDU_TASK_003',
1133
+ httpCode: 404,
1134
+ },
1135
+ SOLVING_EDU_TASK_JOB_CREATE_ERROR: {
1136
+ message: 'Ошибка при создании задачи решения',
1137
+ code: 'SOLVING_EDU_TASK_004',
1138
+ httpCode: 500,
1139
+ },
1140
+ SOLVING_EDU_TASK_JOB_FIND_ERROR: {
1141
+ message: 'Ошибка при поиске задачи решения',
1142
+ code: 'SOLVING_EDU_TASK_005',
1143
+ httpCode: 500,
1144
+ },
1145
+ SOLVING_EDU_TASK_JOB_SAVE_ERROR: {
1146
+ message: 'Ошибка при сохранении задачи решения',
1147
+ code: 'SOLVING_EDU_TASK_006',
1148
+ httpCode: 500,
1149
+ },
1150
+ SOLVING_EDU_TASK_JOB_DELETE_ERROR: {
1151
+ message: 'Ошибка при удалении задачи решения',
1152
+ code: 'SOLVING_EDU_TASK_007',
1153
+ httpCode: 500,
1154
+ },
1155
+ SOLVING_EDU_TASK_PROMPT_TOO_LONG: {
1156
+ message: 'Текст задачи слишком длинный',
1157
+ code: 'SOLVING_EDU_TASK_008',
1158
+ httpCode: 400,
1159
+ },
1160
+ SOLVING_EDU_TASK_AI_REQUEST_ERROR: {
1161
+ message: 'Ошибка при запросе к AI для решения задачи',
1162
+ code: 'SOLVING_EDU_TASK_009',
1163
+ httpCode: 500,
1164
+ },
1165
+ SOLVING_EDU_TASK_RETRY_INVALID_STATUS: {
1166
+ message: 'Невозможно повторить задачу с текущим статусом',
1167
+ code: 'SOLVING_EDU_TASK_010',
1168
+ httpCode: 400,
1169
+ },
1170
+ SOLVING_EDU_TASK_INVALID_IMAGE_FILE_TYPE: {
1171
+ message: 'Неподдерживаемый тип изображения. Разрешены только JPEG, PNG и WebP',
1172
+ code: 'SOLVING_EDU_TASK_011',
1173
+ httpCode: 400,
1174
+ },
1175
+ SOLVING_EDU_TASK_TOO_MANY_IMAGES: {
1176
+ message: 'Превышено максимальное количество изображений',
1177
+ code: 'SOLVING_EDU_TASK_012',
1178
+ httpCode: 400,
1179
+ },
1119
1180
  };
@@ -1,5 +1,6 @@
1
1
  export enum FILE_TYPE {
2
2
  PDF = 'pdf',
3
3
  DOCX = 'docx',
4
+ IMAGE = 'image',
4
5
  UNKNOWN = 'unknown',
5
6
  }
@@ -2,6 +2,7 @@ import { FILE_TYPE } from './enums';
2
2
 
3
3
  export const MAX_PDF_UPLOAD_SIZE = 5 * 1024 * 1024; // 5 MB
4
4
  export const MAX_DOCX_UPLOAD_SIZE = 5 * 1024 * 1024; // 5 MB
5
+ export const MAX_IMAGE_UPLOAD_SIZE = 5 * 1024 * 1024; // 5 MB
5
6
 
6
7
  export const SUPPORTED_FILES = new Map<
7
8
  string,
@@ -15,4 +16,9 @@ export const SUPPORTED_FILES = new Map<
15
16
  'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
16
17
  { type: FILE_TYPE.DOCX, size: MAX_DOCX_UPLOAD_SIZE },
17
18
  ],
19
+ // Image formats
20
+ ['image/jpeg', { type: FILE_TYPE.IMAGE, size: MAX_IMAGE_UPLOAD_SIZE }],
21
+ ['image/jpg', { type: FILE_TYPE.IMAGE, size: MAX_IMAGE_UPLOAD_SIZE }],
22
+ ['image/png', { type: FILE_TYPE.IMAGE, size: MAX_IMAGE_UPLOAD_SIZE }],
23
+ ['image/webp', { type: FILE_TYPE.IMAGE, size: MAX_IMAGE_UPLOAD_SIZE }],
18
24
  ]);
@@ -13,3 +13,4 @@ export * from './domains';
13
13
  export * from './page';
14
14
  export * from './writer';
15
15
  export * from './files';
16
+ export * from './common';
package/models/index.ts CHANGED
@@ -21,3 +21,4 @@ export * from './subscription-upgrade-schema';
21
21
  export * from './referral-bonus.schema';
22
22
  export * from './user-referrals.schema';
23
23
  export * from './file.schema';
24
+ export * from './solving-edu-task';
@@ -0,0 +1,12 @@
1
+ import { z } from 'zod';
2
+
3
+ export const AttachedFileSchema = z.object({
4
+ uuid: z.string().uuid(),
5
+ url: z.string(),
6
+ name: z.string(),
7
+ mimeType: z.string(),
8
+ type: z.string(),
9
+ size: z.number(),
10
+ });
11
+
12
+ export type AttachedFile = z.infer<typeof AttachedFileSchema>;
@@ -0,0 +1,4 @@
1
+ export * from './solving-edu-task-model.schema';
2
+ export * from './solving-edu-task-job.schema';
3
+ export * from './solving-edu-task-config.schema';
4
+ export * from './attached-file.schema';
@@ -0,0 +1,8 @@
1
+ import { z } from 'zod';
2
+ import { SolvingEduTaskModelSchema } from './solving-edu-task-model.schema';
3
+
4
+ export const SolvingEduTaskConfigSchema = z.object({
5
+ models: z.array(SolvingEduTaskModelSchema),
6
+ });
7
+
8
+ export type SolvingEduTaskConfig = z.infer<typeof SolvingEduTaskConfigSchema>;
@@ -0,0 +1,27 @@
1
+ import { z } from 'zod';
2
+ import { USER_REACTION, JOB_STATUS } from '../../constants';
3
+ import { AttachedFileSchema } from './attached-file.schema';
4
+
5
+ export const SolvingEduTaskJobParamsSchema = z.object({
6
+ attachedFiles: z.array(AttachedFileSchema),
7
+ });
8
+
9
+ export type SolvingEduTaskJobParams = z.infer<typeof SolvingEduTaskJobParamsSchema>;
10
+
11
+ export const SolvingEduTaskJobSchema = z.object({
12
+ uuid: z.string().uuid(),
13
+ prompt: z.string(),
14
+ aiOutput: z.string().nullable().optional(),
15
+ reaction: z.nativeEnum(USER_REACTION).nullable(),
16
+ title: z.string(),
17
+ status: z.nativeEnum(JOB_STATUS),
18
+ modelId: z.string().uuid(),
19
+ price: z.number(),
20
+ params: SolvingEduTaskJobParamsSchema,
21
+ error: z.string().nullable(),
22
+ userId: z.string().uuid().nullable().optional(),
23
+ createdAt: z.date(),
24
+ updatedAt: z.date(),
25
+ });
26
+
27
+ export type SolvingEduTaskJob = z.infer<typeof SolvingEduTaskJobSchema>;
@@ -0,0 +1,27 @@
1
+ import { z } from 'zod';
2
+ import { AI_MODEL_STATUS } from '../../constants';
3
+ import { IconVariantsSchema } from '../icon-variants.schema';
4
+
5
+ export const SolvingEduTaskModelParamsSchema = z.object({
6
+ imageAttachment: z.object({
7
+ supported: z.boolean(),
8
+ maxImages: z.number(),
9
+ acceptedTypes: z.array(z.string()),
10
+ }),
11
+ });
12
+
13
+ export type SolvingEduTaskModelParams = z.infer<typeof SolvingEduTaskModelParamsSchema>;
14
+
15
+ export const SolvingEduTaskModelSchema = z.object({
16
+ uuid: z.string().uuid(),
17
+ title: z.string(),
18
+ description: z.string(),
19
+ price: z.number(),
20
+ order: z.number(),
21
+ status: z.nativeEnum(AI_MODEL_STATUS),
22
+ maxPromptLength: z.number(),
23
+ params: SolvingEduTaskModelParamsSchema,
24
+ icons: IconVariantsSchema,
25
+ });
26
+
27
+ export type SolvingEduTaskModel = z.infer<typeof SolvingEduTaskModelSchema>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@purpleschool/student-works",
3
- "version": "0.0.22",
3
+ "version": "1.0.0",
4
4
  "description": "",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",