@vasrefil/api-toolkit 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api-response/user.response.d.ts +48 -0
- package/dist/api-response/user.response.js +33 -0
- package/dist/app-middlewares/airbrake.d.ts +10 -0
- package/{src/app-middlewares/airbrake.ts → dist/app-middlewares/airbrake.js} +17 -43
- package/dist/controllers/_root.control.d.ts +53 -0
- package/dist/controllers/_root.control.js +127 -0
- package/dist/controllers/index.d.ts +1 -0
- package/dist/controllers/index.js +17 -0
- package/dist/controllers/sample.control.d.ts +6 -0
- package/dist/controllers/sample.control.js +13 -0
- package/dist/env.d.ts +12 -0
- package/{src/env.ts → dist/env.js} +7 -6
- package/dist/helpers/currency-formatter.helper.d.ts +1 -0
- package/dist/helpers/currency-formatter.helper.js +11 -0
- package/dist/helpers/query.helper.d.ts +22 -0
- package/dist/helpers/query.helper.js +133 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +43 -0
- package/{src/interfaces/interface.ts → dist/interfaces/interface.d.ts} +3 -4
- package/dist/interfaces/interface.js +2 -0
- package/{src/interfaces/root-controller.interface.ts → dist/interfaces/root-controller.interface.d.ts} +8 -8
- package/dist/interfaces/root-controller.interface.js +2 -0
- package/dist/interfaces/status.interface.d.ts +13 -0
- package/dist/interfaces/status.interface.js +17 -0
- package/dist/middlewares/auth.midware.d.ts +8 -0
- package/dist/middlewares/auth.midware.js +52 -0
- package/dist/middlewares/validator.midware.d.ts +12 -0
- package/dist/middlewares/validator.midware.js +32 -0
- package/dist/models/_config.d.ts +1 -0
- package/dist/models/_config.js +27 -0
- package/dist/models/sample.model.d.ts +33 -0
- package/dist/models/sample.model.js +14 -0
- package/dist/public-api.d.ts +1 -0
- package/dist/public-api.js +17 -0
- package/dist/routes/index.route.d.ts +9 -0
- package/dist/routes/index.route.js +54 -0
- package/dist/routes/sample.route.d.ts +16 -0
- package/dist/routes/sample.route.js +53 -0
- package/dist/services/_root.service.d.ts +12 -0
- package/dist/services/_root.service.js +75 -0
- package/dist/services/sample.service.d.ts +16 -0
- package/dist/services/sample.service.js +127 -0
- package/dist/utilities/date.util.d.ts +42 -0
- package/dist/utilities/date.util.js +93 -0
- package/dist/utilities/logger.util.d.ts +4 -0
- package/dist/utilities/logger.util.js +48 -0
- package/dist/utilities/token.util.d.ts +6 -0
- package/dist/utilities/token.util.js +48 -0
- package/dist/validations/sample.validator.d.ts +6 -0
- package/dist/validations/sample.validator.js +35 -0
- package/package.json +12 -6
- package/.nvmrc +0 -1
- package/src/.baseDir.ts +0 -1
- package/src/api-response/user.response.ts +0 -30
- package/src/controllers/_root.control.ts +0 -138
- package/src/controllers/sample.control.ts +0 -8
- package/src/helpers/currency-formatter.helper.ts +0 -7
- package/src/helpers/query.helper.ts +0 -122
- package/src/interfaces/status.interface.ts +0 -13
- package/src/middlewares/auth.midware.ts +0 -41
- package/src/middlewares/validator.midware.ts +0 -29
- package/src/models/_config.ts +0 -23
- package/src/models/sample.model.ts +0 -21
- package/src/routes/index.route.ts +0 -30
- package/src/routes/sample.route.ts +0 -51
- package/src/server.ts +0 -49
- package/src/services/_root.service.ts +0 -70
- package/src/services/sample.service.ts +0 -105
- package/src/utilities/date.util.ts +0 -68
- package/src/utilities/logger.util.ts +0 -52
- package/src/utilities/token.util.ts +0 -20
- package/src/validations/sample.validator.ts +0 -8
- package/tsconfig.json +0 -15
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const sample_control_1 = __importDefault(require("../controllers/sample.control"));
|
|
7
|
+
const _root_service_1 = require("./_root.service");
|
|
8
|
+
const status_interface_1 = require("../interfaces/status.interface");
|
|
9
|
+
const { SUCCESS, ERROR, UNPROCESSABLE_ENTRY, PRECONDITION_FAILED, SUCCESS_NO_CONTENT } = status_interface_1.Status;
|
|
10
|
+
class SampleService extends _root_service_1.RootService {
|
|
11
|
+
constructor() {
|
|
12
|
+
super(...arguments);
|
|
13
|
+
this.create = async (req, res) => {
|
|
14
|
+
const actionType = 'CREATE_SAMPLE';
|
|
15
|
+
try {
|
|
16
|
+
const sample = await sample_control_1.default.create(req.body);
|
|
17
|
+
this.sendResponse({ req, res, status: SUCCESS, data: sample, actionType });
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
this.sendResponse({ req, res, status: ERROR, actionType, data: error });
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
this.getAll = async (req, res) => {
|
|
24
|
+
const actionType = 'GET_ALL_SAMPLES';
|
|
25
|
+
try {
|
|
26
|
+
const samples = await sample_control_1.default.fetchAll({}, req.query);
|
|
27
|
+
this.sendResponse({ req, res, status: SUCCESS, actionType, data: samples });
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
this.sendResponse({ req, res, status: ERROR, actionType, data: error });
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
this.getOne = async (req, res) => {
|
|
34
|
+
const actionType = 'GET_ONE_SAMPLE';
|
|
35
|
+
try {
|
|
36
|
+
const sample = await sample_control_1.default.getOne(req.query);
|
|
37
|
+
this.sendResponse({ req, res, status: SUCCESS, actionType, data: sample });
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
this.sendResponse({ req, res, status: ERROR, actionType, data: error });
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
this.getById = async (req, res) => {
|
|
44
|
+
const actionType = 'GET_SAMPLE_BY_ID';
|
|
45
|
+
try {
|
|
46
|
+
const sample = await sample_control_1.default.getById(req.params.id);
|
|
47
|
+
this.sendResponse({ req, res, status: SUCCESS, actionType, data: sample });
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
this.sendResponse({ req, res, status: ERROR, actionType, data: error });
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
this.updateOne = async (req, res) => {
|
|
54
|
+
const actionType = 'UPDATE_ONE_SAMPLE';
|
|
55
|
+
try {
|
|
56
|
+
const sample = await sample_control_1.default.updateOne(req.query, req.body);
|
|
57
|
+
if (sample.acknowledged)
|
|
58
|
+
return this.sendResponse({ req, res, status: SUCCESS, actionType, data: sample });
|
|
59
|
+
this.sendResponse({ req, res, status: UNPROCESSABLE_ENTRY, actionType, data: 'data not updated' });
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
this.sendResponse({ req, res, status: ERROR, actionType, data: error });
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
this.updateMany = async (req, res) => {
|
|
66
|
+
const actionType = 'UPDATE_MANY_SAMPLE';
|
|
67
|
+
try {
|
|
68
|
+
const sample = await sample_control_1.default.updateMany(req.query, req.body);
|
|
69
|
+
if (sample.acknowledged)
|
|
70
|
+
return this.sendResponse({ req, res, status: SUCCESS, actionType, data: sample });
|
|
71
|
+
this.sendResponse({ req, res, status: UNPROCESSABLE_ENTRY, actionType, data: 'data not updated' });
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
this.sendResponse({ req, res, status: ERROR, actionType, data: error });
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
this.updateById = async (req, res) => {
|
|
78
|
+
const actionType = 'UPDATE_SAMPLE_BY_ID';
|
|
79
|
+
try {
|
|
80
|
+
const sample = await sample_control_1.default.updateById(req.params.id, req.body);
|
|
81
|
+
if (sample)
|
|
82
|
+
return this.sendResponse({ req, res, status: SUCCESS, actionType, data: sample });
|
|
83
|
+
this.sendResponse({ req, res, status: PRECONDITION_FAILED, actionType, data: 'data not updated' });
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
this.sendResponse({ req, res, status: ERROR, actionType, data: error });
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
this.deleteOne = async (req, res) => {
|
|
90
|
+
const actionType = 'DELETE_ONE_SAMPLE';
|
|
91
|
+
try {
|
|
92
|
+
const sample = await sample_control_1.default.deleteOne(req.query);
|
|
93
|
+
if (sample.acknowledged)
|
|
94
|
+
return this.sendResponse({ req, res, status: SUCCESS_NO_CONTENT, actionType, data: sample });
|
|
95
|
+
this.sendResponse({ req, res, status: UNPROCESSABLE_ENTRY, actionType, data: 'data not deleted' });
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
this.sendResponse({ req, res, status: ERROR, actionType, data: error });
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
this.deleteMany = async (req, res) => {
|
|
102
|
+
const actionType = 'DELETE_MANY_SAMPLES';
|
|
103
|
+
try {
|
|
104
|
+
const sample = await sample_control_1.default.deleteMany(req.query);
|
|
105
|
+
if (sample.acknowledged)
|
|
106
|
+
return this.sendResponse({ req, res, status: SUCCESS_NO_CONTENT, actionType, data: sample });
|
|
107
|
+
this.sendResponse({ req, res, status: UNPROCESSABLE_ENTRY, actionType, data: 'data not deleted' });
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
this.sendResponse({ req, res, status: ERROR, actionType, data: error });
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
this.deleteById = async (req, res) => {
|
|
114
|
+
const actionType = 'DELETE_SAMPLE_BY_ID';
|
|
115
|
+
try {
|
|
116
|
+
const sample = await sample_control_1.default.deleteById(req.params.id);
|
|
117
|
+
if (sample)
|
|
118
|
+
return this.sendResponse({ req, res, status: SUCCESS_NO_CONTENT, actionType, data: sample });
|
|
119
|
+
this.sendResponse({ req, res, status: PRECONDITION_FAILED, actionType, data: 'data not deleted' });
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
this.sendResponse({ req, res, status: ERROR, actionType, data: error });
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
exports.default = new SampleService;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
declare class DateUtil_ {
|
|
2
|
+
get_local_date: (date?: Date) => Date;
|
|
3
|
+
get_start_date(date: any): number;
|
|
4
|
+
get_end_date(date: any): number;
|
|
5
|
+
get_date_format(date: Date, format: string): Date;
|
|
6
|
+
get_today_date_range(payload?: {
|
|
7
|
+
format?: string;
|
|
8
|
+
date: Date;
|
|
9
|
+
}): {
|
|
10
|
+
start_date: any;
|
|
11
|
+
end_date: any;
|
|
12
|
+
};
|
|
13
|
+
get_date_range(payload?: {
|
|
14
|
+
format?: string;
|
|
15
|
+
date: Date;
|
|
16
|
+
number_of_days?: number;
|
|
17
|
+
}): {
|
|
18
|
+
start_date: any;
|
|
19
|
+
end_date: any;
|
|
20
|
+
};
|
|
21
|
+
get_custom_date_range({ start_date, end_date }: {
|
|
22
|
+
start_date: Date;
|
|
23
|
+
end_date: Date;
|
|
24
|
+
}): {
|
|
25
|
+
start_date: Date;
|
|
26
|
+
end_date: Date;
|
|
27
|
+
};
|
|
28
|
+
this_week_date_range(): {
|
|
29
|
+
start_date: Date;
|
|
30
|
+
end_date: Date;
|
|
31
|
+
};
|
|
32
|
+
this_month_date_range(): {
|
|
33
|
+
start_date: Date;
|
|
34
|
+
end_date: Date;
|
|
35
|
+
};
|
|
36
|
+
this_year_date_range(): {
|
|
37
|
+
start_date: Date;
|
|
38
|
+
end_date: Date;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
declare const DateUtil: DateUtil_;
|
|
42
|
+
export { DateUtil };
|
|
@@ -0,0 +1,93 @@
|
|
|
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.DateUtil = void 0;
|
|
27
|
+
const dateFns = __importStar(require("date-fns"));
|
|
28
|
+
class DateUtil_ {
|
|
29
|
+
constructor() {
|
|
30
|
+
this.get_local_date = (date = new Date()) => {
|
|
31
|
+
const currentDate = new Date(date);
|
|
32
|
+
// const localOffset = currentDate.getTimezoneOffset() * 60000;
|
|
33
|
+
// const localDate = new Date(currentDate.getTime() - localOffset);
|
|
34
|
+
return currentDate;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
get_start_date(date) {
|
|
38
|
+
const d = this.get_local_date(date);
|
|
39
|
+
d.setHours(0, 0, 0, 0);
|
|
40
|
+
return d.getTime();
|
|
41
|
+
}
|
|
42
|
+
get_end_date(date) {
|
|
43
|
+
const d = this.get_local_date(date);
|
|
44
|
+
d.setHours(23, 0, 0, 0);
|
|
45
|
+
return d.getTime();
|
|
46
|
+
}
|
|
47
|
+
get_date_format(date, format) {
|
|
48
|
+
return this.get_local_date(date);
|
|
49
|
+
}
|
|
50
|
+
get_today_date_range(payload) {
|
|
51
|
+
const main_date = payload && payload.date ? this.get_local_date(payload.date) : this.get_local_date();
|
|
52
|
+
return {
|
|
53
|
+
start_date: dateFns.startOfDay(main_date),
|
|
54
|
+
end_date: dateFns.endOfDay(main_date)
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
get_date_range(payload) {
|
|
58
|
+
const main_date = payload && payload.date ? this.get_local_date(payload.date) : this.get_local_date();
|
|
59
|
+
const number_of_days = payload?.number_of_days ? payload.number_of_days : 0;
|
|
60
|
+
const start_date = dateFns.subDays(main_date, number_of_days);
|
|
61
|
+
const end_date = dateFns.addDays(main_date, number_of_days);
|
|
62
|
+
return {
|
|
63
|
+
start_date: dateFns.startOfDay(start_date),
|
|
64
|
+
end_date: dateFns.endOfDay(end_date)
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
get_custom_date_range({ start_date, end_date }) {
|
|
68
|
+
return {
|
|
69
|
+
start_date: dateFns.startOfDay(this.get_local_date(start_date)),
|
|
70
|
+
end_date: dateFns.endOfDay(this.get_local_date(end_date))
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
this_week_date_range() {
|
|
74
|
+
return {
|
|
75
|
+
start_date: dateFns.startOfWeek(this.get_local_date()),
|
|
76
|
+
end_date: dateFns.endOfWeek(this.get_local_date())
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
this_month_date_range() {
|
|
80
|
+
return {
|
|
81
|
+
start_date: dateFns.startOfMonth(this.get_local_date()),
|
|
82
|
+
end_date: dateFns.endOfMonth(this.get_local_date())
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
this_year_date_range() {
|
|
86
|
+
return {
|
|
87
|
+
start_date: dateFns.startOfYear(this.get_local_date()),
|
|
88
|
+
end_date: dateFns.endOfYear(this.get_local_date())
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
const DateUtil = new DateUtil_;
|
|
93
|
+
exports.DateUtil = DateUtil;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.winston = exports.morgan = void 0;
|
|
7
|
+
const env_1 = __importDefault(require("../env"));
|
|
8
|
+
const fs_1 = require("fs");
|
|
9
|
+
const path_1 = require("path");
|
|
10
|
+
const morgan_1 = __importDefault(require("morgan"));
|
|
11
|
+
const winston_1 = require("winston");
|
|
12
|
+
class LoggerUtil {
|
|
13
|
+
morgan() {
|
|
14
|
+
let dev_format = '[:date[web] :remote-addr :remote-user ] :method :url HTTP/:http-version | :status :response-time ms';
|
|
15
|
+
let prod_format = '[:date[web] :remote-addr :remote-user ] :method :url HTTP/:http-version :referrer - :user-agent | :status :response-time ms';
|
|
16
|
+
let morgan_format = env_1.default.NODE_ENV === 'prod' ? prod_format : dev_format;
|
|
17
|
+
let request_log_stream = (0, fs_1.createWriteStream)((0, path_1.resolve)(__dirname, `../../logs/request.log`), { flags: 'a' });
|
|
18
|
+
return (0, morgan_1.default)(morgan_format, { stream: request_log_stream });
|
|
19
|
+
}
|
|
20
|
+
winston() {
|
|
21
|
+
let { colorize, combine, printf, timestamp } = winston_1.format;
|
|
22
|
+
let log_transports = {
|
|
23
|
+
console: new winston_1.transports.Console({ level: 'warn' }),
|
|
24
|
+
combined_log: new winston_1.transports.File({ level: 'info', filename: `logs/combined.log` }),
|
|
25
|
+
error_log: new winston_1.transports.File({ level: 'error', filename: `logs/error.log` }),
|
|
26
|
+
exception_log: new winston_1.transports.File({ filename: 'logs/exception.log' }),
|
|
27
|
+
};
|
|
28
|
+
let log_format = printf(({ level, message, timestamp }) => `[${timestamp} : ${level}] - ${message}`);
|
|
29
|
+
let logger = (0, winston_1.createLogger)({
|
|
30
|
+
transports: [
|
|
31
|
+
log_transports.console,
|
|
32
|
+
log_transports.combined_log,
|
|
33
|
+
log_transports.error_log,
|
|
34
|
+
],
|
|
35
|
+
exceptionHandlers: [
|
|
36
|
+
log_transports.exception_log,
|
|
37
|
+
],
|
|
38
|
+
exitOnError: false,
|
|
39
|
+
format: combine(colorize(), timestamp(), log_format)
|
|
40
|
+
});
|
|
41
|
+
return logger;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const loggerUtil = new LoggerUtil();
|
|
45
|
+
const morgan = loggerUtil.morgan();
|
|
46
|
+
exports.morgan = morgan;
|
|
47
|
+
const winston = loggerUtil.winston();
|
|
48
|
+
exports.winston = winston;
|
|
@@ -0,0 +1,48 @@
|
|
|
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
const jwt = __importStar(require("jsonwebtoken"));
|
|
30
|
+
const env_1 = __importDefault(require("../env"));
|
|
31
|
+
const user_response_1 = require("../api-response/user.response");
|
|
32
|
+
class TokenUtil {
|
|
33
|
+
sign_admin_user(payload, expiresIn) {
|
|
34
|
+
return jwt.sign(payload, env_1.default?.ADMIN_JWT_KEY, { expiresIn: expiresIn ? expiresIn : '1d' });
|
|
35
|
+
}
|
|
36
|
+
verify_admin_user(token) {
|
|
37
|
+
return new Promise((resolve, reject) => {
|
|
38
|
+
try {
|
|
39
|
+
const resp = jwt.verify(token, env_1.default.ADMIN_JWT_KEY);
|
|
40
|
+
resolve(resp);
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
reject({ error, ...user_response_1.UserApiResp.NOT_AUTHORIZED });
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.default = new TokenUtil;
|
|
@@ -0,0 +1,35 @@
|
|
|
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
const joi = __importStar(require("joi"));
|
|
27
|
+
class SampleValidator {
|
|
28
|
+
constructor() {
|
|
29
|
+
this.create = joi.object({
|
|
30
|
+
name: joi.string().required(),
|
|
31
|
+
description: joi.string().required()
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.default = new SampleValidator;
|
package/package.json
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vasrefil/api-toolkit",
|
|
3
3
|
"description": "This is Vasrefil API toolkit",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.2",
|
|
5
5
|
"author": "Sodiq Alabi",
|
|
6
|
-
"main": "
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
7
8
|
"scripts": {
|
|
8
|
-
"start": "ts-node-dev src/
|
|
9
|
+
"start": "ts-node-dev src/index.ts",
|
|
9
10
|
"build": "tsc",
|
|
10
|
-
"
|
|
11
|
-
"
|
|
11
|
+
"prepare": "npm run build",
|
|
12
|
+
"serve": "node dist/index.js",
|
|
13
|
+
"dev": "nodemon --exec ts-node src/index.ts",
|
|
12
14
|
"run-ts-node": "ts-node-dev"
|
|
13
15
|
},
|
|
14
16
|
"engines": {
|
|
@@ -48,5 +50,9 @@
|
|
|
48
50
|
"ts-node": "^10.9.2",
|
|
49
51
|
"ts-node-dev": "^2.0.0",
|
|
50
52
|
"typescript": "^5.3.3"
|
|
51
|
-
}
|
|
53
|
+
},
|
|
54
|
+
"files": [
|
|
55
|
+
"dist",
|
|
56
|
+
"README.md"
|
|
57
|
+
]
|
|
52
58
|
}
|
package/.nvmrc
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
20.11.0
|
package/src/.baseDir.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
// grunt-ts creates this file to help TypeScript find the compilation root of your project. If you wish to get to stop creating it, specify a `rootDir` setting in the Gruntfile ts `options`. See https://github.com/TypeStrong/grunt-ts#rootdir for details. Note that `rootDir` goes under `options`, and is case-sensitive. This message was revised in grunt-ts v6. Note that `rootDir` requires TypeScript 1.5 or higher.
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { Status } from '../interfaces/status.interface';
|
|
2
|
-
export const UserApiResp = {
|
|
3
|
-
NO_AUTHORIZATION_HEADER: {
|
|
4
|
-
code: 'NAH0401', status: Status.UN_AUTHORIZED, message: 'Please specify authorization header'
|
|
5
|
-
},
|
|
6
|
-
NOT_AUTHORIZED: {
|
|
7
|
-
code: 'NA00401', status: Status.UN_AUTHORIZED, message: 'You are not authorized'
|
|
8
|
-
},
|
|
9
|
-
USER_NOT_FOUND: {
|
|
10
|
-
code: 'UNF0401', status: Status.UN_AUTHORIZED, message: 'User not found'
|
|
11
|
-
},
|
|
12
|
-
USER_DEACTIVATED: {
|
|
13
|
-
code: 'UD00401', status: Status.UN_AUTHORIZED, message: 'Your account has been deactivated'
|
|
14
|
-
},
|
|
15
|
-
UNVERIFIED_EMAIL: {
|
|
16
|
-
code: 'UE00403', status: Status.FORBIDDEN, message: 'Your email address is not verified'
|
|
17
|
-
},
|
|
18
|
-
UNCOMPELETE_ACCOUNT_SETUP: {
|
|
19
|
-
code: 'UAS0403', status: Status.FORBIDDEN, message: 'Account setup is not completed'
|
|
20
|
-
},
|
|
21
|
-
UNCOMPELETE_PIN_SETUP: {
|
|
22
|
-
code: 'UPS0403', status: Status.FORBIDDEN, message: 'Pin setup is not completed'
|
|
23
|
-
},
|
|
24
|
-
NO_PIN_TOKEN_HEADER: {
|
|
25
|
-
code: 'NPTH401', status: Status.UN_AUTHORIZED, message: 'Please specify pin_token header'
|
|
26
|
-
},
|
|
27
|
-
EXPIRED_PIN_TOKEN: {
|
|
28
|
-
code: 'EPT0401', status: Status.UN_AUTHORIZED, message: 'Your session has expired, Please login with your pin'
|
|
29
|
-
},
|
|
30
|
-
}
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
import { Model, Document, } from 'mongoose';
|
|
2
|
-
import { QueryHelper } from '../helpers/query.helper';
|
|
3
|
-
import { FetchAllQuery, FetchWithPaginationDataI, ModelPopulateI, NestedRecordQueryOptionsI } from '../interfaces/root-controller.interface';
|
|
4
|
-
|
|
5
|
-
export class RootController {
|
|
6
|
-
private model: Model<any>;
|
|
7
|
-
private modelName: string;
|
|
8
|
-
constructor(model: Model<any>, modelName: string = 'Document') {
|
|
9
|
-
this.model = model;
|
|
10
|
-
this.modelName = modelName;
|
|
11
|
-
}
|
|
12
|
-
unique = async (conditions: {key: string, value: string}) => {
|
|
13
|
-
const {key, value} = conditions;
|
|
14
|
-
const res = await this.model.findOne({[key]: value});
|
|
15
|
-
if(res) {
|
|
16
|
-
return false
|
|
17
|
-
} else {
|
|
18
|
-
return true;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
getDocumentCount = async (conditon = {}, query?: object) => {
|
|
22
|
-
const { filter } = QueryHelper.build_query(query);
|
|
23
|
-
return await this.model.countDocuments({...filter, ...conditon})
|
|
24
|
-
}
|
|
25
|
-
create = async (payload: any) => {
|
|
26
|
-
try {
|
|
27
|
-
const document = await(this.model.create({...payload}))
|
|
28
|
-
return document.toJSON()
|
|
29
|
-
} catch (error) {
|
|
30
|
-
throw error;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
fetchAll(condition: object = {}, query?: FetchAllQuery, select: string|object = '', populate?: any) {
|
|
34
|
-
const { filter, skip, limit, sort } = QueryHelper.build_query(query);
|
|
35
|
-
return this.model.find({...filter, ...condition}).select(select).skip(skip).limit(limit).sort(sort).populate(populate);
|
|
36
|
-
}
|
|
37
|
-
fetchAllWithPagination = async (
|
|
38
|
-
conditon: object,
|
|
39
|
-
query?: FetchAllQuery,
|
|
40
|
-
select: string|object = '',
|
|
41
|
-
populate?: ModelPopulateI[]): Promise<FetchWithPaginationDataI> => {
|
|
42
|
-
try {
|
|
43
|
-
const records = await this.fetchAll(conditon, query, select, populate);
|
|
44
|
-
const total_records = await this.getDocumentCount(conditon, query);
|
|
45
|
-
return {records, total_records}
|
|
46
|
-
} catch (error) {
|
|
47
|
-
throw error
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
getOneP = async (condition: object, select?: any) => {
|
|
51
|
-
try {
|
|
52
|
-
select = select ? select : '';
|
|
53
|
-
const document = await this.model.findOne(condition).select(select).lean()
|
|
54
|
-
if(!document) throw {message: `${this.modelName} not found`};
|
|
55
|
-
return document
|
|
56
|
-
} catch (error) {
|
|
57
|
-
throw error;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
getOne(condition: object, select: string|object = '', populate?: any) {
|
|
61
|
-
return (this.model.findOne(condition).select(select).populate(populate).lean() as any)
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
getById = async (id: string, select: string|object = '') => {
|
|
66
|
-
try {
|
|
67
|
-
const document = await this.model.findById(id).select(select).lean()
|
|
68
|
-
if(!document) throw {message: `${this.modelName} not found`};
|
|
69
|
-
return document;
|
|
70
|
-
} catch (error) {
|
|
71
|
-
throw error
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
updateOne(condition: object, updateValues: object) {
|
|
75
|
-
return (this.model.updateOne({...condition}, {...updateValues}, {new: true}) as any)
|
|
76
|
-
}
|
|
77
|
-
updateMany(condition: object, updateValues: object) {
|
|
78
|
-
return this.model.updateMany({...condition}, {...updateValues}).lean()
|
|
79
|
-
}
|
|
80
|
-
updateById(id: string, updateValues: object): any {
|
|
81
|
-
return this.model.findByIdAndUpdate(id, {...updateValues}, {new: true}).lean()
|
|
82
|
-
}
|
|
83
|
-
deleteOne(condition: object) {
|
|
84
|
-
return this.model.deleteOne({...condition})
|
|
85
|
-
}
|
|
86
|
-
deleteMany(condition: object) {
|
|
87
|
-
return this.model.deleteMany({...condition})
|
|
88
|
-
}
|
|
89
|
-
deleteById(id: string) {
|
|
90
|
-
return this.model.findByIdAndDelete(id)
|
|
91
|
-
}
|
|
92
|
-
search = async (payload:{key: any, value: any}, select = '') => {
|
|
93
|
-
try {
|
|
94
|
-
const regrex = new RegExp(`${payload.value}`, 'i');
|
|
95
|
-
const records = await this.model.find({[payload.key]: {$regex: regrex}}).select(select);
|
|
96
|
-
if(!records) throw {message: `${this.modelName} not found`}
|
|
97
|
-
throw records;
|
|
98
|
-
} catch (error) {
|
|
99
|
-
throw error;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
getNestedRecord = async (
|
|
103
|
-
options: NestedRecordQueryOptionsI,
|
|
104
|
-
errorMessage?: string
|
|
105
|
-
) => {
|
|
106
|
-
const {
|
|
107
|
-
parentField,
|
|
108
|
-
childIdField = '_id',
|
|
109
|
-
parentId,
|
|
110
|
-
childId
|
|
111
|
-
} = options;
|
|
112
|
-
|
|
113
|
-
// Build the query
|
|
114
|
-
const query = {
|
|
115
|
-
_id: parentId,
|
|
116
|
-
[`${parentField}.${childIdField}`]: { $eq: childId }
|
|
117
|
-
};
|
|
118
|
-
|
|
119
|
-
// Build the projection
|
|
120
|
-
const projection = {
|
|
121
|
-
[parentField]: {
|
|
122
|
-
$elemMatch: {
|
|
123
|
-
[childIdField]: childId
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
};
|
|
127
|
-
|
|
128
|
-
// Execute the query
|
|
129
|
-
const result = await this.model.findOne(query, projection);
|
|
130
|
-
|
|
131
|
-
if (!result) {
|
|
132
|
-
throw new Error(errorMessage || `Nested record not found in ${parentField}`);
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
// Return the first element of the matched array
|
|
136
|
-
return result[parentField][0];
|
|
137
|
-
}
|
|
138
|
-
}
|