sequelize-game-bank 3.0.2 → 5.0.0

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.
Files changed (37) hide show
  1. package/README.md +64 -36
  2. package/config/setup-env.js +34 -0
  3. package/database/services/account/transfer.js +1 -1
  4. package/index.js +19 -11
  5. package/package.json +1 -1
  6. package/public/accounts.html +11 -11
  7. package/public/admin.html +5 -5
  8. package/public/credit.html +10 -10
  9. package/public/css/style.css +3 -1
  10. package/public/general.html +11 -11
  11. package/public/history.html +11 -11
  12. package/public/home.html +2 -2
  13. package/public/js/js.js +19 -95
  14. package/public/login.html +3 -3
  15. package/public/profile.html +10 -10
  16. package/public/register.html +7 -7
  17. package/public/transfer.html +10 -10
  18. package/public/uploads/avatars/PAVEL_1792314486483.png +0 -0
  19. package/public/uploads/avatars/root_1792312973479.png +0 -0
  20. package/public/uploads/avatars/root_1792313212019.png +0 -0
  21. package/server/server.js +31 -28
  22. package/database/services/bot/generators/ban-bot.html +0 -1
  23. package/database/services/bot/generators/ban-bot.txt +0 -1
  24. package/database/services/bot/generators/disable-2FA-bot.html +0 -1
  25. package/database/services/bot/generators/disable-2FA-bot.txt +0 -1
  26. package/database/services/bot/generators/enable-2FA-bot.html +0 -1
  27. package/database/services/bot/generators/enable-2FA-bot.txt +0 -1
  28. package/database/services/bot/generators/login-bot.html +0 -1
  29. package/database/services/bot/generators/login-bot.txt +0 -1
  30. package/database/services/bot/generators/register-bot.html +0 -1
  31. package/database/services/bot/generators/register-bot.txt +0 -7
  32. package/database/services/bot/generators/transfer-from-bot.html +0 -1
  33. package/database/services/bot/generators/transfer-from-bot.txt +0 -1
  34. package/database/services/bot/generators/transfer-to-bot.html +0 -1
  35. package/database/services/bot/generators/transfer-to-bot.txt +0 -1
  36. package/database/services/bot/generators/unban-bot.html +0 -1
  37. package/database/services/bot/generators/unban-bot.txt +0 -1
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  > # sequelize-game-bank
2
2
 
3
- <img src="./src/logo/icon.png" alt="sequelize-game-bank logo" width="160" height="160" style="border-radius: 12%; margin-bottom: 20px;" />
3
+ <img src="https://github.com/RPM-programmer/sequelize-game-bank/blob/main/src/logo/icon.png?raw=true" alt="sequelize-game-bank logo" width="160" height="160" style="border-radius: 12%; margin-bottom: 20px;" />
4
4
 
5
5
  ## npm модуль для создания полноценного банка на express, sequelize (sqlite).
6
6
 
@@ -15,50 +15,78 @@
15
15
 
16
16
  ## 🚀 Установка
17
17
 
18
- Установите пакет через ваш менеджер пакетов:
18
+ Установите пакет через менеджер пакетов:
19
19
 
20
20
  ```bash
21
21
  npm install sequelize-game-bank
22
22
  # или
23
23
  yarn add sequelize-game-bank
24
24
  ```
25
- ## Мажорный переход на v3.0.0 (Breaking Changes)
26
- ### В v3.0.0 изменили инициализацию! Теперь не:
27
- ```javascript
28
- const BANK = require('sequelize-game-bank');
29
-
30
- const app = (async function initBank(){
31
- try {
32
- return await BANK();
33
- } catch {
34
- console.log("Ошибка при инициализации банка!");
35
- }
36
- })();
37
- //app.listen(3000);
25
+ ## Установка и настройка (Инициализация)
26
+
27
+ Модуль `sequelize-game-bank` требует асинхронной инициализации базы данных и настройки роутов.
28
+
29
+ ### 1. Настройка окружения (.env)
30
+ После первого запуска откройте `.env` и настройте эти поля:
31
+
32
+ ```env
33
+ SEQUELIZE_GAME_BANK_INITIALIZED = true
34
+ JWT_SECRET = 0000
35
+ ROOT_PASSWORD = bank-root
36
+ GMAIL =
37
+ GOOGLE_APP_PASSWORD =
38
38
  ```
39
- ### а:
39
+
40
+ ### 2. Подключение в проект
41
+
42
+ Так как модуль является асинхронным, его необходимо подключать **ДО** финальных обработчиков несуществующих маршрутов (404) и ошибок сервера (500). Поместите вызов модуля внутрь асинхронного блока:
43
+
40
44
  ```javascript
