-
Notifications
You must be signed in to change notification settings - Fork 0
/
funtionsForDB.js
141 lines (127 loc) · 5.37 KB
/
funtionsForDB.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
const {
User,
Enemy,
GameData,
sequelize,
} = require('./db/models'); // Убедитесь, что путь корректный
async function checkDatabaseConnection() {
try {
// Проверяем подключение к базе данных
await sequelize.authenticate();
console.log('Соединение с базой данных успешно установлено.');
// Выполняем простой запрос для проверки
const result = await sequelize.query('SELECT 1+1 AS result');
console.log('Результат запроса:', result[0]);
} catch (error) {
console.error('Ошибка подключения к базе данных:', error);
} finally {
// Закрываем соединение с базой данных
await sequelize.close();
console.log('Соединение с базой данных закрыто.');
}
}
// checkDatabaseConnection();
async function getEnemy() {
try {
// Получаем общее количество врагов в базе данных
const totalEnemies = await Enemy.count();
// Генерируем случайный ID на основе общего количества врагов
const randomId = Math.floor(Math.random() * totalEnemies) + 1;
const enemy = await Enemy.findOne({ where: { id: randomId } });
return enemy; // Возвращаем emoji врага
} catch (error) {
console.error('Ошибка при получении врага из базы данных:', error);
return null; // Возвращаем null в случае ошибки
}
}
// getEnemy();
async function getUserStat(name) {
try {
const user = await User.findOne({ where: { name } });
const gameResult = await GameData.findOne({ where: { userId: user.id } });
if (gameResult) {
console.log(`Предыдущий результат игры: Время игры - ${gameResult.gameTime} сек., Убито врагов - ${gameResult.enemiesKilled}`);
} else {
console.log('Результат не найден.');
}
} catch (err) {
console.error('Ошибка при получении результатов игры:', err);
}
}
// getUserStat(1);
async function checkUser(name) {
try {
const [user, created] = await User.findOrCreate({
where: { name },
defaults: { name },
});
if (created) {
console.log(`Создан новый пользователь c именем ${user.name}`);
} else {
console.log(`Пользователь ${user.name} найден.`);
}
} catch (err) {
console.error('Ошибка при проверке или создании пользователя:', err);
}
}
// checkUser('Тимур');
async function getTop() {
try {
const data = await GameData.findAll({
order: [['gameTime', 'DESC']], // Сортировка по полю gameTime в порядке убывания
limit: 5, // Ограничение на 5 лучших игроков
});
const topOfGameTime = data.map((el) => el.get({ plain: true }));
const arrUserAndGameTime = []; // Инициализация строки для результата
// Проход по массиву топ-игроков
for (const record of topOfGameTime) {
const player = await User.findOne({ where: { id: record.userId } });
arrUserAndGameTime.push(`Игрок ${player.name} продержался ${record.gameTime} секунд`);
}
const result = arrUserAndGameTime.join('\n');
console.log(result); // Выводим список топ-игроков
} catch (error) {
console.error('Ошибка при получении топа:', error);
}
}
async function gameOver(name, gameTime = 0, enemiesKilled = 0) {
try {
const user = await User.findOne({ where: { name } });
const [result, created] = await GameData.findOrCreate({
where: { userId: user.id },
defaults: { gameTime, enemiesKilled },
});
if (created) {
// Если запись была создана
console.log(`Игра окончена! Время игры: ${gameTime} сек.\nКоличество убитых врагов: ${enemiesKilled}\nВаш результат сохранен под именем ${user.name}`);
} else {
// Если запись была найдена, обновляем её
result.gameTime = gameTime;
result.enemiesKilled = enemiesKilled;
await result.save(); // Сохраняем изменения
console.log(`Игра окончена! Время игры: ${gameTime} ceк.\nКоличество убитых врагов: ${enemiesKilled}\nВаш результат обновлен под именем ${user.name}`);
}
} catch (err) {
console.error('Ошибка при выводе и сохранении результатов игры:', err);
} finally {
// Закрываем соединение с базой данных
await sequelize.close();
console.log('Соединение с базой данных закрыто.');
}
}
// gameOver(1);
function delay(ms) {
return new Promise((resolve) => {
setTimeout(() => {
resolve(); // разрешаем промис после задержки
}, ms);
});
}
module.exports = {
getEnemy,
getUserStat,
checkUser,
getTop,
gameOver,
delay,
};