-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsetup.js
174 lines (148 loc) · 5.82 KB
/
setup.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
const { Command } = require('commander')
const fs = require('fs')
const bcrypt = require('bcrypt')
const { Sequelize } = require('sequelize')
const mysql = require('mysql2/promise')
const inquirer = require('inquirer')
const program = new Command()
const chalk = require('chalk')
// Default database credentials
const defaultDBCredentials = {
host: 'localhost',
user: 'root',
password: '',
database: 'debttracker',
port: 3306
};
const showHeader = () => {
const mayneym = `
________ _________ _____ ______ _ ____ ___ ___ _ __
| ___| \\/ || ___ \\ ___| | _ \\ | | | \\/ | / _ \\ | \\ | |
| |__ | . . || |_/ / |__ | | | | | | | . . |/ /_\\ \\| \\| |
| __|| |\\/| || /| __| | | | | | | | |\\/| || _ || . \` |
| |___| | | || |\\ \\| |___ | |/ /| |_| | | | || | | || |\\ |
\\____/\\_| |_/\\_| \\_\\____/ |___/ \\___/\\_| |_/\\_| |_/\\_| \\_/
`
console.clear()
console.log(chalk.hex('#e8294f').bold(mayneym))
console.log(chalk.cyan('Borç Takip (KYK502 - BYS),') + chalk.cyan.bold(' Emre DUMAN ') + chalk.cyan('tarafından oluşturulmuş açık kaynak kodlu bir projedir. Ticari amaçlarla kullanılamaz.'));
console.log(chalk.cyan('\nhttps://emre.duman.web.tr'))
console.log(chalk.cyan('\n----------------------------------------------------------------\n'))
}
// Command to set up the configuration
program
.command('setup')
.description('Veri tabanı konfigürasyonunu oluştur')
.action(async () => {
showHeader()
const dbCredentials = await inquirer.prompt([
{
type: 'input',
name: 'host',
message: 'Database host:',
default: defaultDBCredentials.host
},
{
type: 'input',
name: 'user',
message: 'Database user:',
default: defaultDBCredentials.user
},
{
type: 'password',
name: 'password',
message: 'Database password:',
default: defaultDBCredentials.password
},
{
type: 'input',
name: 'database',
message: 'Database name:',
default: defaultDBCredentials.database
},
{
type: 'input',
name: 'port',
message: 'Database port:',
default: defaultDBCredentials.port
}
])
const configContent = `const config = ${JSON.stringify({ db: {...dbCredentials,created_via_CLI:true}, server: { port: 3000 } }, null, 4)}\n\nmodule.exports = config`
fs.writeFileSync('config.js', configContent)
console.log('Bilgiler "config.js" dosyasına kaydedildi.')
const sequelize = new Sequelize(dbCredentials.database, dbCredentials.user, dbCredentials.password, {
host: dbCredentials.host,
port: dbCredentials.port,
dialect: 'mysql'
});
try {
const { host, port, user, password, database } = dbCredentials
const connection = await mysql.createConnection({ host, port, user, password })
await connection.query(`CREATE DATABASE IF NOT EXISTS \`${database}\`;`)
await sequelize.authenticate()
console.log('Veri tabanı bağlantısı başarılı.')
const User = require('./models/User')
const Debt = require('./models/Debt')
Debt.belongsTo(User, {
foreignKey: 'debtorId'
})
await User.sync()
await Debt.sync()
await sequelize.sync()
} catch (error) {
console.error('Veri tabanına bağlanılamıyor:', error)
} finally {
await sequelize.close()
console.log(chalk.green('\nVeri tabanı konfigürasyonu tamamlandı. Artık kullanıcı oluşturabilirsiniz.\n'))
process.exit()
}
});
program
.command('create-user')
.description('Yeni kullanıcı oluştur.')
.action(async () => {
showHeader()
const { db } = require('./config')
if(!db.created_via_CLI) {
console.log(chalk.yellow('\nBu komutu kullanmadan önce veri tabanını oluşturmalısınız. Bunun için "node setup.js setup" komutunu çalıştırın.\n'))
return process.exit()
}
const sequelize = new Sequelize(db.database, db.user, db.password, {
host: db.host,
port: db.port,
dialect: 'mysql'
})
let uname
try {
const { username, name, password } = await inquirer.prompt([
{
type: 'input',
name: 'username',
message: 'Kullanıcı adı girin:'
},
{
type: 'input',
name: 'name',
message: 'İsim - soyisim girin:'
},
{
type: 'password',
name: 'password',
message: 'Kullanıcı parolasını belirleyin:'
}
]);
uname = username
const User = require('./models/User')
await sequelize.authenticate()
console.log('Veri tabanı bağlantısı başarılı.')
const hashedPassword = await bcrypt.hash(password, 10)
await User.create({ username, name, role: 'user', password: hashedPassword })
} catch (error) {
console.error('Veri tabanına bağlanılamıyor:', error)
} finally {
await sequelize.close()
console.log(chalk.green(`\nKullanıcı ${uname} başarıyla oluşturuldu.\n`))
process.exit()
}
})
program.parse(process.argv)