· 8 years ago · Jan 20, 2018, 10:02 PM
1const fs = require('fs');
2const path = require('path');
3const jwt = require('jsonwebtoken');
4const googleMapsClient = require('@google/maps').createClient({
5 key: 'SECRET-KEY',
6});
7
8const m = {
9 findOne({ model, query }) {
10 return new Promise((res, rej) => {
11 model.findOne(query, (err, data) => {
12 if (err) {
13 rej(err);
14 }
15 res(data);
16 });
17 });
18 },
19 findOneAndUpdate({ model, query, update }) {
20 return new Promise((res, rej) => {
21 model.findOneAndUpdate(query, update, (err, data) => {
22 if (err) {
23 rej(err);
24 }
25 res(data);
26 });
27 });
28 },
29 findOneAndRemove({ model, query }) {
30 return new Promise((res, rej) => {
31 model.findOneAndRemove(query, (err, data) => {
32 if (err) {
33 rej(err);
34 }
35 res(data);
36 });
37 });
38 },
39 find({
40 model, query, limit, params, sort, skip,
41 }) {
42 limit = limit || 20;
43 sort = sort || ('updateAt');
44 skip = skip || 0;
45 params = params || {};
46 return new Promise((res, rej) => {
47 model.find(query, params).limit(+limit).skip(+skip).sort(sort)
48 .exec((err, data) => {
49 if (err) {
50 rej(err);
51 }
52 res(data);
53 });
54 });
55 },
56 countOfModel({ model, query }) {
57 return new Promise((res, rej) => {
58 model.find(query).count((err, count) => {
59 if (err) {
60 rej(err);
61 } else {
62 res(count);
63 }
64 });
65 });
66 },
67 returnFile(pathToFile) {
68 return fs.readFileSync(path.resolve(__dirname, pathToFile), 'utf-8');
69 },
70 mkDirRecursive(targetDir, opts) {
71 const isRelativeToScript = opts && opts.isRelativeToScript;
72 const { sep } = path;
73 const initDir = path.isAbsolute(targetDir) ? sep : '';
74
75 targetDir.split(sep).reduce((parentDir, childDir) => {
76 const baseDir = isRelativeToScript ? `${__dirname}/../` : '.';
77 const curDir = path.resolve(baseDir, parentDir, childDir);
78 try {
79 fs.mkdirSync(curDir);
80 console.log(`Directory ${curDir} created!`);
81 } catch (err) {
82 if (err.code !== 'EEXIST') {
83 throw err;
84 }
85
86 console.log(`Directory ${curDir} already exists!`);
87 return curDir;
88 }
89
90 return curDir;
91 }, initDir);
92 },
93 createToken(data) {
94 data = data || {};
95 data.exp = data.exp || Math.floor(Date.now() / 1000) + (60 * 60);
96 const key = this.returnFile('../config/private.key');
97 return jwt.sign(data, key);
98 },
99 vefifyToken(token) {
100 return new Promise((res, rej) => {
101 const key = this.returnFile('../config/private.key');
102
103 jwt.verify(token, key, (err, decoded) => {
104 if (err) {
105 rej(err);
106 }
107 res(decoded);
108 });
109 });
110 },
111 getGeocode(address) {
112 return new Promise((res, rej) => {
113 googleMapsClient.geocode({
114 address,
115 }, (err, response) => {
116 if (err) {
117 rej(err);
118 console.log(response.json.results);
119 }
120 res(response.json.results);
121 });
122 });
123 },
124 capitalizeFirstLetter(string) {
125 return string.charAt(0).toUpperCase() + string.slice(1);
126 },
127};
128
129module.exports = m;