create-sip 1.2.0 → 1.2.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/README.md +62 -6
- package/expressapi/README.md +24 -2
- package/expressapi/app/controllers/userController.js +36 -1
- package/expressapi/app/routes/api.js +4 -2
- package/expressapi/database/migrations/2025_10_08_075231_user.js +34 -0
- package/expressapi/docs/user_doc.md +65 -8
- package/expressapi/op +8 -4
- package/expressapi/package-lock.json +4454 -0
- package/package.json +1 -1
- /package/expressapi/app/{middlewares → middleware}/authjwt.js +0 -0
package/README.md
CHANGED
|
@@ -113,17 +113,22 @@ Command:
|
|
|
113
113
|
node op conf:generate
|
|
114
114
|
```
|
|
115
115
|
|
|
116
|
-
###
|
|
116
|
+
### Database import
|
|
117
117
|
|
|
118
118
|
Load data from JSON or CSV file.
|
|
119
119
|
|
|
120
120
|
Examples:
|
|
121
121
|
|
|
122
122
|
```bash
|
|
123
|
-
node op db:
|
|
124
|
-
node op db:
|
|
123
|
+
node op db:import thing somethings.json
|
|
124
|
+
node op db:import thing somethings.csv
|
|
125
|
+
node op db:import thing somethings.csv :
|
|
126
|
+
node op db:import thing somethings.csv ";"
|
|
127
|
+
node op db:import thing somethings.csv ,
|
|
125
128
|
```
|
|
126
129
|
|
|
130
|
+
The last option is the separator.
|
|
131
|
+
|
|
127
132
|
For example JSON file:
|
|
128
133
|
|
|
129
134
|
employees.json:
|
|
@@ -138,7 +143,7 @@ employees.json:
|
|
|
138
143
|
The default separator is comma.
|
|
139
144
|
|
|
140
145
|
```cmd
|
|
141
|
-
node op db:
|
|
146
|
+
node op db:import employee employees.json
|
|
142
147
|
```
|
|
143
148
|
|
|
144
149
|
For example CSV file:
|
|
@@ -160,7 +165,7 @@ id:name
|
|
|
160
165
|
```
|
|
161
166
|
|
|
162
167
|
```cmd
|
|
163
|
-
node op db:
|
|
168
|
+
node op db:import employee employees.csv --sep :
|
|
164
169
|
```
|
|
165
170
|
|
|
166
171
|
If the file has semicolon separator, use sep parameter, for example:
|
|
@@ -174,5 +179,56 @@ id;name
|
|
|
174
179
|
Use next command:
|
|
175
180
|
|
|
176
181
|
```cmd
|
|
177
|
-
node op db:
|
|
182
|
+
node op db:import employee employees.csv --sep ";"
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### Database synchronization
|
|
186
|
+
|
|
187
|
+
Models and database tables can be synchronized, but this can be dangerous.
|
|
188
|
+
|
|
189
|
+
Database synchronization can be set up in the app/models/modrels.js file. Default values are:
|
|
190
|
+
|
|
191
|
+
```js
|
|
192
|
+
{ alter: true }
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
This preserves the data and existing structure.
|
|
196
|
+
|
|
197
|
+
Possible values:
|
|
198
|
+
|
|
199
|
+
```js
|
|
200
|
+
{ force: true }
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
The latter deletes the contents of the database table!
|
|
204
|
+
|
|
205
|
+
If the value is false, there is no synchronization in either case.
|
|
206
|
+
|
|
207
|
+
### Migration
|
|
208
|
+
|
|
209
|
+
Generate migration:
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
node op make:migration <name>
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
Run migration:
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
node op migration:run
|
|
178
219
|
```
|
|
220
|
+
|
|
221
|
+
Reset database:
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
node op migration:reset
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
Rollback migrations:
|
|
228
|
+
|
|
229
|
+
```bash
|
|
230
|
+
node op migration:rollback
|
|
231
|
+
node op migration:rollback --step 2
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
The steop option is the number of migrations to rollback.
|
package/expressapi/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# sip expressapi
|
|
1
|
+
# sip expressapi template
|
|
2
2
|
|
|
3
|
-
Express based REST API
|
|
3
|
+
Express based REST API template
|
|
4
4
|
|
|
5
5
|
## Install
|
|
6
6
|
|
|
@@ -106,6 +106,28 @@ The keys in the JSON file and the field names in the CSV file must match the mod
|
|
|
106
106
|
|
|
107
107
|
If the CSV file contains quotation marks, they are automatically removed.
|
|
108
108
|
|
|
109
|
+
## Database synchronization
|
|
110
|
+
|
|
111
|
+
Models and database tables can be synchronized, but this can be dangerous.
|
|
112
|
+
|
|
113
|
+
Database synchronization can be set up in the app/models/modrels.js file. Default values are:
|
|
114
|
+
|
|
115
|
+
```js
|
|
116
|
+
{ alter: true }
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
This preserves the data and existing structure.
|
|
120
|
+
|
|
121
|
+
Possible values:
|
|
122
|
+
|
|
123
|
+
```js
|
|
124
|
+
{ force: true }
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
The latter deletes the contents of the database table!
|
|
128
|
+
|
|
129
|
+
If the value is false, there is no synchronization in either case.
|
|
130
|
+
|
|
109
131
|
## Migration
|
|
110
132
|
|
|
111
133
|
Generate a migration:
|
|
@@ -88,7 +88,42 @@ const UserController = {
|
|
|
88
88
|
data: userData
|
|
89
89
|
})
|
|
90
90
|
},
|
|
91
|
-
|
|
91
|
+
async updatePassword(req, res) {
|
|
92
|
+
var clientError = false;
|
|
93
|
+
try {
|
|
94
|
+
if(!req.body.password ||
|
|
95
|
+
!req.body.password_confirmation) {
|
|
96
|
+
clientError = true
|
|
97
|
+
throw new Error('Error! Bad request data!')
|
|
98
|
+
}
|
|
99
|
+
if(req.body.password != req.body.password_confirmation) {
|
|
100
|
+
clientError = true
|
|
101
|
+
throw new Error('Error! The two password is not same!')
|
|
102
|
+
}
|
|
103
|
+
await UserController.tryUpdatePassword(req, res)
|
|
104
|
+
}catch(error) {
|
|
105
|
+
if (clientError) {
|
|
106
|
+
res.status(400)
|
|
107
|
+
}else {
|
|
108
|
+
res.status(500)
|
|
109
|
+
}
|
|
110
|
+
res.json({
|
|
111
|
+
success: false,
|
|
112
|
+
message: 'Error! The query is failed!',
|
|
113
|
+
error: error.message
|
|
114
|
+
})
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
async tryUpdatePassword(req, res) {
|
|
118
|
+
const user = await User.findByPk(req.params.id)
|
|
119
|
+
user.password = bcrypt.hashSync(req.body.password)
|
|
120
|
+
await user.save()
|
|
121
|
+
res.status(200)
|
|
122
|
+
res.json({
|
|
123
|
+
success: true,
|
|
124
|
+
data: user
|
|
125
|
+
})
|
|
126
|
+
}
|
|
92
127
|
}
|
|
93
128
|
|
|
94
129
|
export default UserController
|
|
@@ -3,10 +3,12 @@ const router = Router()
|
|
|
3
3
|
|
|
4
4
|
import AuthController from '../controllers/authController.js';
|
|
5
5
|
import UserController from '../controllers/userController.js';
|
|
6
|
-
import verifyToken from '../
|
|
6
|
+
import verifyToken from '../middleware/authjwt.js';
|
|
7
7
|
|
|
8
8
|
router.post('/register', AuthController.register)
|
|
9
9
|
router.post('/login', AuthController.login)
|
|
10
10
|
router.get('/users', [verifyToken], UserController.index)
|
|
11
|
-
|
|
11
|
+
router.get('/users/:id', [verifyToken], UserController.show)
|
|
12
|
+
router.put('/users/:id/password', [verifyToken], UserController.updatePassword)
|
|
13
|
+
|
|
12
14
|
export default router
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { DataTypes } from 'sequelize';
|
|
2
|
+
|
|
3
|
+
async function up({context: QueryInterface}) {
|
|
4
|
+
await QueryInterface.createTable('users', {
|
|
5
|
+
id: {
|
|
6
|
+
allowNull: false,
|
|
7
|
+
autoIncrement: true,
|
|
8
|
+
primaryKey: true,
|
|
9
|
+
type: DataTypes.INTEGER
|
|
10
|
+
},
|
|
11
|
+
name: {
|
|
12
|
+
type: DataTypes.STRING,
|
|
13
|
+
allowNull: false
|
|
14
|
+
},
|
|
15
|
+
email: {
|
|
16
|
+
type: DataTypes.STRING,
|
|
17
|
+
allowNull: true
|
|
18
|
+
},
|
|
19
|
+
password: {
|
|
20
|
+
type: DataTypes.STRING,
|
|
21
|
+
allowNull: false
|
|
22
|
+
},
|
|
23
|
+
roleId: {
|
|
24
|
+
type: DataTypes.INTEGER,
|
|
25
|
+
defaultValue: 0
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
async function down({context: QueryInterface}) {
|
|
31
|
+
await QueryInterface.dropTable('users');
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export { up, down }
|
|
@@ -85,13 +85,70 @@ node op db:import thing things.csv ";"
|
|
|
85
85
|
node op db:import thing things.csv :
|
|
86
86
|
```
|
|
87
87
|
|
|
88
|
-
##
|
|
88
|
+
## Database
|
|
89
89
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
90
|
+
### Database synchronization
|
|
91
|
+
|
|
92
|
+
Models and database tables can be synchronized, but this can be dangerous.
|
|
93
|
+
|
|
94
|
+
Database synchronization can be set up in the app/models/modrels.js file. Default values are:
|
|
95
|
+
|
|
96
|
+
```js
|
|
97
|
+
{ alter: true }
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
This preserves the data and existing structure.
|
|
101
|
+
|
|
102
|
+
Possible values:
|
|
103
|
+
|
|
104
|
+
```js
|
|
105
|
+
{ force: true }
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
The latter deletes the contents of the database table!
|
|
109
|
+
|
|
110
|
+
If the value is false, there is no synchronization in either case.
|
|
111
|
+
|
|
112
|
+
### Migration
|
|
113
|
+
|
|
114
|
+
Generate a migration:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
node op make/migration thing
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Run all migration:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
node op migration:run
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Run a migration:
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
node op migration:run <migration_name>
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Rollback a migration:
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
node op migration:rollback
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Rollback two migrations:
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
node op migration:rollback 2
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Reset the database:
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
node op migration:reset
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
Reset the database and run all migrations:
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
node op migration:fresh
|
|
97
154
|
```
|
package/expressapi/op
CHANGED
|
@@ -8,11 +8,12 @@ import bcrypt from 'bcryptjs';
|
|
|
8
8
|
import path from 'path';
|
|
9
9
|
import { read } from 'read';
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
yargs(hideBin(process.argv))
|
|
12
12
|
.version()
|
|
13
|
+
.strict()
|
|
13
14
|
.usage('Használat: node op <command> [name]')
|
|
14
15
|
.help()
|
|
15
|
-
.demandCommand(
|
|
16
|
+
.demandCommand(2, 'Not enough arguments!')
|
|
16
17
|
.command('make:model <name>',
|
|
17
18
|
'Generates a new Sequelize model',
|
|
18
19
|
(yargs) => {
|
|
@@ -51,7 +52,7 @@ const { argv } = yargs(hideBin(process.argv))
|
|
|
51
52
|
}
|
|
52
53
|
)
|
|
53
54
|
.command('conf:generate',
|
|
54
|
-
'Generates a new config file',
|
|
55
|
+
'Generates a new config file: config/default.json from config/default.json.example',
|
|
55
56
|
(yargs) => {
|
|
56
57
|
return yargs
|
|
57
58
|
},
|
|
@@ -60,7 +61,7 @@ const { argv } = yargs(hideBin(process.argv))
|
|
|
60
61
|
}
|
|
61
62
|
)
|
|
62
63
|
.command('admin:generate',
|
|
63
|
-
'Generates a new admin user',
|
|
64
|
+
'Generates a new admin user in database table: users',
|
|
64
65
|
(yargs) => {
|
|
65
66
|
return yargs
|
|
66
67
|
},
|
|
@@ -258,6 +259,9 @@ async function startGenerateConf() {
|
|
|
258
259
|
console.log('Generate conf...');
|
|
259
260
|
const sourceFileName = 'config/default.json.example';
|
|
260
261
|
const destinationFileName = 'config/default.json';
|
|
262
|
+
if(await startCheckIfFileExists(destinationFileName)) {
|
|
263
|
+
process.exit(1);
|
|
264
|
+
}
|
|
261
265
|
try {
|
|
262
266
|
await fse.copyFile(sourceFileName, destinationFileName)
|
|
263
267
|
} catch (error) {
|