41
- const BANK = require('sequelize-game-bank');
42
- const express = require("express");
43
- let cleanApp = express();
44
- const app = (async function init()=>{
45
- return await BANK(cleanApp);
46
- });
47
-
48
- //app.listen(3000)
45
+ const express = require('express');
46
+ const sequelize_game_bank = require('sequelize-game-bank');
47
+
48
+ const app = express();
49
+
50
+
51
+ (async () => {
52
+ try {
53
+ await sequelize_game_bank(app);
54
+
55
+ app.use((req, res) => {
56
+ res.status(404).send("<h1>404 - Страница не найдена</h1>");
57
+ });
58
+
59
+ app.use((err, req, res, next) => {
60
+ res.status(500).send("<h1>500 - Внутренняя ошибка сервера</h1>");
61
+ });
62
+
63
+ } catch (error) {
64
+ }
65
+ })();
66
+
67
+ module.exports = { app };
49
68
  ```
69
+ ## 🌐 Маршрутизация и точки входа (v4.0.0)
50
70
 
51
- ## 💻 Быстрый старт
71
+ В версии 4.0.0 вся логика путей полностью изолирована внутри модуля и работает в автоматическом режиме. Разработчику или пользователю доступны всего **3 основные веб-страницы** для ручного перехода из браузера:
52
72
 
53
- Просто подключите модуль в ваше существующее Express-приложение:
73
+ * **`GET`** `/bank/home.html` — Главная приветственная страница банка.
74
+ * **`GET`** `/bank/login.html` — Страница авторизации пользователей.
75
+ * **`GET`** `/bank/register.html` — Страница регистрации новых аккаунтов.
54
76
 
55
- ```javascript
56
- const BANK = require('sequelize-game-bank');
57
- const express = require("express");
58
- let cleanApp = express();
59
- const app = (async function init()=>{
60
- return await BANK(cleanApp);
61
- });
62
-
63
- //app.listen(3000)
64
- ```
77
+ ---
78
+
79
+ ### ⚙️ Как это работает изнутри (Автоматика модуля)
80
+
81
+ Вам больше не нужно вручную настраивать эндпоинты в основном проекте `CITY`. После подключения модуля в `server.js` автоматически разворачиваются два изолированных роутера:
82
+
83
+ 1. **Интерфейс банка (Префикс `/bank`)**
84
+ Автоматически управляет отображением всех внутренних страниц личного кабинета (панели управления, счета, переводы, кредиты, админка) и раздачей статических файлов (CSS, JS, загруженные аватарки).
85
+
86
+ 2. **Серверное API (Префикс `/api/bank`)**
87
+ Полностью берет на себя фоновый обмен JSON-данными между вашим фронтендом и базой данных Sequelize. На этот префикс автоматически завязаны все типы сетевых операций:
88
+ * Получение данных (`GET` запросы профилей, счетов, баланса и истории логов).
89
+ * Изменение состояния (`POST` запросы авторизации, переводов, кредитов и настройки 2FA).
90
+ * Удаление сущностей (`DELETE` запросы на закрытие игровых счетов).
91
+
92
+ ## Лицензия [ISC](LICENSE)
@@ -0,0 +1,34 @@
1
+ const fs = require('fs');
2
+ const path = require('path');
3
+ const process = require('process');
4
+ const envPath = path.resolve(process.cwd(), '.env');
5
+ const logger = require("custom-color-logs").print;
6
+ const defaultEnvContent = `
7
+ # ==============================================================================
8
+ # sequelize-game-bank v4.0.0
9
+ # ==============================================================================
10
+ SEQUELIZE_GAME_BANK_INITIALIZED = true
11
+ JWT_SECRET = 0000
12
+ ROOT_PASSWORD = bank-root
13
+ GMAIL = example@gmail.com
14
+ GOOGLE_APP_PASSWORD = abcd efgh ijkl mnop
15
+ `;
16
+ function initializeEnvironment() {
17
+ try {
18
+ if (!fs.existsSync(envPath)) {
19
+ fs.writeFileSync(envPath, defaultEnvContent, 'utf8');
20
+ } else {
21
+ const currentEnv = fs.readFileSync(envPath, 'utf8');
22
+ if (currentEnv.includes('SEQUELIZE_GAME_BANK_INITIALIZED')) {
23
+ require("dotenv").config({ path: envPath });
24
+ return;
25
+ }
26
+ fs.appendFileSync(envPath, `\n\n${defaultEnvContent}`, 'utf8');
27
+ }
28
+ } catch (err) {
29
+ console.log(logger.ServerError('Не удалось проверить или обновить .env:', err.message));
30
+ }
31
+ require("dotenv").config({ path: envPath });
32
+ }
33
+ initializeEnvironment();
34
+ module.exports = { envPath };
@@ -35,7 +35,7 @@ module.exports = async function transferManny(fromId, toId, amount, pinCode, tot
35
35
  await t.rollback();
36
36
  return { status: false, statusCode: -23, message: 'Неверный пароль счета отправителя' };
37
37
  }
38
- if (fromAcc.user !== 'root' && parseFloat(fromAcc.manny) < numericAmount) {
38
+ if (parseFloat(fromAcc.manny) < numericAmount) {
39
39
  await t.rollback();
40
40
  return { status: false, statusCode: -11, message: 'Недостаточно средств на счете' };
41
41
  }
package/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  const logger = require("custom-color-logs").print;
2
2
  console.log(logger.ServerBankInfo("Модуль банка запущен!"))
3
- require('dotenv').config();
4
3
  const path = require("path")
4
+ const setupEnv = require(path.join(__dirname, "config", "setup-env.js"));
5
5
  const express = require('express');
6
6
  const cookieParser = require('cookie-parser');
7
7
  const bcrypt = require('bcrypt');
@@ -35,25 +35,33 @@ async function Bank(app) {
35
35
  }
36
36
  });
37
37
  console.log(logger.ServerBankInfo(`Супер пользвотель создан`))
38
- const configuredApp = registerRoutes(app);
39
- app.use('/css', express.static(path.join(__dirname, 'public', 'css')));
40
- app.use('/js', express.static(path.join(__dirname, 'public', 'js')));
41
- app.use('/uploads', express.static(path.join(__dirname, 'public', 'uploads')));
38
+ const gp = registerRoutes();
39
+ const get = gp.GET;
40
+ const post = gp.POST;
41
+ post.use('/css', express.static(path.join(__dirname, 'public', 'css')));
42
+ post.use('/js', express.static(path.join(__dirname, 'public', 'js')));
43
+ post.use('/uploads', express.static(path.join(__dirname, 'public', 'uploads')));
42
44
  const { verifyPageSession } = require(path.join(__dirname, 'server', 'middleware', 'auth'));
43
45
  const pages = ['general.html', 'profile.html', 'accounts.html', 'transfer.html', 'history.html', 'credit.html', 'admin.html'];
44
46
  pages.forEach(page => {
45
- app.get(`/${page}`, verifyPageSession, (req, res) => {
47
+ get.get(`/${page}`, verifyPageSession, (req, res) => {
46
48
  res.sendFile(path.join(__dirname, 'public', page));
47
49
  });
48
50
  });
49
- app.get('/login.html', (req, res) => res.sendFile(path.join(__dirname, 'public', 'login.html')));
50
- app.get('/register.html', (req, res) => res.sendFile(path.join(__dirname, 'public', 'register.html')));
51
- app.get('/home.html', (req, res) => res.sendFile(path.join(__dirname, 'public', 'home.html')));
51
+ get.get('/login.html', (req, res) => res.sendFile(path.join(__dirname, 'public', 'login.html')));
52
+ get.get('/register.html', (req, res) => res.sendFile(path.join(__dirname, 'public', 'register.html')));
53
+ get.get('/home.html', (req, res) => res.sendFile(path.join(__dirname, 'public', 'home.html')));
52
54
  app.get('/favicon.ico', (req, res) => res.sendFile(path.join(__dirname, 'public', 'icon', 'icon.png')));
53
- app.get('/', (req, res) => res.redirect('/home.html'));
55
+ get.get('/', (req, res) => res.redirect('/home.html'));
56
+
57
+
58
+
59
+
60
+ app.use("/bank", get);
61
+ app.use("/api/bank", post)
54
62
 
55
63
  require(path.join(__dirname, 'database', 'services', 'bot', 'cron-schedule'));
56
- return configuredApp;
64
+ return app;
57
65
  } catch (err) {
58
66
  console.log(logger.ServerBankError("Критическая ошибка инициализации модулей", err));
59
67
  throw err;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sequelize-game-bank",
3
- "version": "3.0.2",
3
+ "version": "5.0.0",
4
4
  "description": "A Sequelize-based gaming economy and banking system featuring user profiles, credits, admin management, and detailed transaction history.",
5
5
  "main": "index.js",
6
6
  "type": "commonjs",
@@ -3,25 +3,25 @@
3
3
  <head>
4
4
  <meta charset="UTF-8">
5
5
  <title>City-Bank | Мои Счета</title>
6
- <link rel="stylesheet" href="/css/style.css">
6
+ <link rel="stylesheet" href="/api/bank/css/style.css">
7
7
  <link rel="stylesheet" href="https://unpkg.com/tippy.js@6/animations/scale.css"/>
8
8
  </head>
9
9
  <body>
10
10
  <div class="main-container">
11
11
  <div class="sidebar">
12
12
  <div style="text-align: center; margin-bottom: 15px;">
13
- <img id="user-avatar" src="/uploads/avatars/default.png" style="width: 80px; height: 80px; border-radius: 50%; object-fit: cover; border: 3px solid #1abc9c;">
13
+ <img id="user-avatar" src="/api/bank/uploads/avatars/default.png" style="width: 80px; height: 80px; border-radius: 50%; object-fit: cover; border: 3px solid #1abc9c;">
14
14
  </div>
15
15
  <h2 id="user-display">Загрузка...</h2>
16
16
  <p style="text-align: center; color: #bbb;">Всего средств: <span id="total-manny" style="font-weight: bold; color: #1abc9c;">0.00</span> руб.</p>
17
17
  <hr style="border-color: #34495e;">
18
- <a href="/general.html" class="nav-item"><button class="menu-btn" id="general">Главная</button></a>
18
+ <a href="/bank/general.html" class="nav-item"><button class="menu-btn" id="general">Главная</button></a>
19
19
  <a class="nav-item"><button class="menu-btn active" id="acccount">Мои Счета</button></a>
20
- <a href="/transfer.html" class="nav-item"><button class="menu-btn" id="transfer">Перевод средств</button></a>
21
- <a href="/history.html" class="nav-item"><button class="menu-btn" id="history">История транзакций</button></a>
22
- <a href="/credit.html" class="nav-item"><button class="menu-btn" id="credit">Оформить Кредит</button></a>
23
- <a href="/profile.html" class="nav-item"><button class="menu-btn" id="profile">Управление профилем</button></a>
24
- <button class="menu-btn" onclick="location.href='/admin.html'" id="admin-nav" style="display: none; color: #ffc107;">Админ-панель</button>
20
+ <a href="/bank/transfer.html" class="nav-item"><button class="menu-btn" id="transfer">Перевод средств</button></a>
21
+ <a href="/bank/history.html" class="nav-item"><button class="menu-btn" id="history">История транзакций</button></a>
22
+ <a href="/bank/credit.html" class="nav-item"><button class="menu-btn" id="credit">Оформить Кредит</button></a>
23
+ <a href="/bank/profile.html" class="nav-item"><button class="menu-btn" id="profile">Управление профилем</button></a>
24
+ <button class="menu-btn" onclick="location.href='/bank/admin.html'" id="admin-nav" style="display: none; color: #ffc107;">Админ-панель</button>
25
25
  <br><br>
26
26
  <button class="menu-btn btn-danger" id="logoutBtn" style="text-align: center;">Выйти из системы</button>
27
27
  </div>
@@ -39,9 +39,9 @@
39
39
  </div>
40
40
  </div>
41
41
  <script src="https://cdnjs.cloudflare.com/ajax/libs/zxcvbn/4.4.2/zxcvbn.js"></script>
42
- <script src="/js/sweetalert2.js"></script>
42
+ <script src="/api/bank/js/sweetalert2.js"></script>
43
43
  <script src="https://unpkg.com/@popperjs/core@2/dist/umd/popper.min.js"></script>
44
44
  <script src="https://unpkg.com/tippy.js@6/dist/tippy-bundle.umd.js"></script>
45
- <script src="/js/js.js"></script>
45
+ <script src="/api/bank/js/js.js"></script>
46
46
  </body>
47
- </html>
47
+ </html>
package/public/admin.html CHANGED
@@ -39,8 +39,8 @@
39
39
  <body>
40
40
 
41
41
  <div class="container">
42
- <h2>👑 ЦЕНТРАЛЬНЫЙ ПУЛЬТ АДМИНИСТРАТОРА (ROOT)</h2>
43
- <button class="btn" onclick="location.href='/general.html'" style="background:#6c757d;"><- В личный кабинет</button>
42
+ <h2>ЦЕНТРАЛЬНЫЙ ПУЛЬТ АДМИНИСТРАТОРА (ROOT)</h2>
43
+ <button class="btn" onclick="location.href='/bank/general.html'" style="background:#6c757d;"><- В личный кабинет</button>
44
44
 
45
45
  <!-- Интерактивная таблица всех счетов -->
46
46
  <table id="all-accounts-table">
@@ -90,7 +90,7 @@
90
90
  // Загрузка таблицы при старте страницы
91
91
  async function loadAdminDashboard() {
92
92
  try {
93
- const response = await fetch('/api/admin/accounts/all');
93
+ const response = await fetch('/api/bank/admin/accounts/all');
94
94
  const result = await response.json();
95
95
 
96
96
  if (!response.ok || !result.status) {
@@ -128,7 +128,7 @@
128
128
  // Переключение статуса бана/разбана
129
129
  async function toggleAccountStatus(accountId, makeActive) {
130
130
  try {
131
- const response = await fetch(`/api/admin/accounts/${accountId}/status`, {
131
+ const response = await fetch(`/api/bank/admin/accounts/${accountId}/status`, {
132
132
  method: 'POST',
133
133
  headers: {'Content-Type': 'application/json'},
134
134
  body: JSON.stringify({ active: makeActive })
@@ -169,7 +169,7 @@
169
169
 
170
170
  try {
171
171
  // Роут /modify работает через add-manny.js и remove-manny.js, которые НЕ шлют письма по ТЗ
172
- const response = await fetch(`/api/admin/accounts/${accountId}/modify`, {
172
+ const response = await fetch(`/api/bank/admin/accounts/${accountId}/modify`, {
173
173
  method: 'POST',
174
174
  headers: {'Content-Type': 'application/json'},
175
175
  body: JSON.stringify({ amount, type })
@@ -3,25 +3,25 @@
3
3
  <head>
4
4
  <meta charset="UTF-8">
5
5
  <title>City-Bank | Кредитование</title>
6
- <link rel="stylesheet" href="/css/style.css">
6
+ <link rel="stylesheet" href="/api/bank/css/style.css">
7
7
  <link rel="stylesheet" href="https://unpkg.com/tippy.js@6/animations/scale.css"/>
8
8
  </head>
9
9
  <body>
10
10
  <div class="main-container">
11
11
  <div class="sidebar">
12
12
  <div style="text-align: center; margin-bottom: 15px;">
13
- <img id="user-avatar" src="/uploads/avatars/default.png" style="width: 80px; height: 80px; border-radius: 50%; object-fit: cover; border: 3px solid #1abc9c;">
13
+ <img id="user-avatar" src="/api/bank/uploads/avatars/default.png" style="width: 80px; height: 80px; border-radius: 50%; object-fit: cover; border: 3px solid #1abc9c;">
14
14
  </div>
15
15
  <h2 id="user-display">Загрузка...</h2>
16
16
  <p style="text-align: center; color: #bbb;">Всего средств: <span id="total-manny" style="font-weight: bold; color: #1abc9c;">0.00</span> руб.</p>
17
17
  <hr style="border-color: #34495e;">
18
- <a href="/general.html" class="nav-item"><button class="menu-btn" id="general">Главная</button></a>
19
- <a href="/accounts.html" class="nav-item"><button class="menu-btn" id="acccount">Мои Счета</button></a>
20
- <a href="/transfer.html" class="nav-item"><button class="menu-btn" id="transfer">Перевод средств</button></a>
21
- <a href="/history.html" class="nav-item"><button class="menu-btn" id="history">История транзакций</button></a>
18
+ <a href="/bank/general.html" class="nav-item"><button class="menu-btn" id="general">Главная</button></a>
19
+ <a href="/bank/accounts.html" class="nav-item"><button class="menu-btn" id="acccount">Мои Счета</button></a>
20
+ <a href="/bank/transfer.html" class="nav-item"><button class="menu-btn" id="transfer">Перевод средств</button></a>
21
+ <a href="/bank/history.html" class="nav-item"><button class="menu-btn" id="history">История транзакций</button></a>
22
22
  <a class="nav-item"><button class="menu-btn active" id="credit">Оформить Кредит</button></a>
23
- <a href="/profile.html" class="nav-item"><button class="menu-btn" id="profile">Управление профилем</button></a>
24
- <button class="menu-btn" onclick="location.href='/admin.html'" id="admin-nav" style="display: none; color: #ffc107;">Админ-панель</button>
23
+ <a href="/bank/profile.html" class="nav-item"><button class="menu-btn" id="profile">Управление профилем</button></a>
24
+ <button class="menu-btn" onclick="location.href='/bank/admin.html'" id="admin-nav" style="display: none; color: #ffc107;">Админ-панель</button>
25
25
  <br><br>
26
26
  <button class="menu-btn btn-danger" id="logoutBtn" style="text-align: center;">Выйти из системы</button>
27
27
  </div>
@@ -82,9 +82,9 @@
82
82
  </div>
83
83
  </div>
84
84
  <script src="https://cdnjs.cloudflare.com/ajax/libs/zxcvbn/4.4.2/zxcvbn.js"></script>
85
- <script src="/js/sweetalert2.js"></script>
85
+ <script src="/api/bank/js/sweetalert2.js"></script>
86
86
  <script src="https://unpkg.com/@popperjs/core@2/dist/umd/popper.min.js"></script>
87
87
  <script src="https://unpkg.com/tippy.js@6/dist/tippy-bundle.umd.js"></script>
88
- <script src="/js/js.js"></script>
88
+ <script src="/api/bank/js/js.js"></script>
89
89
  </body>
90
90
  </html>
@@ -58,4 +58,6 @@
58
58
  .tippy-box[data-theme~='user-info']{
59
59
  background-color: rgba(240, 248, 255, 0.747);
60
60
  border: 1px solid rgb(0, 0, 255);
61
- }
61
+ }
62
+
63
+ :disabled{cursor:not-allowed;}
@@ -4,7 +4,7 @@
4
4
  <meta charset="UTF-8">
5
5
  <title>City-Bank | Главная</title>
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1">
7
- <link rel="stylesheet" href="/css/style.css">
7
+ <link rel="stylesheet" href="/api/bank/css/style.css">
8
8
  <link rel="stylesheet" href="https://unpkg.com/tippy.js@6/animations/scale.css"/>
9
9
  <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/toastify-js/src/toastify.min.css">
10
10
  <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/toastify-js"></script>
@@ -19,12 +19,12 @@
19
19
  <p style="text-align: center; color: #bbb;">Всего средств: <span id="total-manny" style="font-weight: bold; color: #1abc9c;">0.00</span> руб.</p>
20
20
  <hr style="border-color: #34495e;">
21
21
  <a class="nav-item"><button class="menu-btn active" id="general">Главная</button></a>
22
- <a href="/accounts.html" class="nav-item"><button class="menu-btn" id="acccount">Мои Счета</button></a>
23
- <a href="/transfer.html" class="nav-item"><button class="menu-btn" id="transfer">Перевод средств</button></a>
24
- <a href="/history.html" class="nav-item"><button class="menu-btn" id="history">История транзакций</button></a>
25
- <a href="/credit.html" class="nav-item"><button class="menu-btn" id="credit">Оформить Кредит</button></a>
26
- <a href="/profile.html" class="nav-item"><button class="menu-btn" id="profile">Управление профилем</button></a>
27
- <button class="menu-btn" onclick="location.href='/admin.html'" id="admin-nav" style="display: none; color: #ffc107;">Админ-панель</button>
22
+ <a href="/bank/accounts.html" class="nav-item"><button class="menu-btn" id="acccount">Мои Счета</button></a>
23
+ <a href="/bank/transfer.html" class="nav-item"><button class="menu-btn" id="transfer">Перевод средств</button></a>
24
+ <a href="/bank/history.html" class="nav-item"><button class="menu-btn" id="history">История транзакций</button></a>
25
+ <a href="/bank/credit.html" class="nav-item"><button class="menu-btn" id="credit">Оформить Кредит</button></a>
26
+ <a href="/bank/profile.html" class="nav-item"><button class="menu-btn" id="profile">Управление профилем</button></a>
27
+ <button class="menu-btn" onclick="location.href='/bank/admin.html'" id="admin-nav" style="display: none; color: #ffc107;">Админ-панель</button>
28
28
  <br><br>
29
29
  <button class="menu-btn btn-danger" id="logoutBtn" style="text-align: center;">Выйти из системы</button>
30
30
  </div>
@@ -32,14 +32,14 @@
32
32
  <div class="container">
33
33
  <div class="container-center">
34
34
  <div style="text-align: center; margin-bottom: 15px;" onclick="uploadAvatar()">
35
- <img id="user-avatar2" src="/uploads/avatars/default.png" style="width: 250px; height: 250px; border-radius: 50%; object-fit: cover; border: 3px solid #1abc9c;">
35
+ <img id="user-avatar2" src="/api/bank/uploads/avatars/default.png" style="width: 250px; height: 250px; border-radius: 50%; object-fit: cover; border: 3px solid #1abc9c;">
36
36
  </div>
37
37
  <h1 id="user-display-page">Загрузка...</h1>
38
38
  <!--и так далее-->
39
39
  <p>Подать запрос в поддержку</p>
40
40
  <form action="/help-message" method="post" class="help_msg-form">
41
41
  <input type="text" name="hm" placeholder="Здраствуйте. Я .. хочу попросить помощи. У меня не работает ... . Спасибо">
42
- <input type="submit" value="Отправить">
42
+ <input disabled type="submit" value="Отправить">
43
43
  </form>
44
44
  <footer>
45
45
  <p style="color: lightslategray;">Банк ©2026</p>
@@ -48,9 +48,9 @@
48
48
  </div>
49
49
  </div>
50
50
  <script src="https://cdnjs.cloudflare.com/ajax/libs/zxcvbn/4.4.2/zxcvbn.js"></script>
51
- <script src="/js/sweetalert2.js"></script>
51
+ <script src="/api/bank/js/sweetalert2.js"></script>
52
52
  <script src="https://unpkg.com/@popperjs/core@2/dist/umd/popper.min.js"></script>
53
53
  <script src="https://unpkg.com/tippy.js@6/dist/tippy-bundle.umd.js"></script>
54
- <script src="/js/js.js"></script>
54
+ <script src="/api/bank/js/js.js"></script>
55
55
  </body>
56
56
  </html>
@@ -3,32 +3,32 @@
3
3
  <head>
4
4
  <meta charset="UTF-8">
5
5
  <title>City-Bank | История</title>
6
- <link rel="stylesheet" href="/css/style.css">
6
+ <link rel="stylesheet" href="/api/bank/css/style.css">
7
7
  <link rel="stylesheet" href="https://unpkg.com/tippy.js@6/animations/scale.css"/>
8
8
  </head>
9
9
  <body>
10
10
  <div class="main-container">
11
11
  <div class="sidebar">
12
12
  <div style="text-align: center; margin-bottom: 15px;">
13
- <img id="user-avatar" src="/uploads/avatars/default.png" style="width: 80px; height: 80px; border-radius: 50%; object-fit: cover; border: 3px solid #1abc9c;">
13
+ <img id="user-avatar" src="/api/bank/uploads/avatars/default.png" style="width: 80px; height: 80px; border-radius: 50%; object-fit: cover; border: 3px solid #1abc9c;">
14
14
  </div>
15
15
  <h2 id="user-display">Загрузка...</h2>
16
16
  <p style="text-align: center; color: #bbb;">Всего средств: <span id="total-manny" style="font-weight: bold; color: #1abc9c;">0.00</span> руб.</p>
17
17
  <hr style="border-color: #34495e;">
18
- <a href="/general.html" class="nav-item"><button class="menu-btn" id="general">Главная</button></a>
19
- <a href="/accounts.html" class="nav-item"><button class="menu-btn" id="acccount">Мои Счета</button></a>
20
- <a href="/transfer.html" class="nav-item"><button class="menu-btn" id="transfer">Перевод средств</button></a>
18
+ <a href="/bank/general.html" class="nav-item"><button class="menu-btn" id="general">Главная</button></a>
19
+ <a href="/bank/accounts.html" class="nav-item"><button class="menu-btn" id="acccount">Мои Счета</button></a>
20
+ <a href="/bank/transfer.html" class="nav-item"><button class="menu-btn" id="transfer">Перевод средств</button></a>
21
21
  <a class="nav-item"><button class="menu-btn active" id="history">История транзакций</button></a>
22
- <a href="/credit.html" class="nav-item"><button class="menu-btn" id="credit">Оформить Кредит</button></a>
23
- <a href="/profile.html" class="nav-item"><button class="menu-btn" id="profile">Управление профилем</button></a>
24
- <button class="menu-btn" onclick="location.href='/admin.html'" id="admin-nav" style="display: none; color: #ffc107;">Админ-панель</button>
22
+ <a href="/bank/credit.html" class="nav-item"><button class="menu-btn" id="credit">Оформить Кредит</button></a>
23
+ <a href="/bank/profile.html" class="nav-item"><button class="menu-btn" id="profile">Управление профилем</button></a>
24
+ <button class="menu-btn" onclick="location.href='/bank/admin.html'" id="admin-nav" style="display: none; color: #ffc107;">Админ-панель</button>
25
25
  <br><br>
26
26
  <button class="menu-btn btn-danger" id="logoutBtn" style="text-align: center;">Выйти из системы</button>
27
27
  </div>
28
28
  <div class="container">
29
29
  <div class="container-center">
30
30
  <div style="text-align: center; margin-bottom: 15px;">
31
- <img id="user-avatar2" src="/uploads/avatars/default.png" style="width: 250px; height: 250px; border-radius: 50%; object-fit: cover; border: 3px solid #1abc9c;">
31
+ <img id="user-avatar2" src="/api/bank/uploads/avatars/default.png" style="width: 250px; height: 250px; border-radius: 50%; object-fit: cover; border: 3px solid #1abc9c;">
32
32
  </div>
33
33
  <h3>История финансовых операций</h3>
34
34
  <div class="card">
@@ -57,9 +57,9 @@
57
57
  <h1>hello</h1>
58
58
  </dialog>
59
59
  <script src="https://cdnjs.cloudflare.com/ajax/libs/zxcvbn/4.4.2/zxcvbn.js"></script>
60
- <script src="/js/sweetalert2.js"></script>
60
+ <script src="/api/bank/js/sweetalert2.js"></script>
61
61
  <script src="https://unpkg.com/@popperjs/core@2/dist/umd/popper.min.js"></script>
62
62
  <script src="https://unpkg.com/tippy.js@6/dist/tippy-bundle.umd.js"></script>
63
- <script src="/js/js.js"></script>
63
+ <script src="/api/bank/js/js.js"></script>
64
64
  </body>
65
65
  </html>
package/public/home.html CHANGED
@@ -297,8 +297,8 @@
297
297
  <header class="bank-navbar">
298
298
  <div class="logo">GAME-<span>BANK</span></div>
299
299
  <div class="auth-buttons">
300
- <a href="/login.html"><button class="btn-auth btn-login">Войти</button></a>
301
- <a href="/register.html"><button class="btn-auth btn-register">Регистрация</button></a>
300
+ <a href="/bank/login.html"><button class="btn-auth btn-login">Войти</button></a>
301
+ <a href="/bank/register.html"><button class="btn-auth btn-register">Регистрация</button></a>
302
302
  </div>
303
303
  </header>
304
304
  <main class="main-content">