Compare commits
No commits in common. "master" and "feature/freetracker-landing" have entirely different histories.
master
...
feature/fr
Binary file not shown.
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,4 +2,3 @@ node_modules/
|
||||
.env
|
||||
.idea
|
||||
coverage/
|
||||
server/log/
|
||||
|
@ -1,6 +1,6 @@
|
||||
FROM node:20
|
||||
|
||||
RUN mkdir -p /usr/src/app/server/log/
|
||||
RUN mkdir -p /usr/src/app/server/
|
||||
WORKDIR /usr/src/app/
|
||||
|
||||
COPY ./server /usr/src/app/server
|
||||
|
@ -2,7 +2,6 @@ version: "3"
|
||||
|
||||
volumes:
|
||||
ms_volume8:
|
||||
ms_logs:
|
||||
|
||||
services:
|
||||
mongoDb:
|
||||
@ -16,8 +15,6 @@ services:
|
||||
# build: .
|
||||
image: bro.js/ms/bh:$TAG
|
||||
restart: always
|
||||
volumes:
|
||||
- ms_logs:/usr/src/app/server/log
|
||||
ports:
|
||||
- 8044:8044
|
||||
environment:
|
||||
|
2310
package-lock.json
generated
2310
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
41
package.json
41
package.json
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "multi-stub",
|
||||
"version": "1.2.1",
|
||||
"version": "1.0.1",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
@ -23,38 +23,33 @@
|
||||
"license": "MIT",
|
||||
"homepage": "https://bitbucket.org/online-mentor/multi-stub#readme",
|
||||
"dependencies": {
|
||||
"ai": "^4.1.13",
|
||||
"axios": "^1.7.7",
|
||||
"bcrypt": "^5.1.0",
|
||||
"body-parser": "^1.19.0",
|
||||
"cookie-parser": "^1.4.5",
|
||||
"cors": "^2.8.5",
|
||||
"cross-env": "^7.0.3",
|
||||
"crypto-js": "^4.2.0",
|
||||
"dotenv": "^16.4.7",
|
||||
"express": "5.0.1",
|
||||
"express-jwt": "^8.5.1",
|
||||
"express-session": "^1.18.1",
|
||||
"jsdom": "^25.0.1",
|
||||
"jsonwebtoken": "^9.0.2",
|
||||
"mongodb": "^6.12.0",
|
||||
"mongoose": "^8.9.2",
|
||||
"mongoose-sequence": "^6.0.1",
|
||||
"morgan": "^1.10.0",
|
||||
"multer": "^1.4.5-lts.1",
|
||||
"crypto-js": "^4.1.1",
|
||||
"dotenv": "^16.3.1",
|
||||
"express": "^4.18.2",
|
||||
"express-jwt": "^8.4.1",
|
||||
"express-session": "^1.17.3",
|
||||
"jsdom": "^22.1.0",
|
||||
"jsonwebtoken": "^8.5.1",
|
||||
"mongodb": "^3.6.8",
|
||||
"mongoose": "^8.7.1",
|
||||
"pbkdf2-password": "^1.2.1",
|
||||
"rotating-file-stream": "^3.2.5",
|
||||
"socket.io": "^4.8.1",
|
||||
"uuid": "^11.0.3"
|
||||
"socket.io": "^4.7.1",
|
||||
"uuid": "^9.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@eslint/js": "^9.17.0",
|
||||
"@types/node": "22.10.2",
|
||||
"eslint": "^9.17.0",
|
||||
"globals": "^15.14.0",
|
||||
"@eslint/js": "^9.12.0",
|
||||
"@types/node": "18.17.1",
|
||||
"eslint": "^9.12.0",
|
||||
"globals": "^15.11.0",
|
||||
"jest": "^29.7.0",
|
||||
"mockingoose": "^2.16.2",
|
||||
"nodemon": "3.1.9",
|
||||
"nodemon": "3.0.1",
|
||||
"supertest": "^7.0.0"
|
||||
}
|
||||
}
|
||||
}
|
2
server/data/const.js
Normal file
2
server/data/const.js
Normal file
@ -0,0 +1,2 @@
|
||||
exports.TODO_LIST_MODEL_NAME = 'TODO_LIST'
|
||||
exports.TODO_ITEM_MODEL_NAME = 'TODO_ITEM'
|
@ -1,8 +1,11 @@
|
||||
const { Schema, model } = require('mongoose')
|
||||
|
||||
const { TODO_ITEM_MODEL_NAME } = require('../../const')
|
||||
|
||||
const schema = new Schema({
|
||||
name: {type: String, required: true},
|
||||
phone: {type: String, required: true,unique: true,},
|
||||
title: String,
|
||||
done: { type: Boolean, default: false },
|
||||
closed: Date,
|
||||
created: {
|
||||
type: Date, default: () => new Date().toISOString(),
|
||||
},
|
||||
@ -11,13 +14,10 @@ const schema = new Schema({
|
||||
schema.set('toJSON', {
|
||||
virtuals: true,
|
||||
versionKey: false,
|
||||
transform(_doc, ret) {
|
||||
delete ret._id;
|
||||
}
|
||||
})
|
||||
|
||||
schema.virtual('id').get(function () {
|
||||
return this._id.toHexString()
|
||||
})
|
||||
|
||||
exports.MasterModel = model('dry-wash-master', schema)
|
||||
exports.ItemModel = model(TODO_ITEM_MODEL_NAME, schema)
|
@ -1,22 +1,18 @@
|
||||
const { Schema, model } = require('mongoose')
|
||||
|
||||
const { TODO_LIST_MODEL_NAME, TODO_ITEM_MODEL_NAME, TODO_AUTH_USER_MODEL_NAME } = require('../../const')
|
||||
const { TODO_LIST_MODEL_NAME, TODO_ITEM_MODEL_NAME } = require('../../const')
|
||||
|
||||
const schema = new Schema({
|
||||
title: String,
|
||||
created: {
|
||||
type: Date, default: () => new Date().toISOString(),
|
||||
},
|
||||
createdBy: { type: Schema.Types.ObjectId, ref: TODO_AUTH_USER_MODEL_NAME },
|
||||
items: [{ type: Schema.Types.ObjectId, ref: TODO_ITEM_MODEL_NAME }],
|
||||
})
|
||||
|
||||
schema.set('toJSON', {
|
||||
virtuals: true,
|
||||
versionKey: false,
|
||||
transform: function (doc, ret) {
|
||||
delete ret._id
|
||||
}
|
||||
})
|
||||
|
||||
schema.virtual('id').get(function () {
|
@ -6,7 +6,6 @@ module.exports = (err, req, res, next) => {
|
||||
success: false, error: 'Токен авторизации не найден',
|
||||
})
|
||||
}
|
||||
|
||||
res.status(400).send({
|
||||
success: false, error: err.message || 'Что-то пошло не так',
|
||||
})
|
||||
|
113
server/index.js
113
server/index.js
@ -1,98 +1,55 @@
|
||||
const express = require("express")
|
||||
const bodyParser = require("body-parser")
|
||||
const cookieParser = require("cookie-parser")
|
||||
const session = require("express-session")
|
||||
const morgan = require("morgan")
|
||||
const path = require("path")
|
||||
const rfs = require("rotating-file-stream")
|
||||
const express = require('express')
|
||||
const bodyParser = require('body-parser')
|
||||
const cookieParser = require('cookie-parser')
|
||||
const session = require('express-session')
|
||||
|
||||
const app = express()
|
||||
require("dotenv").config()
|
||||
const cors = require('cors')
|
||||
require('dotenv').config()
|
||||
|
||||
exports.app = app
|
||||
|
||||
const accessLogStream = rfs.createStream("access.log", {
|
||||
size: "10M",
|
||||
interval: "1d",
|
||||
compress: "gzip",
|
||||
path: path.join(__dirname, "log"),
|
||||
})
|
||||
|
||||
const errorLogStream = rfs.createStream("error.log", {
|
||||
size: "10M",
|
||||
interval: "1d",
|
||||
compress: "gzip",
|
||||
path: path.join(__dirname, "log"),
|
||||
})
|
||||
|
||||
const config = require("../.serverrc")
|
||||
const { setIo } = require("./io")
|
||||
const config = require('../.serverrc')
|
||||
const { setIo } = require('./io')
|
||||
|
||||
app.use(cookieParser())
|
||||
app.use(
|
||||
morgan("combined", {
|
||||
stream: accessLogStream,
|
||||
skip: function (req, res) {
|
||||
return res.statusCode >= 400
|
||||
},
|
||||
})
|
||||
)
|
||||
|
||||
// log all requests to access.log
|
||||
app.use(
|
||||
morgan("combined", {
|
||||
stream: errorLogStream,
|
||||
skip: function (req, res) {
|
||||
console.log('statusCode', res.statusCode, res.statusCode <= 400)
|
||||
return res.statusCode < 400
|
||||
},
|
||||
})
|
||||
)
|
||||
|
||||
app.options('*', cors())
|
||||
app.use(cors())
|
||||
const server = setIo(app)
|
||||
|
||||
const sess = {
|
||||
secret: "super-secret-key",
|
||||
resave: true,
|
||||
saveUninitialized: true,
|
||||
cookie: {},
|
||||
secret: 'super-secret-key',
|
||||
resave: true,
|
||||
saveUninitialized: true,
|
||||
cookie: {
|
||||
},
|
||||
}
|
||||
if (app.get("env") === "production") {
|
||||
app.set("trust proxy", 1)
|
||||
sess.cookie.secure = true
|
||||
if (app.get('env') === 'production') {
|
||||
app.set('trust proxy', 1)
|
||||
sess.cookie.secure = true
|
||||
}
|
||||
app.use(session(sess))
|
||||
|
||||
app.use(
|
||||
bodyParser.json({
|
||||
limit: "50mb",
|
||||
})
|
||||
)
|
||||
app.use(
|
||||
bodyParser.urlencoded({
|
||||
limit: "50mb",
|
||||
app.use(bodyParser.json({
|
||||
limit: '50mb',
|
||||
}))
|
||||
app.use(bodyParser.urlencoded({
|
||||
limit: '50mb',
|
||||
extended: true,
|
||||
})
|
||||
)
|
||||
app.use(require("./root"))
|
||||
}))
|
||||
app.use(require('./root'))
|
||||
|
||||
/**
|
||||
* Добавляйте сюда свои routers.
|
||||
*/
|
||||
app.use("/kfu-m-24-1", require("./routers/kfu-m-24-1"))
|
||||
app.use("/epja-2024-1", require("./routers/epja-2024-1"))
|
||||
app.use("/v1/todo", require("./routers/todo"))
|
||||
app.use("/dogsitters-finder", require("./routers/dogsitters-finder"))
|
||||
app.use("/kazan-explore", require("./routers/kazan-explore"))
|
||||
app.use("/edateam", require("./routers/edateam-legacy"))
|
||||
app.use("/dry-wash", require("./routers/dry-wash"))
|
||||
app.use("/freetracker", require("./routers/freetracker"))
|
||||
app.use("/dhs-testing", require("./routers/dhs-testing"))
|
||||
app.use("/gamehub", require("./routers/gamehub"))
|
||||
app.use("/esc", require("./routers/esc"))
|
||||
app.use('/connectme', require('./routers/connectme'))
|
||||
app.use('/epja-2024-1', require('./routers/epja-2024-1'))
|
||||
app.use('/todo', require('./routers/todo/routes'))
|
||||
app.use('/dogsitters-finder', require('./routers/dogsitters-finder'))
|
||||
app.use('/kazan-explore', require('./routers/kazan-explore'))
|
||||
app.use('/edateam', require('./routers/edateam-legacy'))
|
||||
app.use('/dry-wash', require('./routers/dry-wash'))
|
||||
app.use('/freetracker', require('./routers/freetracker'))
|
||||
|
||||
app.use(require("./error"))
|
||||
app.use(require('./error'))
|
||||
|
||||
server.listen(config.port, () =>
|
||||
console.log(`Listening on http://localhost:${config.port}`)
|
||||
)
|
||||
server.listen(config.port, () => console.log(`Listening on http://localhost:${config.port}`))
|
||||
|
@ -10,7 +10,6 @@ const folderPath = path.resolve(__dirname, './routers')
|
||||
const folders = fs.readdirSync(folderPath)
|
||||
|
||||
router.get('/', async (req, res) => {
|
||||
// throw new Error('check error message')
|
||||
res.send(`
|
||||
<h1>multy stub is working v${pkg.version}</h1>
|
||||
<ul>
|
||||
@ -20,7 +19,8 @@ router.get('/', async (req, res) => {
|
||||
<h2>models</h2>
|
||||
<ul>${
|
||||
(await Promise.all(
|
||||
(await mongoose.modelNames()).map(async (name) => {
|
||||
(
|
||||
await mongoose.modelNames()).map(async (name) => {
|
||||
const count = await mongoose.model(name).countDocuments()
|
||||
return `<li>${name} - ${count}</li>`
|
||||
}
|
||||
|
@ -1,8 +0,0 @@
|
||||
const { Router } = require('express')
|
||||
const router = Router()
|
||||
|
||||
router.get('/cities', (request, response) => {
|
||||
response.send(require('./json/cities.json'))
|
||||
})
|
||||
|
||||
module.exports = router
|
@ -1,85 +0,0 @@
|
||||
{
|
||||
"data": [
|
||||
{
|
||||
"id": 1,
|
||||
"title": "Моска"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"title": "Санкт-петербург"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"title": "Новосибирска"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"title": "Екатеринбург"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"title": "Казань"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"title": "Нижний новгород"
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"title": "Челябинск"
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"title": "Самара"
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"title": "Омск"
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"title": "Ростов-на-дону"
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"title": "Уфа"
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"title": "Красноярск"
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"title": "Пермь"
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"title": "Воронеж"
|
||||
},
|
||||
{
|
||||
"id": 15,
|
||||
"title": "Волгоград"
|
||||
},
|
||||
{
|
||||
"id": 16,
|
||||
"title": "Краснодар"
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"title": "Тюмень"
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"title": "Ижевск"
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"title": "Барнаул"
|
||||
},
|
||||
{
|
||||
"id": 20,
|
||||
"title": "Владивосток"
|
||||
}
|
||||
],
|
||||
"count": 20
|
||||
}
|
@ -1,2 +0,0 @@
|
||||
exports.DSF_AUTH_USER_MODEL_NAME = 'DSF_AUTH_USER'
|
||||
exports.DSF_INTERACTION_MODEL_NAME = 'DSF_INTERACTION'
|
@ -1,228 +1,35 @@
|
||||
const router = require("express").Router();
|
||||
const router = require('express').Router();
|
||||
|
||||
router.get("/users", (request, response) => {
|
||||
response.send(require("./json/users/users.json"));
|
||||
});
|
||||
response.send(require("./json/users/users.json"))
|
||||
})
|
||||
|
||||
router.post("/auth", (request, response) => {
|
||||
const { phoneNumber, password } = request.body;
|
||||
console.log(phoneNumber, password);
|
||||
if (phoneNumber === "89999999999" || phoneNumber === "89559999999") {
|
||||
response.send(require("./json/auth/success.json"));
|
||||
} else {
|
||||
response.status(401).send(require("./json/auth/error.json"));
|
||||
}
|
||||
});
|
||||
|
||||
router.post("/auth/2fa", (request, response) => {
|
||||
const { phoneNumber, code } = request.body;
|
||||
if (code === "0000" && phoneNumber === "89999999999") {
|
||||
response.send(require("./json/2fa/dogsitter.success.json"));
|
||||
} else if (code === "0000" && phoneNumber === "89559999999") {
|
||||
response.send(require("./json/2fa/owner.success.json"));
|
||||
} else {
|
||||
response.status(401).send(require("./json/2fa/error.json"));
|
||||
}
|
||||
});
|
||||
const {phoneNumber, password} = request.body;
|
||||
console.log(phoneNumber, password);
|
||||
if (phoneNumber === '89999999999') {
|
||||
response.send(require("./json/auth/dogsitter.success.json"))
|
||||
}
|
||||
else if (phoneNumber === '89555555555') {
|
||||
response.status(400).send(require("./json/auth/error.json"))
|
||||
}
|
||||
else {
|
||||
response.send(require("./json/auth/owner.success.json"))
|
||||
}
|
||||
})
|
||||
|
||||
router.post("/register", (request, response) => {
|
||||
const { firstName, secondName, phoneNumber, password, role } = request.body;
|
||||
console.log(phoneNumber, password, role);
|
||||
if (phoneNumber === "89999999999" || phoneNumber === "89559999999") {
|
||||
response.status(401).send(require("./json/register/error.json"));
|
||||
} else if (role === "dogsitter") {
|
||||
response.send(require("./json/register/dogsitter.success.json"));
|
||||
} else {
|
||||
response.send(require("./json/register/owner.success.json"));
|
||||
}
|
||||
});
|
||||
|
||||
router.get("/auth/session", (request, response) => {
|
||||
const authHeader = request.headers.authorization;
|
||||
|
||||
if (!authHeader) {
|
||||
return response.status(401).json({ error: "Authorization header missing" });
|
||||
}
|
||||
|
||||
// Берём сам токен из заголовка
|
||||
const token = authHeader.split(" ")[1];
|
||||
|
||||
if (!token) {
|
||||
return response.status(401).json({ error: "Bearer token missing" });
|
||||
}
|
||||
|
||||
const jwt = require("jsonwebtoken");
|
||||
const secretKey = "secret";
|
||||
|
||||
try {
|
||||
const decoded = jwt.verify(token, secretKey);
|
||||
|
||||
if (decoded.role === "dogsitter") {
|
||||
response.send(require("./json/role/dogsitter.success.json"));
|
||||
} else {
|
||||
response.send(require("./json/role/owner.success.json"));
|
||||
const {firstName, secondName, phoneNumber, password, role} = request.body;
|
||||
console.log(phoneNumber, password, role);
|
||||
if (phoneNumber === '89283244141' || phoneNumber === '89872855893') {
|
||||
response.status(400).send(require("./json/register/error.json"))
|
||||
}
|
||||
} catch (e) {
|
||||
console.log("token e:", e);
|
||||
return response.status(403).json({ error: "Invalid token" });
|
||||
}
|
||||
});
|
||||
else if (role === 'dogsitter') {
|
||||
response.send(require("./json/register/dogsitter.success.json"))
|
||||
}
|
||||
else {
|
||||
response.send(require("./json/register/owner.success.json"))
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
// Проверка взаимодействия между пользователем и догситтером
|
||||
router.get("/interactions/check", (req, res) => {
|
||||
const { owner_id, dogsitter_id } = req.query;
|
||||
|
||||
const usersFilePath = path.resolve(__dirname, "./json/users/users.json");
|
||||
|
||||
delete require.cache[require.resolve(usersFilePath)];
|
||||
const usersFile = require(usersFilePath);
|
||||
|
||||
const interactions = usersFile.interactions || [];
|
||||
|
||||
const exists = interactions.some(
|
||||
(interaction) =>
|
||||
interaction.owner_id === Number(owner_id) &&
|
||||
interaction.dogsitter_id === Number(dogsitter_id)
|
||||
);
|
||||
|
||||
res.json({ exists });
|
||||
});
|
||||
|
||||
// Добавление нового взаимодействия
|
||||
router.post("/interactions", (req, res) => {
|
||||
const { owner_id, dogsitter_id, interaction_type } = req.body;
|
||||
|
||||
if (!owner_id || !dogsitter_id || !interaction_type) {
|
||||
return res.status(400).json({ error: "Missing required fields" });
|
||||
}
|
||||
|
||||
const usersFilePath = path.resolve(__dirname, "./json/users/users.json");
|
||||
|
||||
delete require.cache[require.resolve(usersFilePath)];
|
||||
const usersFile = require(usersFilePath);
|
||||
|
||||
if (!usersFile.interactions) {
|
||||
usersFile.interactions = [];
|
||||
}
|
||||
|
||||
// Проверяем, существует ли уже такое взаимодействие
|
||||
const exists = usersFile.interactions.some(
|
||||
(interaction) =>
|
||||
interaction.owner_id === Number(owner_id) &&
|
||||
interaction.dogsitter_id === Number(dogsitter_id)
|
||||
);
|
||||
|
||||
if (!exists) {
|
||||
usersFile.interactions.push({
|
||||
owner_id: Number(owner_id),
|
||||
dogsitter_id: Number(dogsitter_id),
|
||||
interaction_type,
|
||||
});
|
||||
|
||||
fs.writeFileSync(
|
||||
usersFilePath,
|
||||
JSON.stringify(usersFile, null, 2),
|
||||
"utf8"
|
||||
);
|
||||
|
||||
console.log(
|
||||
`Добавлено взаимодействие: owner_id=${owner_id}, dogsitter_id=${dogsitter_id}`
|
||||
);
|
||||
}
|
||||
|
||||
res.json({ success: true });
|
||||
});
|
||||
|
||||
router.get("/dogsitter-viewing", (req, res) => {
|
||||
const { id } = req.query;
|
||||
console.log(`Получен запрос для dogsitter с ID: ${id}`);
|
||||
|
||||
const usersFile = require("./json/users/users.json");
|
||||
const users = usersFile.data; // Извлекаем массив из свойства "data"
|
||||
|
||||
const user = users.find((user) => user.id === Number(id));
|
||||
|
||||
if (user) {
|
||||
res.json(user); // Возвращаем найденного пользователя
|
||||
} else {
|
||||
res.status(404).json({ error: "User not found" }); // Если пользователь не найден
|
||||
}
|
||||
});
|
||||
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
|
||||
router.post('/dogsitter-viewing/rating/:id', (req, res) => {
|
||||
const { id } = req.params;
|
||||
const { rating } = req.body;
|
||||
|
||||
if (!rating || rating < 1 || rating > 5) {
|
||||
return res.status(400).json({ error: 'Некорректная оценка' });
|
||||
}
|
||||
|
||||
const usersFilePath = path.resolve(__dirname, "./json/users/users.json");
|
||||
|
||||
delete require.cache[require.resolve(usersFilePath)];
|
||||
const usersFile = require(usersFilePath);
|
||||
const users = usersFile.data;
|
||||
|
||||
const userIndex = users.findIndex(user => user.id === Number(id));
|
||||
if (userIndex === -1) {
|
||||
return res.status(404).json({ error: 'Догситтер не найден' });
|
||||
}
|
||||
|
||||
if (!users[userIndex].ratings) {
|
||||
users[userIndex].ratings = [];
|
||||
}
|
||||
users[userIndex].ratings.push(rating);
|
||||
|
||||
if (users[userIndex].ratings.length > 100) {
|
||||
users[userIndex].ratings.shift();
|
||||
}
|
||||
|
||||
const total = users[userIndex].ratings.reduce((sum, r) => sum + r, 0);
|
||||
users[userIndex].rating = parseFloat((total / users[userIndex].ratings.length).toFixed(2));
|
||||
|
||||
fs.writeFileSync(usersFilePath, JSON.stringify({ data: users }, null, 2), 'utf8');
|
||||
|
||||
console.log(`Обновлен рейтинг догситтера ${id}: ${users[userIndex].rating}`);
|
||||
|
||||
res.json({ rating: users[userIndex].rating, ratings: users[userIndex].ratings });
|
||||
});
|
||||
|
||||
|
||||
router.patch('/users/:id', (req, res) => {
|
||||
const { id } = req.params;
|
||||
const updateData = req.body;
|
||||
|
||||
console.log('Полученные данные для обновления:', updateData);
|
||||
|
||||
|
||||
const usersFilePath = path.resolve(__dirname, "./json/users/users.json");
|
||||
|
||||
delete require.cache[require.resolve(usersFilePath)];
|
||||
const usersFile = require(usersFilePath);
|
||||
const users = usersFile.data;
|
||||
|
||||
const userIndex = users.findIndex((user) => user.id === Number(id));
|
||||
if (userIndex === -1) {
|
||||
return res.status(404).json({ error: 'User not found' });
|
||||
}
|
||||
|
||||
users[userIndex] = { ...users[userIndex], ...updateData };
|
||||
|
||||
fs.writeFileSync(
|
||||
usersFilePath,
|
||||
JSON.stringify({ data: users }, null, 2),
|
||||
'utf8'
|
||||
);
|
||||
|
||||
console.log('Обновлённые данные пользователя:', users[userIndex]);
|
||||
|
||||
res.json(users[userIndex]);
|
||||
});
|
||||
|
||||
|
||||
module.exports = router
|
||||
module.exports = router;
|
||||
|
@ -1,3 +0,0 @@
|
||||
{
|
||||
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwicm9sZSI6ImRvZ3NpdHRlciIsImlhdCI6MTUxNjIzOTAyMn0.7q66wTNyLZp3TGFYF_JdU-yhlWViJulTxP_PCQzO4OI"
|
||||
}
|
@ -1,5 +0,0 @@
|
||||
{
|
||||
"status": "error",
|
||||
"message": "Invalid code",
|
||||
"statusCode": 401
|
||||
}
|
@ -1,3 +0,0 @@
|
||||
{
|
||||
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Mywicm9sZSI6Im93bmVyIiwiaWF0IjoxNTE2MjM5MDIyfQ.sI9839YXveTpEWhdpr5QbCYllt6hHYO7NsrQDcrXZIQ"
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
{
|
||||
"data": {
|
||||
"id": 1,
|
||||
"phoneNumber": 89283244141,
|
||||
"firstName": "Вася",
|
||||
"secondName": "Пупкин",
|
||||
"role": "dogsitter",
|
||||
"location": "Россия, республика Татарстан, Казань, улица Пушкина, 12",
|
||||
"price": 1500,
|
||||
"aboutMe": "Я люблю собак"
|
||||
}
|
||||
}
|
@ -1,5 +1,3 @@
|
||||
{
|
||||
"message": "Неверный логин или пароль",
|
||||
"error": "Unauthorized",
|
||||
"statusCode": 401
|
||||
}
|
||||
"error": "Пользователь не найден"
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
{
|
||||
"data": {
|
||||
"id": 3,
|
||||
"phoneNumber": 89872855893,
|
||||
"firstName": "Гадий",
|
||||
"secondName": "Петрович",
|
||||
"role": "owner"
|
||||
}
|
||||
}
|
@ -1,5 +0,0 @@
|
||||
{
|
||||
"status": "success",
|
||||
"message": "Первый фактор аутентификации пройден",
|
||||
"statusCode": 200
|
||||
}
|
@ -1,3 +1,12 @@
|
||||
{
|
||||
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6NSwicm9sZSI6ImRvZ3NpdHRlciIsImlhdCI6MTUxNjIzOTAyMn0.T9V3-f3rD1deA5a2J-tYNw0cACEpzKHbhMPkc7gh8c0"
|
||||
"data": {
|
||||
"id": 5,
|
||||
"phoneNumber": 89555555555,
|
||||
"firstName": "Масяня",
|
||||
"secondName": "Карлова",
|
||||
"role": "dogsitter",
|
||||
"location": "Россия, республика Татарстан, Казань, улица Пушкина, 12",
|
||||
"price": 100,
|
||||
"aboutMe": "Все на свете - собаки"
|
||||
}
|
||||
}
|
@ -1,5 +1,3 @@
|
||||
{
|
||||
"message": "Такой пользователь уже был зарегистрирован",
|
||||
"error": "Unauthorized",
|
||||
"statusCode": 401
|
||||
"error": "Пользователь с таким номером телефона уже существует"
|
||||
}
|
@ -1,3 +1,9 @@
|
||||
{
|
||||
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Niwicm9sZSI6Im93bmVyIiwiaWF0IjoxNTE2MjM5MDIyfQ.qgOhk9tNcaMRbarRWISTgvGx5Eq_X8fcA5lhdVs2tQI"
|
||||
"data": {
|
||||
"id": 6,
|
||||
"phoneNumber": 89888888888,
|
||||
"firstName": "Генадий",
|
||||
"secondName": "Паровозов",
|
||||
"role": "owner"
|
||||
}
|
||||
}
|
@ -1,4 +0,0 @@
|
||||
{
|
||||
"id": 1,
|
||||
"role": "dogsitter"
|
||||
}
|
@ -1,5 +0,0 @@
|
||||
{
|
||||
"message": "Неверный jwt token",
|
||||
"error": "Forbidden",
|
||||
"statusCode": 403
|
||||
}
|
@ -1,4 +0,0 @@
|
||||
{
|
||||
"id": 3,
|
||||
"role": "owner"
|
||||
}
|
@ -1,69 +1,39 @@
|
||||
{
|
||||
"data": [
|
||||
{
|
||||
"id": 1,
|
||||
"phone_number": "89999999999",
|
||||
"first_name": "Вася",
|
||||
"second_name": "Пупкин",
|
||||
"role": "dogsitter",
|
||||
"location": "Россия, республика Татарстан, Казань, Пушкина, 12",
|
||||
"price": "1500",
|
||||
"about_me": "Я люблю собак!",
|
||||
"rating": 5,
|
||||
"ratings": [
|
||||
5,
|
||||
5
|
||||
],
|
||||
"tg": "jullllllie"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"phone_number": 89272844541,
|
||||
"first_name": "Ваня",
|
||||
"second_name": "Пуськин",
|
||||
"role": "dogsitter",
|
||||
"location": "Россия, республика Татарстан, Казань, улица Абсалямова, 19",
|
||||
"price": 2000,
|
||||
"about_me": "Я не люблю собак. И вообще я котоман.",
|
||||
"rating": 4,
|
||||
"ratings": [
|
||||
4,
|
||||
4
|
||||
],
|
||||
"tg": "vanya006"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"phone_number": 89559999999,
|
||||
"first_name": "Гадий",
|
||||
"second_name": "Петрович",
|
||||
"role": "owner"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"phone_number": 89872844591,
|
||||
"first_name": "Галкин",
|
||||
"second_name": "Максим",
|
||||
"role": "dogsitter",
|
||||
"location": "Россия, республика Татарстан, Казань, проспект Ямашева, 83",
|
||||
"price": 1750,
|
||||
"about_me": "Миллион алых роз",
|
||||
"rating": 4.5,
|
||||
"ratings": [
|
||||
4,
|
||||
5
|
||||
],
|
||||
"tg": "maks100500"
|
||||
}
|
||||
],
|
||||
"interactions": [
|
||||
{
|
||||
"owner_id": 3,
|
||||
"dogsitter_id": 4
|
||||
},
|
||||
{
|
||||
"owner_id": 1,
|
||||
"dogsitter_id": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
[
|
||||
{
|
||||
"id": 1,
|
||||
"phone_number": 89283244141,
|
||||
"first_name": "Вася",
|
||||
"second_name": "Пупкин",
|
||||
"role": "dogsitter",
|
||||
"location": "Россия, республика Татарстан, Казань, улица Пушкина, 12",
|
||||
"price": 1500,
|
||||
"about_me": "Я люблю собак"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"phone_number": 89272844541,
|
||||
"first_name": "Ваня",
|
||||
"second_name": "Пуськин",
|
||||
"role": "dogsitter",
|
||||
"location": "Россия, республика Татарстан, Казань, улица Абсалямова, 19",
|
||||
"price": 1000000,
|
||||
"about_me": "Я не люблю собак. И вообще я котоман."
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"phone_number": 89872855893,
|
||||
"first_name": "Гадий",
|
||||
"second_name": "Петрович",
|
||||
"role": "owner"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"phone_number": 89872844591,
|
||||
"first_name": "Галкин",
|
||||
"second_name": "Максим",
|
||||
"role": "dogsitter",
|
||||
"location": "Россия, республика Татарстан, Казань, проспект Ямашева, 83",
|
||||
"price": 1000000,
|
||||
"about_me": "Миллион алых роз"
|
||||
}
|
||||
]
|
||||
|
@ -1,24 +0,0 @@
|
||||
const { Schema, model } = require("mongoose");
|
||||
|
||||
const { DSF_AUTH_USER_MODEL_NAME, DSF_INTERACTION_MODEL_NAME } = require("../../const");
|
||||
|
||||
const interactionSchema = new Schema({
|
||||
owner_id: {
|
||||
type: Schema.Types.ObjectId,
|
||||
ref: DSF_AUTH_USER_MODEL_NAME,
|
||||
required: true
|
||||
},
|
||||
dogsitter_id: {
|
||||
type: Schema.Types.ObjectId,
|
||||
ref: DSF_AUTH_USER_MODEL_NAME,
|
||||
required: true
|
||||
},
|
||||
timestamp: {
|
||||
type: Date,
|
||||
default: Date.now
|
||||
}
|
||||
});
|
||||
|
||||
interactionSchema.index({ owner_id: 1, dogsitter_id: 1 });
|
||||
|
||||
module.exports.Interaction = model(DSF_INTERACTION_MODEL_NAME, interactionSchema);
|
@ -1,83 +0,0 @@
|
||||
const { Schema, model } = require("mongoose");
|
||||
|
||||
const { DSF_AUTH_USER_MODEL_NAME } = require("../../const");
|
||||
|
||||
const userSchema = new Schema({
|
||||
phone_number: {
|
||||
type: String,
|
||||
required: true,
|
||||
unique: true,
|
||||
match: /^\+?\d{10,15}$/
|
||||
},
|
||||
first_name: {
|
||||
type: String,
|
||||
required: true,
|
||||
trim: true
|
||||
},
|
||||
second_name: {
|
||||
type: String,
|
||||
required: true,
|
||||
trim: true
|
||||
},
|
||||
role: {
|
||||
type: String,
|
||||
enum: ["dogsitter", "owner"],
|
||||
required: true
|
||||
},
|
||||
location: {
|
||||
type: String,
|
||||
required: function() {
|
||||
return this.role === "dogsitter";
|
||||
}
|
||||
},
|
||||
price: {
|
||||
type: Number,
|
||||
min: 0,
|
||||
required: function() {
|
||||
return this.role === "dogsitter";
|
||||
}
|
||||
},
|
||||
about_me: {
|
||||
type: String,
|
||||
maxlength: 500
|
||||
},
|
||||
rating: {
|
||||
type: Number,
|
||||
min: 0,
|
||||
max: 5,
|
||||
default: 0
|
||||
},
|
||||
ratings: {
|
||||
type: [Number],
|
||||
default: [],
|
||||
validate: {
|
||||
validator: function(arr) {
|
||||
return arr.every(v => v >= 0 && v <= 5);
|
||||
},
|
||||
message: "Рейтинг должен быть в диапазоне от 0 до 5!"
|
||||
}
|
||||
},
|
||||
tg: {
|
||||
type: String,
|
||||
match: /^[a-zA-Z0-9_]{5,32}$/
|
||||
},
|
||||
created: {
|
||||
type: Date,
|
||||
default: Date.now
|
||||
}
|
||||
});
|
||||
|
||||
userSchema.virtual("id").get(function() {
|
||||
return this._id.toHexString();
|
||||
});
|
||||
|
||||
userSchema.set("toJSON", {
|
||||
virtuals: true,
|
||||
versionKey: false,
|
||||
transform: function(doc, ret) {
|
||||
delete ret._id;
|
||||
delete ret.__v;
|
||||
}
|
||||
});
|
||||
|
||||
module.exports.User = model(DSF_AUTH_USER_MODEL_NAME, userSchema);
|
@ -1,149 +0,0 @@
|
||||
const { Router } = require('express')
|
||||
const { expressjwt } = require('express-jwt')
|
||||
|
||||
const { getAnswer } = require('../../utils/common')
|
||||
const { User, Interaction } = require('./model')
|
||||
const { TOKEN_KEY } = require('./const')
|
||||
const { requiredValidate } = require('./utils')
|
||||
|
||||
const router = Router()
|
||||
|
||||
// Получение списка пользователей
|
||||
router.get('/users', async (req, res) => {
|
||||
|
||||
const users = await User.find()
|
||||
.select('-__v -ratings -phone_number')
|
||||
.lean()
|
||||
|
||||
console.log('get users successfull')
|
||||
|
||||
res.send(getAnswer(null, users))
|
||||
})
|
||||
|
||||
// Получение конкретного пользователя
|
||||
router.get('/dogsitter-viewing', async (req, res) => {
|
||||
const { userId } = req.params
|
||||
|
||||
const user = await User.findById(userId)
|
||||
.select('-__v -ratings')
|
||||
.lean()
|
||||
|
||||
if (!user) {
|
||||
return res.status(404).send(getAnswer(new Error('Пользователь не найден')))
|
||||
}
|
||||
|
||||
res.send(getAnswer(null, user))
|
||||
})
|
||||
|
||||
router.use(expressjwt({ secret: TOKEN_KEY, algorithms: ['HS256'] }))
|
||||
|
||||
// Добавление оценки пользователю
|
||||
router.post('/dogsitter-viewing/rating', requiredValidate('value'), async (req, res) => {
|
||||
const { userId } = req.params
|
||||
const { value } = req.body
|
||||
const authUserId = req.auth.id
|
||||
|
||||
try {
|
||||
const user = await User.findById(userId)
|
||||
if (!user) throw new Error('Пользователь не найден')
|
||||
if (user.role !== 'dogsitter') throw new Error('Нельзя оценивать этого пользователя')
|
||||
if (user.id === authUserId) throw new Error('Нельзя оценивать самого себя')
|
||||
|
||||
user.ratings.push(Number(value))
|
||||
user.rating = user.ratings.reduce((a, b) => a + b, 0) / user.ratings.length
|
||||
|
||||
const updatedUser = await user.save()
|
||||
|
||||
res.send(getAnswer(null, {
|
||||
id: updatedUser.id,
|
||||
rating: updatedUser.rating.toFixed(1),
|
||||
totalRatings: updatedUser.ratings.length
|
||||
}))
|
||||
|
||||
} catch (error) {
|
||||
res.status(400).send(getAnswer(error))
|
||||
}
|
||||
})
|
||||
|
||||
// Обновление информации пользователя
|
||||
router.patch('/users', async (req, res) => {
|
||||
const { userId } = req.params
|
||||
const updates = req.body
|
||||
|
||||
try {
|
||||
const user = await User.findByIdAndUpdate(userId, updates, { new: true })
|
||||
.select('-__v -ratings')
|
||||
|
||||
if (!user) throw new Error('Пользователь не найден')
|
||||
res.send(getAnswer(null, user))
|
||||
|
||||
} catch (error) {
|
||||
res.status(400).send(getAnswer(error))
|
||||
}
|
||||
})
|
||||
|
||||
// Создание объекта взаимодействия
|
||||
router.post('/interactions',
|
||||
expressjwt({ secret: TOKEN_KEY, algorithms: ['HS256'] }),
|
||||
requiredValidate('dogsitter_id'),
|
||||
async (req, res) => {
|
||||
try {
|
||||
const { dogsitter_id } = req.body
|
||||
const owner_id = req.auth.id // ID из JWT токена
|
||||
|
||||
// Проверка существования пользователей
|
||||
const [owner, dogsitter] = await Promise.all([
|
||||
User.findById(owner_id),
|
||||
User.findById(dogsitter_id)
|
||||
])
|
||||
|
||||
if (!owner || owner.role !== 'owner') {
|
||||
throw new Error('Владелец не найден или имеет неверную роль')
|
||||
}
|
||||
|
||||
if (!dogsitter || dogsitter.role !== 'dogsitter') {
|
||||
throw new Error('Догситтер не найден или имеет неверную роль')
|
||||
}
|
||||
|
||||
// Создание взаимодействия
|
||||
const interaction = await Interaction.create({
|
||||
owner_id,
|
||||
dogsitter_id
|
||||
})
|
||||
|
||||
res.send(getAnswer(null, {
|
||||
id: interaction.id,
|
||||
timestamp: interaction.timestamp
|
||||
}))
|
||||
|
||||
} catch (error) {
|
||||
res.status(400).send(getAnswer(error))
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
router.get('/interactions/check', async (req, res) => {
|
||||
const { owner_id, dogsitter_id } = req.query;
|
||||
|
||||
if (!owner_id || !dogsitter_id) {
|
||||
return res.status(400).send(getAnswer('Missing owner_id or dogsitter_id'));
|
||||
}
|
||||
|
||||
try {
|
||||
// Поиск взаимодействий по owner_id и dogsitter_id
|
||||
const interactions = await Interaction.find({ owner_id, dogsitter_id })
|
||||
.select('-__v') // Выбираем только нужные поля
|
||||
.lean();
|
||||
|
||||
if (interactions.length === 0) {
|
||||
return res.status(404).send(getAnswer('No interactions found'));
|
||||
}
|
||||
|
||||
res.send(getAnswer(null, interactions));
|
||||
} catch (error) {
|
||||
console.error('Error checking interactions:', error);
|
||||
res.status(500).send(getAnswer('Internal Server Error'));
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = router
|
@ -1,111 +0,0 @@
|
||||
const router = require('express').Router()
|
||||
const {MasterModel} = require('./model/master')
|
||||
const mongoose = require("mongoose")
|
||||
const {OrderModel} = require("./model/order")
|
||||
|
||||
|
||||
router.get("/masters", async (req, res, next) => {
|
||||
try {
|
||||
const masters = await MasterModel.find({});
|
||||
const orders = await OrderModel.find({});
|
||||
|
||||
const mastersWithOrders = masters.map((master) => {
|
||||
const masterOrders = orders.filter((order) => {
|
||||
return (
|
||||
order?.master && order.master.toString() === master._id.toString()
|
||||
);
|
||||
});
|
||||
|
||||
const schedule = masterOrders.map((order) => ({
|
||||
id: order._id,
|
||||
startWashTime: order.startWashTime,
|
||||
endWashTime: order.endWashTime,
|
||||
}));
|
||||
|
||||
return {
|
||||
id: master._id,
|
||||
name: master.name,
|
||||
schedule: schedule,
|
||||
phone: master.phone,
|
||||
};
|
||||
});
|
||||
|
||||
res.status(200).send({ success: true, body: mastersWithOrders });
|
||||
} catch (error) {
|
||||
next(error);
|
||||
}
|
||||
});
|
||||
|
||||
router.delete('/masters/:id', async (req, res,next) => {
|
||||
const { id } = req.params;
|
||||
|
||||
if (!mongoose.Types.ObjectId.isValid(id)){
|
||||
throw new Error('ID is required')
|
||||
}
|
||||
|
||||
try {
|
||||
const master = await MasterModel.findByIdAndDelete(id, {
|
||||
new: true,
|
||||
});
|
||||
if (!master) {
|
||||
throw new Error('master not found')
|
||||
}
|
||||
res.status(200).send({success: true, body: master})
|
||||
} catch (error) {
|
||||
next(error)
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
router.post('/masters', async (req, res,next) => {
|
||||
|
||||
const {name, phone} = req.body
|
||||
|
||||
if (!name || !phone ){
|
||||
throw new Error('Enter name and phone')
|
||||
}
|
||||
try {
|
||||
const master = await MasterModel.create({name, phone})
|
||||
res.status(200).send({success: true, body: master})
|
||||
} catch (error) {
|
||||
next(error)
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
router.patch('/masters/:id', async (req, res, next) => {
|
||||
const { id } = req.params;
|
||||
|
||||
if (!mongoose.Types.ObjectId.isValid(id)) {
|
||||
throw new Error('ID is required')
|
||||
}
|
||||
|
||||
const { name, phone } = req.body;
|
||||
|
||||
if (!name && !phone) {
|
||||
throw new Error('Enter name and phone')
|
||||
}
|
||||
|
||||
|
||||
try {
|
||||
const updateData = {};
|
||||
if (name) updateData.name = name;
|
||||
if (phone) updateData.phone = phone;
|
||||
|
||||
const master = await MasterModel.findByIdAndUpdate(
|
||||
id,
|
||||
updateData,
|
||||
{ new: true }
|
||||
);
|
||||
|
||||
if (!master) {
|
||||
throw new Error('master not found')
|
||||
}
|
||||
|
||||
res.status(200).send({ success: true, body: master });
|
||||
} catch (error) {
|
||||
next(error);
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = router
|
@ -1,21 +0,0 @@
|
||||
const router = require('express').Router()
|
||||
const { OrderModel } = require('./model/order')
|
||||
|
||||
router.post('/orders', async (req, res, next) => {
|
||||
const {startDate, endDate} = req.body
|
||||
|
||||
if (!startDate || !endDate) {
|
||||
throw new Error('startDate and endDate are required')
|
||||
}
|
||||
|
||||
const orders = await OrderModel.find({
|
||||
$or: [
|
||||
{startWashTime: { $gte: new Date(startDate), $lte: new Date(endDate) }},
|
||||
{endWashTime: { $gte: new Date(startDate), $lte: new Date(endDate) }},
|
||||
]
|
||||
})
|
||||
|
||||
res.status(200).send({ success: true, body: orders })
|
||||
})
|
||||
|
||||
module.exports = router
|
@ -1,12 +1,15 @@
|
||||
const router = require('express').Router()
|
||||
const armMasterRouter = require('./arm-master')
|
||||
const armOrdersRouter = require('./arm-orders')
|
||||
const orderRouter = require('./order')
|
||||
|
||||
router.get('/arm/masters', (req, res) => {
|
||||
res
|
||||
.status(200)
|
||||
.send(require("./json/arm-masters/success.json"))
|
||||
})
|
||||
|
||||
router.use('/arm', armMasterRouter)
|
||||
router.use('/arm', armOrdersRouter)
|
||||
router.use('/order', orderRouter)
|
||||
|
||||
router.get('/arm/orders', (req, res) => {
|
||||
res
|
||||
.status(200)
|
||||
.send(require(`./json/arm-orders/success.json`))
|
||||
})
|
||||
|
||||
module.exports = router
|
||||
|
@ -2,59 +2,24 @@
|
||||
"success": true,
|
||||
"body": [
|
||||
{
|
||||
"phone": "+79876543210",
|
||||
"carNumber": "А123ВЕ16",
|
||||
"carBody": 1,
|
||||
"carColor": "#ffff00",
|
||||
"startWashTime": "2025-05-12T08:21:00.000Z",
|
||||
"endWashTime": "2025-05-12T08:22:00.000Z",
|
||||
"location": "55.792799704829854,49.11034340707925 Республика Татарстан (Татарстан), Казань, улица Чернышевского",
|
||||
"id": "order1",
|
||||
"carNumber": "A123BC",
|
||||
"startWashTime": "2024-11-24T10:30:00.000Z",
|
||||
"endWashTime": "2024-11-24T16:30:00.000Z",
|
||||
"orderDate": "2024-11-24T08:41:46.366Z",
|
||||
"status": "progress",
|
||||
"notes": "",
|
||||
"created": "2025-01-18T17:43:21.488Z",
|
||||
"updated": "2025-01-18T17:43:21.492Z"
|
||||
"phone": "79001234563",
|
||||
"location": "Казань, ул. Баумана, 1"
|
||||
},
|
||||
{
|
||||
"phone": "89876543210",
|
||||
"carNumber": "К456МН23",
|
||||
"carBody": 2,
|
||||
"carColor": "#ffffff",
|
||||
"startWashTime": "2025-01-12T08:21:00Z",
|
||||
"endWashTime": "2025-01-12T08:22:00Z",
|
||||
"location": "55.808430668108585,49.198608125449255 Республика Татарстан (Татарстан), Казань, улица Академика Губкина, 50/1",
|
||||
"status": "pending",
|
||||
"notes": "заметки заметки заметки заметки заметки заметки заметки заметки заметки заметки заметки заметки заметки заметки заметки",
|
||||
"created": "2025-01-18T17:46:10.388Z",
|
||||
"updated": "2025-01-18T17:46:10.395Z",
|
||||
"id": "678be8e211e62f4a61790cca"
|
||||
},
|
||||
{
|
||||
"phone": "4098765432105",
|
||||
"carNumber": "О789РС777",
|
||||
"carBody": 3,
|
||||
"carColor": "красный",
|
||||
"startWashTime": "2025-08-12T08:21:00.000Z",
|
||||
"endWashTime": "2025-08-12T08:22:00.000Z",
|
||||
"location": "55.78720449830353,49.12111640202319 Республика Татарстан (Татарстан), Казань, улица Пушкина, 5/43",
|
||||
"status": "cancelled",
|
||||
"notes": "Заказ отменен по запросу самого клиента",
|
||||
"created": "2025-01-18T17:47:46.294Z",
|
||||
"updated": "2025-01-18T17:47:46.295Z",
|
||||
"id": "678be8e211e62f4a61790ccb"
|
||||
},
|
||||
{
|
||||
"phone": "+79876543210",
|
||||
"carNumber": "Т123УХ716",
|
||||
"carBody": 99,
|
||||
"carColor": "чайная роза",
|
||||
"startWashTime": "2025-01-11T11:21:00.000Z",
|
||||
"endWashTime": "2025-01-12T11:22:00.000Z",
|
||||
"location": "55.77063673480112,49.22182909159608 Республика Татарстан (Татарстан), Казань, Советский район, микрорайон Азино-2",
|
||||
"id": "order2",
|
||||
"carNumber": "A245BC",
|
||||
"startWashTime": "2024-11-24T11:30:00.000Z",
|
||||
"endWashTime": "2024-11-24T17:30:00.000Z",
|
||||
"orderDate": "2024-11-24T07:40:46.366Z",
|
||||
"status": "progress",
|
||||
"notes": "Клиент остался доволен, предложить в следующий раз акцию",
|
||||
"created": "2025-01-18T17:55:05.691Z",
|
||||
"updated": "2025-01-18T17:55:05.695Z",
|
||||
"id": "678be8e211e62f4a61790ccc"
|
||||
"phone": "79001234567",
|
||||
"location": "Казань, ул. Баумана, 43"
|
||||
}
|
||||
]
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
const orderStatus = {
|
||||
CANCELLED: 'cancelled',
|
||||
PROGRESS: 'progress',
|
||||
PENDING: 'pending',
|
||||
WORKING: 'working',
|
||||
COMPLETE: 'complete',
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
orderStatus
|
||||
}
|
@ -1,27 +0,0 @@
|
||||
const { Schema, model } = require('mongoose')
|
||||
|
||||
const schema = new Schema({
|
||||
file: String,
|
||||
orderId: {
|
||||
type: Schema.Types.ObjectId,
|
||||
ref: 'dry-wash-order'
|
||||
},
|
||||
created: {
|
||||
type: Date,
|
||||
default: () => new Date().toISOString(),
|
||||
},
|
||||
})
|
||||
|
||||
schema.set('toJSON', {
|
||||
virtuals: true,
|
||||
versionKey: false,
|
||||
transform(_doc, ret) {
|
||||
delete ret._id
|
||||
}
|
||||
})
|
||||
|
||||
schema.virtual('id').get(function () {
|
||||
return this._id.toHexString()
|
||||
})
|
||||
|
||||
exports.OrderCarImgModel = model('dry-wash-order-car-image', schema)
|
@ -1,79 +0,0 @@
|
||||
const { Schema, model } = require('mongoose')
|
||||
const { orderStatus } = require('./const')
|
||||
const { OrderNumberModel } = require('./order.number')
|
||||
|
||||
const schema = new Schema({
|
||||
phone: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
carNumber: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
carBody: {
|
||||
type: Number,
|
||||
required: true
|
||||
},
|
||||
carColor: String,
|
||||
startWashTime: {
|
||||
type: Date,
|
||||
required: true
|
||||
},
|
||||
endWashTime: {
|
||||
type: Date,
|
||||
required: true
|
||||
},
|
||||
location: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
orderNumber: {
|
||||
type: String,
|
||||
unique: true
|
||||
},
|
||||
status: {
|
||||
type: String,
|
||||
required: true,
|
||||
enum: Object.values(orderStatus)
|
||||
},
|
||||
master: {
|
||||
type: Schema.Types.ObjectId,
|
||||
ref: 'dry-wash-master'
|
||||
},
|
||||
notes: String,
|
||||
created: {
|
||||
type: Date,
|
||||
default: () => new Date().toISOString(),
|
||||
},
|
||||
updated: {
|
||||
type: Date,
|
||||
default: () => new Date().toISOString(),
|
||||
},
|
||||
})
|
||||
|
||||
schema.pre('save', async function (next) {
|
||||
if (this.isNew) {
|
||||
const counter = await OrderNumberModel.findOneAndUpdate(
|
||||
{ _id: 'orderNumber' },
|
||||
{ $inc: { sequenceValue: 1 } },
|
||||
{ new: true, upsert: true }
|
||||
)
|
||||
this.orderNumber = counter.sequenceValue.toString()
|
||||
}
|
||||
next()
|
||||
})
|
||||
|
||||
schema.set('toJSON', {
|
||||
virtuals: true,
|
||||
versionKey: false,
|
||||
transform(_doc, ret) {
|
||||
delete ret._id
|
||||
}
|
||||
})
|
||||
|
||||
schema.virtual('id').get(function () {
|
||||
return this._id.toHexString()
|
||||
})
|
||||
|
||||
exports.OrderModel = model('dry-wash-order', schema)
|
@ -1,14 +0,0 @@
|
||||
const { Schema, model } = require('mongoose')
|
||||
|
||||
const schema = new Schema({
|
||||
_id: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
sequenceValue: {
|
||||
type: Number,
|
||||
default: 0
|
||||
}
|
||||
})
|
||||
|
||||
exports.OrderNumberModel = model('dry-wash-order-number', schema)
|
@ -1,317 +0,0 @@
|
||||
const mongoose = require("mongoose")
|
||||
const router = require('express').Router()
|
||||
const multer = require('multer')
|
||||
const { MasterModel } = require('./model/master')
|
||||
const { OrderModel } = require('./model/order')
|
||||
const { OrderCarImgModel } = require('./model/order.car-img')
|
||||
const { orderStatus } = require('./model/const')
|
||||
|
||||
const isValidPhoneNumber = (value) => /^(\+)?\d{9,15}/.test(value)
|
||||
const isValidCarNumber = (value) => /^[авекмнорстух][0-9]{3}[авекмнорстух]{2}[0-9]{2,3}$/i.test(value)
|
||||
const isValidCarBodyType = (value) => typeof value === 'number' && value > 0 && value < 100
|
||||
const isValidCarColor = (value) => value.length < 50 && /^[#a-z0-9а-я-\s,.()]+$/i.test(value)
|
||||
const isValidISODate = (value) => /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:.\d{1,3})?Z$/.test(value)
|
||||
|
||||
const latitudeRe = /^(-?[1-8]?\d(?:\.\d{1,18})?|90(?:\.0{1,18})?)$/
|
||||
const longitudeRe = /^(-?(?:1[0-7]|[1-9])?\d(?:\.\d{1,18})?|180(?:\.0{1,18})?)$/
|
||||
const addressRe = /^[а-я0-9\s,.'-/()]*$/i
|
||||
const isValidLocation = (value) => {
|
||||
if (value.length > 200) {
|
||||
return false
|
||||
}
|
||||
|
||||
const [coordinates, address] = value.split(' ')
|
||||
const [latitude, longitude] = coordinates.split(',')
|
||||
return latitudeRe.test(latitude) && longitudeRe.test(longitude) && addressRe.test(address)
|
||||
}
|
||||
|
||||
const isValidOrderStatus = (value) => Object.values(orderStatus).includes(value)
|
||||
const isValidOrderNotes = (value) => value.length < 500
|
||||
|
||||
const allowedMimeTypes = ['image/jpeg', 'image/png']
|
||||
const sizeLimitInMegaBytes = 5
|
||||
|
||||
const VALIDATION_MESSAGES = {
|
||||
order: {
|
||||
notFound: 'Order not found'
|
||||
},
|
||||
orderId: {
|
||||
invalid: 'Valid order ID is required',
|
||||
},
|
||||
orderStatus: {
|
||||
invalid: 'Invalid order status'
|
||||
},
|
||||
orderNotes: {
|
||||
invalid: 'Invalid order notes'
|
||||
},
|
||||
master: {
|
||||
notFound: 'Master not found'
|
||||
},
|
||||
masterId: {
|
||||
invalid: 'Invalid master ID',
|
||||
},
|
||||
phoneNumber: {
|
||||
required: 'Phone number is required',
|
||||
invalid: 'Invalid phone number'
|
||||
},
|
||||
carNumber: {
|
||||
required: 'Car number is required',
|
||||
invalid: 'Invalid car number'
|
||||
},
|
||||
carBody: {
|
||||
required: 'Car body type is required',
|
||||
invalid: 'Invalid car body type'
|
||||
},
|
||||
carColor: {
|
||||
invalid: 'Invalid car color'
|
||||
},
|
||||
carImg: {
|
||||
required: 'Car image file is required',
|
||||
invalid: {
|
||||
type: `Invalid car image file type. Allowed types: ${allowedMimeTypes}`,
|
||||
size: `Invalid car image file size. Limit is ${sizeLimitInMegaBytes}MB`
|
||||
}
|
||||
},
|
||||
washingBegin: {
|
||||
required: 'Begin time of washing is required',
|
||||
invalid: 'Invalid begin time of washing'
|
||||
},
|
||||
washingEnd: {
|
||||
required: 'End time of washing is required',
|
||||
invalid: 'Invalid end time of washing'
|
||||
},
|
||||
washingLocation: {
|
||||
required: 'Location of washing is required',
|
||||
invalid: 'Invalid location of washing'
|
||||
},
|
||||
}
|
||||
|
||||
router.post('/create', async (req, res, next) => {
|
||||
const bodyErrors = []
|
||||
|
||||
const { customer } = req.body
|
||||
if (!customer.phone) {
|
||||
bodyErrors.push(VALIDATION_MESSAGES.phoneNumber.required)
|
||||
} else if (!isValidPhoneNumber(customer.phone)) {
|
||||
bodyErrors.push(VALIDATION_MESSAGES.phoneNumber.invalid)
|
||||
}
|
||||
|
||||
const { car } = req.body
|
||||
if (!car.number) {
|
||||
bodyErrors.push(VALIDATION_MESSAGES.carNumber.required)
|
||||
} else if (!isValidCarNumber(car.number)) {
|
||||
bodyErrors.push(VALIDATION_MESSAGES.carNumber.invalid)
|
||||
}
|
||||
if (!car.body) {
|
||||
bodyErrors.push(VALIDATION_MESSAGES.carBody.required)
|
||||
} else if (!isValidCarBodyType(car.body)) {
|
||||
bodyErrors.push(VALIDATION_MESSAGES.carBody.invalid)
|
||||
}
|
||||
if (!isValidCarColor(car.color)) {
|
||||
bodyErrors.push(VALIDATION_MESSAGES.carColor.invalid)
|
||||
}
|
||||
|
||||
const { washing } = req.body
|
||||
if (!washing.begin) {
|
||||
bodyErrors.push(VALIDATION_MESSAGES.washingBegin.required)
|
||||
} else if (!isValidISODate(washing.begin)) {
|
||||
bodyErrors.push(VALIDATION_MESSAGES.washingBegin.invalid)
|
||||
}
|
||||
if (!washing.end) {
|
||||
bodyErrors.push(VALIDATION_MESSAGES.washingEnd.required)
|
||||
} else if (!isValidISODate(washing.end)) {
|
||||
bodyErrors.push(VALIDATION_MESSAGES.washingEnd.invalid)
|
||||
}
|
||||
if (!washing.location) {
|
||||
bodyErrors.push(VALIDATION_MESSAGES.washingLocation.required)
|
||||
} else if (!isValidLocation(washing.location)) {
|
||||
bodyErrors.push(VALIDATION_MESSAGES.washingLocation.invalid)
|
||||
}
|
||||
|
||||
if (bodyErrors.length > 0) {
|
||||
throw new Error(bodyErrors.join(', '))
|
||||
}
|
||||
|
||||
try {
|
||||
const order = await OrderModel.create({
|
||||
phone: customer.phone,
|
||||
carNumber: car.number,
|
||||
carBody: car.body,
|
||||
carColor: car.color,
|
||||
startWashTime: washing.begin,
|
||||
endWashTime: washing.end,
|
||||
location: washing.location,
|
||||
status: orderStatus.PROGRESS,
|
||||
notes: '',
|
||||
created: new Date().toISOString(),
|
||||
})
|
||||
|
||||
res.status(200).send({ success: true, body: order })
|
||||
|
||||
} catch (error) {
|
||||
next(error)
|
||||
}
|
||||
})
|
||||
|
||||
router.get('/:id', async (req, res, next) => {
|
||||
const { id } = req.params
|
||||
if (!mongoose.Types.ObjectId.isValid(id)) {
|
||||
throw new Error(VALIDATION_MESSAGES.orderId.invalid)
|
||||
}
|
||||
|
||||
try {
|
||||
const order = await OrderModel.findById(id)
|
||||
if (!order) {
|
||||
throw new Error(VALIDATION_MESSAGES.order.notFound)
|
||||
}
|
||||
|
||||
res.status(200).send({ success: true, body: order })
|
||||
} catch (error) {
|
||||
next(error)
|
||||
}
|
||||
})
|
||||
|
||||
router.patch('/:id', async (req, res, next) => {
|
||||
const { id } = req.params
|
||||
if (!mongoose.Types.ObjectId.isValid(id)) {
|
||||
throw new Error(VALIDATION_MESSAGES.orderId.invalid)
|
||||
}
|
||||
|
||||
const bodyErrors = []
|
||||
|
||||
const { status } = req.body
|
||||
if (status) {
|
||||
if (!isValidOrderStatus(status)) {
|
||||
bodyErrors.push(VALIDATION_MESSAGES.orderStatus.invalid)
|
||||
}
|
||||
}
|
||||
|
||||
const { master: masterId } = req.body
|
||||
if (masterId) {
|
||||
if (!mongoose.Types.ObjectId.isValid(masterId)) {
|
||||
bodyErrors.push(VALIDATION_MESSAGES.masterId.invalid)
|
||||
} else {
|
||||
try {
|
||||
const master = await MasterModel.findById(masterId)
|
||||
if (!master) {
|
||||
bodyErrors.push(VALIDATION_MESSAGES.master.notFound)
|
||||
}
|
||||
} catch (error) {
|
||||
next(error)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const { notes } = req.body
|
||||
if (notes) {
|
||||
if (!isValidOrderNotes(notes)) {
|
||||
bodyErrors.push(VALIDATION_MESSAGES.orderNotes.invalid)
|
||||
}
|
||||
}
|
||||
|
||||
if (bodyErrors.length > 0) {
|
||||
throw new Error(bodyErrors.join(', '))
|
||||
}
|
||||
|
||||
try {
|
||||
const updateData = {}
|
||||
if (status) {
|
||||
updateData.status = status
|
||||
}
|
||||
if (masterId) {
|
||||
updateData.master = masterId
|
||||
}
|
||||
if (notes) {
|
||||
updateData.notes = notes
|
||||
}
|
||||
updateData.updated = new Date().toISOString()
|
||||
|
||||
const order = await OrderModel.findByIdAndUpdate(
|
||||
id,
|
||||
updateData,
|
||||
{ new: true }
|
||||
)
|
||||
if (!order) {
|
||||
throw new Error(VALIDATION_MESSAGES.order.notFound)
|
||||
}
|
||||
|
||||
res.status(200).send({ success: true, body: order })
|
||||
} catch (error) {
|
||||
next(error)
|
||||
}
|
||||
})
|
||||
|
||||
router.delete('/:id', async (req, res, next) => {
|
||||
const { id } = req.params
|
||||
if (!mongoose.Types.ObjectId.isValid(id)) {
|
||||
throw new Error(VALIDATION_MESSAGES.orderId.invalid)
|
||||
}
|
||||
|
||||
try {
|
||||
const order = await OrderModel.findByIdAndDelete(id, {
|
||||
new: true,
|
||||
})
|
||||
if (!order) {
|
||||
throw new Error(VALIDATION_MESSAGES.order.notFound)
|
||||
}
|
||||
res.status(200).send({ success: true, body: order })
|
||||
} catch (error) {
|
||||
next(error)
|
||||
}
|
||||
})
|
||||
|
||||
const storage = multer.memoryStorage()
|
||||
const upload = multer({
|
||||
storage: storage,
|
||||
limits: { fileSize: sizeLimitInMegaBytes * 1024 * 1024 },
|
||||
fileFilter: (req, file, cb) => {
|
||||
if (allowedMimeTypes.includes(file.mimetype)) {
|
||||
cb(null, true)
|
||||
} else {
|
||||
cb(new Error(VALIDATION_MESSAGES.carImg.invalid.type), false)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
const convertFileToBase64 = (file) => {
|
||||
const base64Image = file.buffer.toString('base64')
|
||||
return base64Image
|
||||
}
|
||||
|
||||
router.post('/:id/upload-car-img', upload.single('file'), async (req, res) => {
|
||||
const { id: orderId } = req.params
|
||||
if (!mongoose.Types.ObjectId.isValid(orderId)) {
|
||||
throw new Error(VALIDATION_MESSAGES.orderId.invalid)
|
||||
}
|
||||
const order = await OrderModel.findById(orderId)
|
||||
if (!order) {
|
||||
throw new Error(VALIDATION_MESSAGES.order.notFound)
|
||||
}
|
||||
|
||||
if (!req.file) {
|
||||
throw new Error(VALIDATION_MESSAGES.carImg.required)
|
||||
}
|
||||
|
||||
const orderCarImg = await OrderCarImgModel.create({
|
||||
file: convertFileToBase64(req.file),
|
||||
orderId,
|
||||
created: new Date().toISOString(),
|
||||
})
|
||||
|
||||
res.status(200).send({ success: true, body: orderCarImg })
|
||||
})
|
||||
|
||||
router.use((err, req, res, next) => {
|
||||
if (err instanceof multer.MulterError) {
|
||||
switch (err.message) {
|
||||
case 'File too large':
|
||||
return res.status(400).json({ success: false, error: VALIDATION_MESSAGES.carImg.invalid.size })
|
||||
default:
|
||||
return res.status(400).json({ success: false, error: err.message })
|
||||
}
|
||||
}
|
||||
|
||||
throw new Error(err.message)
|
||||
})
|
||||
|
||||
module.exports = router
|
@ -1,107 +0,0 @@
|
||||
{
|
||||
"info": {
|
||||
"_postman_id": "e91fbcf7-3c7b-420d-a49e-4dbb6199c14a",
|
||||
"name": "dry-wash",
|
||||
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
|
||||
"_exporter_id": "27705820"
|
||||
},
|
||||
"item": [
|
||||
{
|
||||
"name": "arm",
|
||||
"item": [
|
||||
{
|
||||
"name": "create master",
|
||||
"request": {
|
||||
"method": "POST",
|
||||
"header": [],
|
||||
"body": {
|
||||
"mode": "raw",
|
||||
"raw": "{\n \"name\":\"Anto234\",\n \"phone\": \"89172420577\"\n}",
|
||||
"options": {
|
||||
"raw": {
|
||||
"language": "json"
|
||||
}
|
||||
}
|
||||
},
|
||||
"url": {
|
||||
"raw": "{{host}}/arm/master",
|
||||
"host": [
|
||||
"{{host}}"
|
||||
],
|
||||
"path": [
|
||||
"arm",
|
||||
"master"
|
||||
]
|
||||
}
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "get masters",
|
||||
"request": {
|
||||
"method": "GET",
|
||||
"header": [],
|
||||
"url": {
|
||||
"raw": "{{host}}/arm/master-list",
|
||||
"host": [
|
||||
"{{host}}"
|
||||
],
|
||||
"path": [
|
||||
"arm",
|
||||
"master-list"
|
||||
]
|
||||
}
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "delete master",
|
||||
"request": {
|
||||
"method": "DELETE",
|
||||
"header": [],
|
||||
"url": {
|
||||
"raw": "{{host}}/arm/masters/{{id}}",
|
||||
"host": [
|
||||
"{{host}}"
|
||||
],
|
||||
"path": [
|
||||
"arm",
|
||||
"masters",
|
||||
"{{id}}"
|
||||
]
|
||||
}
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "update master",
|
||||
"request": {
|
||||
"method": "PATCH",
|
||||
"header": [],
|
||||
"body": {
|
||||
"mode": "raw",
|
||||
"raw": "{\n \"name\":\"Anto234\",\n \"phone\": \"89172420577\"\n}",
|
||||
"options": {
|
||||
"raw": {
|
||||
"language": "json"
|
||||
}
|
||||
}
|
||||
},
|
||||
"url": {
|
||||
"raw": "{{host}}/arm/masters/{{id}}",
|
||||
"host": [
|
||||
"{{host}}"
|
||||
],
|
||||
"path": [
|
||||
"arm",
|
||||
"masters",
|
||||
"{{id}}"
|
||||
]
|
||||
}
|
||||
},
|
||||
"response": []
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
@ -7,6 +7,4 @@ router.use('/cats', require('./cats/index'))
|
||||
|
||||
router.use('/ecliptica', require('./ecliptica/index'))
|
||||
|
||||
router.use('/sdk', require('./sdk/index'))
|
||||
|
||||
module.exports = router
|
||||
|
@ -1,123 +0,0 @@
|
||||
const router = require('express').Router();
|
||||
const { v4: uuidv4 } = require('uuid');
|
||||
|
||||
const workout1 = {
|
||||
id: uuidv4(),
|
||||
title: "Toned upper body",
|
||||
exercises: [
|
||||
{ title: "Push ups", repsOrDuration: 12, isTimeBased: false },
|
||||
{ title: "Plank", repsOrDuration: 4, isTimeBased: true },
|
||||
{ title: "Bicep curl", repsOrDuration: 12, isTimeBased: false, weight: 5 },
|
||||
{ title: "Bicep curl", repsOrDuration: 12, isTimeBased: false, weight: 5 },
|
||||
{ title: "Bicep curl", repsOrDuration: 12, isTimeBased: false, weight: 5 },
|
||||
{ title: "Bicep curl", repsOrDuration: 12, isTimeBased: false, weight: 5 },
|
||||
],
|
||||
tags: ['Weights', 'Arms', 'Abs', 'Chest', 'Back']
|
||||
};
|
||||
|
||||
const workout2 = {
|
||||
id: uuidv4(),
|
||||
title: "Tom Platz's legs",
|
||||
exercises: [
|
||||
{ title: "Squats", repsOrDuration: 12, isTimeBased: false, weight: 40 },
|
||||
{ title: "Leg Press", repsOrDuration: 4, isTimeBased: false, weight: 65 },
|
||||
{ title: "Lunges", repsOrDuration: 2, isTimeBased: true }
|
||||
],
|
||||
tags: ['Weights', 'Legs']
|
||||
};
|
||||
|
||||
const workout3 = {
|
||||
id: uuidv4(),
|
||||
title: "HIIT",
|
||||
exercises: [
|
||||
{ title: "Jumping rope", repsOrDuration: 100, isTimeBased: false },
|
||||
{ title: "Burpees", repsOrDuration: 3, isTimeBased: true },
|
||||
{ title: "Jumping Jacks", repsOrDuration: 50, isTimeBased: false }
|
||||
],
|
||||
tags: ['Cardio']
|
||||
}
|
||||
|
||||
const savedWorkouts = [workout1, workout3];
|
||||
|
||||
const trainingWorkouts = [workout2];
|
||||
|
||||
router.post('/workout', (req, res) => {
|
||||
const newWorkout = { ...req.body, id: uuidv4() };
|
||||
savedWorkouts.push(newWorkout);
|
||||
res.status(201).json(newWorkout);
|
||||
});
|
||||
|
||||
router.get('/workouts', (req, res) => {
|
||||
res.json(savedWorkouts);
|
||||
});
|
||||
|
||||
router.post('/training/workout', (req, res) => {
|
||||
const newWorkout = { ...req.body, id: uuidv4() };
|
||||
trainingWorkouts.push(newWorkout);
|
||||
res.status(201).json(newWorkout);
|
||||
});
|
||||
|
||||
const trainings = [{ id: uuidv4(), calories: 450, date: new Date("Thu Oct 03 2024 10:05:24 GMT+0300 (Moscow Standard Time)"), emoji: "fuzzy", hours: 1, minutes: 30, isWorkoutSaved: true, workout: workout1.id }];
|
||||
|
||||
const days = [
|
||||
new Date("Thu Oct 03 2024 10:05:24 GMT+0300 (Moscow Standard Time)"),
|
||||
|
||||
];
|
||||
|
||||
router.post('/training', (req, res) => {
|
||||
const newTraining = { ...req.body, id: uuidv4() };
|
||||
trainings.push(newTraining);
|
||||
days.push(newTraining.date);
|
||||
res.status(201).json(newTraining);
|
||||
});
|
||||
|
||||
router.get('/training', (req, res) => {
|
||||
const { date } = req.query;
|
||||
if (!date) {
|
||||
return res.status(400).json({ message: 'Date query parameter is required' });
|
||||
}
|
||||
const formattedDate = new Date(date);
|
||||
const result = trainings.find(t => new Date(t.date).toDateString() === formattedDate.toDateString());
|
||||
if (result) {
|
||||
res.json(result);
|
||||
} else {
|
||||
res.status(404).json({ message: 'Training not found for the specified date' });
|
||||
}
|
||||
});
|
||||
|
||||
router.get('/training/workout', (req, res) => {
|
||||
const { id } = req.query;
|
||||
if (!id) {
|
||||
return res.status(400).json({ message: 'Id query parameter is required' });
|
||||
}
|
||||
const result = trainingWorkouts.find(w => w.id === id);
|
||||
if (result) {
|
||||
res.json(result);
|
||||
} else {
|
||||
res.status(404).json({ message: 'Training with such workout not found' });
|
||||
}
|
||||
});
|
||||
|
||||
router.get('/workout', (req, res) => {
|
||||
const { id } = req.query;
|
||||
if (!id) {
|
||||
return res.status(400).json({ message: 'Id query parameter is required' });
|
||||
}
|
||||
const result = savedWorkouts.find(w => w.id === id);
|
||||
if (result) {
|
||||
res.json(result);
|
||||
} else {
|
||||
res.status(404).json({ message: 'Workout not found' });
|
||||
}
|
||||
});
|
||||
|
||||
router.get('/trainings', (req, res) => {
|
||||
res.json(trainings);
|
||||
});
|
||||
|
||||
router.get('/days', (req, res) => {
|
||||
res.json(days);
|
||||
})
|
||||
|
||||
|
||||
module.exports = router;
|
@ -1,12 +0,0 @@
|
||||
const router = require("express").Router();
|
||||
|
||||
router.get('/game-links', (request, response) => {
|
||||
response.send(require('./json/game-links/success.json'))
|
||||
})
|
||||
|
||||
router.get('/4u2k-links', (request, response) => {
|
||||
response.send(require('./json/4u2k-links/success.json'))
|
||||
})
|
||||
;
|
||||
|
||||
module.exports = router;
|
@ -1,31 +0,0 @@
|
||||
{
|
||||
"data":[
|
||||
{
|
||||
"type": "video",
|
||||
"links": {
|
||||
"l1": "https://www.youtube.com/embed/DsQMLrPdLf8?si=l9X57nHqaSYlxDFf",
|
||||
"l2": "https://www.youtube.com/embed/Dk8AAU_UdVk?si=N8NdYMUCfawdsJGE",
|
||||
"l3": "https://www.youtube.com/embed/HKfDfWrCwEA?si=qPugjiKR8V9eZ-yG",
|
||||
"l4": "https://www.youtube.com/embed/tD-6xHAHrQ4?si=ZFe41gSK8d5gqahW"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "podcast",
|
||||
"links": {
|
||||
"l1": "https://www.youtube.com/embed/RtVs87Nd1MQ?si=i4giUCtbp4Ouqv2W",
|
||||
"l2": "https://www.youtube.com/embed/DfTU5LA_kw8?si=m7fI5Ie9yIGDFCrU",
|
||||
"l3": "https://www.youtube.com/embed/Sp-1fX1Q15I?si=xyealVly9IBMW7Xi",
|
||||
"l4": "https://www.youtube.com/embed/rLYFJYfluRs?si=MjW1beQ-Q9-TAehF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "entertainment",
|
||||
"links": {
|
||||
"l1": "https://www.youtube.com/embed/DiuuglRCchQ?si=8wTVXKbV-mbHuSjW",
|
||||
"l2": "https://www.youtube.com/embed/zmZcIX5PEyo?si=Hbrv32kl0fqcmtV9",
|
||||
"l3": "https://www.youtube.com/embed/Te-TZUjmzFQ?si=fNG16eruoFEY2KNq",
|
||||
"l4": "https://www.youtube.com/embed/si-MQ5qg3zE?si=67mfO6gV80n1ULqo"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
@ -1,20 +0,0 @@
|
||||
{
|
||||
"data":[
|
||||
{
|
||||
"title": "ABC",
|
||||
"description": "Мой брат Колян сбацал про меня байку на англицком и несколько фишек кинул для шухера. Англицкий ты вроде знаешь, впряжешься за меня, а?",
|
||||
"link": "https://www.oxfordonlineenglish.com/english-level-test/reading"
|
||||
},
|
||||
{
|
||||
"title": "Алё, меня слышно?",
|
||||
"description": "Мой кент на мобилу текст записал с иностранкой. Понимаешь, о чём тут говорят?",
|
||||
"link": "https://test-english.com/listening/"
|
||||
},
|
||||
{
|
||||
"title": "Анонимное тестирование",
|
||||
"description": "Ты язык-то нормально знаешь? Проверься, никто угарать не будет",
|
||||
"link": "https://www.ego4u.com/en/cram-up/tests"
|
||||
|
||||
}
|
||||
]
|
||||
}
|
@ -1,24 +0,0 @@
|
||||
const Router = require('express').Router
|
||||
|
||||
const router = Router()
|
||||
|
||||
router.post('/auth/login', (req, res) => {
|
||||
if (req.body.email === 'qwerty@mail.ru') {
|
||||
res.status(200).send(require('./json/login/login-success.json'))
|
||||
} else {
|
||||
res.status(401).send(require('./json/login/login-error.json'));
|
||||
}
|
||||
})
|
||||
|
||||
router.post('/auth/register', (req, res) => {
|
||||
res.status(400).send(require('./json/registration/registration-error.json'))
|
||||
// res.status(201).send(require('./json/registration/registration-error.json'))
|
||||
})
|
||||
|
||||
router.post('/auth/reset-password', (req, res) => {
|
||||
res.status(200).send(require('./json/reset-password/reset-password-success.json'))
|
||||
// res.status(404).send(require('./json/reset-password/reset-password-error.json'))
|
||||
})
|
||||
|
||||
|
||||
module.exports = router;
|
@ -1,11 +0,0 @@
|
||||
{
|
||||
"success": false,
|
||||
"body": null,
|
||||
"errors": [
|
||||
{
|
||||
"code": "AUTH_INVALID_CREDENTIALS",
|
||||
"message": "Неверное имя пользователя или пароль"
|
||||
}
|
||||
],
|
||||
"warnings": []
|
||||
}
|
@ -1,8 +0,0 @@
|
||||
{
|
||||
"success": true,
|
||||
"body": {
|
||||
"token": "AUTH_TOKEN"
|
||||
},
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
{
|
||||
"success": false,
|
||||
"body": null,
|
||||
"errors": [
|
||||
{
|
||||
"code": "REGISTRATION_EMAIL_TAKEN",
|
||||
"message": "Электронная почта уже используется"
|
||||
}
|
||||
],
|
||||
"warnings": []
|
||||
}
|
@ -1,9 +0,0 @@
|
||||
{
|
||||
"success": true,
|
||||
"body": {
|
||||
"userId": "12345",
|
||||
"token": "AUTH_TOKEN"
|
||||
},
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
{
|
||||
"success": false,
|
||||
"body": null,
|
||||
"errors": [
|
||||
{
|
||||
"code": "RESET_PASSWORD_EMAIL_NOT_FOUND",
|
||||
"message": "Адрес электронной почты не зарегистрирован"
|
||||
}
|
||||
],
|
||||
"warnings": []
|
||||
}
|
@ -1,8 +0,0 @@
|
||||
{
|
||||
"success": true,
|
||||
"body": {
|
||||
"message": "Отправлено электронное письмо для сброса пароля"
|
||||
},
|
||||
"errors": [],
|
||||
"warnings": []
|
||||
}
|
@ -1,7 +1,6 @@
|
||||
const router = require('express').Router();
|
||||
|
||||
router.use('/performer', require('./dashboard-performer'))
|
||||
router.use('/auth', require('./auth'))
|
||||
router.use('/landing', require('./landing'))
|
||||
|
||||
module.exports = router;
|
@ -1,257 +0,0 @@
|
||||
const router = require("express").Router();
|
||||
|
||||
router.get("/game-page", (request, response) => {
|
||||
response.send(require("./json/gamepage/success.json"));
|
||||
});
|
||||
|
||||
router.get("/update-like", (request, response) => {
|
||||
response.send(require("./json/gamepage/success.json"));
|
||||
});
|
||||
|
||||
router.get("/add-to-cart", (request, response) => {
|
||||
response.send(require("./json/home-page-data/games-in-cart.json"));
|
||||
});
|
||||
|
||||
router.get("/categories", (request, response) => {
|
||||
response.send(require("./json/home-page-data/all-games.json"));
|
||||
});
|
||||
|
||||
router.get("/favourites", (request, response) => {
|
||||
response.send(require("./json/home-page-data/all-games.json"));
|
||||
});
|
||||
|
||||
// router.get("/shopping-cart", (request, response) => {
|
||||
// response.send(require("./json/shopping-cart/success.json"));
|
||||
// });
|
||||
|
||||
router.get("/shopping-cart", (request, response) => {
|
||||
response.send(require("./json/home-page-data/games-in-cart.json"));
|
||||
});
|
||||
|
||||
// Добавляем поддержку разных ответов для /home
|
||||
router.get("/home", (req, res) => {
|
||||
if (stubs.home === "success") {
|
||||
res.send(require("./json/home-page-data/success.json"));
|
||||
} else if (stubs.home === "empty") {
|
||||
res.send({ data: [] }); // Отправляем пустой массив
|
||||
} else {
|
||||
res.status(500).json({ success: false, message: "Server error" });
|
||||
}
|
||||
});
|
||||
|
||||
router.get("/all-games", (request, response) => {
|
||||
response.send(require("./json/home-page-data/all-games.json"));
|
||||
});
|
||||
|
||||
const stubs = {
|
||||
home: "success",
|
||||
};
|
||||
|
||||
// // Маршрут для обновления лайков
|
||||
// router.post("/update-like", (request, response) => {
|
||||
// const { username, likes } = request.body;
|
||||
|
||||
// // Эмулируем успешное обновление лайков
|
||||
// console.log(`Лайки для пользователя ${username} обновлены до ${likes}`);
|
||||
|
||||
// response.status(200).json({
|
||||
// success: true,
|
||||
// message: `Лайки для пользователя ${username} обновлены до ${likes}`,
|
||||
// });
|
||||
// });
|
||||
|
||||
const fs = require("fs").promises;
|
||||
const path = require("path");
|
||||
|
||||
// Path to JSON file
|
||||
const commentsFilePath = path.join(__dirname, "./json/gamepage/success.json");
|
||||
|
||||
// Read JSON file
|
||||
async function readComments() {
|
||||
const data = await fs.readFile(commentsFilePath, "utf-8");
|
||||
const parsedData = JSON.parse(data);
|
||||
console.log("Прочитанные данные:", parsedData); // Логируем полученные данные
|
||||
return parsedData;
|
||||
}
|
||||
// Write to JSON file
|
||||
async function writeComments(data) {
|
||||
await fs.writeFile(commentsFilePath, JSON.stringify(data, null, 2), "utf-8");
|
||||
}
|
||||
|
||||
// Update likes route
|
||||
router.post("/update-like", async (req, res) => {
|
||||
const { username, likes } = req.body;
|
||||
|
||||
if (!username || likes === undefined) {
|
||||
return res.status(400).json({ success: false, message: "Invalid input" });
|
||||
}
|
||||
|
||||
try {
|
||||
const data = await readComments();
|
||||
const comment = data.data.comments.find((c) => c.username === username);
|
||||
|
||||
if (comment) {
|
||||
comment.likes = likes;
|
||||
await writeComments(data); // Сохраняем обновленные данные в файл
|
||||
|
||||
// Возвращаем актуализированные данные
|
||||
res.status(200).json({
|
||||
success: true,
|
||||
message: "Likes updated successfully",
|
||||
data: data.data, // Возвращаем актуализированные данные
|
||||
});
|
||||
} else {
|
||||
res.status(404).json({ success: false, message: "Comment not found" });
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("Error updating likes:", error);
|
||||
res.status(500).json({ success: false, message: "Server error" });
|
||||
}
|
||||
});
|
||||
|
||||
// Путь к JSON-файлу с корзиной
|
||||
const cartFilePath = path.join(
|
||||
__dirname,
|
||||
"./json/home-page-data/games-in-cart.json"
|
||||
);
|
||||
|
||||
// Функция для чтения JSON-файла
|
||||
async function readCart() {
|
||||
const data = await fs.readFile(cartFilePath, "utf-8");
|
||||
return JSON.parse(data);
|
||||
}
|
||||
|
||||
// Функция для записи в JSON-файл
|
||||
async function writeCart(data) {
|
||||
await fs.writeFile(cartFilePath, JSON.stringify(data, null, 2), "utf-8");
|
||||
}
|
||||
|
||||
// Маршрут для добавления/удаления товара в корзине
|
||||
router.post("/add-to-cart", async (req, res) => {
|
||||
const { id, action } = req.body;
|
||||
|
||||
// Проверка наличия id и action
|
||||
if (id === undefined || action === undefined) {
|
||||
return res
|
||||
.status(400)
|
||||
.json({ success: false, message: "Invalid id or action" });
|
||||
}
|
||||
|
||||
try {
|
||||
const cartData = await readCart();
|
||||
let ids = cartData.data.ids;
|
||||
|
||||
if (action === "add") {
|
||||
// Если action "add", добавляем товар, если его нет в корзине
|
||||
if (!ids?.includes(id)) {
|
||||
ids.push(id);
|
||||
}
|
||||
} else if (action === "remove") {
|
||||
// Если action "remove", удаляем товар, если он есть в корзине
|
||||
if (ids?.includes(id)) {
|
||||
ids = ids.filter((item) => item !== id);
|
||||
}
|
||||
} else {
|
||||
// Если action невалиден
|
||||
return res
|
||||
.status(400)
|
||||
.json({ success: false, message: "Invalid action" });
|
||||
}
|
||||
|
||||
// Записываем обновленные данные обратно в файл
|
||||
cartData.data.ids = ids;
|
||||
await writeCart(cartData);
|
||||
|
||||
res.status(200).json({
|
||||
success: true,
|
||||
message: "Cart updated successfully",
|
||||
data: cartData.data, // Возвращаем обновленные данные
|
||||
});
|
||||
} catch (error) {
|
||||
console.error("Error updating cart:", error);
|
||||
res.status(500).json({ success: false, message: "Server error" });
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
|
||||
const createElement = (key, value, buttonTitle, basePath) => `
|
||||
<label>
|
||||
<input name="${key}" type="radio" ${
|
||||
stubs[key] === value ? "checked" : ""
|
||||
} onclick="fetch('${basePath}/admin/set/${key}/${value}')"/>
|
||||
${buttonTitle || value}
|
||||
</label>
|
||||
`;
|
||||
|
||||
router.get("/admin/home", (request, response) => {
|
||||
const basePath = request.baseUrl; // Получаем базовый путь маршрутизатора
|
||||
response.send(`
|
||||
<div>
|
||||
<fieldset>
|
||||
<legend>Настройка данных для /home</legend>
|
||||
${createElement("home", "success", "Отдать успешный ответ", basePath)}
|
||||
${createElement("home", "empty", "Отдать пустой массив", basePath)}
|
||||
${createElement("home", "error", "Отдать ошибку", basePath)}
|
||||
</fieldset>
|
||||
</div>
|
||||
`);
|
||||
});
|
||||
|
||||
router.get("/admin/game-page", (request, response) => {
|
||||
response.send(`
|
||||
<div>
|
||||
<fieldset>
|
||||
<legend>Настройка данных для /game-page</legend>
|
||||
${createElement(
|
||||
"game-page",
|
||||
"success",
|
||||
"Отдать успешный ответ"
|
||||
)}
|
||||
${createElement("game-page", "empty", "Отдать пустой массив")}
|
||||
${createElement("game-page", "error", "Отдать ошибку")}
|
||||
|
||||
</fieldset>
|
||||
</div>
|
||||
`);
|
||||
});
|
||||
|
||||
router.get("/admin/categories", (request, response) => {
|
||||
response.send(`
|
||||
<div>
|
||||
<fieldset>
|
||||
<legend>Настройка данных для /categories</legend>
|
||||
${createElement(
|
||||
"categories",
|
||||
"success",
|
||||
"Отдать успешный ответ"
|
||||
)}
|
||||
${createElement("categories", "empty", "Отдать пустой массив")}
|
||||
${createElement("categories", "error", "Отдать ошибку")}
|
||||
</fieldset>
|
||||
</div>
|
||||
`);
|
||||
});
|
||||
|
||||
router.get("/admin/favourites", (request, response) => {
|
||||
response.send(`
|
||||
<div>
|
||||
<fieldset>
|
||||
<legend>Настройка данных для /favourites</legend>
|
||||
${createElement(
|
||||
"favourites",
|
||||
"success",
|
||||
"Отдать успешный ответ"
|
||||
)}
|
||||
${createElement("favourites", "empty", "Отдать пустой массив")}
|
||||
${createElement("favourites", "error", "Отдать ошибку")}
|
||||
</fieldset>
|
||||
</div>
|
||||
`);
|
||||
});
|
||||
|
||||
router.get("/admin/set/:key/:value", (request, response) => {
|
||||
const { key, value } = request.params;
|
||||
stubs[key] = value;
|
||||
response.send("Настройки обновлены!");
|
||||
});
|
@ -1,35 +0,0 @@
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"comments": [
|
||||
{
|
||||
"username": "Пользователь1",
|
||||
"text": "Текст комментария 1",
|
||||
"likes": 13,
|
||||
"rating": 8,
|
||||
"date": "2025-03-01T10:00:00Z"
|
||||
},
|
||||
{
|
||||
"username": "Пользователь2",
|
||||
"text": "Текст комментария 2",
|
||||
"likes": 10,
|
||||
"rating": 7,
|
||||
"date": "2025-01-01T10:00:00Z"
|
||||
},
|
||||
{
|
||||
"username": "Пользователь3",
|
||||
"text": "Текст комментария 3",
|
||||
"likes": 4,
|
||||
"rating": 3,
|
||||
"date": "2025-02-01T10:00:00Z"
|
||||
},
|
||||
{
|
||||
"username": "Пользователь4",
|
||||
"text": "Текст комментария 4",
|
||||
"likes": 18,
|
||||
"rating": 2,
|
||||
"date": "2025-12-01T10:00:00Z"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,188 +0,0 @@
|
||||
{
|
||||
"success": true,
|
||||
"data": [
|
||||
{
|
||||
"id": 1,
|
||||
"title": "Elden Ring",
|
||||
"image": "game17",
|
||||
"price": 3295,
|
||||
"old_price": 3599,
|
||||
"imgPath": "img_top_17",
|
||||
"description": "Крупномасштабная RPG, действие которой происходит в обширном открытом мире c богатой мифологией и множеством опасных врагов.",
|
||||
"category": "RPG"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"title": "The Witcher 3: Wild Hunt",
|
||||
"image": "game1",
|
||||
"price": 990,
|
||||
"old_price": 1200,
|
||||
"imgPath": "img_top_1",
|
||||
"description": "Эпическая RPG с открытым миром, в которой Геральт из Ривии охотится на монстров и раскрывает политические заговоры.",
|
||||
"category": "RPG"
|
||||
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"title": "Red Dead Redemption 2",
|
||||
"image": "game2",
|
||||
"price": 980,
|
||||
"old_price": 3800,
|
||||
"imgPath": "img_top_2",
|
||||
"description": "Приключенческая игра с открытым миром на Диком Западе, рассказывающая историю Артура Моргана.",
|
||||
"category": "Adventures"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"title": "Forza Horizon 5",
|
||||
"image": "game3",
|
||||
"price": 1900,
|
||||
"imgPath": "img_top_3",
|
||||
"description": "Гоночная игра с огромным открытым миром, действие которой происходит в Мексике.",
|
||||
"category": "Race"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"title": "Atomic Heart",
|
||||
"image": "game4",
|
||||
"price": 1200,
|
||||
"old_price": 2500,
|
||||
|
||||
"imgPath": "img_top_4",
|
||||
"description": "Экшен-шутер с элементами RPG, разворачивающийся в альтернативной Советской России.",
|
||||
"category": "Shooters"
|
||||
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"title": "Counter-Strike 2",
|
||||
"image": "game5",
|
||||
"price": 479,
|
||||
|
||||
"imgPath": "img_top_5",
|
||||
"description": "Популярный онлайн-шутер с соревновательным геймплеем и тактическими элементами.",
|
||||
"category": "Shooters"
|
||||
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"title": "Grand Theft Auto V",
|
||||
"image": "game6",
|
||||
"price": 700,
|
||||
|
||||
"imgPath": "img_top_6",
|
||||
"description": "Игра с открытым миром, где можно погрузиться в криминальный мир Лос-Сантоса.",
|
||||
"category": "Adventures"
|
||||
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"title": "Assassin’s Creed IV: Black Flag",
|
||||
"image": "game7",
|
||||
"price": 1100,
|
||||
|
||||
"imgPath": "img_top_7",
|
||||
"description": "Приключенческая игра о пиратах и морских сражениях в эпоху золотого века пиратства.",
|
||||
"category": "Adventures"
|
||||
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"title": "Spider-Man",
|
||||
"image": "game8",
|
||||
"price": 3800,
|
||||
|
||||
"imgPath": "img_top_8",
|
||||
"description": "Игра о супергерое Человеке-пауке с захватывающими битвами и паркуром по Нью-Йорку.",
|
||||
"category": "Action"
|
||||
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"title": "Assassin’s Creed Mirage",
|
||||
"image": "game9",
|
||||
"price": 1600,
|
||||
|
||||
"imgPath": "img_top_9",
|
||||
"description": "Приключенческая игра с упором на скрытность, вдохновленная классическими частями серии.",
|
||||
"category": "Action"
|
||||
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"title": "Assassin’s Creed Valhalla",
|
||||
"image": "game10",
|
||||
"price": 800,
|
||||
"old_price": 2200,
|
||||
|
||||
"imgPath": "img_top_10",
|
||||
"description": "RPG с открытым миром о викингах, включающая битвы, исследования и строительство поселений.",
|
||||
"category": "RPG"
|
||||
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"title": "ARK: Survival Evolved",
|
||||
"image": "game11",
|
||||
"price": 790,
|
||||
|
||||
"imgPath": "img_top_11",
|
||||
"description": "Выживание в открытом мире с динозаврами, строительством и многопользовательскими элементами.",
|
||||
"category": "Simulators"
|
||||
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"title": "FIFA 23",
|
||||
"image": "game12",
|
||||
"price": 3900,
|
||||
|
||||
"imgPath": "img_top_12",
|
||||
"description": "Популярный футбольный симулятор с улучшенной графикой и реалистичным геймплеем.",
|
||||
"category": "Sports"
|
||||
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"title": "Dirt 5",
|
||||
"image": "game13",
|
||||
"price": 2300,
|
||||
|
||||
"imgPath": "img_top_13",
|
||||
"description": "Аркадная гоночная игра с фокусом на ралли и внедорожных соревнованиях.",
|
||||
"category": "Race"
|
||||
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"title": "Cyberpunk 2077",
|
||||
"image": "game14",
|
||||
"price": 3400,
|
||||
|
||||
"imgPath": "img_top_14",
|
||||
"description": "RPG в киберпанк-сеттинге с нелинейным сюжетом и детализированным открытым миром.",
|
||||
"category": "RPG"
|
||||
|
||||
},
|
||||
{
|
||||
"id": 15,
|
||||
"title": "Age of Empires IV",
|
||||
"image": "game15",
|
||||
"price": 3200,
|
||||
|
||||
"imgPath": "img_top_15",
|
||||
"description": "Классическая стратегия в реальном времени с историческими кампаниями.",
|
||||
"category": "Strategies"
|
||||
|
||||
},
|
||||
{
|
||||
"id": 16,
|
||||
"title": "Civilization VI",
|
||||
"image": "game16",
|
||||
"price": 4200,
|
||||
"imgPath": "img_top_16",
|
||||
"description": "Глобальная пошаговая стратегия, в которой игроки строят и развивают цивилизации.",
|
||||
"category": "Strategies"
|
||||
}
|
||||
]
|
||||
}
|
@ -1,16 +0,0 @@
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"ids": [
|
||||
3,
|
||||
13,
|
||||
1,
|
||||
10,
|
||||
4,
|
||||
9,
|
||||
15,
|
||||
6,
|
||||
7
|
||||
]
|
||||
}
|
||||
}
|
@ -1,131 +0,0 @@
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"topSail": [
|
||||
{
|
||||
"id": 1,
|
||||
"image": "game1",
|
||||
"price": 1500,
|
||||
"imgPath": "img_top_1"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"image": "game2",
|
||||
"price": 980,
|
||||
"imgPath": "img_top_2"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"image": "game3",
|
||||
"price": 1900,
|
||||
"imgPath": "img_top_3"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"image": "game4",
|
||||
"price": 1200,
|
||||
"imgPath": "img_top_4"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"image": "game5",
|
||||
"price": 479,
|
||||
"imgPath": "img_top_5"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"image": "game6",
|
||||
"price": 700,
|
||||
"imgPath": "img_top_6"
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"image": "game7",
|
||||
"price": 1100,
|
||||
"imgPath": "img_top_7"
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"image": "game8",
|
||||
"price": 3800,
|
||||
"imgPath": "img_top_8"
|
||||
}
|
||||
],
|
||||
"categories": [
|
||||
{
|
||||
"image": "category1",
|
||||
"text": "гонки",
|
||||
"imgPath": "img_categories_1",
|
||||
"category": "Race"
|
||||
},
|
||||
{
|
||||
"image": "category2",
|
||||
"text": "глубокий сюжет",
|
||||
"imgPath": "img_categories_2",
|
||||
"category": ""
|
||||
},
|
||||
{
|
||||
"image": "category3",
|
||||
"text": "симуляторы",
|
||||
"imgPath": "img_categories_3",
|
||||
"category": "Simulators"
|
||||
},
|
||||
{
|
||||
"image": "category4",
|
||||
"text": "открытый мир",
|
||||
"imgPath": "img_categories_4",
|
||||
"category": "RPG"
|
||||
},
|
||||
{
|
||||
"image": "category5",
|
||||
"text": "экшен",
|
||||
"imgPath": "img_categories_5",
|
||||
"category": "Action"
|
||||
},
|
||||
{
|
||||
"image": "category6",
|
||||
"text": "стратегии",
|
||||
"imgPath": "img_categories_6",
|
||||
"category": "Strategies"
|
||||
},
|
||||
{
|
||||
"image": "category7",
|
||||
"text": "шутеры",
|
||||
"imgPath": "img_categories_7",
|
||||
"category": "Shooters"
|
||||
},
|
||||
{
|
||||
"image": "category8",
|
||||
"text": "приключения",
|
||||
"imgPath": "img_categories_8",
|
||||
"category": "Adventures"
|
||||
}
|
||||
],
|
||||
"news": [
|
||||
{
|
||||
"image": "news1",
|
||||
"text": "Разработчики Delta Force: Hawk Ops представили крупномасштабный режим Havoc Warfare",
|
||||
"imgPath": "img_news_1",
|
||||
"link": "https://gamemag.ru/news/185583/delta-force-hawk-ops-gameplay-showcase-havoc-warfare"
|
||||
},
|
||||
{
|
||||
"image": "news2",
|
||||
"text": "Первый трейлер Assassin’s Creed Shadows — с темнокожим самураем в феодальной Японии",
|
||||
"imgPath": "img_news_2",
|
||||
"link": "https://stopgame.ru/newsdata/62686/pervyy_trailer_assassin_s_creed_shadows_s_temnokozhim_samuraem_v_feodalnoy_yaponii"
|
||||
},
|
||||
{
|
||||
"image": "news3",
|
||||
"text": "Призрак Цусимы» вышел на ПК — и уже ставит рекорды для Sony",
|
||||
"imgPath": "img_news_3",
|
||||
"link": "https://stopgame.ru/newsdata/62706/prizrak_cusimy_vyshel_na_pk_i_uzhe_stavit_rekordy_dlya_sony"
|
||||
},
|
||||
{
|
||||
"image": "news4",
|
||||
"text": "Авторы Skull and Bones расширяют планы на второй сезон",
|
||||
"imgPath": "img_news_4",
|
||||
"link": "https://stopgame.ru/newsdata/62711/avtory_skull_and_bones_rasshiryayut_plany_na_vtoroy_sezon"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,37 +0,0 @@
|
||||
{
|
||||
"success":true,
|
||||
"data":
|
||||
[
|
||||
{
|
||||
"id": 1,
|
||||
"title": "Mortal Kombat 11",
|
||||
"image": "mortal",
|
||||
"alt": "Игра Мортал Комбат 11, картинка",
|
||||
"releaseDate": "23 апр. 2019",
|
||||
"description": "MORTAL KOMBAT 11 ULTIMATE ВКЛЮЧАЕТ В СЕБЯ БАЗОВУЮ ИГРУ МК11, КОМВАТ РАСК 1, ДОПОЛНЕНИЕ «ПОСЛЕДСТВИЯ» И НЕДАВНО ДОБАВЛЕННЫЙ НАБОР «КОМБАТ 2».",
|
||||
"price": 300
|
||||
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"title": "EA SPORTS™ FIFA 23",
|
||||
"image": "fifa",
|
||||
"alt": "Игра Фифа, картинка",
|
||||
"releaseDate": "30 сен. 2022",
|
||||
"description": "В FIFA 23 всемирная игра становится еще лучше с технологией HyperMotion2, мужским и женским FIFA World Cup™, женскими командами, кроссплатформенной игрой и множеством прочих возможностей.",
|
||||
"price": 300
|
||||
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"title": "Ведьмак: Дикая Охота",
|
||||
"image": "ved",
|
||||
"alt": "Игра Ведьмак, картинка",
|
||||
"releaseDate": "18 мая 2015",
|
||||
"description": "Вы — Геральт из Ривии, наемный убийца чудовищ. Вы путешествуете по миру, в котором бушует война и на каждом шагу подстерегают чудовища. Вам предстоит выполнить заказ и найти Цири — Дитя Предназначения, живое оружие, способное изменить облик этого мира.",
|
||||
"price": 300
|
||||
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@ -1,3 +0,0 @@
|
||||
exports.KAZAN_EXPLORE_RESULTS_MODEL_NAME = 'KAZAN_EXPLORE_RESULTS'
|
||||
|
||||
exports.TOKEN_KEY = "kazan-explore_top_secret_key_hbfhqf9jq9prg"
|
@ -1,310 +1,103 @@
|
||||
const router = require('express').Router();
|
||||
const { expressjwt } = require('express-jwt')
|
||||
const axios = require('axios');
|
||||
const jwt = require('jsonwebtoken')
|
||||
const { ResultsModel } = require('./model/results')
|
||||
const { TOKEN_KEY } = require('./const')
|
||||
|
||||
// First page
|
||||
router.get('/getInfoAboutKazan', (request, response) => {
|
||||
const lang = request.query.lang || 'ru';
|
||||
try {
|
||||
const data = require('./json/first/info-about-kazan/success.json');
|
||||
const translatedData = data[lang] || data['ru'];
|
||||
response.send(translatedData);
|
||||
} catch (error) {
|
||||
response.status(500).send({ message: 'Internal server error' });
|
||||
}
|
||||
});
|
||||
|
||||
router.get('/getServices', (request, response) => {
|
||||
const lang = request.query.lang || 'ru';
|
||||
try {
|
||||
const data = require(`./json/first/services/${lang}/success.json`);
|
||||
response.send(data);
|
||||
} catch (error) {
|
||||
response.status(404).send({ message: 'Language not found' });
|
||||
}
|
||||
})
|
||||
|
||||
router.get('/getNews', (request, response) => {
|
||||
const lang = request.query.lang || 'ru';
|
||||
try {
|
||||
const data = require(`./json/first/news/${lang}/success.json`);
|
||||
response.send(data);
|
||||
} catch (error) {
|
||||
response.status(404).send({ message: 'Language not found' });
|
||||
}
|
||||
})
|
||||
|
||||
// Sport page
|
||||
router.get('/getFirstText', (request, response) => {
|
||||
const lang = request.query.lang || 'ru';
|
||||
try {
|
||||
const data = require('./json/sport/first-text/success.json');
|
||||
const translatedData = data[lang] || data['ru'];
|
||||
response.send(translatedData);
|
||||
} catch (error) {
|
||||
response.status(404).send({ message: 'Language not found' });
|
||||
}
|
||||
});
|
||||
|
||||
router.get('/getSecondText', (request, response) => {
|
||||
const lang = request.query.lang || 'ru';
|
||||
try {
|
||||
const data = require('./json/sport/second-text/success.json');
|
||||
const translatedData = data[lang] || data['ru'];
|
||||
response.send(translatedData);
|
||||
} catch (error) {
|
||||
response.status(404).send({ message: 'Language not found' });
|
||||
}
|
||||
});
|
||||
|
||||
router.get('/getSportData', (request, response) => {
|
||||
const lang = request.query.lang || 'ru';
|
||||
try {
|
||||
const data = require(`./json/sport/sport-list/${lang}/success.json`);
|
||||
response.send(data);
|
||||
} catch (error) {
|
||||
response.status(404).send({ message: 'Language not found' });
|
||||
}
|
||||
})
|
||||
|
||||
router.get('/getSportQuiz', (request, response) => {
|
||||
const lang = request.query.lang || 'ru';
|
||||
try {
|
||||
const data = require(`./json/sport/quiz/${lang}/success.json`);
|
||||
response.send(data);
|
||||
} catch (error) {
|
||||
response.status(404).send({ message: 'Language not found' });
|
||||
}
|
||||
})
|
||||
|
||||
// Places page
|
||||
router.get('/getPlacesData', (request, response) => {
|
||||
const lang = request.query.lang || 'ru';
|
||||
try {
|
||||
const data = require(`./json/places/${lang}/success.json`);
|
||||
response.send(data);
|
||||
} catch (error) {
|
||||
response.status(404).send({ message: 'Language not found' });
|
||||
}
|
||||
})
|
||||
|
||||
// Transport page
|
||||
router.get('/getInfoAboutTransportPage', (request, response) => {
|
||||
const lang = request.query.lang || 'ru';
|
||||
try {
|
||||
const data = require('./json/transport/info-about-page/success.json');
|
||||
const translatedData = data[lang] || data['ru'];
|
||||
response.send(translatedData);
|
||||
} catch (error) {
|
||||
response.status(404).send({ message: 'Language not found' });
|
||||
}
|
||||
})
|
||||
|
||||
router.get('/getBus', (request, response) => {
|
||||
response.send(require('./json/transport/bus-numbers/success.json'))
|
||||
})
|
||||
|
||||
router.get('/getTral', (request, response) => {
|
||||
response.send(require('./json/transport/tral-numbers/success.json'))
|
||||
})
|
||||
|
||||
router.get('/getEvents', (request, response) => {
|
||||
response.send(require('./json/transport/events-calendar/success.json'))
|
||||
})
|
||||
|
||||
router.get('/getTripSchedule', (request, response) => {
|
||||
const lang = request.query.lang || 'ru';
|
||||
try {
|
||||
const data = require(`./json/transport/trip-schedule/${lang}/success.json`);
|
||||
response.send(data);
|
||||
} catch (error) {
|
||||
response.status(404).send({ message: 'Language not found' });
|
||||
}
|
||||
})
|
||||
|
||||
// History page
|
||||
router.get('/getHistoryText', (request, response) => {
|
||||
const lang = request.query.lang || 'ru';
|
||||
try {
|
||||
const data = require(`./json/history/text/${lang}/success.json`);
|
||||
response.send(data);
|
||||
} catch (error) {
|
||||
response.status(404).send({ message: 'Language not found' });
|
||||
}
|
||||
})
|
||||
router.get('/getHistoryList', (request, response) => {
|
||||
const lang = request.query.lang || 'ru';
|
||||
try {
|
||||
const data = require(`./json/history/list/${lang}/success.json`);
|
||||
response.send(data);
|
||||
} catch (error) {
|
||||
response.status(404).send({ message: 'Language not found' });
|
||||
}
|
||||
})
|
||||
|
||||
// Education page
|
||||
router.get('/getInfoAboutEducation', (request, response) => {
|
||||
const lang = request.query.lang || 'ru';
|
||||
try {
|
||||
const data = require('./json/education/text/success.json');
|
||||
const translatedData = data[lang] || data['ru'];
|
||||
response.send(translatedData);
|
||||
} catch (error) {
|
||||
response.status(404).send({ message: 'Language not found' });
|
||||
}
|
||||
})
|
||||
router.get('/getEducationList', (request, response) => {
|
||||
const lang = request.query.lang || 'ru';
|
||||
try {
|
||||
const data = require(`./json/education/cards/${lang}/success.json`);
|
||||
response.send(data);
|
||||
} catch (error) {
|
||||
response.status(404).send({ message: 'Language not found' });
|
||||
}
|
||||
})
|
||||
router.get('/getInfoAboutKFU', (request, response) => {
|
||||
const lang = request.query.lang || 'ru';
|
||||
try {
|
||||
const data = require('./json/education/kfu/success.json');
|
||||
const translatedData = data[lang] || data['ru'];
|
||||
response.send(translatedData);
|
||||
} catch (error) {
|
||||
response.status(404).send({ message: 'Language not found' });
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
// Login
|
||||
router.post('/entrance', (request, response) => {
|
||||
const { email, password } = request.body.entranceData;
|
||||
|
||||
try {
|
||||
const users = require('./json/users-information/success.json');
|
||||
const user = users.data.find(user => user.email === email && user.password === password);
|
||||
|
||||
if (!user) {
|
||||
return response.status(401).send('Неверные учетные данные');
|
||||
}
|
||||
|
||||
const responseObject = {
|
||||
email: user.email,
|
||||
}
|
||||
|
||||
return response.json(responseObject);
|
||||
} catch (error) {
|
||||
console.error('Ошибка чтения файла:', error);
|
||||
response.status(500).send('Внутренняя ошибка сервера');
|
||||
}
|
||||
})
|
||||
|
||||
router.post('/registration', async (request, response) => {
|
||||
const { email, password, confirmPassword } = request.body.registerData;
|
||||
|
||||
try {
|
||||
if (password !== confirmPassword) {
|
||||
return response.status(400).send('Пароли не совпадают!');
|
||||
}
|
||||
const users = require('./json/users-information/success.json');
|
||||
|
||||
const existingUser = users.data.find(user => user.email === email);
|
||||
|
||||
if (existingUser) {
|
||||
return response.status(400).send('Пользователь с такой почтой уже существует!');
|
||||
}
|
||||
|
||||
return response.json({ email: email });
|
||||
} catch (error) {
|
||||
console.error('Ошибка регистрации пользователя:', error);
|
||||
response.status(500).send('Внутренняя ошибка сервера');
|
||||
}
|
||||
});
|
||||
|
||||
router.post('/signin', async (req, res) => {
|
||||
const { user } = req.body
|
||||
|
||||
if (!user || !user.token) {
|
||||
return res.status(404).json({error : "No user found"});
|
||||
}
|
||||
|
||||
const valRes = await axios.get('https://antd-table-v2-backend.onrender.com/api/auth/check',
|
||||
{
|
||||
headers: {
|
||||
'authorization': `Bearer ${user.token}`
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
if (valRes.status !== 200) {
|
||||
return res.status(401).json({error : "User authorization error"});
|
||||
}
|
||||
|
||||
const accessToken = jwt.sign({
|
||||
...JSON.parse(JSON.stringify(user._id)),
|
||||
}, TOKEN_KEY, {
|
||||
expiresIn: '12h'
|
||||
})
|
||||
user.token = accessToken;
|
||||
res.json(user)
|
||||
})
|
||||
|
||||
router.use(
|
||||
expressjwt({
|
||||
secret: TOKEN_KEY,
|
||||
algorithms: ['HS256'],
|
||||
getToken: function fromHeaderOrQuerystring(req) {
|
||||
if (req.headers.authorization && req.headers.authorization.split(" ")[0] === "Bearer")
|
||||
return req.headers.authorization.split(" ")[1];
|
||||
else if (req.query && req.query.token)
|
||||
return req.query.token;
|
||||
|
||||
return null;
|
||||
}
|
||||
})
|
||||
)
|
||||
|
||||
router.get('/getQuizResults/:userId', async (request, response) => {
|
||||
const { userId } = request.params;
|
||||
|
||||
try {
|
||||
const results = await ResultsModel.findOne({ userId: userId }).exec();
|
||||
|
||||
if (!results)
|
||||
return response.status(404).send({ message: 'Quiz results not found' });
|
||||
|
||||
response.send(results.items);
|
||||
} catch (error) {
|
||||
response.status(500).send({ message: 'An error occurred while fetching quiz results' });
|
||||
}
|
||||
});
|
||||
|
||||
router.post('/addQuizResult', async (request, response) => {
|
||||
const { userId, quizId, result } = request.body;
|
||||
|
||||
if (!userId || !quizId || !result)
|
||||
return response.status(400).send({ message: 'Invalid input data' });
|
||||
|
||||
try {
|
||||
let userResults = await ResultsModel.findOne({ userId: userId }).exec();
|
||||
if (!userResults) {
|
||||
userResults = new ResultsModel({ userId, items: [] });
|
||||
}
|
||||
const itemToOverride = userResults.items.find(item => item.quizId === quizId)
|
||||
if (!itemToOverride) {
|
||||
userResults.items.push({ quizId, result });
|
||||
}
|
||||
else {
|
||||
itemToOverride.result = result;
|
||||
}
|
||||
|
||||
await userResults.save();
|
||||
|
||||
response.status(200).send({ message: 'Quiz result added successfully' });
|
||||
} catch (error) {
|
||||
response.status(500).send({ message: 'An error occurred while adding quiz result' });
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
const router = require('express').Router();
|
||||
//const loginMiddleware = require('../middleware/login-middleware');
|
||||
|
||||
// First page
|
||||
router.get('/getInfoAboutKazan', (request, response) => {
|
||||
response.send(require('./json/first/info-about-kazan/success.json'))
|
||||
})
|
||||
|
||||
router.get('/getNews', (request, response) => {
|
||||
response.send(require('./json/first/news/success.json'))
|
||||
})
|
||||
|
||||
// Sport page
|
||||
router.get('/getSportData', (request, response) => {
|
||||
response.send(require('./json/sport/sport-data.json'))
|
||||
})
|
||||
|
||||
// Places page
|
||||
router.get('/getPlacesData', (request, response) => {
|
||||
response.send(require('./json/places/places-data.json'))
|
||||
})
|
||||
|
||||
// Transport page
|
||||
router.get('/getInfoAboutTransportPage', (request, response) => {
|
||||
response.send(require('./json/transport/info-about-page.json'))
|
||||
})
|
||||
|
||||
router.get('/getBus', (request, response) => {
|
||||
response.send(require('./json/transport/bus-numbers.json'))
|
||||
})
|
||||
|
||||
router.get('/getTral', (request, response) => {
|
||||
response.send(require('./json/transport/tral-numbers.json'))
|
||||
})
|
||||
|
||||
router.get('/getEvents', (request, response) => {
|
||||
response.send(require('./json/transport/events-calendar.json'))
|
||||
})
|
||||
|
||||
router.get('/getTripSchedule', (request, response) => {
|
||||
response.send(require('./json/transport/trip-schedule/success.json'))
|
||||
})
|
||||
|
||||
router.get('/getInfoAboutInstitutions', (request, response) => {
|
||||
response.send(require('./json/transport/info-about-institutions.json'))
|
||||
})
|
||||
|
||||
// Education page
|
||||
router.get('/getInfoAboutKFU', (request, response) => {
|
||||
response.send(require('./json/education/info-about-kfu.json'))
|
||||
})
|
||||
|
||||
// Login
|
||||
router.post('/entrance', (request, response) => {
|
||||
const { email, password } = request.body.entranceData;
|
||||
|
||||
try {
|
||||
const users = require('../json/users-information/success.json');
|
||||
const user = users.data.find(user => user.email === email && user.password === password);
|
||||
|
||||
if (!user) {
|
||||
return response.status(401).send('Неверные учетные данные');
|
||||
}
|
||||
|
||||
const responseObject = {
|
||||
email: user.email,
|
||||
}
|
||||
|
||||
if (user.cardId){
|
||||
responseObject.cardId = user.cardId || "";
|
||||
}
|
||||
return response.json(responseObject);
|
||||
} catch (error) {
|
||||
console.error('Ошибка чтения файла:', error);
|
||||
response.status(500).send('Внутренняя ошибка сервера');
|
||||
}
|
||||
})
|
||||
|
||||
router.post('/registration', async (request, response) => {
|
||||
const { email, password, confirmPassword } = request.body.registerData;
|
||||
|
||||
try {
|
||||
if (password !== confirmPassword) {
|
||||
return response.status(400).send('Пароли не совпадают!');
|
||||
}
|
||||
const users = require('../json/users-information/success.json');
|
||||
|
||||
const existingUser = users.data.find(user => user.email === email);
|
||||
|
||||
if (existingUser) {
|
||||
return response.status(400).send('Пользователь с такой почтой уже существует!');
|
||||
}
|
||||
|
||||
return response.json({ email: email});
|
||||
} catch (error) {
|
||||
console.error('Ошибка регистрации пользователя:', error);
|
||||
response.status(500).send('Внутренняя ошибка сервера');
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
module.exports = router;
|
||||
|
@ -1,26 +0,0 @@
|
||||
[
|
||||
{
|
||||
"id": "1",
|
||||
"image": "img1",
|
||||
"title": "Preschool and School Education",
|
||||
"text": "Kazan has more than 300 preschool institutions that provide comprehensive development for children from an early age. School education in the city is of a high standard, as evidenced by the results of graduation exams and competitions. Many programs are implemented in Kazan to support talented students, including specialized schools and advanced subject studies."
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"image": "img2",
|
||||
"title": "Secondary and Higher Education",
|
||||
"text": "Kazan is home to prestigious secondary specialized educational institutions that train mid-level specialists for various industries. The city is a major educational hub with over 20 higher educational institutions, including some of Russia's leading universities. Kazan's universities offer a wide range of educational programs that meet modern labor market demands."
|
||||
},
|
||||
{
|
||||
"id": "3",
|
||||
"image": "img3",
|
||||
"title": "Science",
|
||||
"text": "Kazan is one of Russia's leading scientific centers, hosting numerous research institutes and academic institutions. The city organizes major scientific conferences and forums that attract scientists from around the world. Kazan researchers have achieved significant success in various fields, including chemistry, physics, medicine, and information technology."
|
||||
},
|
||||
{
|
||||
"id": "4",
|
||||
"image": "img4",
|
||||
"title": "Innovations",
|
||||
"text": "Kazan is a leader in innovations in Russia. The city is home to major tech companies and startups that develop and implement innovative solutions. Currently, Tatarstan hosts the largest industrial and manufacturing special economic zone in Russia, 'Alabuga,' 4 industrial parks, the 'Himgrad' technopolis, 14 technology parks, and an IT park."
|
||||
}
|
||||
]
|
@ -1,27 +0,0 @@
|
||||
[
|
||||
|
||||
{
|
||||
"id": "1",
|
||||
"image": "img1",
|
||||
"title": "Дошкольное и школьное образование",
|
||||
"text": "В Казани насчитывается более 300 дошкольных учреждений, обеспечивающих всестороннее развитие детей с раннего возраста. Школьное образование в городе отличается высоким уровнем, о чем свидетельствуют результаты выпускных экзаменов и олимпиад. В Казани реализуется множество программ по поддержке талантливых школьников, включая специализированные школы и углубленное изучение предметов."
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"image": "img2",
|
||||
"title": "Среднее и высшее образование",
|
||||
"text": "В Казани расположены престижные средние специальные учебные заведения, готовящие специалистов среднего звена для различных отраслей. Город является крупным образовательным центром с более чем 20 высшими учебными заведениями, в том числе ведущими университетами России. Казанские вузы предлагают широкий спектр образовательных программ, отвечающих современным требованиям рынка труда."
|
||||
},
|
||||
{
|
||||
"id": "3",
|
||||
"image": "img3",
|
||||
"title": "Наука",
|
||||
"text": "Казань является одним из ведущих научных центров России, где сосредоточены многочисленные научно-исследовательские институты и академические учреждения. В городе проводятся крупные научные конференции и форумы, привлекающие ученых со всего мира. Казанские ученые добились значительных успехов в различных областях, включая химию, физику, медицину и информационные технологии."
|
||||
},
|
||||
{
|
||||
"id": "4",
|
||||
"image": "img4",
|
||||
"title": "Инновации",
|
||||
"text": "Казань является одним из лидеров в сфере инноваций в России. В городе работают крупные технологические компании и стартапы, разрабатывающие и внедряющие инновационные решения. В настоящее время в Татарстане действуют: крупнейшая в России особая экономическая зона промышленно-производственного типа «Алабуга», 4 индустриальных парка, технополис «Химград», 14 технопарков, IT-парк."
|
||||
}
|
||||
]
|
@ -1,26 +0,0 @@
|
||||
[
|
||||
{
|
||||
"id": "1",
|
||||
"image": "img1",
|
||||
"title": "Мәктәпкәчә һәм мәктәп белем бирү",
|
||||
"text": "Казанда 300дән артык мәктәпкәчә белем бирү учреждениесе бар, алар балаларны кечкенәдән үстерү өчен шартлар тудыра. Мәктәп белем бирүе югары дәрәҗәдә булуы белән аерылып тора, бу чыгарылыш имтиханнары һәм олимпиадалар нәтиҗәләреннән күренә. Казанда талантлы укучыларга ярдәм итү буенча махсус программалар гамәлгә ашырыла, шул исәптән профильле мәктәпләр һәм фәннәрне тирәнтен өйрәнү мөмкинлекләре."
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"image": "img2",
|
||||
"title": "Урта һәм югары белем бирү",
|
||||
"text": "Казанда төрле тармаклар өчен урта звено белгечләрен әзерләүче абруйлы урта махсус уку йортлары урнашкан. Шәһәр 20дән артык югары уку йорты булган зур белем бирү үзәге булып тора, шул исәптән Россиянең алдынгы университетлары. Казан университетлары хезмәт базары таләпләренә туры килгән киң белем бирү программалары тәкъдим итә."
|
||||
},
|
||||
{
|
||||
"id": "3",
|
||||
"image": "img3",
|
||||
"title": "Фән",
|
||||
"text": "Казан – Россиянең әйдәп баручы фәнни үзәкләренең берсе, монда күпсанлы фәнни-тикшеренү институтлары һәм академик учреждениеләр тупланган. Шәһәрдә бөтен дөньядан галимнәрне җәлеп итүче зур фәнни конференцияләр һәм форумнар үткәрелә. Казан галимнәре химия, физика, медицина һәм мәгълүмати технологияләр кебек төрле өлкәләрдә зур уңышларга иреште."
|
||||
},
|
||||
{
|
||||
"id": "4",
|
||||
"image": "img4",
|
||||
"title": "Инновацияләр",
|
||||
"text": "Казан – Россиядә инновацияләр өлкәсе лидеры. Шәһәрдә зур технологик компанияләр һәм стартаплар эшләп килә, алар инновацион карарлар эшли һәм гамәлгә кертә. Татарстанда Россиянең иң зур сәнәгать-җитештерү махсус икътисади зонасы «Алабуга», 4 индустриаль парк, «Химград» технополисы, 14 технопарк һәм IT-парк эшли."
|
||||
}
|
||||
]
|
@ -0,0 +1,4 @@
|
||||
[
|
||||
"Казанский (Приволжский) федеральный университет (полное наименование — федеральное государственное автономное образовательное учреждение высшего образования «Казанский (Приволжский) федеральный университет», тат. Казан (Идел буе) федераль университеты) — высшее учебное заведение в Казани, один из старейших российских университетов (основан в 1804 году) и один из десяти федеральных университетов (с 2010 года).",
|
||||
"В состав университетского учебно-научного комплекса входят научная библиотека, научно-исследовательские институты химии, математики и механики, 7 музеев, ботанический сад, астрономические обсерватории, центр информационных технологий, издательство, центр и лаборатория оперативной полиграфии, культурно-спортивный комплекс, спортивно-оздоровительный лагерь и другие подразделения."
|
||||
]
|
@ -1,23 +0,0 @@
|
||||
{
|
||||
"ru": {
|
||||
"title": "Kазанский федеральный университет",
|
||||
"description": [
|
||||
"Казанский (Приволжский) федеральный университет (полное наименование — федеральное государственное автономное образовательное учреждение высшего образования «Казанский (Приволжский) федеральный университет», тат. Казан (Идел буе) федераль университеты) — высшее учебное заведение в Казани, один из старейших российских университетов (основан в 1804 году) и один из десяти федеральных университетов (с 2010 года).",
|
||||
"В состав университетского учебно-научного комплекса входят научная библиотека, научно-исследовательские институты химии, математики и механики, 7 музеев, ботанический сад, астрономические обсерватории, центр информационных технологий, издательство, центр и лаборатория оперативной полиграфии, культурно-спортивный комплекс, спортивно-оздоровительный лагерь и другие подразделения."
|
||||
]
|
||||
},
|
||||
"en": {
|
||||
"title": "Kazan Federal University",
|
||||
"description": [
|
||||
"Kazan (Volga Region) Federal University (full name - Federal State Autonomous Educational Institution of Higher Education 'Kazan (Volga Region) Federal University') is a higher educational institution in Kazan, one of the oldest Russian universities (founded in 1804) and one of the ten federal universities (since 2010).",
|
||||
"The university's educational and research complex includes a scientific library, research institutes of chemistry, mathematics, and mechanics, 7 museums, a botanical garden, astronomical observatories, an information technology center, a publishing house, a center and laboratory for operational printing, a cultural and sports complex, a sports and recreation camp, and other divisions."
|
||||
]
|
||||
},
|
||||
"tt": {
|
||||
"title": "Казан Федераль Университеты",
|
||||
"description": [
|
||||
"Казан (Идел буе) федераль университеты (тулы исеме — Казан (Идел буе) федераль университеты) Казан шәһәрендә урнашкан. Ул 1804 елда нигезләнгән, Россиянең иң борынгы университетларының берсе һәм 2010 елдан бирле ун федераль университетларның берсе булып тора.",
|
||||
"Университетның уку-укыту һәм фәнни комплексына фәнни китапханә, химия, математика һәм механика буенча фәнни-тикшеренү институтлары, 7 музей, ботаник бакча, астрономия обсерваторияләре, мәгълүмат технологияләре үзәге, нәшрият, оператив полиграфия үзәге һәм лабораториясе, мәдәни-спорт комплексы, спорт-сәламәтләндерү лагере һәм башка бүлекләр керә."
|
||||
]
|
||||
}
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
{
|
||||
"ru": {
|
||||
"text": "Казань – один из крупнейших университетских городов России – исторически сформировался как центр знаний и науки. Ежегодно в нашем городе выпускается более 4 тыс. специалистов технического профиля и, что особенно важно, многие из них – талантливые разработчики и носители новых идей."
|
||||
},
|
||||
"en": {
|
||||
"text": "Kazan, one of the largest university cities in Russia, has historically emerged as a center of knowledge and science. Every year, our city graduates more than 4 thousand technical specialists and, what is especially important, many of them are talented developers and bearers of new ideas."
|
||||
},
|
||||
"tt": {
|
||||
"text": "Рәсәйнең иң зур университет шәһәрләренең берсе булган Казан тарихта белем һәм фән үзәге булып барлыкка килде. Ел саен безнең шәһәр 4 меңнән артык техник белгечне тәмамлый, һәм иң мөһиме, аларның күбесе сәләтле уйлап табучылар һәм яңа идеялар алып баручылар."
|
||||
}
|
||||
}
|
@ -1,11 +1,3 @@
|
||||
{
|
||||
"ru": {
|
||||
"description": "Казань — древний город с богатой историей, где слились воедино культуры Востока и Запада. Подобно драгоценному камню, сияющему в ожерелье городов России, Казань покоряет своей красотой и многообразием. Её красивая архитектура и гостеприимные жители создают уютную атмосферу, привлекающую туристов со всего мира."
|
||||
},
|
||||
"en": {
|
||||
"description": "Kazan is an ancient city with a rich history, where the cultures of East and West merged together. Like a precious stone shining in the necklace of Russian cities, Kazan captivates with its beauty and diversity. Its beautiful architecture and hospitable residents create a cozy atmosphere that attracts tourists from all over the world."
|
||||
},
|
||||
"tt": {
|
||||
"description": "Казан - борыңгы шәһәр, анда Көнчыгыш һәм Көнбатыш культуралары берләшкән, Рәсәй шәһәрләренең муенсасында балкып торган кыйммәтле таш кебек, Казан үзенең матур архитектурасы һәм кунакчыллыгы белән уңайлы бөтен дөньядан туристларны җәлеп итә торган атмосфера."
|
||||
}
|
||||
}
|
||||
[
|
||||
"Казань — древний город с богатой историей, где слились воедино культуры Востока и Запада. Подобно драгоценному камню, сияющему в ожерелье городов России, Казань покоряет своей красотой и многообразием. Её красивая архитектура и гостеприимные жители создают уютную атмосферу, привлекающую туристов со всего мира."
|
||||
]
|
@ -1,32 +0,0 @@
|
||||
[
|
||||
{
|
||||
"id": "1",
|
||||
"image": "new1",
|
||||
"title": "Evacuation announced at enterprises in Kazan",
|
||||
"text": "In Kazan, evacuation has been announced at several enterprises. This was reported by the press service of the head of Tatarstan. 'In some areas of Kazan, the need for evacuation at enterprises has been announced,' the press service of the head of Tatarstan said. The information was provided by TASS. The Telegram channel Shot reports the evacuation of employees of the chemical company Kazanorgsintez."
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"image": "new2",
|
||||
"title": "Interaction of children with gadgets discussed in Kazan",
|
||||
"text": "A conference dedicated to the challenges of parenting in the era of technological progress was held in Kazan. Participants, including psychologists, educators, and parents, discussed methods to combat gadget addiction and ways to use technology for youth development. 'There is nothing wrong with a child using a phone. The main thing is to guide them properly,' shared Alfia Valeeva, a teacher with 16 years of experience."
|
||||
},
|
||||
{
|
||||
"id": "3",
|
||||
"image": "new3",
|
||||
"title": "Kazan UNICS lost to CSKA, series score 0-3",
|
||||
"text": "In the third match of the VTB United League finals, CSKA proved stronger than UNICS on their home court with a score of 80:72. The series score became 3-0 in favor of CSKA. If CSKA wins one more time, they will become champions. Unlike the previous game, the Kazan team started confidently. They won the first quarter 17:13 and led 21:13 at the start of the second. However, CSKA quickly leveled the score and then took the lead."
|
||||
},
|
||||
{
|
||||
"id": "4",
|
||||
"image": "new4",
|
||||
"title": "Forecasters warn of thunderstorm and strong winds in Kazan",
|
||||
"text": "This evening, thunderstorms and strong southwest winds with gusts of 15–20 m/s, and in some areas up to 23 m/s, are expected in Tatarstan, including Kazan. This warning was issued by the RT Hydrometeorological Center."
|
||||
},
|
||||
{
|
||||
"id": "5",
|
||||
"image": "new5",
|
||||
"title": "Additional trains to run between the capital of Tatarstan and the airport",
|
||||
"text": "Additional commuter trains will run on the Kazan – Airport – Kazan route for two days. This is due to concerts being held at the Kazan Expo Exhibition Center. The additional trains will operate without intermediate stops, according to the press service of JSC 'Sodruzhestvo'."
|
||||
}
|
||||
]
|
@ -1,32 +0,0 @@
|
||||
[
|
||||
{
|
||||
"id": "1",
|
||||
"image": "new1",
|
||||
"title": "На предприятиях в Казани объявили эвакуацию",
|
||||
"text": "В Казани на некоторых предприятиях объявлена необходимость эвакуации. Об этом сообщили в пресс-службе главы Татарстана. «В отдельных районах Казани на предприятиях объявлена необходимость эвакуации», — сообщили в пресс-службе главы Татарстана. Информацию передает ТАСС. Telegram-канал Shot пишет об эвакуации сотрудников химической компании «Казаньоргсинтез»."
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"image": "new2",
|
||||
"title": "В Казани обсудили взаимодействие детей с гаджетами",
|
||||
"text": "В Казани состоялась конференция, посвящённая проблемам воспитания в эпоху технического прогресса. Участники встречи, среди которых психологи, педагоги и родители, обсудили методы противодействия гаджетозависимости и возможности использования технологий для развития молодёжи. «Ничего плохого нет в том, что ребёнок сидит в телефоне. Главное — правильно его направить», - поделилась своим опытом Альфия Валеева, педагог с 16-летним стажем."
|
||||
},
|
||||
{
|
||||
"id": "3",
|
||||
"image": "new3",
|
||||
"title": "Казанский УНИКС проиграл ЦСКА, счёт в серии 0-3",
|
||||
"text": "В третьем матче финала Единой лиги ВТБ ЦСКА на своей площадке оказался сильнее УНИКСа — 80:72. Счет в серии стал 3−0 в пользу ЦСКА. Если армейцы выиграют еще раз, то станут чемпионами. В отличие от предыдущей игры казанцы уверенно начали. Первую четверть они выиграли 17:13, а на старте второй вели 21:13. Однако ЦСКА быстро сравнял счет, а затем вышел вперед. "
|
||||
},
|
||||
{
|
||||
"id": "4",
|
||||
"image": "new4",
|
||||
"title": "Синоптики предупредили о грозе и сильном ветре в Казани",
|
||||
"text": "Сегодня вечером в Татарстане, включая Казань, ожидаются гроза и сильный юго-западный ветер порывами 15–20 м/с, местами – до 23 м/с. Об этом предупреждает Гидрометцентр РТ."
|
||||
},
|
||||
{
|
||||
"id": "5",
|
||||
"image": "new5",
|
||||
"title": "Между столицей РТ и аэропортом запустят дополнительные рейсы",
|
||||
"text": "На маршруте Казань – Аэропорт – Казань два дня будут курсировать дополнительные пригородные поезда. Это связано с проведением концертов в МВЦ «Казань Экспо». Дополнительные поезда проследуют без промежуточных остановок, сообщили в пресс-службе АО «Содружество»."
|
||||
}
|
||||
]
|
32
server/routers/kazan-explore/json/first/news/success.json
Normal file
32
server/routers/kazan-explore/json/first/news/success.json
Normal file
@ -0,0 +1,32 @@
|
||||
[
|
||||
{
|
||||
"id": "1",
|
||||
"image": "new1",
|
||||
"title": "На предприятиях в Казани объявили эвакуацию",
|
||||
"text": "В Казани на некоторых предприятиях объявлена необходимость эвакуации. Об этом сообщили в пресс-службе главы Татарстана. «В отдельных районах Казани на предприятиях объявлена необходимость эвакуации», — сообщили в пресс-службе главы Татарстана. Информацию передает ТАСС. Telegram-канал Shot пишет об эвакуации сотрудников химической компании «Казаньоргсинтез»."
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"image": "new2",
|
||||
"title": "В Казани обсудили взаимодействие детей с гаджетами",
|
||||
"text": "В Казани состоялась конференция, посвящённая проблемам воспитания в эпоху технического прогресса. Участники встречи, среди которых психологи, педагоги и родители, обсудили методы противодействия гаджетозависимости и возможности использования технологий для развития молодёжи. «Ничего плохого нет в том, что ребёнок сидит в телефоне. Главное — правильно его направить», - поделилась своим опытом Альфия Валеева, педагог с 16-летним стажем."
|
||||
},
|
||||
{
|
||||
"id": "3",
|
||||
"image": "new3",
|
||||
"title": "Казанский УНИКС проиграл ЦСКА, счёт в серии 0-3",
|
||||
"text": "В третьем матче финала Единой лиги ВТБ ЦСКА на своей площадке оказался сильнее УНИКСа — 80:72. Счет в серии стал 3−0 в пользу ЦСКА. Если армейцы выиграют еще раз, то станут чемпионами. В отличие от предыдущей игры казанцы уверенно начали. Первую четверть они выиграли 17:13, а на старте второй вели 21:13. Однако ЦСКА быстро сравнял счет, а затем вышел вперед. "
|
||||
},
|
||||
{
|
||||
"id": "4",
|
||||
"image": "new4",
|
||||
"title": "Синоптики предупредили о грозе и сильном ветре в Казани",
|
||||
"text": "Сегодня вечером в Татарстане, включая Казань, ожидаются гроза и сильный юго-западный ветер порывами 15–20 м/с, местами – до 23 м/с. Об этом предупреждает Гидрометцентр РТ."
|
||||
},
|
||||
{
|
||||
"id": "5",
|
||||
"image": "new5",
|
||||
"title": "Между столицей РТ и аэропортом запустят дополнительные рейсы",
|
||||
"text": "На маршруте Казань – Аэропорт – Казань два дня будут курсировать дополнительные пригородные поезда. Это связано с проведением концертов в МВЦ «Казань Экспо». Дополнительные поезда проследуют без промежуточных остановок, сообщили в пресс-службе АО «Содружество»."
|
||||
}
|
||||
]
|
@ -1,32 +0,0 @@
|
||||
[
|
||||
{
|
||||
"id": "1",
|
||||
"image": "new1",
|
||||
"title": "Казанда предприятиеләрдә эвакуация игълан ителгән",
|
||||
"text": "Казанда кайбер предприятиеләрдә эвакуация таләп ителгән. Бу хакта Татарстан җитәкчесенең матбугат хезмәте хәбәр итте. 'Казанның аерым районнарында предприятиеләрдә эвакуация таләп ителә', — дип белдерде Татарстан җитәкчесенең матбугат хезмәте. Мәгълүматны ТАСС җиткерә. Shot Telegram-каналы 'Казаноргсинтез' химия компаниясе хезмәткәрләренең эвакуациясе турында хәбәр итә."
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"image": "new2",
|
||||
"title": "Казанда балаларның гаджетлар белән эшләвен тикшерделәр",
|
||||
"text": "Казанда техник прогресс чорында тәрбия проблемаларына багышланган конференция узды. Психологлар, педагоглар һәм ата-аналар катнашында үткән чарада гаджетларга бәйлелеккә каршы чаралар һәм яшьләрне үстерү өчен технологияләрне куллану мөмкинлекләре турында фикер алыштылар. 'Баланың телефонда утыруында бернинди начар нәрсә юк. Иң мөһиме — аны дөрес юнәлешкә юнәлтү', — дип үз тәҗрибәсе белән уртаклашты 16 ел стажлы педагог Альфия Вәлиева."
|
||||
},
|
||||
{
|
||||
"id": "3",
|
||||
"image": "new3",
|
||||
"title": "Казан УНИКСы ЦСКАга җиңелде, сериядә исәп 0-3",
|
||||
"text": "VTB Берләшкән лигасының финалындагы өченче матчта ЦСКА үз мәйданында УНИКСтан өстен чыкты — 80:72. Сериядә исәп 3−0 ЦСКА файдасына. Әгәр армиячеләр тагын бер җиңүгә ирешсәләр, чемпион булалар. Алдагы уен белән чагыштырганда, казанлылар ышанычлырак башладылар. Беренче кварталны алар 17:13 исәбе белән отты, ә икенче квартал башында 21:13 белән алда бардылар. Әмма ЦСКА тиз арада исәпне тигезләде һәм аннары алга чыкты."
|
||||
},
|
||||
{
|
||||
"id": "4",
|
||||
"image": "new4",
|
||||
"title": "Синоптиклар Казанда яшен һәм көчле җил турында кисәтә",
|
||||
"text": "Бүген кич Татарстанда, шул исәптән Казанда, яшен һәм 15–20 м/с, кайбер урыннарда 23 м/с тизлектә көньяк-көнбатыш җил көтелә. Бу хакта ТР Гидрометеоүзәге кисәтә."
|
||||
},
|
||||
{
|
||||
"id": "5",
|
||||
"image": "new5",
|
||||
"title": "Татарстан башкаласы белән аэропорт арасында өстәмә рейслар оештырыла",
|
||||
"text": "Казан – Аэропорт – Казан маршруты буенча ике көн дәвамында өстәмә шәһәр яны поездлары йөриячәк. Бу Казан Экспо күргәзмә үзәгендә концертлар үткәрү белән бәйле. Өстәмә поездлар тукталышларсыз йөриячәк, дип хәбәр итә 'Содружество' АҖнең матбугат хезмәте."
|
||||
}
|
||||
]
|
@ -1,102 +0,0 @@
|
||||
{
|
||||
"banks": [
|
||||
{
|
||||
"name": "Sberbank of Russia",
|
||||
"description": "One of the largest and most popular banks in Russia. There are many branches and ATMs in Kazan. Sberbank offers a wide range of services, including loans, deposits, insurance, business services, and online banking."
|
||||
},
|
||||
{
|
||||
"name": "VTB",
|
||||
"description": "The second largest bank in Russia, with many offices and ATMs in Kazan. VTB offers various financial products for individuals and businesses, including loans, deposits, investment solutions, and cards."
|
||||
},
|
||||
{
|
||||
"name": "Tinkoff Bank",
|
||||
"description": "Although Tinkoff does not have traditional offices in Kazan, its products and services are available in the city through online banking and remote services. Tinkoff offers favorable terms for credit cards, deposits, and services for small and medium-sized businesses."
|
||||
},
|
||||
{
|
||||
"name": "Alfa-Bank",
|
||||
"description": "One of the largest private banks in Russia, with offices in Kazan. Alfa-Bank offers standard banking services such as loans, deposits, cards, as well as investment and insurance products."
|
||||
},
|
||||
{
|
||||
"name": "Rosselkhozbank",
|
||||
"description": "Rosselkhozbank is also present in Kazan, specializing in servicing the agro-industrial complex, but also provides services for individuals and businesses, including loans, deposits, and cards."
|
||||
},
|
||||
{
|
||||
"name": "RBC Bank",
|
||||
"description": "A Russian bank with several offices and ATMs in Kazan. It offers loans, cards, deposits, and business services."
|
||||
},
|
||||
{
|
||||
"name": "Bank Saint Petersburg",
|
||||
"description": "A local bank that also provides services in Kazan. It offers a wide range of banking products for individuals and businesses."
|
||||
}
|
||||
],
|
||||
"hospitals": [
|
||||
{
|
||||
"name": "Kazan City Clinical Hospital No. 1",
|
||||
"description": "One of the largest multidisciplinary hospitals in Kazan, offering services in surgery, traumatology, neurology, cardiology, and other medical fields. Modern technologies and highly qualified staff."
|
||||
},
|
||||
{
|
||||
"name": "Republican Clinical Hospital",
|
||||
"description": "The main medical organization of the Republic of Tatarstan, providing a wide range of services for adults and children, including emergency care, high-tech surgeries, and diagnostics."
|
||||
},
|
||||
{
|
||||
"name": "City Hospital No. 7",
|
||||
"description": "A hospital specializing in providing medical care in therapeutic, surgical, and resuscitation medicine. The hospital employs experienced specialists and uses modern treatment methods."
|
||||
},
|
||||
{
|
||||
"name": "Kazan Children's Clinical Hospital",
|
||||
"description": "A specialized medical facility for children, providing services for the treatment of diseases related to pediatrics, surgery, cardiology, and other fields for children of all ages."
|
||||
},
|
||||
{
|
||||
"name": "Kazan Oncology Dispensary",
|
||||
"description": "A medical institution specializing in the treatment of oncological diseases. It uses the latest methods of cancer diagnosis and treatment, including chemotherapy, radiotherapy, and surgical interventions."
|
||||
},
|
||||
{
|
||||
"name": "City Hospital No. 18",
|
||||
"description": "A multidisciplinary medical institution offering treatment in various medical fields, including traumatology, neurology, and cardiology. The hospital has a rehabilitation department for patients recovering from serious diseases."
|
||||
},
|
||||
{
|
||||
"name": "Republican Hospital for War Veterans",
|
||||
"description": "A medical institution providing specialized care for World War II veterans, disabled individuals, and elderly people. It also offers a wide range of services for citizens with chronic diseases."
|
||||
}
|
||||
],
|
||||
"pharmacies": [
|
||||
{
|
||||
"name": "Apteka 36.6",
|
||||
"description": "A pharmacy chain with a wide range of medications, vitamins, cosmetics, and health products. Loyalty programs and online orders for customer convenience."
|
||||
},
|
||||
{
|
||||
"name": "Rigla",
|
||||
"description": "One of the largest pharmacy chains in Russia. It offers a wide range of medicines, medical products, and cosmetics. It also provides the option to order online."
|
||||
},
|
||||
{
|
||||
"name": "Zdorovaya Semya",
|
||||
"description": "A pharmacy chain focused on the sale of medicines and health products, including medical equipment. Often runs promotions and discounts on popular items."
|
||||
},
|
||||
{
|
||||
"name": "A5 Pharmacy Chain",
|
||||
"description": "Pharmacies offering a wide range of products, including medicines, vitamins, cosmetics, and children's products. Convenient delivery and online order services."
|
||||
},
|
||||
{
|
||||
"name": "Samson-Pharma Pharmacy",
|
||||
"description": "A pharmacy chain offering customers all necessary medicines and health products. Pharmacies offer various discount and bonus programs for regular customers."
|
||||
},
|
||||
{
|
||||
"name": "Tsvetnoy Pharmacy Chain",
|
||||
"description": "Pharmacies known for their convenient locations and high-quality service. They sell medicines, vitamins, self-care products, and medical equipment."
|
||||
},
|
||||
{
|
||||
"name": "Doctor Stoletev Pharmacy",
|
||||
"description": "A pharmacy chain focused on selling pharmaceutical products, medical goods, and cosmetics. Convenient service and promotions for customers."
|
||||
}
|
||||
],
|
||||
"airports": [
|
||||
{
|
||||
"name": "Kazan International Airport",
|
||||
"description": "The main airport of the city of Kazan, serving international and domestic flights. The airport is equipped with modern terminals, comfortable waiting areas, shops, and restaurants. It is one of the largest in the Volga region and an important transport hub for Tatarstan."
|
||||
},
|
||||
{
|
||||
"name": "Kazan-2 (when it was operational)",
|
||||
"description": "Previously used for domestic flights and military needs. It is no longer fully operational as all passenger flights have been redirected to Kazan International Airport. The airport building is closed for commercial air traffic."
|
||||
}
|
||||
]
|
||||
}
|
@ -1,102 +0,0 @@
|
||||
{
|
||||
"banks": [
|
||||
{
|
||||
"name": "Сбербанк России",
|
||||
"description": "Один из крупнейших и самых популярных банков в России. В Казани есть множество отделений и банкоматов. Сбербанк предлагает широкий спектр услуг, включая кредиты, депозиты, страхование, обслуживание бизнеса и онлайн-банкинг."
|
||||
},
|
||||
{
|
||||
"name": "ВТБ",
|
||||
"description": "Второй по величине банк в России, с большим количеством офисов и банкоматов в Казани. ВТБ предлагает различные финансовые продукты для физических и юридических лиц, включая кредиты, вклады, инвестиционные решения и карты."
|
||||
},
|
||||
{
|
||||
"name": "Тинькофф Банк",
|
||||
"description": "Несмотря на то что у Тинькофф нет традиционных офисов в Казани, его продукты и услуги доступны в городе через онлайн-банкинг и удаленное обслуживание. Тинькофф предлагает выгодные условия по кредитным картам, вклады, а также услуги для малого и среднего бизнеса."
|
||||
},
|
||||
{
|
||||
"name": "Альфа-Банк",
|
||||
"description": "Один из крупных частных банков в России, с офисами в Казани. Альфа-Банк предлагает стандартные банковские услуги, такие как кредиты, депозиты, карты, а также инвестиционные и страховые продукты."
|
||||
},
|
||||
{
|
||||
"name": "Россельхозбанк",
|
||||
"description": "В Казани также присутствует Россельхозбанк, специализирующийся на обслуживании агропромышленного комплекса, но также предоставляет услуги для физических и юридических лиц, включая кредиты, депозиты и карты."
|
||||
},
|
||||
{
|
||||
"name": "РБК Банк",
|
||||
"description": "Российский банк с рядом офисов и банкоматов в Казани. Предлагает кредиты, карты, депозиты, а также обслуживание для бизнеса."
|
||||
},
|
||||
{
|
||||
"name": "Банк Санкт-Петербург",
|
||||
"description": "Местный банк, который также предоставляет услуги в Казани. Предлагает широкий выбор банковских продуктов для частных лиц и бизнеса."
|
||||
}
|
||||
],
|
||||
"hospitals": [
|
||||
{
|
||||
"name": "Казанская городская клиническая больница №1",
|
||||
"description": "Одна из крупнейших многопрофильных больниц Казани, предлагающая услуги в области хирургии, травматологии, неврологии, кардиологии и других медицинских направлений. Современные технологии и высококвалифицированный персонал."
|
||||
},
|
||||
{
|
||||
"name": "Республиканская клиническая больница",
|
||||
"description": "Основная медицинская организация Республики Татарстан, предоставляющая широкий спектр услуг для взрослых и детей, включая экстренную помощь, высокотехнологичные операции и диагностику."
|
||||
},
|
||||
{
|
||||
"name": "Городская больница №7",
|
||||
"description": "Больница, специализирующаяся на оказании медицинской помощи в области терапевтической, хирургической и реанимационной медицины. В больнице работают опытные специалисты, используемые современные методы лечения."
|
||||
},
|
||||
{
|
||||
"name": "Казанская детская клиническая больница",
|
||||
"description": "Профильное медицинское учреждение для детей, которое предоставляет услуги по лечению заболеваний, связанных с педиатрией, хирургией, кардиологией и другими направлениями для детей всех возрастов."
|
||||
},
|
||||
{
|
||||
"name": "Казанский онкологический диспансер",
|
||||
"description": "Медицинское учреждение, специализирующееся на лечении онкологических заболеваний. Использует новейшие методы диагностики и лечения рака, включая химиотерапию, радиотерапию и операционные вмешательства."
|
||||
},
|
||||
{
|
||||
"name": "Городская больница №18",
|
||||
"description": "Многопрофильное медицинское учреждение, предлагающее лечение в различных областях медицины, включая травматологию, неврологию и кардиологию. В больнице есть отделение для реабилитации пациентов после тяжелых заболеваний."
|
||||
},
|
||||
{
|
||||
"name": "Республиканская больница для ветеранов войн",
|
||||
"description": "Медицинское учреждение, оказывающее специализированную помощь ветеранам Великой Отечественной войны, инвалидам и пожилым людям. Также предлагает широкий спектр услуг для граждан с хроническими заболеваниями."
|
||||
}
|
||||
],
|
||||
"pharmacies": [
|
||||
{
|
||||
"name": "Аптека 36,6",
|
||||
"description": "Сеть аптек с большим ассортиментом лекарственных средств, витаминов, косметики и товаров для здоровья. Программы лояльности и онлайн-заказы для удобства клиентов."
|
||||
},
|
||||
{
|
||||
"name": "Ригла",
|
||||
"description": "Одна из крупнейших аптечных сетей в России. Предлагает широкий выбор лекарств, медицинских товаров и косметики. Также предоставляет возможность заказа через интернет."
|
||||
},
|
||||
{
|
||||
"name": "Здоровая семья",
|
||||
"description": "Аптечная сеть, ориентированная на продажу лекарств и товаров для здоровья, включая медицинскую технику. Часто проводятся акции и скидки на популярные товары."
|
||||
},
|
||||
{
|
||||
"name": "Аптечная сеть 'А5'",
|
||||
"description": "Аптеки, предлагающие широкий ассортимент товаров, включая лекарства, витамины, косметику и товары для детей. Удобные услуги доставки и онлайн-заказов."
|
||||
},
|
||||
{
|
||||
"name": "Аптека 'Самсон-Фарма'",
|
||||
"description": "Сеть аптек, предоставляющая клиентам все необходимые лекарства и товары для здоровья. Аптеки предлагают различные программы скидок и бонусов для постоянных клиентов."
|
||||
},
|
||||
{
|
||||
"name": "Аптечная сеть 'Цветной'",
|
||||
"description": "Аптеки, известные своими удобными местоположениями и качественным обслуживанием. В продаже лекарства, витамины, товары для ухода за собой и медтехника."
|
||||
},
|
||||
{
|
||||
"name": "Аптека 'Доктор Столетов'",
|
||||
"description": "Сеть аптек, ориентированная на продажу фармацевтической продукции, медицинских товаров и косметики. Удобный сервис и акции для клиентов."
|
||||
}
|
||||
],
|
||||
"airports": [
|
||||
{
|
||||
"name": "Международный аэропорт Казань",
|
||||
"description": "Главный аэропорт города Казани, обслуживающий международные и внутренние рейсы. Аэропорт оснащен современными терминалами, удобными зонами ожидания, магазинами и ресторанами. Он является одним из крупнейших в Поволжье и важным транспортным узлом для Татарстана."
|
||||
},
|
||||
{
|
||||
"name": "Казань-2 (когда был действующим)",
|
||||
"description": "Ранее используемый аэропорт для внутренних рейсов и военных нужд. В настоящее время не функционирует в полном объеме, поскольку все пассажирские рейсы перенаправлены в Международный аэропорт Казань. Здание аэропорта закрыто для коммерческих авиаперевозок."
|
||||
}
|
||||
]
|
||||
}
|
@ -1,102 +0,0 @@
|
||||
{
|
||||
"banks": [
|
||||
{
|
||||
"name": "Россия Сбербанкы",
|
||||
"description": "Россиядәге иң зур һәм популяр банкларның берсе. Казан шәһәрендә күпсанлы бүлекләр һәм банкоматлар бар. Сбербанк киң спектрлы хезмәтләр тәкъдим итә, шул исәптән кредитлар, депозиты, иминиятләштерү, бизнеска хезмәт күрсәтү һәм онлайн-банкчылык."
|
||||
},
|
||||
{
|
||||
"name": "ВТБ",
|
||||
"description": "Россиядә икенче зурлыктагы банк, Казан шәһәрендә күп санлы офислар һәм банкоматлар белән. ВТБ физик һәм юридик затлар өчен төрле финанс продуктларын тәкъдим итә, шул исәптән кредитлар, депозитлар, инвестицион чишелешләр һәм карталар."
|
||||
},
|
||||
{
|
||||
"name": "Тинькофф Банк",
|
||||
"description": "Тинькофф Казан шәһәрендә традицион офисларга ия булмаса да, аның продуктлары һәм хезмәтләре шәһәрдә онлайн-банкчылык һәм ерак хезмәт күрсәтү аша тәкъдим ителә. Тинькофф кредит карталары, депозитлар, шулай ук кечкенә һәм урта бизнес өчен хезмәтләр тәкъдим итә."
|
||||
},
|
||||
{
|
||||
"name": "Альфа-Банк",
|
||||
"description": "Россиядәге зур шәхси банкларның берсе, Казанда офислары белән. Альфа-Банк стандарт банк хезмәтләрен тәкъдим итә, шул исәптән кредитлар, депозитлар, карталар, шулай ук инвестицион һәм иминият продуктлары."
|
||||
},
|
||||
{
|
||||
"name": "Россельхозбанк",
|
||||
"description": "Казан шәһәрендә Россельхозбанк та бар, ул агропромышленность өлкәсендә хезмәт күрсәтүгә махсуслашкан, ләкин шулай ук физик һәм юридик затлар өчен хезмәтләр тәкъдим итә, шул исәптән кредитлар, депозитлар һәм карталар."
|
||||
},
|
||||
{
|
||||
"name": "РБК Банк",
|
||||
"description": "Казан шәһәрендә офислары һәм банкоматлары булган Россия банкы. Кредитлар, карталар, депозитлар һәм бизнеска хезмәт күрсәтү тәкъдим итә."
|
||||
},
|
||||
{
|
||||
"name": "Санкт-Петербург Банкы",
|
||||
"description": "Казан шәһәрендә дә хезмәт күрсәткән җирле банк. Ул шәхси затлар һәм бизнес өчен киң банк продуктлары сайлау тәкъдим итә."
|
||||
}
|
||||
],
|
||||
"hospitals": [
|
||||
{
|
||||
"name": "Казан шәһәр клиник хастаханәсе №1",
|
||||
"description": "Казанның иң зур күппрофильле хастаханәләренең берсе, хирургия, травматология, неврология, кардиология һәм башка медицина юнәлешләре буенча хезмәтләр тәкъдим итә. Замана технологияләре һәм югары квалификацияле персонал."
|
||||
},
|
||||
{
|
||||
"name": "Республиканың клиник хастаханәсе",
|
||||
"description": "Татарстан Республикасы өчен төп медицина оешмасы, зур спектрдагы хезмәтләрне тәкъдим итә, шул исәптән ашыгыч ярдәм, югары технологияле операцияләр һәм диагностика."
|
||||
},
|
||||
{
|
||||
"name": "Шәһәр хастаханәсе №7",
|
||||
"description": "Терапевтик, хирургик һәм реанимация медицинасы өлкәсендә медицина ярдәме күрсәтүгә махсуслашкан хастаханә. Хастаханәдә тәҗрибәле белгечләр эшли, заманча дәвалау ысуллары кулланыла."
|
||||
},
|
||||
{
|
||||
"name": "Казан балалар клиник хастаханәсе",
|
||||
"description": "Балалар өчен профильле медицина учреждениесе, педиатрия, хирургия, кардиология һәм башка юнәлешләр буенча хезмәтләр тәкъдим итә."
|
||||
},
|
||||
{
|
||||
"name": "Казан онкология диспансеры",
|
||||
"description": "Онкологик авыруларны дәвалауга махсуслашкан медицина учреждениесе. Рак диагнозын һәм дәвалауны үткәрүдә заманча ысуллар кулланыла, шул исәптән химиотерапия, радиотерапия һәм операцияләр."
|
||||
},
|
||||
{
|
||||
"name": "Шәһәр хастаханәсе №18",
|
||||
"description": "Күппрофильле медицина учреждениесе, төрле медицина өлкәләрендә дәвалау тәкъдим итә, шул исәптән травматология, неврология һәм кардиология. Хастаханәдә авыр авырулардан соң реабилитация бүлекләре бар."
|
||||
},
|
||||
{
|
||||
"name": "Ветераннар өчен республика хастаханәсе",
|
||||
"description": "Бөек Ватан сугышы ветераннарына, инвалидларга һәм картларга махсус медицина ярдәме күрсәтүче учреждение. Шулай ук хроник авырулары булган гражданнар өчен хезмәтләр тәкъдим итә."
|
||||
}
|
||||
],
|
||||
"pharmacies": [
|
||||
{
|
||||
"name": "Аптека 36,6",
|
||||
"description": "Дәреслекләр, витаминнар, косметика һәм сәламәтлек товарларының киң ассортименты булган аптека челтәре. Лояльлек программалары һәм онлайн-заказлар клиентлар өчен уңайлы."
|
||||
},
|
||||
{
|
||||
"name": "Ригла",
|
||||
"description": "Россиядәге иң зур аптекалар челтәрләренең берсе. Дәреслекләр, медицина товарлары һәм косметика тәкъдим итә. Шулай ук интернет аша заказ бирү мөмкинлеге бар."
|
||||
},
|
||||
{
|
||||
"name": "Здоровая семья",
|
||||
"description": "Дәреслекләр һәм сәламәтлек товарлары, шул исәптән медицина техникасы сатуга юнәлдерелгән аптека челтәре. Популяр товарларга акцияләр һәм ташламалар еш үткәрелә."
|
||||
},
|
||||
{
|
||||
"name": "Аптечная сеть 'А5'",
|
||||
"description": "Дәреслекләр, витаминнар, косметика һәм балалар товарларының киң ассортименты булган аптека челтәре. Уңайлы җибәрү һәм онлайн-заказлар хезмәтләре."
|
||||
},
|
||||
{
|
||||
"name": "Аптека 'Самсон-Фарма'",
|
||||
"description": "Дәреслекләр һәм сәламәтлек товарлары тәкъдим итә торган аптека челтәре. Аптекалар даими клиентлар өчен скидкалар һәм бонуслар тәкъдим итә."
|
||||
},
|
||||
{
|
||||
"name": "Аптечная сеть 'Цветной'",
|
||||
"description": "Уңайлы урнашкан һәм сыйфатлы хезмәт күрсәтү белән танылган аптекалар. Дәреслекләр, витаминнар, үз-үзеңне карау товарлары һәм медицина техникасы сатыла."
|
||||
},
|
||||
{
|
||||
"name": "Аптека 'Доктор Столетов'",
|
||||
"description": "Фармацевтик продукция, медицина товарлары һәм косметика сату белән шөгыльләнгән аптека челтәре. Уңайлы хезмәт һәм клиентлар өчен акцияләр."
|
||||
}
|
||||
],
|
||||
"airports": [
|
||||
{
|
||||
"name": "Казан Халыкара Аэропорты",
|
||||
"description": "Казанның төп аэропорты, халыкара һәм эчке рейсларны башкаручы. Аэропорт заманча терминаллар, уңайлы көтү зоналары, кибетләр һәм рестораннар белән җиһазландырылган. Ул Поволжье төбәгендә иң зур аэропортларның берсе һәм Татарстан өчен мөһим транспорт узелы."
|
||||
},
|
||||
{
|
||||
"name": "Казан-2 (эшләгән вакытта)",
|
||||
"description": "Элекке эчке рейслар һәм хәрби кирәклекләр өчен кулланылган аэропорт. Хәзерге вакытта тулы көченә эшләми, чөнки барлык пассажир рейслары Казан Халыкара Аэропортына күчерелгән. Аэропорт бинасы коммерция авиаперевозкалары өчен ябык."
|
||||
}
|
||||
]
|
||||
}
|
@ -1,43 +0,0 @@
|
||||
[
|
||||
{
|
||||
"head": "History of Kazan",
|
||||
"title": "The official founding date of Kazan is considered to be 1005",
|
||||
"content": "The city emerged on the Volga River, at the intersection of trade routes between the East and the West."
|
||||
},
|
||||
{
|
||||
"title": "In 1236, these lands were conquered by the troops of Batu Khan",
|
||||
"content": "With the incorporation of Volga Bulgaria into the administrative system of the Golden Horde, Kazan's role as a border fortress diminished, and trade routes shifted. The defensive role of the stone fortress declined, while Kazan gained greater independence during this period."
|
||||
},
|
||||
{
|
||||
"title": "In 1438, Kazan was captured by Khan Ulugh Muhammad, forming a new state – the Kazan Khanate",
|
||||
"content": "Torn by internal conflicts, the Golden Horde gradually lost its former power and fragmented into separate states."
|
||||
},
|
||||
{
|
||||
"title": "On October 2, 1552, Kazan was captured by Ivan the Terrible",
|
||||
"content": "After a seven-week siege by a 150,000-strong army, Kazan was taken by storm. This marked the beginning of a new chapter in Kazan's history, as part of the Tsardom of Russia, later the Russian Empire, and the USSR."
|
||||
},
|
||||
{
|
||||
"title": "In 1708, Kazan became the capital of the vast Kazan Governorate",
|
||||
"content": "As a result of Peter I's reforms, the Russian Empire was divided into eight governorates. The territory of Kazan Governorate was vast, including the voivodeships of Sviyazhsk, Penza, Simbirsk, Ufa, and Astrakhan. Over time, many of them became separate governorates."
|
||||
},
|
||||
{
|
||||
"title": "In 1774, the city was stormed by the troops led by the fugitive Don Cossack Yemelyan Pugachev",
|
||||
"content": "The rebel troops entered Kazan. Only the Kremlin remained under the control of government forces. However, after a massive fire broke out in Kazan, Pugachev ordered his troops to leave the city. Three days later, his forces were defeated on the Arsk Field."
|
||||
},
|
||||
{
|
||||
"title": "In 1805, Kazan Imperial University was ceremonially opened",
|
||||
"content": "It became the third most important university in the empire by significance and founding date. For a long period, it was also the easternmost university in the country."
|
||||
},
|
||||
{
|
||||
"title": "In 1918, Kazan briefly became the epicenter of events on the Eastern Front",
|
||||
"content": "The city changed hands between the Czech legionnaires, the White Army, and the Red Army. Surviving telegrams from Vladimir Lenin of that time highlight the importance attributed to capturing Kazan."
|
||||
},
|
||||
{
|
||||
"title": "With the collapse of the USSR, the national movement in the republic gained momentum, culminating in the creation of the Republic of Tatarstan in 1990, with Kazan as its capital",
|
||||
"content": "The newfound autonomy of the Republic of Tatarstan from the center and the associated redistribution of financial flows led to economic growth. Several large-scale programs implemented in the 1990s improved the quality of life for city residents."
|
||||
},
|
||||
{
|
||||
"title": "In 2005, the city grandly celebrated its millennium",
|
||||
"content": "An important milestone in the city's history was the preparation for the celebration of Kazan's Millennium. Several new facilities were built in the years leading up to this date."
|
||||
}
|
||||
]
|
@ -1,43 +0,0 @@
|
||||
[
|
||||
{
|
||||
"head": "История возникновения Казани",
|
||||
"title": "Официальной датой основания Казани считается 1005 год",
|
||||
"content": "Город возник на Волге, на пересечении торговых маршрутов между Востоком и Западом."
|
||||
},
|
||||
{
|
||||
"title": "В 1236 году данные земли завоевали войска хана Батыя",
|
||||
"content": "С включением Волжской Булгарии административную систему Золотой Орды роль Казани как приграничной крепости была утрачена, изменились и торговые пути. Упала защитная роль каменной крепости, а Казань приобрела в тот период большую самостоятельность."
|
||||
},
|
||||
{
|
||||
"title": "В 1438 году Казань захвачена ханом Улуг-Мухамедом, образуется новое государство - Казанское ханство",
|
||||
"content": "Раздираемая междоусобицами, Золотая Орда со временем растеряла свое былое могущество, распавшись на ряд отдельных государств."
|
||||
},
|
||||
{
|
||||
"title": "Второго октября 1552 года Казань была захвачена Иваном Грозным",
|
||||
"content": "После семинедельной осады 150-тысячным войском, Казань была взята штурмом. Начинается новая история города Казани, теперь в Московском царстве, а позднее – в Российской империи и СССР."
|
||||
},
|
||||
{
|
||||
"title": "В 1708 году Казань становится столицей огромной Казанской губернии",
|
||||
"content": "В результате реформ Петра I Российская империя была разделена на 8 губерний. Территория Казанской губернии была огромной и включала воеводства: Свияжское, Пензенское, Симбирское, Уфимское и Астраханское. В дальнейшем многие из них стали отдельными губерниями."
|
||||
},
|
||||
{
|
||||
"title": "В 1774 году город штурмуют войска под предводительством беглого донского казака Емельяна Пугачева",
|
||||
"content": "Войска повстанцев зашли в Казань. Под контролем правительственных войск остался лишь Кремль. Однако после того, как в Казани случился сильный пожар, Пугачеву пришлось отдать приказ воинам выйти из города. Спустя три дня его войска были разбиты на Арском поле."
|
||||
},
|
||||
{
|
||||
"title": "В 1805 году торжественно открывается Казанский Императорский университет",
|
||||
"content": "Он стал 3 во всей империи по значению и времени основания. Длительный период ВУЗ также был наиболее восточным в стране"
|
||||
},
|
||||
{
|
||||
"title": "В 1918 году Казань на время стала эпицентром событий на Восточном фронте",
|
||||
"content": "Город переходит из рук чешских легионеров и белой армии в руки красных и обратно. Сохранившиеся телеграммы Владимира Ленина тех лет показывают какое значение придавалось взятию Казани."
|
||||
},
|
||||
{
|
||||
"title": "С распадом СССР в республике начинается подъем национального движения, закончившийся созданием в 1990 году Республики Татарстан в составе Российской Федерации, столицей которой становится Казань",
|
||||
"content": "С обретением Республикой Татарстан определенной независимости от центра и связанным с этим перераспределением финансовых потоков связан подъем экономики. В 90-е годы прошлого столетия было реализовано несколько масштабных программ, приведших к повышению качества жизни горожан."
|
||||
},
|
||||
{
|
||||
"title": "В 2005 году в мегаполисе с огромным размахом был отмечен миллениум",
|
||||
"content": "Важной вехой в жизни города стала подготовка к празднованию Тысячелетия Казани. За несколько лет, предшествовавших этой дате были построены новые объекты."
|
||||
}
|
||||
]
|
@ -1,43 +0,0 @@
|
||||
[
|
||||
{
|
||||
"head": "Казан тарихы",
|
||||
"title": "Казанның нигез салыну датасы – 1005 ел",
|
||||
"content": "Шәһәр Идел елгасы буенда, Көнчыгыш белән Көнбатышны тоташтыручы сәүдә юллары киселешендә барлыкка килгән."
|
||||
},
|
||||
{
|
||||
"title": "1236 елда бу җирләрне Батый хан гаскәрләре яулап ала",
|
||||
"content": "Идел Болгарстаны Алтын Урда административ системасына кертелгәч, Казанның чик буе ныгытмасы буларак әһәмияте кими, сәүдә юллары үзгәрә. Шул чорда таш ныгытманың саклау функциясе югала, әмма Казан үзенең мөстәкыйльлеген арттыра."
|
||||
},
|
||||
{
|
||||
"title": "1438 елда Казанны Улуг-Мөхәммәт хан яулап ала, һәм яңа дәүләт – Казан ханлыгы барлыкка килә",
|
||||
"content": "Алтын Урда эчке низаглар аркасында элекке куәтен югалта һәм төрле аерым дәүләтләргә бүленеп бетә."
|
||||
},
|
||||
{
|
||||
"title": "1552 елның 2 октябрендә Казан Иван Грозный тарафыннан яулап алына",
|
||||
"content": "Җиде атналык камау нәтиҗәсендә 150 меңлек гаскәр Казанны штурм белән ала. Казанның Мәскәү дәүләте, соңрак Россия империясе һәм ССРБ тарихына кергән яңа чоры башлана."
|
||||
},
|
||||
{
|
||||
"title": "1708 елда Казан зур Казан губернасының башкаласына әйләнә",
|
||||
"content": "Петр I реформалары нәтиҗәсендә Россия империясе 8 губернага бүленә. Казан губернасының территориясе киң була, ул Свияжск, Пенза, Симбирск, Уфа һәм Астрахань воеводалыкларын үз эченә ала. Соңрак алар аерым губерналарга әйләнә."
|
||||
},
|
||||
{
|
||||
"title": "1774 елда шәһәргә Емельян Пугачев җитәкчелегендәге качак Дон казаклары гаскәрләре һөҗүм итә",
|
||||
"content": "Фетнәчеләр Казанга керә. Хөкүмәт гаскәрләре контролендә Кремль генә кала. Әмма шәһәрдә зур янгын чыкканнан соң, Пугачев үз гаскәрләренә шәһәрдән чыгуны боера. Өч көннән соң, аның гаскәрләре Арча кырында тар-мар ителә."
|
||||
},
|
||||
{
|
||||
"title": "1805 елда Казан Император университеты тантаналы рәвештә ачыла",
|
||||
"content": "Бу университет империядә әһәмияте һәм оешу вакыты буенча өченче була. Ул озак вакыт дәвамында илдәге иң көнчыгыш университет булып тора."
|
||||
},
|
||||
{
|
||||
"title": "1918 елда Казан Көнчыгыш фронт вакыйгаларының үзәгенә әйләнә",
|
||||
"content": "Шәһәр Чех легионерлары, аклар һәм кызыллар кулына чиратлашып күчә. Владимир Ленинның шул чордагы телеграммалары Казанны алуның никадәр мөһим булганын күрсәтә."
|
||||
},
|
||||
{
|
||||
"title": "ССРБ таркалгач, 1990 елда Татарстан Республикасы төзелә, аның башкаласы Казан була",
|
||||
"content": "Татарстан Республикасы үзәккә карата мөстәкыйльлек алуга ирешә. Бу финанс агымнарының яңача бүленүенә китерә, һәм шәһәрдә икътисади үсеш башлана. Узган гасырның 90нчы елларында шәһәр халкының тормыш сыйфатын күтәрүгә юнәлдерелгән берничә зур программа гамәлгә ашырыла."
|
||||
},
|
||||
{
|
||||
"title": "2005 елда Казан меңьеллыгын зур тантана белән билгеләп үтә",
|
||||
"content": "Казанның Меңьеллыгын бәйрәм итүгә әзерлек шәһәр тарихында мөһим вакыйга булды. Әлеге датадан алда берничә ел эчендә яңа объектлар төзелде."
|
||||
}
|
||||
]
|
@ -1,10 +0,0 @@
|
||||
{
|
||||
"first": "Kazan is one of the largest cultural centers in Russia, preserving classical achievements while also promoting the development of modern, avant-garde directions in many areas of culture. The capital of Tatarstan is traditionally called 'multicultural,' implying the mutually enriching coexistence of Russian and Tatar cultures.",
|
||||
"second": {
|
||||
"head": "Culture",
|
||||
"body": [
|
||||
"The republic is home to peoples with different historical backgrounds and cultural traditions. The combination of at least three types of cultural interactions (Turkic, Slavic-Russian, and Finno-Ugric) defines the uniqueness of these places, as well as the originality of their cultural and historical values.",
|
||||
"Tatarstan is associated with the fates of many outstanding cultural figures: singer Fyodor Chaliapin, writers Leo Tolstoy, Sergey Aksakov, and Maxim Gorky, Vasily Aksyonov, poets Yevgeny Baratynsky, Gavriil Derzhavin, Marina Tsvetaeva, and Nikita Zabolotsky, artists Ivan Shishkin and Nikolay Feshin. The classic of Tatar poetry Gabdulla Tukay, hero-poet Musa Jalil, composers Farid Yarullin, Salikh Saidashev, Nazib Zhiganov, Sofia Gubaidulina, and many others brought glory to Tatar culture."
|
||||
]
|
||||
}
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
{
|
||||
"first": "Казань является одним из крупнейших культурных центров России, сохраняя классические достижения, а также способствуя развитию современных, авангардных направлений во многих областях культуры. Столицу Татарстана традиционно называют «мультикультурной», подразумевая взаимовыгодное обогащение мирно сосуществующих русской и татарской культур.",
|
||||
"second": {
|
||||
"head": "Культура",
|
||||
"body": [
|
||||
"В республике проживают народы с разным историческим прошлым и культурными традициями. Сочетание по крайней мере трёх типов культурных взаимовлияний (тюркского, славяно-русского и финно-угорского) определяет уникальность этих мест, своеобразие культурных и исторических ценностей.",
|
||||
"С Татарстаном связаны судьбы многих выдающихся деятелей культуры: певца Фёдора Шаляпина, писателей Льва Толстого, Сергея Аксакова и Максима Горького, Василия Аксёнова, поэтов Евгения Боратынского, Гавриила Державина, Марины Цветаевой и Никиты Заболоцкого, художников Ивана Шишкина и Николая Фешина. Классик татарской поэзии Габдулла Тукай, поэт-герой Муса Джалиль, композиторы Фарид Яруллин, Салих Сайдашев, Назиб Жиганов, София Губайдулина и многие другие составили славу татарской культуры."
|
||||
]
|
||||
}
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
{
|
||||
"first": "Казан Россиянең иң зур мәдәни үзәкләренең берсе булып тора, классик казанышларны саклап кына калмыйча, мәдәниятнең күп төрле өлкәләрендә заманча, авангард юнәлешләрне үстерүгә дә булышлык итә. Татарстан башкаласын традицион рәвештә «мультикультуралы» дип атыйлар, бу тыныч яшәүче рус һәм татар мәдәниятләренең үзара баетылуын аңлата.",
|
||||
"second": {
|
||||
"head": "Мәдәният",
|
||||
"body": [
|
||||
"Республикада төрле тарихи үткәне һәм мәдәни традицияләре булган халыклар яши. Өч төп мәдәни үзара йогынты (төрки, славян-рус һәм фин-угор) кушылуы әлеге төбәкләрнең уникальлеген, мәдәни һәм тарихи кыйммәтләрнең үзенчәлеген билгели.",
|
||||
"Татарстан белән күп күренекле мәдәният эшлеклеләренең язмышлары бәйле: җырчы Фёдор Шаляпин, язучылар Лев Толстой, Сергей Аксаков һәм Максим Горький, Василий Аксёнов, шагыйрьләр Евгений Боратынский, Гавриил Державин, Марина Цветаева һәм Никита Заболоцкий, рәссамнар Иван Шишкин һәм Николай Фешин. Татар шигъриятенең классигы Габдулла Тукай, герой-шагыйрь Муса Җәлил, композиторлар Фәрит Яруллин, Салих Сәйдәшев, Нәҗип Җиһанов, София Гобәйдуллина һәм башка бик күпләр татар мәдәниятенә дан китергән."
|
||||
]
|
||||
}
|
||||
}
|
@ -1,78 +0,0 @@
|
||||
[
|
||||
{
|
||||
"id": "1",
|
||||
"type": "Sights",
|
||||
"image": "kremlin",
|
||||
"head": "Kremlin",
|
||||
"text": "The construction of the fortress continued from the 10th to the 16th century. After Kazan was conquered by Ivan the Terrible in 1552, the Tatar Kremlin was destroyed. On its site, Pskov architects built massive white stone walls, leaving only a few fragments of the old structure. In the 18th century, the Kremlin lost its military significance but remained an administrative and cultural center of the Volga region for a long time."
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"image": "kulsharif",
|
||||
"head": "Kul Sharif Mosque",
|
||||
"text": "This is one of Kazan's landmarks. Moreover, Kul Sharif is also the main Juma Mosque of Tatarstan. Its construction began in 1996 to restore an important architectural relic of the Kazan Khanate, destroyed by Ivan the Terrible's troops in 1552. The mosque was named in honor of the last imam of Kazan, Kul Sharif."
|
||||
},
|
||||
{
|
||||
"id": "3",
|
||||
"image": "suumbike",
|
||||
"head": "Suyumbike Tower",
|
||||
"text": "The structure was first mentioned in documents in 1703, but there is no exact information about its construction date or the origin of its name. According to one version, it was a watchtower because its top provides a good view of the surroundings as well as the Kazanka and Volga rivers."
|
||||
},
|
||||
{
|
||||
"id": "4",
|
||||
"type": "Active leisure",
|
||||
"image": "cyrc",
|
||||
"head": "Kazan Circus",
|
||||
"text": "One of the striking monuments of Soviet modernism. From afar, the circus building resembles a flying saucer. This 'cosmic' shape was achieved after a major reconstruction in 1967. Avant-garde architectural and engineering solutions were used for its construction."
|
||||
},
|
||||
{
|
||||
"id": "5",
|
||||
"image": "park",
|
||||
"head": "URAM Extreme Park",
|
||||
"text": "URAM is the largest extreme park in Russia, consisting of two parts - open and indoor. The outdoor section, which combines professional extreme zones and walking areas, opened in the summer of 2020 and has become one of the most popular public spaces in Kazan, as well as a place where athletes prepared for world-class competitions, such as the Tokyo Olympics."
|
||||
},
|
||||
{
|
||||
"id": "6",
|
||||
"image": "zoo",
|
||||
"head": "Zambezi River Zoo",
|
||||
"text": "The Zambezi River Zoo in Kazan is one of the oldest zoological gardens in Europe. It offers an exciting journey into the world of animals and plants. This unique place allows visitors to enjoy the richness of flora and fauna. It features diverse exhibits, including animals from various continents, from exotic species to local inhabitants."
|
||||
},
|
||||
{
|
||||
"id": "7",
|
||||
"type": "Theatres and museums",
|
||||
"head": "Ekiyat Puppet Theater",
|
||||
"text": "The Ekiyat Puppet Theater in Kazan represents a unique combination of traditional and contemporary art. It is known for its vibrant performances that attract the attention of both children and adults. Located in the city center, it has become an integral part of the region's cultural life.",
|
||||
"image": "akiyat"
|
||||
},
|
||||
{
|
||||
"id": "8",
|
||||
"head": "Opera and Ballet Theater",
|
||||
"text": "The Opera and Ballet Theater in Kazan is the pinnacle of musical and theatrical art in the region. It allows audiences to enjoy high-class opera performances and magnificent ballet shows that leave unforgettable impressions.",
|
||||
"image": "opera"
|
||||
},
|
||||
{
|
||||
"id": "9",
|
||||
"head": "K. Tinchurin Theater",
|
||||
"text": "The Tinchurin Theater embodies the traditions of classical art, offering audiences a wide range of performances, from dramas and comedies to musicals and ballets. The history of the K. Tinchurin Theater spans decades of art and cultural heritage.",
|
||||
"image": "tinchurina"
|
||||
},
|
||||
{
|
||||
"id": "10",
|
||||
"type": "Food and drinks",
|
||||
"head": "Tubetey",
|
||||
"text": "Tubetey is a cozy establishment in Kazan offering visitors a wide selection of Tatar cuisine dishes in an atmosphere of hospitality and comfort. Here, you can enjoy Tatar dishes such as chak-chak, kebabs, manti, and more.",
|
||||
"image": "tubetey"
|
||||
},
|
||||
{
|
||||
"id": "11",
|
||||
"head": "MORE & MORE",
|
||||
"text": "This restaurant specializes in seafood and fish. The More & More restaurant is a conceptual project by ALBA GROUP with a focus on seafood and wine. By Kazan standards, the place is expensive, but the dishes and ingredients justify the cost.",
|
||||
"image": "more"
|
||||
},
|
||||
{
|
||||
"id": "12",
|
||||
"head": "Paloma Cantina",
|
||||
"text": "Paloma Cantina is a Mexican cafe. It was opened by the founders of the St. Petersburg bar El Copitas, which was included in the global ranking of The World’s 50 Best Bars. If you feel lonely in Kazan or want bright colors, this is the place to go.",
|
||||
"image": "paloma"
|
||||
}
|
||||
]
|
@ -4,7 +4,7 @@
|
||||
"type": "Достопримечательности",
|
||||
"image": "kremlin",
|
||||
"head": "Кремль",
|
||||
"text": "Строительство крепости продолжалось с X по XVI век. После завоевания Казани Иваном Грозным в 1552 году татарский кремль был разрушен. На его месте псковские зодчие построили мощные белокаменные стены, оставив лишь некоторые фрагменты старого сооружения. В XVIII веке кремль потерял военное значение, но долго оставался административным и культурным центром Поволжья."
|
||||
"text": "Строительство кремля продолжалось с X по XVI век. После завоевания Казани Иваном Грозным в 1552 году татарский кремль был разрушен. На его месте псковские зодчие построили мощные белокаменные стены, оставив лишь некоторые фрагменты старого сооружения. В XVIII веке кремль потерял военное значение, но долго оставался административным и культурным центром Поволжья."
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
@ -75,4 +75,4 @@
|
||||
"text": "«Палома Кантина» — это мексиканское кафе. Его открыли основатели петербургского бара El Copitas, который попал в мировой рейтинг The World’s 50 Best Bars. Если в Казани вы почувствуете себя одиноко, захотите ярких красок, вам сюда.",
|
||||
"image": "paloma"
|
||||
}
|
||||
]
|
||||
]
|
@ -1,78 +0,0 @@
|
||||
[
|
||||
{
|
||||
"id": "1",
|
||||
"type": "Күренекле урыннар",
|
||||
"image": "kremlin",
|
||||
"head": "Кремль",
|
||||
"text": "Крепость төзелеше X гасырдан XVI гасырга кадәр дәвам иткән. 1552 елда Иван Грозный Казанны яулап алгач, татар кремле җимерелгән. Аның урынында псков архитекторлары көчле ак таштан диварлар төзегән, иске корылманың кайбер өлешләрен генә калдырган. XVIII гасырда кремль хәрби әһәмиятен югалткан, ләкин озак вакыт административ һәм мәдәни үзәк булып калган."
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"image": "kulsharif",
|
||||
"head": "Кул Шәриф мәчете",
|
||||
"text": "Бу Казанның символларыннан берсе. Моннан тыш, Кул Шәриф Татарстанның төп Җомга мәчете дә. Аның төзелеше 1996 елда Казан ханлыгының Иван Грозный гаскәрләре тарафыннан җимерелгән әһәмиятле архитектур истәлеген торгызу өчен башланган. Мәчет Казанның соңгы имамы Кул Шәриф хөрмәтенә аталган."
|
||||
},
|
||||
{
|
||||
"id": "3",
|
||||
"image": "suumbike",
|
||||
"head": "Сөембикә манарасы",
|
||||
"text": "Корылма документларда беренче тапкыр 1703 елда искә алына, ләкин төзелеш датасы һәм исеме килеп чыгышы турында төгәл мәгълүмат юк. Бер версия буенча, ул каравыл манарасы булган, чөнки аның өстеннән тирә-юнь, шулай ук Казанка һәм Идел елгалары яхшы күренгән."
|
||||
},
|
||||
{
|
||||
"id": "4",
|
||||
"type": "Актив ял",
|
||||
"image": "cyrc",
|
||||
"head": "Казан циркы",
|
||||
"text": "Совет модернизмының якты истәлекләреннән берсе. Ерактан цирк бинасы очучы тәлинкәгә охшаган. Мондый 'галәми' форма ул 1967 елдагы масштаблы реконструкциядән соң алган. Аның төзелешендә авангард архитектура һәм инженерлык карарлары кулланылган."
|
||||
},
|
||||
{
|
||||
"id": "5",
|
||||
"image": "park",
|
||||
"head": "УРАМ Экстрим-паркы",
|
||||
"text": "УРАМ — Россиядә иң зур экстрим-парк, ул ике өлештән тора — ачык һәм ябык. Профессиональ экстрим зоналар һәм йөрү урыннарын берләштергән урам өлеше 2020 елның җәендә ачылган һәм Казанның иң популяр җәмәгать урыннарының берсенә әйләнгән, шулай ук дөньякүләм ярышларга, мәсәлән, Токио Олимпиадасына әзерләнү урыны булган."
|
||||
},
|
||||
{
|
||||
"id": "6",
|
||||
"image": "zoo",
|
||||
"head": "Замбези елгасы зоопаркы",
|
||||
"text": "Казан зооботсады — Европадагы иң борынгы зооботсадларның берсе. Хайваннар һәм үсемлекләр дөньясына мавыктыргыч сәяхәт тәкъдим итә. Бу уникаль урын, анда кунаклар флора һәм фаунаның байлыгына соклана ала. Ул төрле континентлардан хайваннарны, экзотик төрләрдән башлап җирле вәкилләргә кадәр тәкъдим итә."
|
||||
},
|
||||
{
|
||||
"id": "7",
|
||||
"type": "Театрлар һәм музейлар",
|
||||
"head": "Әкият курчак театры",
|
||||
"text": "Казандагы Әкият курчак театры традицион һәм заманча сәнгатьнең уникаль кушылмасын тәкъдим итә. Ул балалар һәм олылар игътибарын җәлеп итүче якты тамашалары белән дан казанган. Шәһәр үзәгендә урнашкан, ул төбәкнең мәдәни тормышының аерылгысыз өлешенә әйләнгән.",
|
||||
"image": "akiyat"
|
||||
},
|
||||
{
|
||||
"id": "8",
|
||||
"head": "Опера һәм балет театры",
|
||||
"text": "Казандагы опера һәм балет театры төбәктәге музыкаль һәм театр сәнгатенең иң югары ноктасы булып тора. Ул тамашачыларга югары сыйфатлы опера куюлар һәм онытылмас тәэсирләр калдырган искиткеч балет спектакльләре белән хозурланырга мөмкинлек бирә.",
|
||||
"image": "opera"
|
||||
},
|
||||
{
|
||||
"id": "9",
|
||||
"head": "К. Тинчурин театры",
|
||||
"text": "Тинчурин театры классик сәнгать традицияләрен үз эченә ала, тамашачыларга драмалар һәм комедияләрдән алып мюзикл һәм балетларга кадәр төрле спектакльләр тәкъдим итә. К. Тинчурин театрының тарихы дистә еллык сәнгать һәм мәдәни мирасны үз эченә ала.",
|
||||
"image": "tinchurina"
|
||||
},
|
||||
{
|
||||
"id": "10",
|
||||
"type": "Аш-су һәм эчемлекләр",
|
||||
"head": "Түбәтәй",
|
||||
"text": "Түбәтәй — Казанда кунакларга татар кухнясы ризыкларын кунакчыллык һәм уңайлык атмосферасында тәкъдим итүче җылы урын. Биредә чәк-чәк, шашлык, манты һәм башка татар ризыклары белән хозурланырга мөмкин.",
|
||||
"image": "tubetey"
|
||||
},
|
||||
{
|
||||
"id": "11",
|
||||
"head": "MORE & MORE",
|
||||
"text": "Бу ресторан диңгез продуктлары һәм балыкка махсуслашкан. More & More рестораны — ALBA GROUP-ның seafood һәм wine юнәлешенә басым ясаган концептуаль проекты. Казан стандартлары буенча урын кыйммәтле, ләкин ризыклар һәм ингредиентлар чыгымны аклый.",
|
||||
"image": "more"
|
||||
},
|
||||
{
|
||||
"id": "12",
|
||||
"head": "Палома Кантина",
|
||||
"text": "Палома Кантина — мексикан кафесы. Ул Санкт-Петербургтагы El Copitas барын ачкан оештыручылар тарафыннан ачылган, ул The World’s 50 Best Bars исемлегенә кергән. Әгәр дә Казанда сез үзегезне ялгыз хис итсәгез яки якты төсләр теләсәгез, сезгә монда килергә кирәк.",
|
||||
"image": "paloma"
|
||||
}
|
||||
]
|
@ -1,23 +0,0 @@
|
||||
{
|
||||
"ru": {
|
||||
"title": "Казань - спортивная столица России",
|
||||
"descriptions": [
|
||||
"Республики Татарстан, является одним из самых развитых в спортивном плане городов России, а также одним из лидеров по числу побед в различных видах спорта.",
|
||||
"И это вполне заслужено: в городе проходили Универсиада, Чемпионат мира FINA по водным видам спорта, матчи Кубка конфедераций FIFA, Чемпионата мира по футболу и другое. Все эти события способствовали спортивному обустройству города и развитию инфраструктуры в сфере спорта."
|
||||
]
|
||||
},
|
||||
"en": {
|
||||
"title": "Kazan - The Sports Capital of Russia",
|
||||
"descriptions": [
|
||||
"The Republic of Tatarstan is one of the most developed cities in Russia in terms of sports and also a leader in the number of victories in various sports.",
|
||||
"And this is well deserved: the city hosted the Universiade, the FINA World Championships in Aquatic Sports, FIFA Confederations Cup matches, the FIFA World Cup, and more. All these events contributed to the city's sports development and the improvement of sports infrastructure."
|
||||
]
|
||||
},
|
||||
"tt": {
|
||||
"title": "Казан - Россиянең спорт башкаласы",
|
||||
"descriptions": [
|
||||
"Татарстан Республикасы спорт ягыннан Россиянең иң үсеш алган шәһәрләреннән берсе, шулай ук төрле спорт төрләрендә җиңүләр саны буенча лидерларның берсе.",
|
||||
"Бу бушлай түгел: шәһәрдә Универсиада, FINA су спорт төрләре буенча дөнья чемпионаты, FIFA Конфедерацияләр Кубогы уеннары, футбол буенча дөнья чемпионаты һәм башка чаралар узды. Бу вакыйгалар шәһәрнең спорт үсешенә һәм спорт инфраструктурасының камилләшүенә зур өлеш кертте."
|
||||
]
|
||||
}
|
||||
}
|
@ -1,908 +0,0 @@
|
||||
{
|
||||
"basketball": {
|
||||
"intro_text": "Let's see how well you know UNICS!",
|
||||
"intro_image": "intro_basket",
|
||||
"questions": [
|
||||
{
|
||||
"question": "In which year was the UNICS basketball club founded?",
|
||||
"options": [
|
||||
"1988",
|
||||
"1991",
|
||||
"1995",
|
||||
"2000"
|
||||
],
|
||||
"correct_answer": "1991",
|
||||
"image_url": "b_one"
|
||||
},
|
||||
{
|
||||
"question": "What does \"UNICS\" stand for?",
|
||||
"options": [
|
||||
"University, Innovations, Sports",
|
||||
"University, Culture, Sports",
|
||||
"University Kazan Sports",
|
||||
"Unique Sports"
|
||||
],
|
||||
"correct_answer": "University, Culture, Sports",
|
||||
"image_url": "b_two"
|
||||
},
|
||||
{
|
||||
"question": "What are the main colors of the uniform?",
|
||||
"options": [
|
||||
"Red and white",
|
||||
"Green and white",
|
||||
"Blue and yellow",
|
||||
"Black and gold"
|
||||
],
|
||||
"correct_answer": "Green and white",
|
||||
"image_url": "b_three"
|
||||
},
|
||||
{
|
||||
"question": "What is the name of UNICS's home arena?",
|
||||
"options": [
|
||||
"Tatneft Arena",
|
||||
"Central Stadium",
|
||||
"Basket-Hall",
|
||||
"Kazan Arena"
|
||||
],
|
||||
"correct_answer": "Basket-Hall",
|
||||
"image_url": "b_four"
|
||||
},
|
||||
{
|
||||
"question": "In which year did UNICS win the EuroCup?",
|
||||
"options": [
|
||||
"2009",
|
||||
"2011",
|
||||
"2013",
|
||||
"2015"
|
||||
],
|
||||
"correct_answer": "2011",
|
||||
"image_url": "b_five"
|
||||
},
|
||||
{
|
||||
"question": "Which famous American player, who became the Euroleague top scorer, did UNICS sign?",
|
||||
"options": [
|
||||
"Michael Jordan",
|
||||
"Keith Langford",
|
||||
"LeBron James",
|
||||
"Curtis Jerrells"
|
||||
],
|
||||
"correct_answer": "Keith Langford",
|
||||
"image_url": "b_six"
|
||||
},
|
||||
{
|
||||
"question": "How many seats does UNICS's home arena, Basket-Hall, hold?",
|
||||
"options": [
|
||||
"3000",
|
||||
"5000",
|
||||
"7000",
|
||||
"10000"
|
||||
],
|
||||
"correct_answer": "7000",
|
||||
"image_url": "b_seven"
|
||||
},
|
||||
{
|
||||
"question": "Who was the head coach of UNICS when the club won the EuroCup?",
|
||||
"options": [
|
||||
"Dimitris Itoudis",
|
||||
"Evgeny Pashutin",
|
||||
"Zoran Lukic",
|
||||
"Andrei Kirilenko"
|
||||
],
|
||||
"correct_answer": "Evgeny Pashutin",
|
||||
"image_url": "b_eight"
|
||||
},
|
||||
{
|
||||
"question": "Who is UNICS's traditional biggest rival in the VTB United League?",
|
||||
"options": [
|
||||
"CSKA Moscow",
|
||||
"Lokomotiv-Kuban",
|
||||
"Zenit Saint Petersburg",
|
||||
"Nizhny Novgorod"
|
||||
],
|
||||
"correct_answer": "CSKA Moscow",
|
||||
"image_url": "b_nine"
|
||||
},
|
||||
{
|
||||
"question": "Which trophy has UNICS not won yet?",
|
||||
"options": [
|
||||
"VTB United League",
|
||||
"Russian Cup",
|
||||
"Euroleague",
|
||||
"EuroCup"
|
||||
],
|
||||
"correct_answer": "Euroleague",
|
||||
"image_url": "b_ten"
|
||||
},
|
||||
{
|
||||
"question": "Who is the head coach of UNICS in the 2024/2025 season?",
|
||||
"options": [
|
||||
"Alexander Volkov",
|
||||
"Velimir Perasovic",
|
||||
"Andrey Maltsov",
|
||||
"Dimitris Priftis"
|
||||
],
|
||||
"correct_answer": "Velimir Perasovic",
|
||||
"image_url": "b_eleven"
|
||||
},
|
||||
{
|
||||
"question": "Which team was UNICS's opponent in the EuroCup 2011 final?",
|
||||
"options": [
|
||||
"Real Madrid",
|
||||
"Caja Laboral",
|
||||
"Lokomotiv-Kuban",
|
||||
"Crvena Zvezda"
|
||||
],
|
||||
"correct_answer": "Caja Laboral",
|
||||
"image_url": "b_twelve"
|
||||
},
|
||||
{
|
||||
"question": "Since which year has UNICS participated in the Euroleague?",
|
||||
"options": [
|
||||
"2005",
|
||||
"2008",
|
||||
"2010",
|
||||
"2011"
|
||||
],
|
||||
"correct_answer": "2011",
|
||||
"image_url": "b_thirteen"
|
||||
},
|
||||
{
|
||||
"question": "Which title is considered the greatest achievement of UNICS on the international stage?",
|
||||
"options": [
|
||||
"Euroleague Champion",
|
||||
"EuroCup Champion",
|
||||
"VTB United League Winner",
|
||||
"Russian Cup Winner"
|
||||
],
|
||||
"correct_answer": "EuroCup Champion",
|
||||
"image_url": "b_fourteen"
|
||||
},
|
||||
{
|
||||
"question": "Which UNICS star has twice been the top scorer of the EuroCup?",
|
||||
"options": [
|
||||
"Keith Langford",
|
||||
"Alexey Shved",
|
||||
"Nando De Colo",
|
||||
"Artem Parakhovsky"
|
||||
],
|
||||
"correct_answer": "Keith Langford",
|
||||
"image_url": "b_fifteen"
|
||||
},
|
||||
{
|
||||
"question": "How many times has UNICS won the Russian Cup?",
|
||||
"options": [
|
||||
"1",
|
||||
"2",
|
||||
"3",
|
||||
"4"
|
||||
],
|
||||
"correct_answer": "3",
|
||||
"image_url": "b_sixteen"
|
||||
},
|
||||
{
|
||||
"question": "What place did UNICS take in the VTB United League in the 2020/2021 season?",
|
||||
"options": [
|
||||
"1st",
|
||||
"2nd",
|
||||
"3rd",
|
||||
"4th"
|
||||
],
|
||||
"correct_answer": "2nd",
|
||||
"image_url": "b_seventeen"
|
||||
},
|
||||
{
|
||||
"question": "In which year did UNICS win the VTB United League for the first time?",
|
||||
"options": [
|
||||
"2009",
|
||||
"2011",
|
||||
"2015",
|
||||
"2023"
|
||||
],
|
||||
"correct_answer": "2023",
|
||||
"image_url": "b_eighteen"
|
||||
},
|
||||
{
|
||||
"question": "And now the most important question. How many of White's teeth did Labeyrie knock out in the VTB United League final? 😁",
|
||||
"options": [
|
||||
"1",
|
||||
"2",
|
||||
"3",
|
||||
"4",
|
||||
"It's not funny anymore."
|
||||
],
|
||||
"correct_answer": "4",
|
||||
"image_url": "b_nineteen"
|
||||
}
|
||||
]
|
||||
},
|
||||
"hockey": {
|
||||
"intro_text": "Let's find out how well you know Ak Bars!",
|
||||
"intro_image": "intro_hockey",
|
||||
"questions": [
|
||||
{
|
||||
"question": "In which year was the Ak Bars hockey club founded?",
|
||||
"options": [
|
||||
"1946",
|
||||
"1956",
|
||||
"1960",
|
||||
"1990"
|
||||
],
|
||||
"correct_answer": "1956",
|
||||
"image_url": "h_one"
|
||||
},
|
||||
{
|
||||
"question": "What does the name \"Ak Bars\" mean?",
|
||||
"options": [
|
||||
"White snow leopard",
|
||||
"Strong snow leopard",
|
||||
"Fierce snow leopard",
|
||||
"Ice snow leopard"
|
||||
],
|
||||
"correct_answer": "White snow leopard",
|
||||
"image_url": "h_two"
|
||||
},
|
||||
{
|
||||
"question": "What colors are traditionally used in Ak Bars' uniform?",
|
||||
"options": [
|
||||
"Red, green, and white",
|
||||
"Blue, white, and black",
|
||||
"Yellow, black, and white",
|
||||
"Red, black, and white"
|
||||
],
|
||||
"correct_answer": "Red, green, and white",
|
||||
"image_url": "h_three"
|
||||
},
|
||||
{
|
||||
"question": "Which arena does Ak Bars play at?",
|
||||
"options": [
|
||||
"Basket-Hall",
|
||||
"Tatneft Arena",
|
||||
"Central Stadium",
|
||||
"Kazan Arena"
|
||||
],
|
||||
"correct_answer": "Tatneft Arena",
|
||||
"image_url": "h_four"
|
||||
},
|
||||
{
|
||||
"question": "How many times has Ak Bars become the KHL champion?",
|
||||
"options": [
|
||||
"2",
|
||||
"3",
|
||||
"4",
|
||||
"5"
|
||||
],
|
||||
"correct_answer": "3",
|
||||
"image_url": "h_five"
|
||||
},
|
||||
{
|
||||
"question": "In which season did Ak Bars win the Gagarin Cup for the first time?",
|
||||
"options": [
|
||||
"2008/2009",
|
||||
"2009/2010",
|
||||
"2010/2011",
|
||||
"2011/2012"
|
||||
],
|
||||
"correct_answer": "2008/2009",
|
||||
"image_url": "h_six"
|
||||
},
|
||||
{
|
||||
"question": "Which Ak Bars player is one of the club's top scorers of all time?",
|
||||
"options": [
|
||||
"Alexander Radulov",
|
||||
"Danis Zaripov",
|
||||
"Alexey Morozov",
|
||||
"Evgeni Malkin"
|
||||
],
|
||||
"correct_answer": "Danis Zaripov",
|
||||
"image_url": "h_seven"
|
||||
},
|
||||
{
|
||||
"question": "Who is Ak Bars' rival in the Green Derby?",
|
||||
"options": [
|
||||
"Salavat Yulaev",
|
||||
"Metallurg Magnitogorsk",
|
||||
"Avangard Omsk",
|
||||
"CSKA Moscow"
|
||||
],
|
||||
"correct_answer": "Salavat Yulaev",
|
||||
"image_url": "h_eight"
|
||||
},
|
||||
{
|
||||
"question": "What is the mascot of the Ak Bars hockey club?",
|
||||
"options": [
|
||||
"White tiger",
|
||||
"Lion",
|
||||
"Snow leopard",
|
||||
"Bear"
|
||||
],
|
||||
"correct_answer": "Snow leopard",
|
||||
"image_url": "h_nine"
|
||||
},
|
||||
{
|
||||
"question": "Who was the head coach of Ak Bars in the 2023/2024 season?",
|
||||
"options": [
|
||||
"Dmitry Kvartalnov",
|
||||
"Zinetula Bilyaletdinov",
|
||||
"Andrei Skabelka",
|
||||
"Valery Bragin"
|
||||
],
|
||||
"correct_answer": "Zinetula Bilyaletdinov",
|
||||
"image_url": "h_ten"
|
||||
},
|
||||
{
|
||||
"question": "How many times did Ak Bars win the Russian Championship before the KHL was created?",
|
||||
"options": [
|
||||
"2",
|
||||
"3",
|
||||
"4",
|
||||
"5"
|
||||
],
|
||||
"correct_answer": "2",
|
||||
"image_url": "h_eleven"
|
||||
},
|
||||
{
|
||||
"question": "Which of the following players did not play for Ak Bars?",
|
||||
"options": [
|
||||
"Ilya Nikulin",
|
||||
"Sergey Mozyaikin",
|
||||
"Alexey Tereshchenko",
|
||||
"Nikita Zaitsev"
|
||||
],
|
||||
"correct_answer": "Sergey Mozyaikin",
|
||||
"image_url": "h_twelve"
|
||||
},
|
||||
{
|
||||
"question": "Which team was Ak Bars' opponent in the 2018 Gagarin Cup final?",
|
||||
"options": [
|
||||
"Avangard Omsk",
|
||||
"Salavat Yulaev",
|
||||
"CSKA Moscow",
|
||||
"SKA St. Petersburg"
|
||||
],
|
||||
"correct_answer": "CSKA Moscow",
|
||||
"image_url": "h_thirteen"
|
||||
},
|
||||
{
|
||||
"question": "Who holds the record for most games played for Ak Bars?",
|
||||
"options": [
|
||||
"Danis Zaripov",
|
||||
"Ilya Nikulin",
|
||||
"Alexey Morozov",
|
||||
"Viktor Tikhonov"
|
||||
],
|
||||
"correct_answer": "Ilya Nikulin",
|
||||
"image_url": "h_fourteen"
|
||||
},
|
||||
{
|
||||
"question": "Which coach led Ak Bars to their first KHL championship?",
|
||||
"options": [
|
||||
"Zinetula Bilyaletdinov",
|
||||
"Vladimir Krikunov",
|
||||
"Dmitry Kvartalnov",
|
||||
"Alexander Medvedev"
|
||||
],
|
||||
"correct_answer": "Zinetula Bilyaletdinov",
|
||||
"image_url": "h_fifteen"
|
||||
},
|
||||
{
|
||||
"question": "What nickname do Ak Bars fans give to their team?",
|
||||
"options": [
|
||||
"White Bars",
|
||||
"Green Machines",
|
||||
"Kazan Bars",
|
||||
"Green Army"
|
||||
],
|
||||
"correct_answer": "Green Army",
|
||||
"image_url": "h_sixteen"
|
||||
}
|
||||
]
|
||||
},
|
||||
"football": {
|
||||
"intro_text": "Let's find out how well you know Rubin!",
|
||||
"intro_image": "intro_football",
|
||||
"questions": [
|
||||
{
|
||||
"question": "In which year was Rubin football club founded?",
|
||||
"options": [
|
||||
"1936",
|
||||
"1958",
|
||||
"1964",
|
||||
"1972"
|
||||
],
|
||||
"correct_answer": "1958",
|
||||
"image_url": "f_one"
|
||||
},
|
||||
{
|
||||
"question": "What colors are traditionally used in Rubin's kit?",
|
||||
"options": [
|
||||
"Red and white",
|
||||
"Green and white",
|
||||
"Red and green",
|
||||
"Yellow and blue"
|
||||
],
|
||||
"correct_answer": "Red and green",
|
||||
"image_url": "f_two"
|
||||
},
|
||||
{
|
||||
"question": "What is the home stadium of FC Rubin?",
|
||||
"options": [
|
||||
"Kazan Arena",
|
||||
"Central Stadium",
|
||||
"Tatneft Arena",
|
||||
"Ak Bars Arena"
|
||||
],
|
||||
"correct_answer": "Ak Bars Arena",
|
||||
"image_url": "f_three"
|
||||
},
|
||||
{
|
||||
"question": "In which year did Rubin first become the Russian champion?",
|
||||
"options": [
|
||||
"2006",
|
||||
"2008",
|
||||
"2009",
|
||||
"2010"
|
||||
],
|
||||
"correct_answer": "2008",
|
||||
"image_url": "f_four"
|
||||
},
|
||||
{
|
||||
"question": "How many times has FC Rubin become the Russian champion?",
|
||||
"options": [
|
||||
"1",
|
||||
"2",
|
||||
"3",
|
||||
"4"
|
||||
],
|
||||
"correct_answer": "2",
|
||||
"image_url": "f_five"
|
||||
},
|
||||
{
|
||||
"question": "Who was the head coach of Rubin during their first championship in 2008?",
|
||||
"options": [
|
||||
"Guus Hiddink",
|
||||
"Kurban Berdyev",
|
||||
"Yuri Semin",
|
||||
"Valery Karpin"
|
||||
],
|
||||
"correct_answer": "Kurban Berdyev",
|
||||
"image_url": "f_six"
|
||||
},
|
||||
{
|
||||
"question": "What was the score when Rubin defeated Barcelona in their famous Champions League win in 2009?",
|
||||
"options": [
|
||||
"2:1",
|
||||
"1:0",
|
||||
"3:0",
|
||||
"3:1"
|
||||
],
|
||||
"correct_answer": "2:1",
|
||||
"image_url": "f_seven"
|
||||
},
|
||||
{
|
||||
"question": "Which player became Rubin's top scorer in the 2009/2010 season?",
|
||||
"options": [
|
||||
"Alexander Bukharov",
|
||||
"Salomon Rondon",
|
||||
"Gökdeniz Karadeniz",
|
||||
"Sergey Semak"
|
||||
],
|
||||
"correct_answer": "Alexander Bukharov",
|
||||
"image_url": "f_eight"
|
||||
},
|
||||
{
|
||||
"question": "What position did Rubin finish in their debut season in the UEFA Champions League group stage?",
|
||||
"options": [
|
||||
"1st",
|
||||
"2nd",
|
||||
"3rd",
|
||||
"4th"
|
||||
],
|
||||
"correct_answer": "3rd",
|
||||
"image_url": "f_nine"
|
||||
},
|
||||
{
|
||||
"question": "Who became Rubin's captain in the 2023/2024 season?",
|
||||
"options": [
|
||||
"Ilzat Akhmetov",
|
||||
"Oleg Danchenko",
|
||||
"Andres Pankov",
|
||||
"Dmitry Tarasov"
|
||||
],
|
||||
"correct_answer": "Ilzat Akhmetov",
|
||||
"image_url": "f_ten"
|
||||
},
|
||||
{
|
||||
"question": "Which Russian coach made his debut as Rubin's head coach after Kurban Berdyev's departure?",
|
||||
"options": [
|
||||
"Sergey Semak",
|
||||
"Roman Sharonov",
|
||||
"Viktor Goncharenko",
|
||||
"Alexander Borodyuk"
|
||||
],
|
||||
"correct_answer": "Roman Sharonov",
|
||||
"image_url": "f_eleven"
|
||||
},
|
||||
{
|
||||
"question": "In which tournament did Rubin defeat Atletico Madrid in 2012?",
|
||||
"options": [
|
||||
"Europa League",
|
||||
"UEFA Super Cup",
|
||||
"Intertoto Cup",
|
||||
"Russian Cup"
|
||||
],
|
||||
"correct_answer": "Europa League",
|
||||
"image_url": "f_twelve"
|
||||
},
|
||||
{
|
||||
"question": "What is Rubin's greatest achievement in European competitions?",
|
||||
"options": [
|
||||
"Europa League Semi-final",
|
||||
"Champions League Quarter-final",
|
||||
"Europa League Quarter-final",
|
||||
"Champions League Group Stage"
|
||||
],
|
||||
"correct_answer": "Europa League Quarter-final",
|
||||
"image_url": "f_thirteen"
|
||||
},
|
||||
{
|
||||
"question": "Which Rubin player scored a magnificent goal from the center of the field against Barcelona?",
|
||||
"options": [
|
||||
"Gökdeniz Karadeniz",
|
||||
"Roman Eremenko",
|
||||
"Alexander Ryazantsev",
|
||||
"Alexander Bukharov"
|
||||
],
|
||||
"correct_answer": "Alexander Ryazantsev",
|
||||
"image_url": "f_fourteen"
|
||||
},
|
||||
{
|
||||
"question": "Who became Rubin's top scorer in the club's history?",
|
||||
"options": [
|
||||
"Alexander Bukharov",
|
||||
"Salomon Rondon",
|
||||
"Gökdeniz Karadeniz",
|
||||
"Sergey Semak"
|
||||
],
|
||||
"correct_answer": "Gökdeniz Karadeniz",
|
||||
"image_url": "f_fifteen"
|
||||
},
|
||||
{
|
||||
"question": "Which club became Rubin's main rival in the 2010s?",
|
||||
"options": [
|
||||
"Zenit",
|
||||
"Spartak",
|
||||
"Lokomotiv",
|
||||
"CSKA"
|
||||
],
|
||||
"correct_answer": "Zenit",
|
||||
"image_url": "f_sixteen"
|
||||
}
|
||||
]
|
||||
},
|
||||
"volleyball": {
|
||||
"intro_text": "Let's find out how well you know volleyball teams Zenit-Kazan and Dynamo-Ak Bars!",
|
||||
"intro_image": "intro_volleyball",
|
||||
"questions": [
|
||||
{
|
||||
"question": "In which year was the volleyball club Zenit-Kazan founded?",
|
||||
"options": [
|
||||
"2000",
|
||||
"2003",
|
||||
"2007",
|
||||
"2010"
|
||||
],
|
||||
"correct_answer": "2000",
|
||||
"image_url": "v_one"
|
||||
},
|
||||
{
|
||||
"question": "How many times has Zenit-Kazan won the Champions League?",
|
||||
"options": [
|
||||
"4",
|
||||
"5",
|
||||
"6",
|
||||
"7"
|
||||
],
|
||||
"correct_answer": "6",
|
||||
"image_url": "v_two"
|
||||
},
|
||||
{
|
||||
"question": "Who is the most decorated player in the history of Zenit-Kazan?",
|
||||
"options": [
|
||||
"Maxim Mikhaylov",
|
||||
"Wilfredo Leon",
|
||||
"Alexey Verbov",
|
||||
"Matthew Anderson"
|
||||
],
|
||||
"correct_answer": "Maxim Mikhaylov",
|
||||
"image_url": "v_three"
|
||||
},
|
||||
{
|
||||
"question": "What is the home arena of Zenit-Kazan?",
|
||||
"options": [
|
||||
"Tatneft Arena",
|
||||
"Basket-Hall",
|
||||
"Saint Petersburg Volleyball Center",
|
||||
"Kazan Arena"
|
||||
],
|
||||
"correct_answer": "Saint Petersburg Volleyball Center",
|
||||
"image_url": "v_four"
|
||||
},
|
||||
{
|
||||
"question": "Who was the head coach of Zenit-Kazan during their dominance in the 2010s?",
|
||||
"options": [
|
||||
"Alexey Verbov",
|
||||
"Vladimir Alekno",
|
||||
"Dante Amaral",
|
||||
"Mikhail Likhachev"
|
||||
],
|
||||
"correct_answer": "Vladimir Alekno",
|
||||
"image_url": "v_five"
|
||||
},
|
||||
{
|
||||
"question": "What colors are used in Zenit-Kazan's uniform?",
|
||||
"options": [
|
||||
"Blue and white",
|
||||
"Blue and silver",
|
||||
"Green and white",
|
||||
"Red and blue"
|
||||
],
|
||||
"correct_answer": "Blue and white",
|
||||
"image_url": "v_six"
|
||||
},
|
||||
{
|
||||
"question": "In which year did Zenit-Kazan win their first Russian championship?",
|
||||
"options": [
|
||||
"2005",
|
||||
"2007",
|
||||
"2009",
|
||||
"2011"
|
||||
],
|
||||
"correct_answer": "2007",
|
||||
"image_url": "v_seven"
|
||||
},
|
||||
{
|
||||
"question": "When was the women's team Dynamo-Ak Bars founded?",
|
||||
"options": [
|
||||
"2002",
|
||||
"2007",
|
||||
"2012",
|
||||
"2015"
|
||||
],
|
||||
"correct_answer": "2002",
|
||||
"image_url": "v_eight"
|
||||
},
|
||||
{
|
||||
"question": "What is the most significant achievement of Dynamo-Ak Bars?",
|
||||
"options": [
|
||||
"Victory in the Champions League",
|
||||
"Victory in the Russian Championship",
|
||||
"Victory in the Russian Cup",
|
||||
"Victory in the CEV Cup"
|
||||
],
|
||||
"correct_answer": "Victory in the Russian Championship",
|
||||
"image_url": "v_nine"
|
||||
},
|
||||
{
|
||||
"question": "In which year did the women's team Dynamo-Ak Bars win their first Russian Cup?",
|
||||
"options": [
|
||||
"2008",
|
||||
"2010",
|
||||
"2012",
|
||||
"2014"
|
||||
],
|
||||
"correct_answer": "2010",
|
||||
"image_url": "v_ten"
|
||||
},
|
||||
{
|
||||
"question": "How many times has the women's team Dynamo-Ak Bars won the Russian Championship?",
|
||||
"options": [
|
||||
"5",
|
||||
"2",
|
||||
"7",
|
||||
"4"
|
||||
],
|
||||
"correct_answer": "7",
|
||||
"image_url": "v_eleven"
|
||||
},
|
||||
{
|
||||
"question": "Which of these volleyball stars played for Zenit-Kazan?",
|
||||
"options": [
|
||||
"Wilfredo Leon",
|
||||
"Matey Kazijski",
|
||||
"Giba",
|
||||
"Trevor Clevery"
|
||||
],
|
||||
"correct_answer": "Wilfredo Leon",
|
||||
"image_url": "v_twelve"
|
||||
}
|
||||
]
|
||||
},
|
||||
"water-polo": {
|
||||
"intro_text": "Let's find out how well you know 'Sintez'!",
|
||||
"intro_image": "intro_water_polo",
|
||||
"questions": [
|
||||
{
|
||||
"question": "In which year was the water polo club Sintez founded?",
|
||||
"options": [
|
||||
"1974",
|
||||
"1980",
|
||||
"1985",
|
||||
"1991"
|
||||
],
|
||||
"correct_answer": "1974",
|
||||
"image_url": "w_one"
|
||||
},
|
||||
{
|
||||
"question": "How many times has Sintez won the Russian water polo championship?",
|
||||
"options": [
|
||||
"5",
|
||||
"8",
|
||||
"10",
|
||||
"12"
|
||||
],
|
||||
"correct_answer": "10",
|
||||
"image_url": "w_two"
|
||||
},
|
||||
{
|
||||
"question": "In which year did Sintez win the European Water Polo League Cup (LEN Trophy)?",
|
||||
"options": [
|
||||
"2005",
|
||||
"2007",
|
||||
"2010",
|
||||
"2012"
|
||||
],
|
||||
"correct_answer": "2007",
|
||||
"image_url": "w_three"
|
||||
},
|
||||
{
|
||||
"question": "How many players are there from one team in the water polo game at the same time?",
|
||||
"options": [
|
||||
"5",
|
||||
"6",
|
||||
"7",
|
||||
"8"
|
||||
],
|
||||
"correct_answer": "7",
|
||||
"image_url": "w_four"
|
||||
},
|
||||
{
|
||||
"question": "What is the standard length of a water polo pool?",
|
||||
"options": [
|
||||
"20 meters",
|
||||
"25 meters",
|
||||
"30 meters",
|
||||
"50 meters"
|
||||
],
|
||||
"correct_answer": "30 meters",
|
||||
"image_url": "w_five"
|
||||
},
|
||||
{
|
||||
"question": "Which team is Sintez's main rival in Russia?",
|
||||
"options": [
|
||||
"Spartak Volgograd",
|
||||
"Dynamo Moscow",
|
||||
"Lokomotiv Krasnodar",
|
||||
"Zenit St. Petersburg"
|
||||
],
|
||||
"correct_answer": "Spartak Volgograd",
|
||||
"image_url": "w_six"
|
||||
}
|
||||
]
|
||||
},
|
||||
"history": {
|
||||
"intro_text": "Let's see how well you know UNICS!",
|
||||
"intro_image": "culture",
|
||||
"questions": [
|
||||
{
|
||||
"question": "When was Kazan founded?",
|
||||
"options": [
|
||||
"1005",
|
||||
"1156",
|
||||
"1230",
|
||||
"1323"
|
||||
],
|
||||
"correct_answer": "1005",
|
||||
"image_url": "culture"
|
||||
},
|
||||
{
|
||||
"question": "What is the main river flowing through Kazan?",
|
||||
"options": [
|
||||
"Volga",
|
||||
"Kazanka",
|
||||
"Kama",
|
||||
"Izh"
|
||||
],
|
||||
"correct_answer": "Kazanka",
|
||||
"image_url": "culture"
|
||||
},
|
||||
{
|
||||
"question": "Who was the first khan of Kazan?",
|
||||
"options": [
|
||||
"Ulugh Muhammad",
|
||||
"Akhmat",
|
||||
"Shah Ali",
|
||||
"Mamuka"
|
||||
],
|
||||
"correct_answer": "Ulugh Muhammad",
|
||||
"image_url": "culture"
|
||||
},
|
||||
{
|
||||
"question": "What is the name of Kazan's main sports complex where the 2013 Universiade was held?",
|
||||
"options": [
|
||||
"Kazan Arena",
|
||||
"Tatneft Arena",
|
||||
"Bugulma Arena",
|
||||
"Ak Bars Sports Palace"
|
||||
],
|
||||
"correct_answer": "Kazan Arena",
|
||||
"image_url": "culture"
|
||||
},
|
||||
{
|
||||
"question": "Which mosque in Kazan is considered one of the largest in Russia?",
|
||||
"options": [
|
||||
"Kul Sharif Mosque",
|
||||
"Mari El Mosque",
|
||||
"Aisha Mosque",
|
||||
"Imam Muhammad Mosque"
|
||||
],
|
||||
"correct_answer": "Kul Sharif Mosque",
|
||||
"image_url": "culture"
|
||||
},
|
||||
{
|
||||
"question": "What is the name of the square where the Kazan Kremlin and Kul Sharif Mosque are located?",
|
||||
"options": [
|
||||
"Vakhitov Square",
|
||||
"Freedom Square",
|
||||
"Kremlin Square",
|
||||
"Revolution Square"
|
||||
],
|
||||
"correct_answer": "Kremlin Square",
|
||||
"image_url": "culture"
|
||||
},
|
||||
{
|
||||
"question": "What symbol of Kazan is depicted on the city's coat of arms?",
|
||||
"options": [
|
||||
"Dragon",
|
||||
"Tiger",
|
||||
"Lion",
|
||||
"Eagle"
|
||||
],
|
||||
"correct_answer": "Dragon",
|
||||
"image_url": "culture"
|
||||
},
|
||||
{
|
||||
"question": "Who was the architect of the Kazan Kremlin?",
|
||||
"options": [
|
||||
"Ivan Zarudny",
|
||||
"Fyodor Benjamin",
|
||||
"Andrey Ushakov",
|
||||
"Yury Dashevsky"
|
||||
],
|
||||
"correct_answer": "Andrey Ushakov",
|
||||
"image_url": "culture"
|
||||
},
|
||||
{
|
||||
"question": "Which of these universities is located in Kazan?",
|
||||
"options": [
|
||||
"Moscow State University",
|
||||
"Kazan Federal University",
|
||||
"St. Petersburg Polytechnic University",
|
||||
"Novosibirsk State University"
|
||||
],
|
||||
"correct_answer": "Kazan Federal University",
|
||||
"image_url": "culture"
|
||||
},
|
||||
{
|
||||
"question": "What is the name of the largest street in Kazan, which is also the center of the city's nightlife?",
|
||||
"options": [
|
||||
"Kremlin Street",
|
||||
"Bauman Street",
|
||||
"Pushkin Street",
|
||||
"Kayum Nasyri Street"
|
||||
],
|
||||
"correct_answer": "Bauman Street",
|
||||
"image_url": "culture"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,908 +0,0 @@
|
||||
{
|
||||
"basketball": {
|
||||
"intro_text": "Давайте узнаем, насколько вы хорошо знаете UNICS!",
|
||||
"intro_image": "intro_basket",
|
||||
"questions": [
|
||||
{
|
||||
"question": "В каком году был основан баскетбольный клуб UNICS?",
|
||||
"options": [
|
||||
"1988",
|
||||
"1991",
|
||||
"1995",
|
||||
"2000"
|
||||
],
|
||||
"correct_answer": "1991",
|
||||
"image_url": "b_one"
|
||||
},
|
||||
{
|
||||
"question": "Как расшифровывается \"UNICS\"?",
|
||||
"options": [
|
||||
"Университет, Инновации, Спорт",
|
||||
"Университет, Культура, Спорт",
|
||||
"Университетский Казанский Спорт",
|
||||
"Уникальный Спорт"
|
||||
],
|
||||
"correct_answer": "Университет, Культура, Спорт",
|
||||
"image_url": "b_two"
|
||||
},
|
||||
{
|
||||
"question": "Какие цвета являются основными в форме?",
|
||||
"options": [
|
||||
"Красный и белый",
|
||||
"Зелёный и белый",
|
||||
"Синий и жёлтый",
|
||||
"Чёрный и золотой"
|
||||
],
|
||||
"correct_answer": "Зелёный и белый",
|
||||
"image_url": "b_three"
|
||||
},
|
||||
{
|
||||
"question": "Как называется домашняя арена БК UNICS?",
|
||||
"options": [
|
||||
"Татнефть Арена",
|
||||
"Центральный стадион",
|
||||
"Баскет-холл",
|
||||
"Казань Арена"
|
||||
],
|
||||
"correct_answer": "Баскет-холл",
|
||||
"image_url": "b_four"
|
||||
},
|
||||
{
|
||||
"question": "В каком году UNICS выиграл Кубок Европы (EuroCup)?",
|
||||
"options": [
|
||||
"2009",
|
||||
"2011",
|
||||
"2013",
|
||||
"2015"
|
||||
],
|
||||
"correct_answer": "2011",
|
||||
"image_url": "b_five"
|
||||
},
|
||||
{
|
||||
"question": "Какого известного американского игрока, ставшего лучшим бомбардиром Евролиги, подписывал UNICS?",
|
||||
"options": [
|
||||
"Майкл Джордан",
|
||||
"Кит Лэнгфорд",
|
||||
"Леброн Джеймс",
|
||||
"Куртис Джерреллс"
|
||||
],
|
||||
"correct_answer": "Кит Лэнгфорд",
|
||||
"image_url": "b_six"
|
||||
},
|
||||
{
|
||||
"question": "Сколько мест вмещает домашняя арена UNICS, Баскет-холл?",
|
||||
"options": [
|
||||
"3000",
|
||||
"5000",
|
||||
"7000",
|
||||
"10000"
|
||||
],
|
||||
"correct_answer": "7000",
|
||||
"image_url": "b_seven"
|
||||
},
|
||||
{
|
||||
"question": "Кто был главным тренером UNICS, когда клуб выиграл Еврокубок?",
|
||||
"options": [
|
||||
"Димитрис Итудис",
|
||||
"Евгений Пашутин",
|
||||
"Зоран Лукич",
|
||||
"Андрей Кириленко"
|
||||
],
|
||||
"correct_answer": "Евгений Пашутин",
|
||||
"image_url": "b_eight"
|
||||
},
|
||||
{
|
||||
"question": "С кем у УНИКСа традиционно самое принципиальное противостояние в Единой Лиге ВТБ?",
|
||||
"options": [
|
||||
"ЦСКА Москва",
|
||||
"Локомотив-Кубань",
|
||||
"Зенит Санкт-Петербург",
|
||||
"Нижний Новгород"
|
||||
],
|
||||
"correct_answer": "ЦСКА Москва",
|
||||
"image_url": "b_nine"
|
||||
},
|
||||
{
|
||||
"question": "Какой трофей UNICS ещё не выиграл?",
|
||||
"options": [
|
||||
"Единая лига ВТБ",
|
||||
"Кубок России",
|
||||
"Евролига",
|
||||
"Еврокубок"
|
||||
],
|
||||
"correct_answer": "Евролига",
|
||||
"image_url": "b_ten"
|
||||
},
|
||||
{
|
||||
"question": "Кто является главным тренером UNICS в сезоне 2024/2025?",
|
||||
"options": [
|
||||
"Александр Волков",
|
||||
"Велимир Перасович",
|
||||
"Андрей Мальцев",
|
||||
"Димитрис Прифтис"
|
||||
],
|
||||
"correct_answer": "Велимир Перасович",
|
||||
"image_url": "b_eleven"
|
||||
},
|
||||
{
|
||||
"question": "Какая команда была соперником UNICS в финале Кубка Европы 2011 года?",
|
||||
"options": [
|
||||
"Реал Мадрид",
|
||||
"Каха Лабораль",
|
||||
"Локомотив-Кубань",
|
||||
"Црвена Звезда"
|
||||
],
|
||||
"correct_answer": "Каха Лабораль",
|
||||
"image_url": "b_twelve"
|
||||
},
|
||||
{
|
||||
"question": "С какого года UNICS участвует в Евролиге?",
|
||||
"options": [
|
||||
"2005",
|
||||
"2008",
|
||||
"2010",
|
||||
"2011"
|
||||
],
|
||||
"correct_answer": "2011",
|
||||
"image_url": "b_thirteen"
|
||||
},
|
||||
{
|
||||
"question": "Какой титул считается главным достижением UNICS на международной арене?",
|
||||
"options": [
|
||||
"Чемпион Евролиги",
|
||||
"Чемпион Кубка Европы",
|
||||
"Победа в Единой лиге ВТБ",
|
||||
"Победа в Кубке России"
|
||||
],
|
||||
"correct_answer": "Чемпион Кубка Европы",
|
||||
"image_url": "b_fourteen"
|
||||
},
|
||||
{
|
||||
"question": "Какая звезда UNICS дважды становилась лучшим бомбардиром Еврокубка?",
|
||||
"options": [
|
||||
"Кит Лэнгфорд",
|
||||
"Алексей Швед",
|
||||
"Нандо Де Коло",
|
||||
"Артём Параховский"
|
||||
],
|
||||
"correct_answer": "Кит Лэнгфорд",
|
||||
"image_url": "b_fifteen"
|
||||
},
|
||||
{
|
||||
"question": "Сколько раз UNICS выигрывал Кубок России?",
|
||||
"options": [
|
||||
"1",
|
||||
"2",
|
||||
"3",
|
||||
"4"
|
||||
],
|
||||
"correct_answer": "3",
|
||||
"image_url": "b_sixteen"
|
||||
},
|
||||
{
|
||||
"question": "Какое место занял UNICS в Единой лиге ВТБ в сезоне 2020/2021?",
|
||||
"options": [
|
||||
"1-е",
|
||||
"2-е",
|
||||
"3-е",
|
||||
"4-е"
|
||||
],
|
||||
"correct_answer": "2-е",
|
||||
"image_url": "b_seventeen"
|
||||
},
|
||||
{
|
||||
"question": "В каком году УНИКС впервые выиграл Единую Лигу ВТБ?",
|
||||
"options": [
|
||||
"2009",
|
||||
"2011",
|
||||
"2015",
|
||||
"2023"
|
||||
],
|
||||
"correct_answer": "2023",
|
||||
"image_url": "b_eighteen"
|
||||
},
|
||||
{
|
||||
"question": "А сейчас самый главный вопрос. Сколько зубов выбил Лабери Уайту в финале ЕЛВТБ в 2023 году😁?",
|
||||
"options": [
|
||||
"1",
|
||||
"2",
|
||||
"3",
|
||||
"4",
|
||||
"уже не смешно вообще-то."
|
||||
],
|
||||
"correct_answer": "4",
|
||||
"image_url": "b_nineteen"
|
||||
}
|
||||
]
|
||||
},
|
||||
"hockey": {
|
||||
"intro_text": "Давайте узнаем, насколько вы хорошо знаете Ак Барс!",
|
||||
"intro_image": "intro_hockey",
|
||||
"questions": [
|
||||
{
|
||||
"question": "В каком году был основан хоккейный клуб Ак Барс?",
|
||||
"options": [
|
||||
"1946",
|
||||
"1956",
|
||||
"1960",
|
||||
"1990"
|
||||
],
|
||||
"correct_answer": "1956",
|
||||
"image_url": "h_one"
|
||||
},
|
||||
{
|
||||
"question": "Что означает название \"Ак Барс\"?",
|
||||
"options": [
|
||||
"Белый барс",
|
||||
"Сильный барс",
|
||||
"Свирепый барс",
|
||||
"Ледяной барс"
|
||||
],
|
||||
"correct_answer": "Белый барс",
|
||||
"image_url": "h_two"
|
||||
},
|
||||
{
|
||||
"question": "Какие цвета традиционно используются в форме Ак Барса?",
|
||||
"options": [
|
||||
"Красный, зелёный и белый",
|
||||
"Синий, белый и чёрный",
|
||||
"Жёлтый, чёрный и белый",
|
||||
"Красный, чёрный и белый"
|
||||
],
|
||||
"correct_answer": "Красный, зелёный и белый",
|
||||
"image_url": "h_three"
|
||||
},
|
||||
{
|
||||
"question": "На какой арене выступает Ак Барс?",
|
||||
"options": [
|
||||
"Баскет-холл",
|
||||
"Татнефть Арена",
|
||||
"Центральный стадион",
|
||||
"Казань Арена"
|
||||
],
|
||||
"correct_answer": "Татнефть Арена",
|
||||
"image_url": "h_four"
|
||||
},
|
||||
{
|
||||
"question": "Сколько раз Ак Барс становился чемпионом КХЛ?",
|
||||
"options": [
|
||||
"2",
|
||||
"3",
|
||||
"4",
|
||||
"5"
|
||||
],
|
||||
"correct_answer": "3",
|
||||
"image_url": "h_five"
|
||||
},
|
||||
{
|
||||
"question": "В каком сезоне Ак Барс впервые выиграл Кубок Гагарина?",
|
||||
"options": [
|
||||
"2008/2009",
|
||||
"2009/2010",
|
||||
"2010/2011",
|
||||
"2011/2012"
|
||||
],
|
||||
"correct_answer": "2008/2009",
|
||||
"image_url": "h_six"
|
||||
},
|
||||
{
|
||||
"question": "Какой игрок Ак Барса является одним из лучших бомбардиров клуба за всю историю?",
|
||||
"options": [
|
||||
"Александр Радулов",
|
||||
"Данис Зарипов",
|
||||
"Алексей Морозов",
|
||||
"Евгений Малкин"
|
||||
],
|
||||
"correct_answer": "Данис Зарипов",
|
||||
"image_url": "h_seven"
|
||||
},
|
||||
{
|
||||
"question": "Кто является соперником Ак Барса в Зеленом дерби дерби?",
|
||||
"options": [
|
||||
"Салават Юлаев",
|
||||
"Металлург Магнитогорск",
|
||||
"Авангард Омск",
|
||||
"ЦСКА Москва"
|
||||
],
|
||||
"correct_answer": "Салават Юлаев",
|
||||
"image_url": "h_eight"
|
||||
},
|
||||
{
|
||||
"question": "Какой талисман представлен у хоккейного клуба Ак Барс?",
|
||||
"options": [
|
||||
"Белый тигр",
|
||||
"Лев",
|
||||
"Барс",
|
||||
"Медведь"
|
||||
],
|
||||
"correct_answer": "Барс",
|
||||
"image_url": "h_nine"
|
||||
},
|
||||
{
|
||||
"question": "Кто был главным тренером Ак Барса в сезоне 2023/2024?",
|
||||
"options": [
|
||||
"Дмитрий Квартальнов",
|
||||
"Зинэтула Билялетдинов",
|
||||
"Андрей Скабелка",
|
||||
"Валерий Брагин"
|
||||
],
|
||||
"correct_answer": "Зинэтула Билялетдинов",
|
||||
"image_url": "h_ten"
|
||||
},
|
||||
{
|
||||
"question": "Сколько раз Ак Барс выигрывал чемпионат России до создания КХЛ?",
|
||||
"options": [
|
||||
"2",
|
||||
"3",
|
||||
"4",
|
||||
"5"
|
||||
],
|
||||
"correct_answer": "2",
|
||||
"image_url": "h_eleven"
|
||||
},
|
||||
{
|
||||
"question": "Кто из следующих игроков не играл за Ак Барс?",
|
||||
"options": [
|
||||
"Илья Никулин",
|
||||
"Сергей Мозякин",
|
||||
"Алексей Терещенко",
|
||||
"Никита Зайцев"
|
||||
],
|
||||
"correct_answer": "Сергей Мозякин",
|
||||
"image_url": "h_twelve"
|
||||
},
|
||||
{
|
||||
"question": "Какая команда стала соперником Ак Барса в финале Кубка Гагарина 2018 года?",
|
||||
"options": [
|
||||
"Авангард Омск",
|
||||
"Салават Юлаев",
|
||||
"ЦСКА Москва",
|
||||
"СКА Санкт-Петербург"
|
||||
],
|
||||
"correct_answer": "ЦСКА Москва",
|
||||
"image_url": "h_thirteen"
|
||||
},
|
||||
{
|
||||
"question": "Кто является рекордсменом Ак Барса по числу игр в составе команды?",
|
||||
"options": [
|
||||
"Данис Зарипов",
|
||||
"Илья Никулин",
|
||||
"Алексей Морозов",
|
||||
"Виктор Тихонов"
|
||||
],
|
||||
"correct_answer": "Илья Никулин",
|
||||
"image_url": "h_fourteen"
|
||||
},
|
||||
{
|
||||
"question": "Какой тренер привёл Ак Барс к их первому чемпионству в КХЛ?",
|
||||
"options": [
|
||||
"Зинэтула Билялетдинов",
|
||||
"Владимир Крикунов",
|
||||
"Дмитрий Квартальнов",
|
||||
"Александр Медведев"
|
||||
],
|
||||
"correct_answer": "Зинэтула Билялетдинов",
|
||||
"image_url": "h_fifteen"
|
||||
},
|
||||
{
|
||||
"question": "Какое прозвище имеет команда Ак Барс среди своих фанатов?",
|
||||
"options": [
|
||||
"Белые Барсы",
|
||||
"Зелёные Машины",
|
||||
"Казанские Барсы",
|
||||
"Зелёная Армия"
|
||||
],
|
||||
"correct_answer": "Зелёная Армия",
|
||||
"image_url": "h_sixteen"
|
||||
}
|
||||
]
|
||||
},
|
||||
"football": {
|
||||
"intro_text": "Давайте узнаем, насколько вы хорошо знаете Рубин!",
|
||||
"intro_image": "intro_football",
|
||||
"questions": [
|
||||
{
|
||||
"question": "В каком году был основан футбольный клуб Рубин?",
|
||||
"options": [
|
||||
"1936",
|
||||
"1958",
|
||||
"1964",
|
||||
"1972"
|
||||
],
|
||||
"correct_answer": "1958",
|
||||
"image_url": "f_one"
|
||||
},
|
||||
{
|
||||
"question": "Какие цвета традиционно используются в форме Рубина?",
|
||||
"options": [
|
||||
"Красный и белый",
|
||||
"Зелёный и белый",
|
||||
"Красный и зелёный",
|
||||
"Жёлтый и синий"
|
||||
],
|
||||
"correct_answer": "Красный и зелёный",
|
||||
"image_url": "f_two"
|
||||
},
|
||||
{
|
||||
"question": "Как называется домашний стадион ФК Рубин?",
|
||||
"options": [
|
||||
"Казань Арена",
|
||||
"Центральный стадион",
|
||||
"Татнефть Арена",
|
||||
"Ак Барс Арена"
|
||||
],
|
||||
"correct_answer": "Ак Барс Арена",
|
||||
"image_url": "f_three"
|
||||
},
|
||||
{
|
||||
"question": "В каком году Рубин впервые стал чемпионом России?",
|
||||
"options": [
|
||||
"2006",
|
||||
"2008",
|
||||
"2009",
|
||||
"2010"
|
||||
],
|
||||
"correct_answer": "2008",
|
||||
"image_url": "f_four"
|
||||
},
|
||||
{
|
||||
"question": "Сколько раз ФК Рубин становился чемпионом России?",
|
||||
"options": [
|
||||
"1",
|
||||
"2",
|
||||
"3",
|
||||
"4"
|
||||
],
|
||||
"correct_answer": "2",
|
||||
"image_url": "f_five"
|
||||
},
|
||||
{
|
||||
"question": "Кто был главным тренером Рубина во время их первого чемпионства в 2008 году?",
|
||||
"options": [
|
||||
"Гус Хиддинк",
|
||||
"Курбан Бердыев",
|
||||
"Юрий Сёмин",
|
||||
"Валерий Карпин"
|
||||
],
|
||||
"correct_answer": "Курбан Бердыев",
|
||||
"image_url": "f_six"
|
||||
},
|
||||
{
|
||||
"question": "С каким счетом Рубин обыграл Барселону в их знаменитой победе в Лиге чемпионов в 2009 году?",
|
||||
"options": [
|
||||
"2:1",
|
||||
"1:0",
|
||||
"3:0",
|
||||
"3:1"
|
||||
],
|
||||
"correct_answer": "2:1",
|
||||
"image_url": "f_seven"
|
||||
},
|
||||
{
|
||||
"question": "Какой игрок стал лучшим бомбардиром Рубина в сезоне 2009/2010?",
|
||||
"options": [
|
||||
"Александр Бухаров",
|
||||
"Саломон Рондон",
|
||||
"Гёкдениз Карадениз",
|
||||
"Сергей Семак"
|
||||
],
|
||||
"correct_answer": "Александр Бухаров",
|
||||
"image_url": "f_eight"
|
||||
},
|
||||
{
|
||||
"question": "Какое место в группе занял Рубин в своём дебютном сезоне в Лиге чемпионов УЕФА?",
|
||||
"options": [
|
||||
"1-е",
|
||||
"2-е",
|
||||
"3-е",
|
||||
"4-е"
|
||||
],
|
||||
"correct_answer": "3-е",
|
||||
"image_url": "f_nine"
|
||||
},
|
||||
{
|
||||
"question": "Кто стал капитаном Рубина в сезоне 2023/2024?",
|
||||
"options": [
|
||||
"Ильзат Ахметов",
|
||||
"Олег Данченко",
|
||||
"Андрес Панков",
|
||||
"Дмитрий Тарасов"
|
||||
],
|
||||
"correct_answer": "Ильзат Ахметов",
|
||||
"image_url": "f_ten"
|
||||
},
|
||||
{
|
||||
"question": "Какой российский тренер дебютировал за Рубин в роли главного тренера после ухода Курбана Бердыева?",
|
||||
"options": [
|
||||
"Сергей Семак",
|
||||
"Роман Шаронов",
|
||||
"Виктор Гончаренко",
|
||||
"Александр Бородюк"
|
||||
],
|
||||
"correct_answer": "Роман Шаронов",
|
||||
"image_url": "f_eleven"
|
||||
},
|
||||
{
|
||||
"question": "На каком турнире Рубин выиграл Атлетико Мадрид в 2012 году?",
|
||||
"options": [
|
||||
"Лига Европы",
|
||||
"Суперкубок УЕФА",
|
||||
"Кубок Интертото",
|
||||
"Кубок России"
|
||||
],
|
||||
"correct_answer": "Лига Европы",
|
||||
"image_url": "f_twelve"
|
||||
},
|
||||
{
|
||||
"question": "Какое самое крупное достижение Рубина в Еврокубках?",
|
||||
"options": [
|
||||
"Полуфинал Лиги Европы",
|
||||
"Четвертьфинал Лиги чемпионов",
|
||||
"Четвертьфинал Лиги Европы",
|
||||
"Групповой этап Лиги чемпионов"
|
||||
],
|
||||
"correct_answer": "Четвертьфинал Лиги Европы",
|
||||
"image_url": "f_thirteen"
|
||||
},
|
||||
{
|
||||
"question": "Какой игрок Рубина отличился своим великолепным голом с центра поля против Барселоны?",
|
||||
"options": [
|
||||
"Гёкдениз Карадениз",
|
||||
"Роман Еременко",
|
||||
"Александр Рязанцев",
|
||||
"Александр Бухаров"
|
||||
],
|
||||
"correct_answer": "Александр Рязанцев",
|
||||
"image_url": "f_fourteen"
|
||||
},
|
||||
{
|
||||
"question": "Кто стал лучшим бомбардиром Рубина за всю историю клуба?",
|
||||
"options": [
|
||||
"Александр Бухаров",
|
||||
"Саломон Рондон",
|
||||
"Гёкдениз Карадениз",
|
||||
"Сергей Семак"
|
||||
],
|
||||
"correct_answer": "Гёкдениз Карадениз",
|
||||
"image_url": "f_fifteen"
|
||||
},
|
||||
{
|
||||
"question": "Какой клуб стал принципиальным соперником Рубина в 2010-х годах?",
|
||||
"options": [
|
||||
"Зенит",
|
||||
"Спартак",
|
||||
"Локомотив",
|
||||
"ЦСКА"
|
||||
],
|
||||
"correct_answer": "Зенит",
|
||||
"image_url": "f_sixteen"
|
||||
}
|
||||
]
|
||||
},
|
||||
"volleyball": {
|
||||
"intro_text": "Давайте узнаем, насколько вы хорошо знаете волейбольный Зенит-Казань и Динамо-Ак Барс!",
|
||||
"intro_image": "intro_volleyball",
|
||||
"questions": [
|
||||
{
|
||||
"question": "В каком году был основан волейбольный клуб Зенит-Казань?",
|
||||
"options": [
|
||||
"2000",
|
||||
"2003",
|
||||
"2007",
|
||||
"2010"
|
||||
],
|
||||
"correct_answer": "2000",
|
||||
"image_url": "v_one"
|
||||
},
|
||||
{
|
||||
"question": "Сколько раз Зенит-Казань выигрывал Лигу чемпионов?",
|
||||
"options": [
|
||||
"4",
|
||||
"5",
|
||||
"6",
|
||||
"7"
|
||||
],
|
||||
"correct_answer": "6",
|
||||
"image_url": "v_two"
|
||||
},
|
||||
{
|
||||
"question": "Кто является самым титулованным игроком в истории Зенита-Казань?",
|
||||
"options": [
|
||||
"Максим Михайлов",
|
||||
"Вильфредо Леон",
|
||||
"Алексей Вербов",
|
||||
"Мэттью Андерсон"
|
||||
],
|
||||
"correct_answer": "Максим Михайлов",
|
||||
"image_url": "v_three"
|
||||
},
|
||||
{
|
||||
"question": "Как называется домашняя арена Зенита-Казань?",
|
||||
"options": [
|
||||
"Татнефть Арена",
|
||||
"Баскет-Холл",
|
||||
"Центр волейбола Санкт-Петербург",
|
||||
"Казань Арена"
|
||||
],
|
||||
"correct_answer": "Центр волейбола Санкт-Петербург",
|
||||
"image_url": "v_four"
|
||||
},
|
||||
{
|
||||
"question": "Кто был главным тренером Зенита-Казань в период их доминирования в 2010-х годах?",
|
||||
"options": [
|
||||
"Алексей Вербов",
|
||||
"Владимир Алекно",
|
||||
"Данте Амарал",
|
||||
"Михаил Лихачев"
|
||||
],
|
||||
"correct_answer": "Владимир Алекно",
|
||||
"image_url": "v_five"
|
||||
},
|
||||
{
|
||||
"question": "Какие цвета используются в форме Зенита-Казань?",
|
||||
"options": [
|
||||
"Синий и белый",
|
||||
"Синий и серебристый",
|
||||
"Зелёный и белый",
|
||||
"Красный и синий"
|
||||
],
|
||||
"correct_answer": "Синий и белый",
|
||||
"image_url": "v_six"
|
||||
},
|
||||
{
|
||||
"question": "В каком году Зенит-Казань выиграл свой первый чемпионат России?",
|
||||
"options": [
|
||||
"2005",
|
||||
"2007",
|
||||
"2009",
|
||||
"2011"
|
||||
],
|
||||
"correct_answer": "2007",
|
||||
"image_url": "v_seven"
|
||||
},
|
||||
{
|
||||
"question": "Когда была основана женская команда Динамо-Ак Барс?",
|
||||
"options": [
|
||||
"2002",
|
||||
"2007",
|
||||
"2012",
|
||||
"2015"
|
||||
],
|
||||
"correct_answer": "2002",
|
||||
"image_url": "v_eight"
|
||||
},
|
||||
{
|
||||
"question": "Какое достижение является наиболее значимым для Динамо-Ак Барс?",
|
||||
"options": [
|
||||
"Победа в Лиге чемпионов",
|
||||
"Победа в чемпионате России",
|
||||
"Победа в Кубке России",
|
||||
"Победа в Кубке Европейской конфедерации волейбола"
|
||||
],
|
||||
"correct_answer": "Победа в чемпионате России",
|
||||
"image_url": "v_nine"
|
||||
},
|
||||
{
|
||||
"question": "В каком году женская команда Динамо-Ак Барс выиграла свой первый Кубок России?",
|
||||
"options": [
|
||||
"2008",
|
||||
"2010",
|
||||
"2012",
|
||||
"2014"
|
||||
],
|
||||
"correct_answer": "2010",
|
||||
"image_url": "v_ten"
|
||||
},
|
||||
{
|
||||
"question": "Сколько раз женская команда Динамо-Ак Барс выигрывала чемпионат России?",
|
||||
"options": [
|
||||
"5",
|
||||
"2",
|
||||
"7",
|
||||
"4"
|
||||
],
|
||||
"correct_answer": "7",
|
||||
"image_url": "v_eleven"
|
||||
},
|
||||
{
|
||||
"question": "Какая из этих звезд мирового волейбола играла за Зенит-Казань?",
|
||||
"options": [
|
||||
"Вильфредо Леон",
|
||||
"Матей Казийский",
|
||||
"Жиба",
|
||||
"Тревор Клеверли"
|
||||
],
|
||||
"correct_answer": "Вильфредо Леон",
|
||||
"image_url": "v_twelve"
|
||||
}
|
||||
]
|
||||
},
|
||||
"water-polo": {
|
||||
"intro_text": "Давайте узнаем, насколько вы хорошо знаете \"Синтез\"!",
|
||||
"intro_image": "intro_water_polo",
|
||||
"questions": [
|
||||
{
|
||||
"question": "В каком году был основан воднопольный клуб Синтез?",
|
||||
"options": [
|
||||
"1974",
|
||||
"1980",
|
||||
"1985",
|
||||
"1991"
|
||||
],
|
||||
"correct_answer": "1974",
|
||||
"image_url": "w_one"
|
||||
},
|
||||
{
|
||||
"question": "Сколько раз Синтез выигрывал чемпионат России по водному поло?",
|
||||
"options": [
|
||||
"5",
|
||||
"8",
|
||||
"10",
|
||||
"12"
|
||||
],
|
||||
"correct_answer": "10",
|
||||
"image_url": "w_two"
|
||||
},
|
||||
{
|
||||
"question": "В каком году Синтез выиграл Кубок Европейской водной лиги (LEN Trophy)?",
|
||||
"options": [
|
||||
"2005",
|
||||
"2007",
|
||||
"2010",
|
||||
"2012"
|
||||
],
|
||||
"correct_answer": "2007",
|
||||
"image_url": "w_three"
|
||||
},
|
||||
{
|
||||
"question": "Сколько игроков одновременно находится в игре от одной команды в водном поло?",
|
||||
"options": [
|
||||
"5",
|
||||
"6",
|
||||
"7",
|
||||
"8"
|
||||
],
|
||||
"correct_answer": "7",
|
||||
"image_url": "w_four"
|
||||
},
|
||||
{
|
||||
"question": "Какая длина стандартного бассейна для водного поло?",
|
||||
"options": [
|
||||
"20 метров",
|
||||
"25 метров",
|
||||
"30 метров",
|
||||
"50 метров"
|
||||
],
|
||||
"correct_answer": "30 метров",
|
||||
"image_url": "w_five"
|
||||
},
|
||||
{
|
||||
"question": "Какая команда является главным соперником Синтеза в России?",
|
||||
"options": [
|
||||
"Спартак Волгоград",
|
||||
"Динамо Москва",
|
||||
"Локомотив Краснодар",
|
||||
"Зенит Санкт-Петербург"
|
||||
],
|
||||
"correct_answer": "Спартак Волгоград",
|
||||
"image_url": "w_six"
|
||||
}
|
||||
]
|
||||
},
|
||||
"history": {
|
||||
"intro_text": "Давайте узнаем, насколько вы хорошо знаете историю Казани!",
|
||||
"intro_image": "culture",
|
||||
"questions": [
|
||||
{
|
||||
"question": "Когда Казань была основана?",
|
||||
"options": [
|
||||
"1000 год",
|
||||
"1156 год",
|
||||
"1230 год",
|
||||
"1323 год"
|
||||
],
|
||||
"correct_answer": "1000 год",
|
||||
"image_url": "culture"
|
||||
},
|
||||
{
|
||||
"question": "Как называется главная река, протекающая через Казань?",
|
||||
"options": [
|
||||
"Волга",
|
||||
"Казанка",
|
||||
"Кама",
|
||||
"Иж"
|
||||
],
|
||||
"correct_answer": "Казанка",
|
||||
"image_url": "culture"
|
||||
},
|
||||
{
|
||||
"question": "Кто был первым казанским ханом?",
|
||||
"options": [
|
||||
"Улу-Мухаммед",
|
||||
"Ахмат",
|
||||
"Шах-Али",
|
||||
"Мамука"
|
||||
],
|
||||
"correct_answer": "Улу-Мухаммед",
|
||||
"image_url": "culture"
|
||||
},
|
||||
{
|
||||
"question": "Как называется главный спортивный комплекс Казани, где проводились Универсиада 2013 года?",
|
||||
"options": [
|
||||
"Казан Арена",
|
||||
"Татнефть Арена",
|
||||
"Бугульминская арена",
|
||||
"Дворец спорта \"Ак Барс\""
|
||||
],
|
||||
"correct_answer": "Казан Арена",
|
||||
"image_url": "culture"
|
||||
},
|
||||
{
|
||||
"question": "Какая мечеть в Казани считается одной из самых больших в России?",
|
||||
"options": [
|
||||
"Мечеть Кул Шариф",
|
||||
"Мечеть Марий Эл",
|
||||
"Мечеть Айша",
|
||||
"Мечеть имама Мухаммада"
|
||||
],
|
||||
"correct_answer": "Мечеть Кул Шариф",
|
||||
"image_url": "culture"
|
||||
},
|
||||
{
|
||||
"question": "Как называется площадь, на которой расположены Казанский Кремль и мечеть Кул Шариф?",
|
||||
"options": [
|
||||
"Площадь Вахитова",
|
||||
"Площадь Свободы",
|
||||
"Площадь Кремля",
|
||||
"Площадь Революции"
|
||||
],
|
||||
"correct_answer": "Площадь Кремля",
|
||||
"image_url": "culture"
|
||||
},
|
||||
{
|
||||
"question": "Какой символ Казани изображён на гербе города?",
|
||||
"options": [
|
||||
"Дракон",
|
||||
"Тигр",
|
||||
"Лев",
|
||||
"Орел"
|
||||
],
|
||||
"correct_answer": "Дракон",
|
||||
"image_url": "culture"
|
||||
},
|
||||
{
|
||||
"question": "Какой архитектор спроектировал Казанский Кремль?",
|
||||
"options": [
|
||||
"Иван Зарудный",
|
||||
"Фёдор Бенжамин",
|
||||
"Андрей Ушаков",
|
||||
"Юрий Дашевский"
|
||||
],
|
||||
"correct_answer": "Андрей Ушаков",
|
||||
"image_url": "culture"
|
||||
},
|
||||
{
|
||||
"question": "Какой из этих вузов находится в Казани?",
|
||||
"options": [
|
||||
"Московский государственный университет",
|
||||
"Казанский федеральный университет",
|
||||
"Санкт-Петербургский политехнический университет",
|
||||
"Новосибирский государственный университет"
|
||||
],
|
||||
"correct_answer": "Казанский федеральный университет",
|
||||
"image_url": "culture"
|
||||
},
|
||||
{
|
||||
"question": "Как называется крупнейшая в Казани улица, которая также является центром ночной жизни города?",
|
||||
"options": [
|
||||
"Кремлевская улица",
|
||||
"Баумана улица",
|
||||
"Пушкина улица",
|
||||
"Каюма Насыри улица"
|
||||
],
|
||||
"correct_answer": "Баумана улица",
|
||||
"image_url": "culture"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,908 +0,0 @@
|
||||
{
|
||||
"basketball": {
|
||||
"intro_text": "UNICSны никадәр яхшы беләсең икән, тикшерик!",
|
||||
"intro_image": "intro_basket",
|
||||
"questions": [
|
||||
{
|
||||
"question": "UNICS баскетбол клубы кайсы елда оешты?",
|
||||
"options": [
|
||||
"1988",
|
||||
"1991",
|
||||
"1995",
|
||||
"2000"
|
||||
],
|
||||
"correct_answer": "1991",
|
||||
"image_url": "b_one"
|
||||
},
|
||||
{
|
||||
"question": "\"UNICS\" аббревиатурасы нәрсәне аңлата?",
|
||||
"options": [
|
||||
"Университет, Инновацияләр, Спорт",
|
||||
"Университет, Мәдәният, Спорт",
|
||||
"Университет Казан Спорты",
|
||||
"Уникаль Спорт"
|
||||
],
|
||||
"correct_answer": "Университет, Мәдәният, Спорт",
|
||||
"image_url": "b_two"
|
||||
},
|
||||
{
|
||||
"question": "Уен формасының төп төсләре нинди?",
|
||||
"options": [
|
||||
"Кызыл һәм ак",
|
||||
"Яшел һәм ак",
|
||||
"Күк һәм сары",
|
||||
"Кара һәм алтын"
|
||||
],
|
||||
"correct_answer": "Яшел һәм ак",
|
||||
"image_url": "b_three"
|
||||
},
|
||||
{
|
||||
"question": "UNICSның ту home арена исемен ничек атыйлар?",
|
||||
"options": [
|
||||
"Татнефть Арена",
|
||||
"Үзәк стадион",
|
||||
"Баскет-холл",
|
||||
"Казан Арена"
|
||||
],
|
||||
"correct_answer": "Баскет-холл",
|
||||
"image_url": "b_four"
|
||||
},
|
||||
{
|
||||
"question": "UNICS кайсы елда Еврокубокны яулады?",
|
||||
"options": [
|
||||
"2009",
|
||||
"2011",
|
||||
"2013",
|
||||
"2015"
|
||||
],
|
||||
"correct_answer": "2011",
|
||||
"image_url": "b_five"
|
||||
},
|
||||
{
|
||||
"question": "Евролиганың иң яхшы бомбардиры булган нинди танылган Америка баскетболчысы UNICSка килде?",
|
||||
"options": [
|
||||
"Майкл Джордан",
|
||||
"Кит Лэнгфорд",
|
||||
"Леброн Джеймс",
|
||||
"Куртис Джерреллс"
|
||||
],
|
||||
"correct_answer": "Кит Лэнгфорд",
|
||||
"image_url": "b_six"
|
||||
},
|
||||
{
|
||||
"question": "UNICSның ту home арена, Баскет-холл, күпме урынга ия?",
|
||||
"options": [
|
||||
"3000",
|
||||
"5000",
|
||||
"7000",
|
||||
"10000"
|
||||
],
|
||||
"correct_answer": "7000",
|
||||
"image_url": "b_seven"
|
||||
},
|
||||
{
|
||||
"question": "UNICS Еврокубокны яулаганда аның баш тренеры кем иде?",
|
||||
"options": [
|
||||
"Димитрис Итудис",
|
||||
"Евгений Пашутин",
|
||||
"Зоран Лукич",
|
||||
"Андрей Кириленко"
|
||||
],
|
||||
"correct_answer": "Евгений Пашутин",
|
||||
"image_url": "b_eight"
|
||||
},
|
||||
{
|
||||
"question": "Единой Лига ВТБда UNICSның традицион иң зур көндәше кем?",
|
||||
"options": [
|
||||
"ЦСКА Мәскәү",
|
||||
"Локомотив-Кубань",
|
||||
"Зенит Санкт-Петербург",
|
||||
"Нижний Новгород"
|
||||
],
|
||||
"correct_answer": "ЦСКА Мәскәү",
|
||||
"image_url": "b_nine"
|
||||
},
|
||||
{
|
||||
"question": "UNICS кайсы трофейны әле алмаган?",
|
||||
"options": [
|
||||
"Единой лига ВТБ",
|
||||
"Россия Кубогы",
|
||||
"Евролига",
|
||||
"Еврокубок"
|
||||
],
|
||||
"correct_answer": "Евролига",
|
||||
"image_url": "b_ten"
|
||||
},
|
||||
{
|
||||
"question": "2024/2025 сезонында UNICSның баш тренеры кем?",
|
||||
"options": [
|
||||
"Александр Волков",
|
||||
"Велимир Перасович",
|
||||
"Андрей Мальцев",
|
||||
"Димитрис Прифтис"
|
||||
],
|
||||
"correct_answer": "Велимир Перасович",
|
||||
"image_url": "b_eleven"
|
||||
},
|
||||
{
|
||||
"question": "UNICS 2011 елда Еврокубок финалында кемгә каршы уен үтте?",
|
||||
"options": [
|
||||
"Реал Мадрид",
|
||||
"Каха Лабораль",
|
||||
"Локомотив-Кубань",
|
||||
"Црвена Звезда"
|
||||
],
|
||||
"correct_answer": "Каха Лабораль",
|
||||
"image_url": "b_twelve"
|
||||
},
|
||||
{
|
||||
"question": "UNICS кайсы елдан башлап Евролигада катнаша?",
|
||||
"options": [
|
||||
"2005",
|
||||
"2008",
|
||||
"2010",
|
||||
"2011"
|
||||
],
|
||||
"correct_answer": "2011",
|
||||
"image_url": "b_thirteen"
|
||||
},
|
||||
{
|
||||
"question": "UNICSның халыкара аренада төп казанышы нинди титул белән билгеләнә?",
|
||||
"options": [
|
||||
"Евролига чемпионы",
|
||||
"Еврокубок чемпионы",
|
||||
"Единой лига ВТБ җиңүчесе",
|
||||
"Россия Кубогы җиңүчесе"
|
||||
],
|
||||
"correct_answer": "Еврокубок чемпионы",
|
||||
"image_url": "b_fourteen"
|
||||
},
|
||||
{
|
||||
"question": "UNICSның кайсы йолдызы ике тапкыр Еврокубокның иң яхшы бомбардиры булды?",
|
||||
"options": [
|
||||
"Кит Лэнгфорд",
|
||||
"Алексей Швед",
|
||||
"Нандо Де Коло",
|
||||
"Артём Параховский"
|
||||
],
|
||||
"correct_answer": "Кит Лэнгфорд",
|
||||
"image_url": "b_fifteen"
|
||||
},
|
||||
{
|
||||
"question": "UNICS Россия Кубогын ничә тапкыр яулаган?",
|
||||
"options": [
|
||||
"1",
|
||||
"2",
|
||||
"3",
|
||||
"4"
|
||||
],
|
||||
"correct_answer": "3",
|
||||
"image_url": "b_sixteen"
|
||||
},
|
||||
{
|
||||
"question": "2020/2021 сезонында UNICS Единой Лига ВТБда кайсы урынны алды?",
|
||||
"options": [
|
||||
"1нче",
|
||||
"2нче",
|
||||
"3нче",
|
||||
"4нче"
|
||||
],
|
||||
"correct_answer": "2нче",
|
||||
"image_url": "b_seventeen"
|
||||
},
|
||||
{
|
||||
"question": "UNICS кайсы елда беренче тапкыр Единой Лигу ВТБны яулады?",
|
||||
"options": [
|
||||
"2009",
|
||||
"2011",
|
||||
"2015",
|
||||
"2023"
|
||||
],
|
||||
"correct_answer": "2023",
|
||||
"image_url": "b_eighteen"
|
||||
},
|
||||
{
|
||||
"question": "Ә хәзер иң мөһим сорау. Лабери 2023 eлда Уайттың ничә тешен төшерде?😁",
|
||||
"options": [
|
||||
"1",
|
||||
"2",
|
||||
"3",
|
||||
"4",
|
||||
"Шаярту бөттө инде."
|
||||
],
|
||||
"correct_answer": "4",
|
||||
"image_url": "b_nineteen"
|
||||
}
|
||||
]
|
||||
},
|
||||
"hockey": {
|
||||
"intro_text": "Ак Барсны никадәр яхшы беләсең икән, тикшерик!",
|
||||
"intro_image": "intro_hockey",
|
||||
"questions": [
|
||||
{
|
||||
"question": "Ак Барс хоккей клубы кайсы елда оешты?",
|
||||
"options": [
|
||||
"1946",
|
||||
"1956",
|
||||
"1960",
|
||||
"1990"
|
||||
],
|
||||
"correct_answer": "1956",
|
||||
"image_url": "h_one"
|
||||
},
|
||||
{
|
||||
"question": "\"Ак Барс\" исеме нәрсәне аңлата?",
|
||||
"options": [
|
||||
"Ак барс",
|
||||
"Көчле барс",
|
||||
"Яман барс",
|
||||
"Мөслим барс"
|
||||
],
|
||||
"correct_answer": "Ак барс",
|
||||
"image_url": "h_two"
|
||||
},
|
||||
{
|
||||
"question": "Ак Барсның форма төсләре нинди?",
|
||||
"options": [
|
||||
"Кызыл, яшел һәм ак",
|
||||
"Күк, ак һәм кара",
|
||||
"Сары, кара һәм ак",
|
||||
"Кызыл, кара һәм ак"
|
||||
],
|
||||
"correct_answer": "Кызыл, яшел һәм ак",
|
||||
"image_url": "h_three"
|
||||
},
|
||||
{
|
||||
"question": "Ак Барс кайсы аренада чыгыш ясый?",
|
||||
"options": [
|
||||
"Баскет-холл",
|
||||
"Татнефть Арена",
|
||||
"Үзәк стадион",
|
||||
"Казан Арена"
|
||||
],
|
||||
"correct_answer": "Татнефть Арена",
|
||||
"image_url": "h_four"
|
||||
},
|
||||
{
|
||||
"question": "Ак Барс КХЛ чемпионы булган ничә тапкыр?",
|
||||
"options": [
|
||||
"2",
|
||||
"3",
|
||||
"4",
|
||||
"5"
|
||||
],
|
||||
"correct_answer": "3",
|
||||
"image_url": "h_five"
|
||||
},
|
||||
{
|
||||
"question": "Ак Барс беренче тапкыр Гагарин Кубогын кайсы сезонда яулады?",
|
||||
"options": [
|
||||
"2008/2009",
|
||||
"2009/2010",
|
||||
"2010/2011",
|
||||
"2011/2012"
|
||||
],
|
||||
"correct_answer": "2008/2009",
|
||||
"image_url": "h_six"
|
||||
},
|
||||
{
|
||||
"question": "Ак Барсның иң яхшы бомбардирларының берсе булган кайсы уенчы?",
|
||||
"options": [
|
||||
"Александр Радулов",
|
||||
"Данис Зарипов",
|
||||
"Алексей Морозов",
|
||||
"Евгений Малкин"
|
||||
],
|
||||
"correct_answer": "Данис Зарипов",
|
||||
"image_url": "h_seven"
|
||||
},
|
||||
{
|
||||
"question": "Ак Барсның төп көндәше кемдер 'Яшел дерби'да?",
|
||||
"options": [
|
||||
"Салават Юлаев",
|
||||
"Металлург Магнитогорск",
|
||||
"Авангард Омск",
|
||||
"ЦСКА Мәскәү"
|
||||
],
|
||||
"correct_answer": "Салават Юлаев",
|
||||
"image_url": "h_eight"
|
||||
},
|
||||
{
|
||||
"question": "Ак Барсның талисманы нәрсә?",
|
||||
"options": [
|
||||
"Ак тигр",
|
||||
"Арыслан",
|
||||
"Барс",
|
||||
"Аю"
|
||||
],
|
||||
"correct_answer": "Барс",
|
||||
"image_url": "h_nine"
|
||||
},
|
||||
{
|
||||
"question": "2023/2024 сезонында Ак Барсның баш тренеры кем булган?",
|
||||
"options": [
|
||||
"Дмитрий Квартальнов",
|
||||
"Зинэтула Билялетдинов",
|
||||
"Андрей Скабелка",
|
||||
"Валерий Брагин"
|
||||
],
|
||||
"correct_answer": "Зинэтула Билялетдинов",
|
||||
"image_url": "h_ten"
|
||||
},
|
||||
{
|
||||
"question": "КХЛ оештырылганчы Ак Барс Русия чемпионатын ничә тапкыр яулады?",
|
||||
"options": [
|
||||
"2",
|
||||
"3",
|
||||
"4",
|
||||
"5"
|
||||
],
|
||||
"correct_answer": "2",
|
||||
"image_url": "h_eleven"
|
||||
},
|
||||
{
|
||||
"question": "Бу уенчыларның кайсысы Ак Барс өчен уйнамаган?",
|
||||
"options": [
|
||||
"Илья Никулин",
|
||||
"Сергей Мозякин",
|
||||
"Алексей Терещенко",
|
||||
"Никита Зайцев"
|
||||
],
|
||||
"correct_answer": "Сергей Мозякин",
|
||||
"image_url": "h_twelve"
|
||||
},
|
||||
{
|
||||
"question": "2018 елда Гагарин Кубогының финалында Ак Барсның көндәше кем булды?",
|
||||
"options": [
|
||||
"Авангард Омск",
|
||||
"Салават Юлаев",
|
||||
"ЦСКА Мәскәү",
|
||||
"СКА Санкт-Петербург"
|
||||
],
|
||||
"correct_answer": "ЦСКА Мәскәү",
|
||||
"image_url": "h_thirteen"
|
||||
},
|
||||
{
|
||||
"question": "Ак Барс өчен иң күп уеннар уздырган уенчы кем?",
|
||||
"options": [
|
||||
"Данис Зарипов",
|
||||
"Илья Никулин",
|
||||
"Алексей Морозов",
|
||||
"Виктор Тихонов"
|
||||
],
|
||||
"correct_answer": "Илья Никулин",
|
||||
"image_url": "h_fourteen"
|
||||
},
|
||||
{
|
||||
"question": "Ак Барсны КХЛ чемпионлыгына беренче тапкыр кем тренерлыкка китерде?",
|
||||
"options": [
|
||||
"Зинэтула Билялетдинов",
|
||||
"Владимир Крикунов",
|
||||
"Дмитрий Квартальнов",
|
||||
"Александр Медведев"
|
||||
],
|
||||
"correct_answer": "Зинэтула Билялетдинов",
|
||||
"image_url": "h_fifteen"
|
||||
},
|
||||
{
|
||||
"question": "Ак Барсның фанатлары командасына нинди кушамат бирәләр?",
|
||||
"options": [
|
||||
"Ак Барслар",
|
||||
"Яшел Машиналар",
|
||||
"Казан Барслары",
|
||||
"Яшел Армия"
|
||||
],
|
||||
"correct_answer": "Яшел Армия",
|
||||
"image_url": "h_sixteen"
|
||||
}
|
||||
]
|
||||
},
|
||||
"football": {
|
||||
"intro_text": "Рубин турында ни дәрәҗәдә беләсең, тикшерик!",
|
||||
"intro_image": "intro_football",
|
||||
"questions": [
|
||||
{
|
||||
"question": "Рубин футбол клубы кайсы елда оешты?",
|
||||
"options": [
|
||||
"1936",
|
||||
"1958",
|
||||
"1964",
|
||||
"1972"
|
||||
],
|
||||
"correct_answer": "1958",
|
||||
"image_url": "f_one"
|
||||
},
|
||||
{
|
||||
"question": "Рубинның форма төсләре нинди?",
|
||||
"options": [
|
||||
"Кызыл һәм ак",
|
||||
"Яшел һәм ак",
|
||||
"Кызыл һәм яшел",
|
||||
"Сары һәм зәңгәр"
|
||||
],
|
||||
"correct_answer": "Кызыл һәм яшел",
|
||||
"image_url": "f_two"
|
||||
},
|
||||
{
|
||||
"question": "ФК Рубинның туган стадионы нәрсә?",
|
||||
"options": [
|
||||
"Казан Арена",
|
||||
"Үзәк стадион",
|
||||
"Татнефть Арена",
|
||||
"Ак Барс Арена"
|
||||
],
|
||||
"correct_answer": "Ак Барс Арена",
|
||||
"image_url": "f_three"
|
||||
},
|
||||
{
|
||||
"question": "Рубин беренче тапкыр Русия чемпионы булган ел кайсы?",
|
||||
"options": [
|
||||
"2006",
|
||||
"2008",
|
||||
"2009",
|
||||
"2010"
|
||||
],
|
||||
"correct_answer": "2008",
|
||||
"image_url": "f_four"
|
||||
},
|
||||
{
|
||||
"question": "ФК Рубин Русия чемпионы булган ничә тапкыр?",
|
||||
"options": [
|
||||
"1",
|
||||
"2",
|
||||
"3",
|
||||
"4"
|
||||
],
|
||||
"correct_answer": "2",
|
||||
"image_url": "f_five"
|
||||
},
|
||||
{
|
||||
"question": "Рубинның 2008 елда беренче чемпионлыгында төп тренеры кем булган?",
|
||||
"options": [
|
||||
"Гус Хиддинк",
|
||||
"Курбан Бердыев",
|
||||
"Юрий Семин",
|
||||
"Валерий Карпин"
|
||||
],
|
||||
"correct_answer": "Курбан Бердыев",
|
||||
"image_url": "f_six"
|
||||
},
|
||||
{
|
||||
"question": "Рубин 2009 елда Лига Чемпионнарында Барселонаны нинди нәтиҗә белән җиңгән?",
|
||||
"options": [
|
||||
"2:1",
|
||||
"1:0",
|
||||
"3:0",
|
||||
"3:1"
|
||||
],
|
||||
"correct_answer": "2:1",
|
||||
"image_url": "f_seven"
|
||||
},
|
||||
{
|
||||
"question": "2009/2010 сезонында Рубинның иң күп гол керткән уенчысы кем булган?",
|
||||
"options": [
|
||||
"Александр Бухаров",
|
||||
"Саломон Рондон",
|
||||
"Гёкдениз Карадениз",
|
||||
"Сергей Семак"
|
||||
],
|
||||
"correct_answer": "Александр Бухаров",
|
||||
"image_url": "f_eight"
|
||||
},
|
||||
{
|
||||
"question": "Рубинның Лига Чемпионнарында дебют сезонында төркемдә нинди урында булды?",
|
||||
"options": [
|
||||
"1нче",
|
||||
"2нче",
|
||||
"3нче",
|
||||
"4нче"
|
||||
],
|
||||
"correct_answer": "3нче",
|
||||
"image_url": "f_nine"
|
||||
},
|
||||
{
|
||||
"question": "2023/2024 сезонында Рубинның капитаны кем?",
|
||||
"options": [
|
||||
"Ильзат Ахметов",
|
||||
"Олег Данченко",
|
||||
"Андрес Панков",
|
||||
"Дмитрий Тарасов"
|
||||
],
|
||||
"correct_answer": "Ильзат Ахметов",
|
||||
"image_url": "f_ten"
|
||||
},
|
||||
{
|
||||
"question": "Курбан Бердыев киткәннән соң Рубинның баш тренеры булып кем эшли башлады?",
|
||||
"options": [
|
||||
"Сергей Семак",
|
||||
"Роман Шаронов",
|
||||
"Виктор Гончаренко",
|
||||
"Александр Бородюк"
|
||||
],
|
||||
"correct_answer": "Роман Шаронов",
|
||||
"image_url": "f_eleven"
|
||||
},
|
||||
{
|
||||
"question": "2012 елда Рубин Атлетико Мадридны кайсы турнирыда җиңгән?",
|
||||
"options": [
|
||||
"Евро Лига",
|
||||
"Суперкубок УЕФА",
|
||||
"Кубок Интертото",
|
||||
"Кубок Русия"
|
||||
],
|
||||
"correct_answer": "Евро Лига",
|
||||
"image_url": "f_twelve"
|
||||
},
|
||||
{
|
||||
"question": "Рубинның Еврокубокларда иң зур җиңүе нинди?",
|
||||
"options": [
|
||||
"Евро Лигадагы яртыфинал",
|
||||
"Лига Чемпионнарында 4нче финал",
|
||||
"Евро Лигадагы 4нче финал",
|
||||
"Лига Чемпионнарында төркем этабы"
|
||||
],
|
||||
"correct_answer": "Евро Лигадагы 4нче финал",
|
||||
"image_url": "f_thirteen"
|
||||
},
|
||||
{
|
||||
"question": "Рубинның Барселонаны җиңгән вакытта үзенең кырга утылган голы белән дан алган уенчысы кем?",
|
||||
"options": [
|
||||
"Гёкдениз Карадениз",
|
||||
"Роман Еременко",
|
||||
"Александр Рязанцев",
|
||||
"Александр Бухаров"
|
||||
],
|
||||
"correct_answer": "Александр Рязанцев",
|
||||
"image_url": "f_fourteen"
|
||||
},
|
||||
{
|
||||
"question": "Рубинның клуб тарихында иң күп гол керткән уенчысы кем?",
|
||||
"options": [
|
||||
"Александр Бухаров",
|
||||
"Саломон Рондон",
|
||||
"Гёкдениз Карадениз",
|
||||
"Сергей Семак"
|
||||
],
|
||||
"correct_answer": "Гёкдениз Карадениз",
|
||||
"image_url": "f_fifteen"
|
||||
},
|
||||
{
|
||||
"question": "2010нчы елларда Рубинның төп көндәше булган клуб?",
|
||||
"options": [
|
||||
"Зенит",
|
||||
"Спартак",
|
||||
"Локомотив",
|
||||
"ЦСКА"
|
||||
],
|
||||
"correct_answer": "Зенит",
|
||||
"image_url": "f_sixteen"
|
||||
}
|
||||
]
|
||||
},
|
||||
"volleyball": {
|
||||
"intro_text": "Волейбол командасы Зенит-Казан һәм Динамо-Ак Барс турында ни дәрәҗәдә беләсең?",
|
||||
"intro_image": "intro_volleyball",
|
||||
"questions": [
|
||||
{
|
||||
"question": "Зенит-Казан волейбол клубы кайсы елда оешты?",
|
||||
"options": [
|
||||
"2000",
|
||||
"2003",
|
||||
"2007",
|
||||
"2010"
|
||||
],
|
||||
"correct_answer": "2000",
|
||||
"image_url": "v_one"
|
||||
},
|
||||
{
|
||||
"question": "Зенит-Казан Лигасында ничә тапкыр җиңгән?",
|
||||
"options": [
|
||||
"4",
|
||||
"5",
|
||||
"6",
|
||||
"7"
|
||||
],
|
||||
"correct_answer": "6",
|
||||
"image_url": "v_two"
|
||||
},
|
||||
{
|
||||
"question": "Зенит-Казанның тарихында иң күп медаль җыйган уенчы кем?",
|
||||
"options": [
|
||||
"Максим Михайлов",
|
||||
"Вильфредо Леон",
|
||||
"Алексей Вербов",
|
||||
"Мэттью Андерсон"
|
||||
],
|
||||
"correct_answer": "Максим Михайлов",
|
||||
"image_url": "v_three"
|
||||
},
|
||||
{
|
||||
"question": "Зенит-Казанның туган стадионы нинди?",
|
||||
"options": [
|
||||
"Татнефть Арена",
|
||||
"Баскет-Холл",
|
||||
"Санкт-Петербург Волейбол Центры",
|
||||
"Казан Арена"
|
||||
],
|
||||
"correct_answer": "Санкт-Петербург Волейбол Центры",
|
||||
"image_url": "v_four"
|
||||
},
|
||||
{
|
||||
"question": "Зенит-Казанның 2010нчы еллардагы доминирование дәверендә төп тренер кем булды?",
|
||||
"options": [
|
||||
"Алексей Вербов",
|
||||
"Владимир Алекно",
|
||||
"Данте Амарал",
|
||||
"Михаил Лихачев"
|
||||
],
|
||||
"correct_answer": "Владимир Алекно",
|
||||
"image_url": "v_five"
|
||||
},
|
||||
{
|
||||
"question": "Зенит-Казанның форма төсләре нинди?",
|
||||
"options": [
|
||||
"Күк һәм ак",
|
||||
"Күк һәм көмеш",
|
||||
"Яшел һәм ак",
|
||||
"Кызыл һәм күк"
|
||||
],
|
||||
"correct_answer": "Күк һәм ак",
|
||||
"image_url": "v_six"
|
||||
},
|
||||
{
|
||||
"question": "Зенит-Казан беренче тапкыр Россия чемпионатын кайсы елда отты?",
|
||||
"options": [
|
||||
"2005",
|
||||
"2007",
|
||||
"2009",
|
||||
"2011"
|
||||
],
|
||||
"correct_answer": "2007",
|
||||
"image_url": "v_seven"
|
||||
},
|
||||
{
|
||||
"question": "Динамо-Ак Барс хатын-кыз командасы кайсы елда оешты?",
|
||||
"options": [
|
||||
"2002",
|
||||
"2007",
|
||||
"2012",
|
||||
"2015"
|
||||
],
|
||||
"correct_answer": "2002",
|
||||
"image_url": "v_eight"
|
||||
},
|
||||
{
|
||||
"question": "Динамо-Ак Барсның иң зур җиңүе нинди?",
|
||||
"options": [
|
||||
"Лига Чемпионнарында җиңү",
|
||||
"Россия Чемпионатында җиңү",
|
||||
"Россия Кубогында җиңү",
|
||||
"Европа Конфедерациясе Кубогында җиңү"
|
||||
],
|
||||
"correct_answer": "Россия Чемпионатында җиңү",
|
||||
"image_url": "v_nine"
|
||||
},
|
||||
{
|
||||
"question": "Динамо-Ак Барсның хатын-кыз командасы беренче тапкыр Россия Кубогын кайсы елда отты?",
|
||||
"options": [
|
||||
"2008",
|
||||
"2010",
|
||||
"2012",
|
||||
"2014"
|
||||
],
|
||||
"correct_answer": "2010",
|
||||
"image_url": "v_ten"
|
||||
},
|
||||
{
|
||||
"question": "Динамо-Ак Барсның хатын-кыз командасы Россия Чемпионатын ничә тапкыр отты?",
|
||||
"options": [
|
||||
"5",
|
||||
"2",
|
||||
"7",
|
||||
"4"
|
||||
],
|
||||
"correct_answer": "7",
|
||||
"image_url": "v_eleven"
|
||||
},
|
||||
{
|
||||
"question": "Шушы зур волейбол йолдызларының кайсысы Зенит-Казан командасында уйнаган?",
|
||||
"options": [
|
||||
"Вильфредо Леон",
|
||||
"Матей Казийский",
|
||||
"Жиба",
|
||||
"Тревор Клеверли"
|
||||
],
|
||||
"correct_answer": "Вильфредо Леон",
|
||||
"image_url": "v_twelve"
|
||||
}
|
||||
]
|
||||
},
|
||||
"water-polo": {
|
||||
"intro_text": "Синтез турында нинди белемегез барлыгын тикшерик!",
|
||||
"intro_image": "intro_water_polo",
|
||||
"questions": [
|
||||
{
|
||||
"question": "Синтез воднопольный клубы кайсы елда оешты?",
|
||||
"options": [
|
||||
"1974",
|
||||
"1980",
|
||||
"1985",
|
||||
"1991"
|
||||
],
|
||||
"correct_answer": "1974",
|
||||
"image_url": "w_one"
|
||||
},
|
||||
{
|
||||
"question": "Синтез Россия воднопольный чемпионатын ничә тапкыр отты?",
|
||||
"options": [
|
||||
"5",
|
||||
"8",
|
||||
"10",
|
||||
"12"
|
||||
],
|
||||
"correct_answer": "10",
|
||||
"image_url": "w_two"
|
||||
},
|
||||
{
|
||||
"question": "Синтез кайсы елда Европаның водное поло лигасы Кубогын (LEN Trophy) отты?",
|
||||
"options": [
|
||||
"2005",
|
||||
"2007",
|
||||
"2010",
|
||||
"2012"
|
||||
],
|
||||
"correct_answer": "2007",
|
||||
"image_url": "w_three"
|
||||
},
|
||||
{
|
||||
"question": "Водное поло уенында бер командадан берьюлы ничә уенчы катнаша?",
|
||||
"options": [
|
||||
"5",
|
||||
"6",
|
||||
"7",
|
||||
"8"
|
||||
],
|
||||
"correct_answer": "7",
|
||||
"image_url": "w_four"
|
||||
},
|
||||
{
|
||||
"question": "Водное поло өчен стандарт бассейнның озынлыгы нинди?",
|
||||
"options": [
|
||||
"20 метр",
|
||||
"25 метр",
|
||||
"30 метр",
|
||||
"50 метр"
|
||||
],
|
||||
"correct_answer": "30 метр",
|
||||
"image_url": "w_five"
|
||||
},
|
||||
{
|
||||
"question": "Синтезның Россиядәге төп көндәше нинди команда?",
|
||||
"options": [
|
||||
"Спартак Волгоград",
|
||||
"Динамо Мәскәү",
|
||||
"Локомотив Краснодар",
|
||||
"Зенит Санкт-Петербург"
|
||||
],
|
||||
"correct_answer": "Спартак Волгоград",
|
||||
"image_url": "w_six"
|
||||
}
|
||||
]
|
||||
},
|
||||
"history": {
|
||||
"intro_text": "Әйдәгез, Казан тарихын белүегезне ачыклыйк!",
|
||||
"intro_image": "culture",
|
||||
"questions": [
|
||||
{
|
||||
"question": "Казан кайчан нигезләнгән?",
|
||||
"options": [
|
||||
"1000 ел",
|
||||
"1156 ел",
|
||||
"1230 ел",
|
||||
"1323 ел"
|
||||
],
|
||||
"correct_answer": "1000 ел",
|
||||
"image_url": "culture"
|
||||
},
|
||||
{
|
||||
"question": "Казан аша агучы төп елга ничек атала?",
|
||||
"options": [
|
||||
"Идел",
|
||||
"Казанка",
|
||||
"Кама",
|
||||
"Иж"
|
||||
],
|
||||
"correct_answer": "Казанка",
|
||||
"image_url": "culture"
|
||||
},
|
||||
{
|
||||
"question": "Казанның беренче ханы кем булган?",
|
||||
"options": [
|
||||
"Олуг Мөхәммәт",
|
||||
"Әхмәт",
|
||||
"Шаһ-Әли",
|
||||
"Мамука"
|
||||
],
|
||||
"correct_answer": "Олуг Мөхәммәт",
|
||||
"image_url": "culture"
|
||||
},
|
||||
{
|
||||
"question": "2013 елда Универсиада узган Казанның төп спорт комплексы ничек атала?",
|
||||
"options": [
|
||||
"Казан Арена",
|
||||
"Татнефть Арена",
|
||||
"Бөгелмә Арена",
|
||||
"Ак Барс спорт сарае"
|
||||
],
|
||||
"correct_answer": "Казан Арена",
|
||||
"image_url": "culture"
|
||||
},
|
||||
{
|
||||
"question": "Казандагы иң зур мәчетләрнең берсе Россиядәге кайсысы?",
|
||||
"options": [
|
||||
"Кол Шәриф мәчете",
|
||||
"Марий Эл мәчете",
|
||||
"Айша мәчете",
|
||||
"Имам Мөхәммәт мәчете"
|
||||
],
|
||||
"correct_answer": "Кол Шәриф мәчете",
|
||||
"image_url": "culture"
|
||||
},
|
||||
{
|
||||
"question": "Казан Кремле һәм Кол Шәриф мәчете урнашкан мәйдан ничек атала?",
|
||||
"options": [
|
||||
"Вахитов мәйданы",
|
||||
"Ирек мәйданы",
|
||||
"Кремль мәйданы",
|
||||
"Революция мәйданы"
|
||||
],
|
||||
"correct_answer": "Кремль мәйданы",
|
||||
"image_url": "culture"
|
||||
},
|
||||
{
|
||||
"question": "Казан гербында кайсы символ сурәтләнгән?",
|
||||
"options": [
|
||||
"Аждаһа",
|
||||
"Юлбарыс",
|
||||
"Арслан",
|
||||
"Бүре"
|
||||
],
|
||||
"correct_answer": "Аждаһа",
|
||||
"image_url": "culture"
|
||||
},
|
||||
{
|
||||
"question": "Казан Кремленең архитекторын атагыз.",
|
||||
"options": [
|
||||
"Иван Зарудный",
|
||||
"Фёдор Бенжамин",
|
||||
"Андрей Ушаков",
|
||||
"Юрий Дашевский"
|
||||
],
|
||||
"correct_answer": "Андрей Ушаков",
|
||||
"image_url": "culture"
|
||||
},
|
||||
{
|
||||
"question": "Бу югары уку йортларының кайсысы Казанда урнашкан?",
|
||||
"options": [
|
||||
"Мәскәү дәүләт университеты",
|
||||
"Казан федераль университеты",
|
||||
"Санкт-Петербург политехник университеты",
|
||||
"Новосибирск дәүләт университеты"
|
||||
],
|
||||
"correct_answer": "Казан федераль университеты",
|
||||
"image_url": "culture"
|
||||
},
|
||||
{
|
||||
"question": "Казандагы иң зур урам ничек атала? Ул шулай ук шәһәрнең төнге тормыш үзәге булып тора.",
|
||||
"options": [
|
||||
"Кремль урамы",
|
||||
"Бауман урамы",
|
||||
"Пушкин урамы",
|
||||
"Каюм Насыйри урамы"
|
||||
],
|
||||
"correct_answer": "Бауман урамы",
|
||||
"image_url": "culture"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,29 +0,0 @@
|
||||
{
|
||||
"ru": {
|
||||
"descriptions": [
|
||||
"В 2020 году в Казани состоятся первые в истории спортивные игры стран Содружества независимых государств (СНГ). Впервые в истории существования стран СНГ пройдет подобного рода спортивное соревнование, которое объединит их все. По инициативе Министерства спорта РФ и по поручению Президента РФ В.В. Путина Министерство спорта РТ (совместно с федеральным спортивным ведомством) подготовили проект, который был утвержден на правительственной комиссии. Соревнования пройдут в олимпийский год, к тому же в рамках празднования 100-летия ТАССР. Сроки проведения соревнований — 20-27 августа 2020 года. На Играх выступят сборные России, Азербайджана, Армении, Белоруссии, Казахстана, Кыргызстана, Молдовы, Таджикистана, Туркменистана, Узбекистана и Украины.",
|
||||
"В программе соревнований: дзюдо, самбо, пляжный волейбол, пляжный гандбол, мини-футбол, бокс, тайский бокс, шахматы, танцевальный спорт, фехтование, каратэ, гиревой спорт, армрестлинг, мас-реслинг, спортивная борьба, борьба на поясах (корэш), легкая атлетика и баскетбол (3х3).",
|
||||
"Казани удаётся удивительным образом сочетать в себе исторические традиции и современность, удобства мегаполиса и гостеприимную атмосферу. Но одни из самых главных достижений столицы Татарстана – это крупные спортивные мероприятия, регулярно проводимые на территории города. Ни в одном городе России нет такого количества монументальных и современных спортивных объектов.",
|
||||
"Толчком к развитию спортивной инфраструктуры столицы Татарстана стала Универсиада 2013 года. Это было первое соревнование мирового уровня для Казани.",
|
||||
"Казанская Универсиада была признана лучшей за всю историю проведения студенческих игр. Об этом заявил президент Международной федерации студенческого спорта Клод-Луи Гальен. Город развернул масштабную стройку, не уступающую в размерах подготовке к Олимпиаде 2014 года в Сочи. Буквально на глазах жителей выросли новый стадион «Казань-Арена», Дворец единоборств «Ак Барс» и Дворец водных видов спорта, в котором проводили соревнования по плаванию, прыжкам в воду, синхронному плаванию и водному поло. Успех Универсиады позволил Казани принимать ещё более масштабные мероприятия. После проведения Всемирных студенческих игр Казань обладает всей необходимой инфраструктурой для проведения будущих спортивных мегасобытий."
|
||||
]
|
||||
},
|
||||
"en": {
|
||||
"descriptions": [
|
||||
"In 2020, Kazan will host the first-ever Commonwealth of Independent States (CIS) Games. For the first time in the history of the CIS countries, such a sporting event will bring them all together. On the initiative of the Russian Ministry of Sports and by order of the President of the Russian Federation V.V. Putin, the Ministry of Sports of the Republic of Tatarstan (together with the federal sports department) prepared a project that was approved by the government commission. The games will be held during the Olympic year, coinciding with the celebration of the 100th anniversary of the Tatar Autonomous Soviet Socialist Republic (TASSR). The games are scheduled for August 20-27, 2020. Teams from Russia, Azerbaijan, Armenia, Belarus, Kazakhstan, Kyrgyzstan, Moldova, Tajikistan, Turkmenistan, Uzbekistan, and Ukraine will participate.",
|
||||
"The competition program includes judo, sambo, beach volleyball, beach handball, futsal, boxing, Muay Thai, chess, dance sports, fencing, karate, kettlebell lifting, arm wrestling, mas-wrestling, wrestling, belt wrestling (kuresh), athletics, and basketball (3x3).",
|
||||
"Kazan manages to uniquely combine historical traditions and modernity, the conveniences of a metropolis, and a welcoming atmosphere. However, one of the city's greatest achievements is its ability to regularly host major sporting events. No other city in Russia boasts such a large number of monumental and modern sports facilities.",
|
||||
"The 2013 Universiade was the turning point for the development of Kazan's sports infrastructure. It was the first world-class competition for the city.",
|
||||
"The Kazan Universiade was recognized as the best in the history of student games. This was announced by the president of the International University Sports Federation, Claude-Louis Gallien. The city undertook large-scale construction comparable to the preparations for the 2014 Winter Olympics in Sochi. Before the residents' eyes, the new Kazan Arena Stadium, Ak Bars Martial Arts Palace, and Aquatics Palace, which hosted competitions in swimming, diving, synchronized swimming, and water polo, were built. The success of the Universiade enabled Kazan to host even larger events. After hosting the World Student Games, Kazan has all the necessary infrastructure for future sports mega-events."
|
||||
]
|
||||
},
|
||||
"tt": {
|
||||
"descriptions": [
|
||||
"2020 елда Казанда беренче тапкыр Мөстәкыйль Дәүләтләр Бердәмлеге (МДБ) уеннары узачак. МДБ илләре тарихында беренче тапкыр барлык илләрне берләштерәчәк шундый төрдәге спорт чарасы узачак. РФ Спорт министрлыгы инициативасы һәм РФ Президенты В.В. Путин йөкләмәсе белән ТР Спорт министрлыгы (федераль спорт ведомствосы белән берлектә) проект әзерләде, һәм ул хөкүмәт комиссиясендә расланды. Уеннар Олимпия елы кысаларында, ТАССРның 100 еллыгын бәйрәм итү уңаеннан үткәреләчәк. Уеннар 2020 елның 20-27 август көннәрендә узачак. Уеннарда Россия, Әзербайҗан, Әрмәнстан, Беларусия, Казахстан, Кыргызстан, Молдова, Таҗикстан, Төрекмәнстан, Үзбәкстан һәм Украина җыелма командалары катнашачак.",
|
||||
"Ярышлар программасына дзюдо, самбо, пляж волейболы, пляж гандболы, мини-футбол, бокс, тай бокс, шахмат, бию спорты, фехтование, каратэ, гер спорты, кул көрәше, мас-рестлинг, спорт көрәше, билбау көрәше (корэш), җиңел атлетика һәм баскетбол (3x3) керә.",
|
||||
"Казан тарихи традицияләрне һәм заманчалыкны, мегаполис уңайлыкларын һәм кунакчыл атмосфераны үз эченә алуны гаҗәеп итеп башкара. Әмма Татарстан башкаласының иң зур казанышларының берсе – шәһәр территориясендә даими рәвештә үткәрелеп торган зур спорт чаралары. Россиянең бер генә шәһәрендә дә шундый күп монументаль һәм заманча спорт объектлары юк.",
|
||||
"2013 елгы Универсиада Казанның спорт инфраструктурасын үстерү өчен этәргеч булды. Бу Казан өчен беренче дөнья дәрәҗәсендәге ярышлар иде.",
|
||||
"Казан Универсиадасы студентлар уеннары тарихында иң яхшысы дип танылды. Бу хакта Халыкара студентлар спорты федерациясе президенты Клод-Луи Гальен белдерде. Шәһәр Сочиның 2014 елгы Олимпиадасына әзерлек масштаблары белән чагыштырырлык зур төзелешләр башлады. Казан халкы күз алдында «Казан-Арена» стадионы, «Ак Барс» көрәш сарае һәм Су спорт төрләре сарае төзелде, анда йөзү, суга сикерү, синхрон йөзү һәм су полосы ярышлары уздырылды. Универсиада уңышы Казанга тагын да зуррак чаралар үткәрү мөмкинлеге бирде. Дөнья студентлар уеннарын үткәргәннән соң, Казан киләчәктәге спорт мегачараларын үткәрү өчен барлык кирәкле инфраструктурага ия."
|
||||
]
|
||||
}
|
||||
}
|
@ -2,7 +2,6 @@
|
||||
{
|
||||
"id": "1",
|
||||
"type": "Баскетбол",
|
||||
"sport": "basketball",
|
||||
"title": "УНИКС ",
|
||||
"text": "Баскетбольный клуб УНИКС — российский мужской баскетбольный клуб. Основан в 1991 году. Представляет город Казань, столицу Республики Татарстан. Выступает в Профессиональной баскетбольной лиге. «УНИКС» расшифровывается как «Университет — Культура — Спорт».",
|
||||
"logo": "unics_logo",
|
||||
@ -24,7 +23,6 @@
|
||||
{
|
||||
"id": "3",
|
||||
"type": "Хоккей",
|
||||
"sport": "hockey",
|
||||
"title": "Ак Барс ",
|
||||
"text": "Хоккейный клуб «Ак Барс» из Казани — это один из наиболее известных и успешных профессиональных хоккейных клубов в России. Он был основан в 1956 году и является членом Континентальной Хоккейной Лиги (КХЛ), самой престижной лиги в России и одной из сильнейших в мире.",
|
||||
"logo": "akbars_logo",
|
||||
@ -46,7 +44,6 @@
|
||||
{
|
||||
"id": "5",
|
||||
"type": "Футбол",
|
||||
"sport": "football",
|
||||
"title": "Рубин ",
|
||||
"text": "«Рубин» (тат. Рубин Казан футбол төркеме) — российский футбольный клуб из Казани. Один из ведущих российских футбольных клубов второй половины 2000-х годов. Ведёт свою историю с 1936 года, но официальной датой основания считается 1958 год.",
|
||||
"logo": "rubin_logo",
|
||||
@ -58,7 +55,6 @@
|
||||
{
|
||||
"id": "6",
|
||||
"type": "Волейбол",
|
||||
"sport": "volleyball",
|
||||
"title": "Зенит-Казань ",
|
||||
"text": "«Зенит» (Казань) — российский мужской волейбольный клуб. Основан в 2000 году, до 2004 года назывался «Динамо», с 2005 по июнь 2008 года — «Динамо-Таттрансгаз». 4-кратный чемпион России, 3-кратный обладатель Кубка России, победитель Лиги чемпионов сезонов 2007/08 и 2011/12 годов. Основные цвета: бело-синие.",
|
||||
"logo": "zenit_logo",
|
||||
@ -80,7 +76,6 @@
|
||||
{
|
||||
"id": "8",
|
||||
"type": "Водное поло",
|
||||
"sport": "water-polo",
|
||||
"title": "Синтез ",
|
||||
"text": "Толчком развития водного поло в Казани стало строительство первого в Республике 50-ти метрового плавательного бассейна «Оргсинтез», закончившееся в 1973 году. Именно на базе бассейна «Оргсинтез» и была создана взрослая команда «Синтез», добившаяся права играть в первой группе чемпионата РСФСР.",
|
||||
"logo": "waterpolo_logo",
|
||||
@ -89,4 +84,4 @@
|
||||
"img_alt": "Фотография игроков Синтеза",
|
||||
"link": "https://www.sintez-kazan.ru/index.php/ru/"
|
||||
}
|
||||
]
|
||||
]
|
@ -1,92 +0,0 @@
|
||||
[
|
||||
{
|
||||
"id": "1",
|
||||
"type": "Basketball",
|
||||
"sport": "basketball",
|
||||
"title": "UNICS",
|
||||
"text": "UNICS Basketball Club is a Russian men's basketball team founded in 1991. It represents Kazan, the capital of the Republic of Tatarstan. The club competes in the Professional Basketball League. 'UNICS' stands for 'University — Culture — Sport.'",
|
||||
"logo": "unics_logo",
|
||||
"logo_alt": "UNICS logo",
|
||||
"image": "unics_img",
|
||||
"img_alt": "Photo of UNICS players with their first VTB United League championship trophy",
|
||||
"link": "https://www.unics.ru/"
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"title": "Kazanochka",
|
||||
"text": "Kazanochka competes in the Women's Basketball Superleague, representing Kazan on a national level. The team plays a significant role in developing women's basketball in the region and actively competes on the international stage.",
|
||||
"logo": "kazanochka_logo",
|
||||
"logo_alt": "Kazanochka Sports Club logo",
|
||||
"image": "kazanochka_img",
|
||||
"img_alt": "Photo of Kazanochka players",
|
||||
"link": "https://bckazanochka.ru/"
|
||||
},
|
||||
{
|
||||
"id": "3",
|
||||
"type": "Hockey",
|
||||
"sport": "hockey",
|
||||
"title": "Ak Bars",
|
||||
"text": "Ak Bars Hockey Club from Kazan is one of the most renowned and successful professional hockey teams in Russia. Founded in 1956, it is a member of the Kontinental Hockey League (KHL), the most prestigious league in Russia and one of the strongest in the world.",
|
||||
"logo": "akbars_logo",
|
||||
"logo_alt": "Ak Bars logo",
|
||||
"image": "akbars_img",
|
||||
"img_alt": "Photo of Ak Bars players",
|
||||
"link": "https://www.ak-bars.ru/"
|
||||
},
|
||||
{
|
||||
"id": "4",
|
||||
"title": "Dynamo-Kazan",
|
||||
"text": "Dynamo-Kazan is a bandy team from Kazan that competes in the Russian Superleague. It is the current champion of Russia.",
|
||||
"logo": "hockey_dinamo_logo",
|
||||
"logo_alt": "Dynamo-Kazan logo",
|
||||
"image": "hockey_dinamo_img",
|
||||
"img_alt": "Photo of Dynamo-Kazan players",
|
||||
"link": "https://hcdinamo-kazan.ru/"
|
||||
},
|
||||
{
|
||||
"id": "5",
|
||||
"type": "Football",
|
||||
"sport": "football",
|
||||
"title": "Rubin",
|
||||
"text": "Rubin Kazan (tat. Рубин Казан футбол төркеме) is a Russian football club from Kazan. One of the leading Russian football clubs in the second half of the 2000s. Its history dates back to 1936, but the official founding date is 1958.",
|
||||
"logo": "rubin_logo",
|
||||
"logo_alt": "Rubin logo",
|
||||
"image": "rubin_img",
|
||||
"img_alt": "Photo of Rubin players",
|
||||
"link": "https://www.rubin-kazan.ru/"
|
||||
},
|
||||
{
|
||||
"id": "6",
|
||||
"type": "Volleyball",
|
||||
"sport": "volleyball",
|
||||
"title": "Zenit-Kazan",
|
||||
"text": "Zenit-Kazan is a Russian men's volleyball team founded in 2000. Initially named 'Dynamo' until 2004, it was later known as 'Dynamo-Tattransgaz' until June 2008. The team is a 4-time Russian champion, 3-time Russian Cup winner, and a Champions League winner for the 2007/08 and 2011/12 seasons. Its main colors are white and blue.",
|
||||
"logo": "zenit_logo",
|
||||
"logo_alt": "Zenit logo",
|
||||
"image": "zenit_img",
|
||||
"img_alt": "Photo of Zenit players",
|
||||
"link": "https://zenit-kazan.com/"
|
||||
},
|
||||
{
|
||||
"id": "7",
|
||||
"title": "Dynamo-Kazan",
|
||||
"text": "Dynamo-Kazan (formerly Kazanochka until 2008) is a Russian women's volleyball club based in Kazan.",
|
||||
"logo": "vol_dinamo_logo",
|
||||
"logo_alt": "Dynamo-Kazan volleyball logo",
|
||||
"image": "vol_dinamo_img",
|
||||
"img_alt": "Photo of Dynamo-Kazan players",
|
||||
"link": "https://dinamo-kazan.com/"
|
||||
},
|
||||
{
|
||||
"id": "8",
|
||||
"type": "Water Polo",
|
||||
"sport": "water-polo",
|
||||
"title": "Sintez",
|
||||
"text": "The development of water polo in Kazan was boosted by the construction of the first 50-meter swimming pool, 'Orgsintez,' in 1973. Based on this pool, the Sintez senior team was formed, earning the right to play in the first group of the RSFSR championship.",
|
||||
"logo": "waterpolo_logo",
|
||||
"logo_alt": "Sintez logo",
|
||||
"image": "waterpolo_img",
|
||||
"img_alt": "Photo of Sintez players",
|
||||
"link": "https://www.sintez-kazan.ru/index.php/ru/"
|
||||
}
|
||||
]
|
@ -1,92 +0,0 @@
|
||||
[
|
||||
{
|
||||
"id": "1",
|
||||
"type": "Баскетбол",
|
||||
"sport": "basketball",
|
||||
"title": "УНИКС",
|
||||
"text": "Баскетбол клубы УНИКС — Россиянең ир-ат баскетбол командасы, 1991 елда оешкан. Ул Татарстан башкаласы Казанны тәкъдим итә. Клуб Профессиональ баскетбол лигасында катнаша. 'УНИКС' 'Университет — Мәдәният — Спорт'ны аңлата.",
|
||||
"logo": "unics_logo",
|
||||
"logo_alt": "УНИКС логотибы",
|
||||
"image": "unics_img",
|
||||
"img_alt": "УНИКС уенчыларының Бердәм ВТБ Лигасының беренче чемпион кубогы белән фотосы",
|
||||
"link": "https://www.unics.ru/"
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"title": "Казаночка",
|
||||
"text": "Казаночка хатын-кызлар баскетбол суперлигасында катнаша, Казан шәһәрен милли дәрәҗәдә тәкъдим итә. Команда төбәктә хатын-кызлар баскетболын үстерүдә зур роль уйный һәм халыкара аренада актив катнаша.",
|
||||
"logo": "kazanochka_logo",
|
||||
"logo_alt": "Казаночка спорт клубы логотибы",
|
||||
"image": "kazanochka_img",
|
||||
"img_alt": "Казаночка уенчыларының фотосы",
|
||||
"link": "https://bckazanochka.ru/"
|
||||
},
|
||||
{
|
||||
"id": "3",
|
||||
"type": "Хоккей",
|
||||
"sport": "hockey",
|
||||
"title": "Ак Барс",
|
||||
"text": "Казанның Ак Барс хоккей клубы — Россиядәге иң танылган һәм уңышлы профессиональ хоккей клубларының берсе. Ул 1956 елда нигез салынган һәм Россиянең иң абруйлы лигасы — Континенталь Хоккей Лигасы (КХЛ) әгъзасы булып тора.",
|
||||
"logo": "akbars_logo",
|
||||
"logo_alt": "Ак Барс логотибы",
|
||||
"image": "akbars_img",
|
||||
"img_alt": "Ак Барс уенчыларының фотосы",
|
||||
"link": "https://www.ak-bars.ru/"
|
||||
},
|
||||
{
|
||||
"id": "4",
|
||||
"title": "Динамо-Казан",
|
||||
"text": "Динамо-Казан Казан командасы Россия чемпионатының суперлигасында уйный. Ул хәзерге вакытта Россия чемпионы.",
|
||||
"logo": "hockey_dinamo_logo",
|
||||
"logo_alt": "Динамо-Казан логотибы",
|
||||
"image": "hockey_dinamo_img",
|
||||
"img_alt": "Динамо-Казан уенчыларының фотосы",
|
||||
"link": "https://hcdinamo-kazan.ru/"
|
||||
},
|
||||
{
|
||||
"id": "5",
|
||||
"type": "Футбол",
|
||||
"sport": "football",
|
||||
"title": "Рубин",
|
||||
"text": "Рубин Казан (тат. Рубин Казан футбол төркеме) — Казаннан Россия футбол клубы. 2000-нче елларның икенче яртысында Россиянең әйдәп баручы футбол клубларының берсе. Аның тарихы 1936 елдан башлана, әмма рәсми төзелү датасы дип 1958 ел санала.",
|
||||
"logo": "rubin_logo",
|
||||
"logo_alt": "Рубин логотибы",
|
||||
"image": "rubin_img",
|
||||
"img_alt": "Рубин уенчыларының фотосы",
|
||||
"link": "https://www.rubin-kazan.ru/"
|
||||
},
|
||||
{
|
||||
"id": "6",
|
||||
"type": "Волейбол",
|
||||
"sport": "volleyball",
|
||||
"title": "Зенит-Казан",
|
||||
"text": "Зенит-Казан — Россиянең ир-ат волейбол командасы. Ул 2000 елда оешкан. Башта 'Динамо' дип аталган, 2004 елга кадәр, аннары 2005 елдан 2008 елның июненә кадәр 'Динамо-Таттрансгаз' дип аталган. Команда 4 тапкыр Россия чемпионы, 3 тапкыр Россия Кубогы җиңүчесе һәм 2007/08 һәм 2011/12 еллар сезоннарының Чемпионнар Лигасы җиңүчесе. Төп төсләре: ак һәм зәңгәр.",
|
||||
"logo": "zenit_logo",
|
||||
"logo_alt": "Зенит логотибы",
|
||||
"image": "zenit_img",
|
||||
"img_alt": "Зенит уенчыларының фотосы",
|
||||
"link": "https://zenit-kazan.com/"
|
||||
},
|
||||
{
|
||||
"id": "7",
|
||||
"title": "Динамо-Казан",
|
||||
"text": "Динамо-Казан (2008 елга кадәр Казаночка дип аталган) — Казанның хатын-кызлар волейбол клубы.",
|
||||
"logo": "vol_dinamo_logo",
|
||||
"logo_alt": "Динамо-Казан волейбол логотибы",
|
||||
"image": "vol_dinamo_img",
|
||||
"img_alt": "Динамо-Казан уенчыларының фотосы",
|
||||
"link": "https://dinamo-kazan.com/"
|
||||
},
|
||||
{
|
||||
"id": "8",
|
||||
"type": "Су полосы",
|
||||
"sport": "water-polo",
|
||||
"title": "Синтез",
|
||||
"text": "Казанда су полосын үстерүгә этәргеч 1973 елда беренче 50 метрлы 'Оргсинтез' бассейны төзелеше булды. Нәкъ шул бассейн базасында өлкәннәр командасы 'Синтез' төзелде, ул РСФСР чемпионатының беренче төркемендә уйнау хокукын яулады.",
|
||||
"logo": "waterpolo_logo",
|
||||
"logo_alt": "Синтез логотибы",
|
||||
"image": "waterpolo_img",
|
||||
"img_alt": "Синтез уенчыларының фотосы",
|
||||
"link": "https://www.sintez-kazan.ru/index.php/ru/"
|
||||
}
|
||||
]
|
@ -0,0 +1,6 @@
|
||||
[
|
||||
"Наиболее развитая сеть в городе – автобусная. Она обеспечивает беспересадочные перевозки пассажиров между всеми районами города.",
|
||||
"Трамвайная и троллейбусная маршрутная сеть образует радиально-кольцевую систему. Трамвайным и троллейбусным транспортом обслуживаются все районы города.",
|
||||
"Метрополитен г. Казани – современный, высококомфортабельный и скоростной вид транспорта. Поезда, оснащенные новейшими системами автоматики, позволяют на высоком уровне обслуживать пассажиров.",
|
||||
"Казань также обладает различными туристическими объектами, такими как пешеходные улицы, парки и набережные, которые часто становятся популярными местами для прогулок и отдыха."
|
||||
]
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user