From b13335f51019ef86df8c78dc3429dbdc570e9115 Mon Sep 17 00:00:00 2001 From: Degradin <42292046+Degradin@users.noreply.github.com> Date: Tue, 21 Jan 2025 13:06:36 +0300 Subject: [PATCH] MiniApp Updates --- package-lock.json | 3 +- public/index.html | 53 +++++------------- public/scoreboard.html | 123 ++++++++++++++++++++++++++++------------- server.bat | 1 - server.js | 123 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 224 insertions(+), 79 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2c7a4d5..2b199b2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1225,8 +1225,7 @@ "node_modules/fs": { "version": "0.0.1-security", "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", - "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==", - "license": "ISC" + "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==" }, "node_modules/fsevents": { "version": "2.3.3", diff --git a/public/index.html b/public/index.html index 11cf9a5..eaa06bc 100644 --- a/public/index.html +++ b/public/index.html @@ -2,29 +2,28 @@ - + Меню игрока @@ -88,10 +119,12 @@
- - - - + + +
+
+ +
@@ -120,11 +153,11 @@ topContent.innerHTML = data.map(player => `
- ${player.username} - ${player.status === 'bronze' ? '[🔺]' : player.status === 'silver' ? '[🔹]' : '[🔸]'} + ${player.username} ${player.status === 'bronze' ? '[🔺]' : player.status === 'silver' ? '[🔹]' : '[🔸]'}

Баланс: ${player.money} ₽

-

Уровень: ${player.level}

+

Уровень: ${player.level}

`).join(''); @@ -136,12 +169,26 @@ ${character.username}
-

Грязные деньги: ${character.dirtymoney} ₽

-

Уровень: ${character.level}

-

Сила: ${character.force}

-

Интеллект: ${character.intelligence}

-

Устойчивость: ${character.resilience}

-

Выносливость: ${character.endurance}

+

Грязные деньги: ${character.dirtymoney} Ð

+

Уровень: ${character.level}

+
+
+

Сила

+ ${character.force} +
+
+

Интеллект

+ ${character.intelligence} +
+
+

Стойкость

+ ${character.resilience} +
+
+

Выносливость

+ ${character.endurance} +
+
`).join(''); diff --git a/server.bat b/server.bat index bce3d3b..c090ad7 100644 --- a/server.bat +++ b/server.bat @@ -1,3 +1,2 @@ nodemon --ignore json/ .\server.js -nodemon --ignore json/ .\pages.js pause \ No newline at end of file diff --git a/server.js b/server.js index e0fe018..561d3f7 100644 --- a/server.js +++ b/server.js @@ -64,6 +64,129 @@ app.get('/player/:id', async (req, res) => { } }); +app.get('/scoreboard', (req, res) => { + res.sendFile(global.path.join(__dirname, 'public', 'scoreboard.html')); +}); + +app.get('/users', async (req, res) => { + const { sortBy } = req.query; // Sorting option passed as a query parameter + + const sortOptions = { + money: [sequelize.literal('money'), 'DESC'], + level: [sequelize.literal('level'), 'DESC'] + }; + + const topUser = await UserModel.findAll({ + attributes: ['username', 'money', 'level', 'status'], + order: [sortOptions[sortBy] || sortOptions['money']], // Default sort by money + limit: 15 + }); + + res.json(topUser.map(player => ({ + username: player.username, + money: utils.spaces(player.money), + level: player.level, + status: player.status + }))); +}); + + +app.get('/characters', async (req, res) => { + const { sortBy } = req.query; // Use query parameters to specify sorting + + const sortOptions = { + dirtymoney: [sequelize.literal('dirtymoney'), 'DESC'], + level: [sequelize.literal('level'), 'DESC'], + force: [sequelize.literal('force'), 'DESC'], + intelligence: [sequelize.literal('intelligence'), 'DESC'], + resilience: [sequelize.literal('resilience'), 'DESC'], + endurance: [sequelize.literal('endurance'), 'DESC'] + }; + + const topCharacter = await CharacterModel.findAll({ + attributes: ['username', 'dirtymoney', 'level', 'force', 'intelligence', 'resilience', 'endurance'], + order: [sortOptions[sortBy] || sortOptions['dirtymoney']], // Default sort by dirtymoney + limit: 15 + }); + + res.json(topCharacter.map(character => ({ + username: character.username, + dirtymoney: character.dirtymoney, + level: character.level, + force: character.force, + intelligence: character.intelligence, + resilience: character.resilience, + endurance: character.endurance + }))); +}); + + +app.get('/enterprises', async (req, res) => { + const enterprises = await EnterpriseModel.findAll({ + attributes: ['name', 'resourceType', 'level', 'efficiency', 'warehouseCapacity', 'currentResources', 'playerId'] + }); + + const resourceIcons = { + wood: '🌳', + coal: '⛏️', + oil: '🛢️', + metall: '⚒️', + gold: '💰', + diamond: '💎' + }; + + const enterprisesData = await Promise.all(enterprises.map(async enterprise => { + const player = await UserModel.findOne({ + attributes: ['name'], + where: { telegram_id: enterprise.playerId } + }); + + return { + name: enterprise.name, + resourceType: enterprise.resourceType, + level: enterprise.level, + efficiency: enterprise.efficiency, + warehouseCapacity: enterprise.warehouseCapacity, + currentResources: enterprise.currentResources, + owner: player ? player.name : 'Unknown', + icon: resourceIcons[enterprise.resourceType] || '❓' + }; + })); + + res.json(enterprisesData); +}); + +app.get('/businesses', async (req, res) => { + const { sortBy } = req.query; // Sorting option passed as a query parameter + + const sortOptions = { + balance: [sequelize.literal('balance'), 'DESC'], + usersCount: [sequelize.literal('ARRAY_LENGTH(users, 1)'), 'DESC'] + }; + + const businesses = await BusinessModel.findAll({ + attributes: ['name', 'balance', 'users', 'owner'], + order: [sortOptions[sortBy] || sortOptions['balance']], // Default sort by balance + limit: 15 + }); + + const businessesData = await Promise.all(businesses.map(async business => { + const owner = await UserModel.findOne({ + attributes: ['username'], + where: { telegram_id: business.owner } + }); + + return { + name: business.name, + balance: business.balance, + usersCount: business.users.length, + owner: owner ? owner.username : 'Unknown' + }; + })); + + res.json(businessesData); +}); + // Запуск сервера const PORT = process.env.PORT || 3001;