biz-slide-core 1.2.4 → 1.2.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. package/{entity → dist/entity}/template-type.entity.js +1 -0
  2. package/dist/package-lock.json +1770 -0
  3. package/dist/package.json +23 -0
  4. package/{utilities → dist/utilities}/callWithRetries.js +1 -1
  5. package/package.json +1 -1
  6. package/src/entity/image.entity.ts +34 -0
  7. package/src/entity/index.ts +13 -0
  8. package/src/entity/png-svg.entity.ts +36 -0
  9. package/src/entity/ppt-event.entity.ts +23 -0
  10. package/src/entity/ppt-slide.entity.ts +31 -0
  11. package/src/entity/ppt.entity.ts +42 -0
  12. package/src/entity/slide-layout.entity.ts +24 -0
  13. package/src/entity/slide.entity.ts +47 -0
  14. package/src/entity/socket.entity.ts +22 -0
  15. package/src/entity/template-type.entity.ts +55 -0
  16. package/src/entity/template.entity.ts +37 -0
  17. package/src/entity/training-queue.entity.ts +24 -0
  18. package/src/entity/user.entity.ts +26 -0
  19. package/src/index.ts +5 -0
  20. package/src/middleware/authentication.ts +68 -0
  21. package/src/middleware/index.ts +3 -0
  22. package/src/middleware/role.ts +5 -0
  23. package/src/middleware/schemaValidate.ts +20 -0
  24. package/src/resHandler/errorHandler.ts +44 -0
  25. package/src/resHandler/index.ts +2 -0
  26. package/src/resHandler/successHandler.ts +11 -0
  27. package/src/types/IController.ts +6 -0
  28. package/src/types/IRequest.ts +8 -0
  29. package/src/types/index.ts +11 -0
  30. package/src/utilities/callWithRetries.ts +9 -0
  31. package/src/utilities/createFolder.ts +12 -0
  32. package/src/utilities/encryptionUtils.ts +26 -0
  33. package/src/utilities/index.ts +5 -0
  34. package/src/utilities/pngSvgCategories.ts +167 -0
  35. package/tsconfig.json +11 -0
  36. /package/{entity → dist/entity}/image.entity.js +0 -0
  37. /package/{entity → dist/entity}/index.js +0 -0
  38. /package/{entity → dist/entity}/png-svg.entity.js +0 -0
  39. /package/{entity → dist/entity}/ppt-event.entity.js +0 -0
  40. /package/{entity → dist/entity}/ppt-slide.entity.js +0 -0
  41. /package/{entity → dist/entity}/ppt.entity.js +0 -0
  42. /package/{entity → dist/entity}/slide-layout.entity.js +0 -0
  43. /package/{entity → dist/entity}/slide.entity.js +0 -0
  44. /package/{entity → dist/entity}/socket.entity.js +0 -0
  45. /package/{entity → dist/entity}/template.entity.js +0 -0
  46. /package/{entity → dist/entity}/training-queue.entity.js +0 -0
  47. /package/{entity → dist/entity}/user.entity.js +0 -0
  48. /package/{index.js → dist/index.js} +0 -0
  49. /package/{middleware → dist/middleware}/authentication.js +0 -0
  50. /package/{middleware → dist/middleware}/index.js +0 -0
  51. /package/{middleware → dist/middleware}/role.js +0 -0
  52. /package/{middleware → dist/middleware}/schemaValidate.js +0 -0
  53. /package/{resHandler → dist/resHandler}/errorHandler.js +0 -0
  54. /package/{resHandler → dist/resHandler}/index.js +0 -0
  55. /package/{resHandler → dist/resHandler}/successHandler.js +0 -0
  56. /package/{types → dist/types}/IController.js +0 -0
  57. /package/{types → dist/types}/IRequest.js +0 -0
  58. /package/{types → dist/types}/index.js +0 -0
  59. /package/{utilities → dist/utilities}/createFolder.js +0 -0
  60. /package/{utilities → dist/utilities}/encryptionUtils.js +0 -0
  61. /package/{utilities → dist/utilities}/index.js +0 -0
  62. /package/{utilities → dist/utilities}/pngSvgCategories.js +0 -0
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "biz-slide-core",
3
+ "version": "1.2.6",
4
+ "description": "",
5
+ "main": "dist/index.js",
6
+ "scripts": {
7
+ "build": "tsc",
8
+ "test": "echo \"Error: no test specified\" && exit 1"
9
+ },
10
+ "keywords": [],
11
+ "author": "",
12
+ "license": "ISC",
13
+ "dependencies": {
14
+ "express": "^4.18.2",
15
+ "joi": "^17.11.0",
16
+ "jsonwebtoken": "^9.0.2",
17
+ "typescript": "^5.3.3"
18
+ },
19
+ "devDependencies": {
20
+ "@types/express": "^4.17.21",
21
+ "@types/jsonwebtoken": "^9.0.5"
22
+ }
23
+ }
@@ -63,7 +63,7 @@ function callWithRetries(retryCount, failedMessage, functionRef) {
63
63
  error_1 = _a.sent();
64
64
  if (retryCount <= 0)
65
65
  throw error_1;
66
- console.log(failedMessage);
66
+ console.log(error_1, failedMessage);
67
67
  return [2 /*return*/, callWithRetries.apply(void 0, __spreadArray([retryCount - 1, failedMessage, functionRef], args, false))];
68
68
  case 3: return [2 /*return*/];
69
69
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "biz-slide-core",
3
- "version": "1.2.4",
3
+ "version": "1.2.6",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -0,0 +1,34 @@
1
+ import { Schema, model, Types } from "mongoose";
2
+
3
+ export interface IImageSchema {
4
+ focusPoint: { x: number, y: number };
5
+ url: string;
6
+ radius: string;
7
+ keywords: [string] | null;
8
+ title: string;
9
+ aliasName: string;
10
+ userId: Types.ObjectId;
11
+ createdAt: Date;
12
+ updatedAt: Date;
13
+ deletedAt: Date;
14
+ }
15
+
16
+ const ImageSchema = new Schema<IImageSchema>(
17
+ {
18
+ focusPoint: { x: Number, y: Number },
19
+ url: { type: String, required: true },
20
+ radius: { type: String, required: true },
21
+ aliasName: { type: String, required: true },
22
+ keywords: { type: [String], default: [] },
23
+ title: { type: String, required: true },
24
+ userId: { type: Schema.Types.ObjectId, ref: "user" },
25
+ createdAt: { type: Date, default: Date.now() },
26
+ updatedAt: { type: Date, default: Date.now() },
27
+ deletedAt: { type: Date, default: null },
28
+ },
29
+ {
30
+ timestamps: true,
31
+ }
32
+ );
33
+
34
+ export const ImageModel = model<IImageSchema>("image", ImageSchema);
@@ -0,0 +1,13 @@
1
+ export * from "./image.entity";
2
+ export * from "./png-svg.entity";
3
+ export * from "./ppt-event.entity";
4
+ export * from "./ppt-slide.entity";
5
+ export * from "./ppt.entity";
6
+ export * from "./slide-layout.entity";
7
+ export * from "./slide.entity";
8
+ export * from "./socket.entity";
9
+ export * from "./template.entity";
10
+ export * from "./template-type.entity";
11
+ export * from "./user.entity";
12
+ export * from "./training-queue.entity";
13
+
@@ -0,0 +1,36 @@
1
+ import { Schema, model } from "mongoose";
2
+
3
+ export interface IPngSvgSchema {
4
+ title: string;
5
+ styleCategory: string;
6
+ styleSubCategory: string;
7
+ colors: Array<string>;
8
+ userId: string;
9
+ isLocked?: boolean;
10
+ isCompleted?: boolean;
11
+ isDownloaded?: boolean;
12
+ createdAt?: Date;
13
+ updatedAt?: Date;
14
+ deletedAt?: Date;
15
+ }
16
+
17
+ const PngSvgSchema = new Schema<IPngSvgSchema>(
18
+ {
19
+ createdAt: { type: Date, default: Date.now() },
20
+ updatedAt: { type: Date, default: Date.now() },
21
+ deletedAt: { type: Date, default: null },
22
+ isLocked: { type: Boolean, default: false },
23
+ isDownloaded: { type: Boolean, default: false },
24
+ isCompleted: { type: Boolean, default: false },
25
+ userId: { type: String, default: null },
26
+ title: { type: String, default: null },
27
+ styleCategory: { type: String, default: null },
28
+ styleSubCategory: { type: String, default: null },
29
+ colors: { type: [{ type: String, default: null }], default: null, _id: false }
30
+ },
31
+ {
32
+ timestamps: true,
33
+ }
34
+ );
35
+
36
+ export const PngSvgModel = model<IPngSvgSchema>("png-svg", PngSvgSchema);
@@ -0,0 +1,23 @@
1
+ import { Schema, model, Types } from "mongoose";
2
+
3
+
4
+ export interface IPPTEventSchema {
5
+ pptRef: Types.ObjectId;
6
+ message: string;
7
+ createdAt?: Date;
8
+ updatedAt?: Date;
9
+ }
10
+
11
+ const PPTEventSchema = new Schema<IPPTEventSchema>(
12
+ {
13
+ createdAt: { type: Date, default: Date.now() },
14
+ updatedAt: { type: Date, default: Date.now() },
15
+ pptRef: { type: Schema.Types.ObjectId, ref: 'ppt' },
16
+ message: { type: String, default: null }
17
+ },
18
+ {
19
+ timestamps: true,
20
+ }
21
+ );
22
+
23
+ export const PPTSlideEventModel = model<IPPTEventSchema>("ppt-event", PPTEventSchema);
@@ -0,0 +1,31 @@
1
+ import { Schema, model, Types } from "mongoose";
2
+ export interface IPPTSlideSchema {
3
+ pptRef: Types.ObjectId;
4
+ slideRef: Types.ObjectId;
5
+ slideLayoutRef: Types.ObjectId;
6
+ title: string;
7
+ rawData: string;
8
+ images: string;
9
+ createdAt?: Date;
10
+ updatedAt?: Date;
11
+ deletedAt?: Date;
12
+ }
13
+
14
+ const PPTSlideSchema = new Schema<IPPTSlideSchema>(
15
+ {
16
+ createdAt: { type: Date, default: Date.now() },
17
+ updatedAt: { type: Date, default: Date.now() },
18
+ deletedAt: { type: Date, default: null },
19
+ pptRef: { type: Schema.Types.ObjectId, ref: 'ppt' },
20
+ slideRef: { type: Schema.Types.ObjectId, ref: 'slide' },
21
+ slideLayoutRef: { type: Schema.Types.ObjectId, ref: 'slide-layout' },
22
+ title: { type: String, default: null },
23
+ rawData: { type: String, default: "{}" },
24
+ images: { type: String, default: "{}" },
25
+ },
26
+ {
27
+ timestamps: true,
28
+ }
29
+ );
30
+
31
+ export const PPTSlideModel = model<IPPTSlideSchema>("ppt-slide", PPTSlideSchema);
@@ -0,0 +1,42 @@
1
+ import { Schema, model, Types } from "mongoose";
2
+
3
+ export interface IPPTSchema {
4
+ systemGeneratedtopics: Array<string>;
5
+ colors: Array<string>;
6
+ slideRefs: Types.ObjectId[];
7
+ templateId: Types.ObjectId;
8
+ templateTypeId: Types.ObjectId;
9
+ prompt: string;
10
+ userId: string;
11
+ questions: Array<string>;
12
+ isLocked?: boolean;
13
+ fileCreated?: boolean;
14
+ isCompleted?: boolean;
15
+ createdAt?: Date;
16
+ updatedAt?: Date;
17
+ deletedAt?: Date;
18
+ }
19
+
20
+ const PPTSchema = new Schema<IPPTSchema>(
21
+ {
22
+ createdAt: { type: Date, default: Date.now() },
23
+ updatedAt: { type: Date, default: Date.now() },
24
+ deletedAt: { type: Date, default: null },
25
+ isLocked: { type: Boolean, default: false },
26
+ isCompleted: { type: Boolean, default: false },
27
+ fileCreated: { type: Boolean, default: false },
28
+ userId: { type: String, default: null },
29
+ templateTypeId: { type: Schema.Types.ObjectId, ref: "template-type" },
30
+ systemGeneratedtopics: { type: [String], default: [], _id: false },
31
+ questions: { type: [String], default: [], _id: false },
32
+ colors: { type: [String], default: [], _id: false },
33
+ prompt: { type: String, default: null },
34
+ templateId: { type: Schema.Types.ObjectId, ref: 'template' },
35
+ slideRefs: {type: [{ type: Schema.Types.ObjectId, ref: 'ppt-slide' }], default: [], _id: false}
36
+ },
37
+ {
38
+ timestamps: true,
39
+ }
40
+ );
41
+
42
+ export const PPTModel = model<IPPTSchema>("ppt", PPTSchema);
@@ -0,0 +1,24 @@
1
+ import { Schema, model, Types } from "mongoose";
2
+
3
+ export interface ISlideLayoutSchema {
4
+ name: string;
5
+ templateTypeId: Types.ObjectId;
6
+ createdAt: Date;
7
+ updatedAt: Date;
8
+ deletedAt: Date;
9
+ }
10
+
11
+ const SlideLayoutSchema = new Schema<ISlideLayoutSchema>(
12
+ {
13
+ name: { type: String, default: "", required: true },
14
+ templateTypeId: { type: Schema.Types.ObjectId, ref: "template-type" },
15
+ createdAt: { type: Date, default: Date.now() },
16
+ updatedAt: { type: Date, default: Date.now() },
17
+ deletedAt: { type: Date, default: null },
18
+ },
19
+ {
20
+ timestamps: true,
21
+ }
22
+ );
23
+
24
+ export const SlideLayoutModel = model<ISlideLayoutSchema>("slide-layout", SlideLayoutSchema);
@@ -0,0 +1,47 @@
1
+ import { Schema, model, Types } from "mongoose";
2
+
3
+ interface layer {
4
+ metaType: String;
5
+ optionsMeta: String;
6
+ chatMeta: string;
7
+ }
8
+
9
+ const layerSchema = new Schema<layer>({
10
+ metaType: { type: String, enum: ['text', 'image', 'shape', 'list', 'table'] },
11
+ optionsMeta: { type: String },
12
+ chatMeta: { type: String },
13
+ }, {
14
+ timestamps: false,
15
+ _id: false
16
+ })
17
+
18
+ export interface ISlideSchema {
19
+ name: string;
20
+ postfix: string;
21
+ rules: string;
22
+ slideLayoutId: Types.ObjectId;
23
+ templateId: Types.ObjectId;
24
+ layers: layer[];
25
+ createdAt: Date;
26
+ updatedAt: Date;
27
+ deletedAt: Date;
28
+ }
29
+
30
+ const SlideSchema = new Schema<ISlideSchema>(
31
+ {
32
+ name: { type: String, default: "", required: true },
33
+ postfix: { type: String, default: "" },
34
+ rules: { type: String, default: "" },
35
+ layers: [layerSchema],
36
+ slideLayoutId: { type: Schema.Types.ObjectId, ref: "slide-layout" },
37
+ templateId: { type: Schema.Types.ObjectId, ref: "template" },
38
+ createdAt: { type: Date, default: Date.now() },
39
+ updatedAt: { type: Date, default: Date.now() },
40
+ deletedAt: { type: Date, default: null },
41
+ },
42
+ {
43
+ timestamps: true,
44
+ }
45
+ );
46
+
47
+ export const SlideModel = model<ISlideSchema>("slide", SlideSchema);
@@ -0,0 +1,22 @@
1
+ import { Schema, model, Types } from "mongoose";
2
+
3
+ export interface ISocketSchema {
4
+ userId: string;
5
+ socketIds: Array<string>;
6
+ createdAt?: Date;
7
+ updatedAt?: Date;
8
+ }
9
+
10
+ const SocketSchema = new Schema<ISocketSchema>(
11
+ {
12
+ createdAt: { type: Date, default: Date.now() },
13
+ updatedAt: { type: Date, default: Date.now() },
14
+ userId: { type: String, default: null },
15
+ socketIds: { type: [String], default: [] }
16
+ },
17
+ {
18
+ timestamps: true,
19
+ }
20
+ );
21
+
22
+ export const SocketModel = model<ISocketSchema>("socket", SocketSchema);
@@ -0,0 +1,55 @@
1
+ import { Schema, model } from "mongoose";
2
+
3
+ interface IQuestionSchema {
4
+ question: string;
5
+ systemMessage: string;
6
+ }
7
+
8
+ export interface ITemplateLayout {
9
+ title: string;
10
+ layoutType: string;
11
+ }
12
+ export interface ITemplateTypeSchema{
13
+ name: string;
14
+ questions: Array<IQuestionSchema>;
15
+ predefineSystemMessage: string;
16
+ layouts: Array<ITemplateLayout>;
17
+ createdAt: Date;
18
+ updatedAt: Date;
19
+ deletedAt: Date;
20
+ suggestionPrompts: Array<string>;
21
+ }
22
+
23
+ const questionSchema = new Schema<IQuestionSchema>({
24
+ question: { type: String },
25
+ systemMessage: { type: String },
26
+ }, {
27
+ timestamps: false,
28
+ _id: false
29
+ })
30
+
31
+ const layoutsSchema = new Schema<ITemplateLayout>({
32
+ title: { type: String },
33
+ layoutType: { type: String },
34
+ }, {
35
+ timestamps: false,
36
+ _id: false
37
+ })
38
+
39
+ const TemplateTypeSchema = new Schema<ITemplateTypeSchema>(
40
+ {
41
+ name: { type: String, default: "", required: true },
42
+ questions: [questionSchema],
43
+ predefineSystemMessage: {type: String, default: ""},
44
+ layouts: [layoutsSchema],
45
+ suggestionPrompts: {type: [String], default: [], _id: false},
46
+ createdAt: { type: Date, default: Date.now() },
47
+ updatedAt: { type: Date, default: Date.now() },
48
+ deletedAt: { type: Date, default: null },
49
+ },
50
+ {
51
+ timestamps: true,
52
+ }
53
+ );
54
+
55
+ export const TemplateTypeModel = model<ITemplateTypeSchema>("template-type", TemplateTypeSchema);
@@ -0,0 +1,37 @@
1
+ import { Schema, model, Types } from "mongoose";
2
+
3
+ export interface ITemplateSchema{
4
+ name: string;
5
+ templateTypeId: Types.ObjectId;
6
+ createdAt: Date,
7
+ updatedAt: Date,
8
+ deletedAt: Date,
9
+ defaultColorPallete: Array<string>;
10
+ colorPalletes: Array<Array<string>>;
11
+
12
+ }
13
+
14
+ const TemplateSchema = new Schema<ITemplateSchema>(
15
+ {
16
+ name: { type: String, default: "", required: true },
17
+ templateTypeId: { type: Schema.Types.ObjectId, ref: "template-type" },
18
+ defaultColorPallete: { type: [String], default: [], _id: false },
19
+ colorPalletes: {
20
+ type: [
21
+ {
22
+ type: [String],
23
+ default: [],
24
+ _id: false
25
+ }
26
+ ], default: [], _id: false
27
+ },
28
+ createdAt: { type: Date, default: Date.now() },
29
+ updatedAt: { type: Date, default: Date.now() },
30
+ deletedAt: { type: Date, default: null },
31
+ },
32
+ {
33
+ timestamps: true,
34
+ }
35
+ );
36
+
37
+ export const TemplateModel = model<ITemplateSchema>("template", TemplateSchema);
@@ -0,0 +1,24 @@
1
+ import { Schema, model } from "mongoose";
2
+
3
+ interface ITrainingQueue {
4
+ url: string,
5
+ trainingDone: boolean,
6
+ createdAt: Date,
7
+ updatedAt: Date,
8
+ deletedAt: Date
9
+ }
10
+
11
+ const TrainingQueueSchema = new Schema<ITrainingQueue>(
12
+ {
13
+ url: { type: String, default: null },
14
+ trainingDone: { type: Boolean, default: false },
15
+ createdAt: { type: Date, default: Date.now()},
16
+ updatedAt: { type: Date, default: Date.now()},
17
+ deletedAt: { type: Date, default: null},
18
+ },
19
+ {
20
+ timestamps: true,
21
+ }
22
+ );
23
+
24
+ export const TrainingQueueModel = model<ITrainingQueue>("training-queue", TrainingQueueSchema);
@@ -0,0 +1,26 @@
1
+ import { Schema, model } from "mongoose";
2
+
3
+ interface IUser {
4
+ email: string | null;
5
+ password: string,
6
+ role: string,
7
+ createdAt: Date,
8
+ updatedAt: Date,
9
+ deletedAt: Date
10
+ }
11
+
12
+ const UserSchema = new Schema<IUser>(
13
+ {
14
+ email: { type: String, unique: true, sparse: true },
15
+ password: { type: String, default: null },
16
+ role: { type: String, default: null },
17
+ createdAt: { type: Date, default: Date.now()},
18
+ updatedAt: { type: Date, default: Date.now()},
19
+ deletedAt: { type: Date, default: null},
20
+ },
21
+ {
22
+ timestamps: true,
23
+ }
24
+ );
25
+
26
+ export const UserModel = model<IUser>("user", UserSchema);
package/src/index.ts ADDED
@@ -0,0 +1,5 @@
1
+ export * from "./entity";
2
+ export * from "./middleware";
3
+ export * from "./resHandler";
4
+ export * from "./types";
5
+ export * from "./utilities";
@@ -0,0 +1,68 @@
1
+ import { Response, NextFunction } from "express";
2
+ import { verifyUid } from "../utilities";
3
+ import { IRequest } from "../types";
4
+ import { UserModel } from "../entity";
5
+
6
+
7
+ const authorize = (roles: string[]) => {
8
+ return async function (req: IRequest, res: Response, next: NextFunction) {
9
+ if (!req.headers.authorization) {
10
+ return res.status(401).json({ message: 'Unauthorized' })
11
+ }
12
+ if (!roles.length) {
13
+ return res.status(401).json({ message: 'Unauthorized' })
14
+ }
15
+ if (req.headers.authorization) {
16
+ const token = await verifyUid(req.headers.authorization);
17
+ if (!token) {
18
+ return res.status(401).json({ message: 'Session Expired' })
19
+ }
20
+
21
+ let user: any = await UserModel.findOne({ email: token.value.email })
22
+
23
+ if (!user) {
24
+ return res.status(401).json({ message: 'No User Found' })
25
+ }
26
+
27
+ const hasAccess = roles.find(role => role === user.role);
28
+
29
+ if (!hasAccess) {
30
+ return res.status(403).json({ message: 'Forbbiden' })
31
+ }
32
+
33
+ const { createdAt, updatedAt, deletedAt, password, ...rest } = user.toObject();
34
+
35
+ req.user = {...rest, userId: rest.email};
36
+ next();
37
+ }
38
+ }
39
+ }
40
+
41
+ const authorizeWithSlideApp = () => {
42
+ return async function (req: IRequest, res: Response, next: NextFunction) {
43
+ if (!req.headers.authorization) {
44
+ return res.status(401).json({ message: 'Unauthorized' })
45
+ }
46
+
47
+ if (req.headers.authorization) {
48
+ const token = await verifyUid(req.headers.authorization);
49
+ if (!token) {
50
+ return res.status(401).json({ message: 'Session Expired' })
51
+ }
52
+
53
+ const userId = token?.customer_id || token?.value?.email;
54
+
55
+ if(!userId) {
56
+ return res.status(401).json({ message: 'userId not found' })
57
+ }
58
+
59
+ req.user = {
60
+ userId: userId
61
+ }
62
+
63
+ next();
64
+ }
65
+ }
66
+ }
67
+
68
+ export {authorize, authorizeWithSlideApp};
@@ -0,0 +1,3 @@
1
+ export * from "./authentication";
2
+ export * from "./role";
3
+ export * from "./schemaValidate";
@@ -0,0 +1,5 @@
1
+ export const ROLES = {
2
+ User: 'User',
3
+ Admin: 'Admin',
4
+ SuperAdmin: 'SuperAdmin'
5
+ }
@@ -0,0 +1,20 @@
1
+ import { NextFunction, Response } from "express";
2
+ import Joi from 'joi';
3
+
4
+ import { IRequest } from "../types";
5
+
6
+ export const validateSchema = (schema: Joi.ObjectSchema<any>) => {
7
+ return async function (req: IRequest, res: Response, next: NextFunction) {
8
+
9
+ const { error } = schema.validate(req.body, { abortEarly: false });
10
+
11
+ if(error) {
12
+ const errorMessage = error.details.map((err) => err.message).join(', ');
13
+ return res.status(400).json({ message: errorMessage });
14
+ } else {
15
+ next();
16
+ }
17
+ }
18
+ }
19
+
20
+
@@ -0,0 +1,44 @@
1
+ import { Request, Response, NextFunction } from 'express';
2
+
3
+ export class BadRequestError extends Error {
4
+ constructor(message: string) {
5
+ super(message);
6
+ this.name = 'BadRequestError';
7
+ }
8
+ }
9
+
10
+ export class NotFoundRequestError extends Error {
11
+ constructor(message: string) {
12
+ super(message);
13
+ this.name = 'NotFoundRequestError';
14
+ }
15
+ }
16
+
17
+
18
+
19
+ // Custom error handler middleware
20
+ export const errorHandler = (
21
+ err: Error,
22
+ req: Request,
23
+ res: Response,
24
+ next: NextFunction
25
+ ) => {
26
+ console.error(err.stack); // Log the error for debugging
27
+
28
+ let statusCode = 500; // Default status code
29
+ let errorMessage = 'Internal Server Error'; // Default error message
30
+
31
+ if (err instanceof BadRequestError) {
32
+ statusCode = 400;
33
+ errorMessage = err.message;
34
+ } else if(err instanceof NotFoundRequestError) {
35
+ statusCode = 404;
36
+ errorMessage = err.message;
37
+ }
38
+
39
+ // Send an error response
40
+ res.status(statusCode).json({
41
+ message: errorMessage,
42
+ error: err.name // Optionally send the error name/type
43
+ });
44
+ };
@@ -0,0 +1,2 @@
1
+ export * from "./errorHandler";
2
+ export * from "./successHandler";
@@ -0,0 +1,11 @@
1
+ import { Request, Response, NextFunction } from 'express';
2
+
3
+ // Generic success handler middleware
4
+ export const successHandler = (
5
+ data: any,
6
+ req: Request,
7
+ res: Response,
8
+ next: NextFunction
9
+ ) => {
10
+ res.status(200).json(data);
11
+ };
@@ -0,0 +1,6 @@
1
+ import { Response } from "express";
2
+ import { IRequest } from "./IRequest";
3
+
4
+ export interface IController {
5
+ (req: IRequest, res: Response): void;
6
+ }
@@ -0,0 +1,8 @@
1
+ import { Request } from "express";
2
+
3
+ export interface IRequest extends Request {
4
+ user?: any,
5
+ token?: any,
6
+ role?: any,
7
+ file?:any
8
+ }
@@ -0,0 +1,11 @@
1
+ export * from "./IController";
2
+ export * from "./IRequest";
3
+
4
+ export enum QUEUES {
5
+ IMAGE_MODEL_BULK = "image-model-bulk", // Will be used for bulk training model
6
+ IMAGE_MODEL_SINGLE = "image-model-single", // Will be used for single image training
7
+ NOTIFICATION = "notification", // Notify to user
8
+ THUMBNAIL = "thumbnail", // To create thubmnail
9
+ PPT = "ppt", // to call PPT Service
10
+ PNG_SVG = "png-svg" // to convert raster to vector image
11
+ }