Compare commits
34 Commits
v1.0.1
...
78a332732d
| Author | SHA1 | Date | |
|---|---|---|---|
| 78a332732d | |||
| 5f54355b97 | |||
| 4efbb56905 | |||
| 50c6286190 | |||
| de29da93ba | |||
| 7cdd7e790f | |||
| 569b1b0d9e | |||
| 272961c583 | |||
| 63284d6c08 | |||
| cb56e2dd2c | |||
| 325e2f125b | |||
| 786085d4d0 | |||
| c95a00fb19 | |||
| 95373069da | |||
| b8275a4c8f | |||
| fb868bfefc | |||
| 086c94c58a | |||
| 812a95dd85 | |||
| 85ee64e92b | |||
|
|
eb87f400ee | ||
| 92cabfa048 | |||
|
|
b2a853e183 | ||
|
|
0a6d50cb60 | ||
| 7809806b83 | |||
|
|
1aa0c36c84 | ||
|
|
7c3132c54b | ||
| 8fc85a7de8 | |||
|
|
cb8b2cc5aa | ||
| 6651215eeb | |||
| 80f8cef142 | |||
|
|
5a57291523 | ||
|
|
39ab269f07 | ||
| 7cb23080bf | |||
| d74e4a8624 |
@@ -1,14 +1,16 @@
|
||||
FROM 'node:18'
|
||||
FROM node:18
|
||||
|
||||
RUN mkdir -p /usr/src/app/server/
|
||||
WORKDIR /usr/src/app/
|
||||
|
||||
COPY ./server /usr/src/app/server
|
||||
COPY ./package.json /usr/src/app/package.json
|
||||
COPY ./package-lock.json /usr/src/app/package-lock.json
|
||||
COPY ./.serverrc.js /usr/src/app/.serverrc.js
|
||||
# COPY ./.env /usr/src/app/.env
|
||||
|
||||
RUN npm i --only=prod
|
||||
# RUN npm i --omit=dev
|
||||
RUN npm ci
|
||||
EXPOSE 8044
|
||||
|
||||
CMD ["npm", "run", "up:prod"]
|
||||
|
||||
79
package-lock.json
generated
79
package-lock.json
generated
@@ -9,7 +9,6 @@
|
||||
"version": "1.0.1",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/express": "^4.17.21",
|
||||
"bcrypt": "^5.1.0",
|
||||
"body-parser": "^1.19.0",
|
||||
"cookie-parser": "^1.4.5",
|
||||
@@ -279,23 +278,6 @@
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/body-parser": {
|
||||
"version": "1.19.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz",
|
||||
"integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==",
|
||||
"dependencies": {
|
||||
"@types/connect": "*",
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/connect": {
|
||||
"version": "3.4.38",
|
||||
"resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",
|
||||
"integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==",
|
||||
"dependencies": {
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/cookie": {
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz",
|
||||
@@ -309,33 +291,6 @@
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/express": {
|
||||
"version": "4.17.21",
|
||||
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz",
|
||||
"integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==",
|
||||
"dependencies": {
|
||||
"@types/body-parser": "*",
|
||||
"@types/express-serve-static-core": "^4.17.33",
|
||||
"@types/qs": "*",
|
||||
"@types/serve-static": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/express-serve-static-core": {
|
||||
"version": "4.17.41",
|
||||
"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz",
|
||||
"integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==",
|
||||
"dependencies": {
|
||||
"@types/node": "*",
|
||||
"@types/qs": "*",
|
||||
"@types/range-parser": "*",
|
||||
"@types/send": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/http-errors": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz",
|
||||
"integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA=="
|
||||
},
|
||||
"node_modules/@types/json5": {
|
||||
"version": "0.0.29",
|
||||
"resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
|
||||
@@ -350,45 +305,11 @@
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/mime": {
|
||||
"version": "1.3.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz",
|
||||
"integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w=="
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "18.17.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.1.tgz",
|
||||
"integrity": "sha512-xlR1jahfizdplZYRU59JlUx9uzF1ARa8jbhM11ccpCJya8kvos5jwdm2ZAgxSCwOl0fq21svP18EVwPBXMQudw=="
|
||||
},
|
||||
"node_modules/@types/qs": {
|
||||
"version": "6.9.10",
|
||||
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.10.tgz",
|
||||
"integrity": "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw=="
|
||||
},
|
||||
"node_modules/@types/range-parser": {
|
||||
"version": "1.2.7",
|
||||
"resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz",
|
||||
"integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ=="
|
||||
},
|
||||
"node_modules/@types/send": {
|
||||
"version": "0.17.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz",
|
||||
"integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==",
|
||||
"dependencies": {
|
||||
"@types/mime": "^1",
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/serve-static": {
|
||||
"version": "1.15.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz",
|
||||
"integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==",
|
||||
"dependencies": {
|
||||
"@types/http-errors": "*",
|
||||
"@types/mime": "*",
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/abab": {
|
||||
"version": "2.0.6",
|
||||
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
|
||||
|
||||
@@ -55,11 +55,18 @@ app.use('/example', require('./routers/example'))
|
||||
// app.use('/task-boss', require('./routers/task-boss'))
|
||||
// app.use('/car-wash', require('./routers/car-wash'))
|
||||
app.use('/zoom-bar', require('./routers/zoom-bar'))
|
||||
app.use('/r-and-m', require('./routers/r-and-m'))
|
||||
app.use('/my', require('./routers/my'))
|
||||
app.use('/edateam', require('./routers/edateam'))
|
||||
app.use('/webstar-project', require('./routers/webstar-project'))
|
||||
app.use('/dogsitters-finder', require('./routers/dogsitters-finder'))
|
||||
app.use('/dhs-testing', require('./routers/dhs-testing'))
|
||||
//app.use('/basket', require('./routers/basket'))
|
||||
//app.use('/easy-project', require('./routers/easy-project'))
|
||||
//app.use('/sugarbun', require('./routers/sugarbun'))
|
||||
app.use('/epja-2023-2', require('./routers/epja-2023-2'))
|
||||
require('./routers/hub-video')
|
||||
app.use('/school-stage', require('./routers/school-stage'))
|
||||
|
||||
app.use(require('./error'))
|
||||
|
||||
|
||||
35
server/routers/dhs-testing/index.js
Normal file
35
server/routers/dhs-testing/index.js
Normal file
@@ -0,0 +1,35 @@
|
||||
const { response } = require('express');
|
||||
const router = require('express').Router();
|
||||
|
||||
router.get('/tests-data', (request, response) => {
|
||||
response.send(require('./json/tests-data/success.json'))
|
||||
})
|
||||
|
||||
router.get("/users-data", (request, response) => {
|
||||
response.send(require("./json/users-data/success.json"))
|
||||
})
|
||||
|
||||
router.get('/results-data', (request, response) => {
|
||||
response.send(require('./json/results-data/results.json'))
|
||||
})
|
||||
|
||||
router.get('/records-data', (request, response) => {
|
||||
response.send(require('./json/records-data/records.json'))
|
||||
})
|
||||
|
||||
router.post('/submit-enter', (request, response) => {
|
||||
const data = request.body;
|
||||
response.send({ success: true, message: "Вы успешно вошли в аккаунт!" });
|
||||
});
|
||||
|
||||
router.post('/submit-reg', (request, response) => {
|
||||
const data = request.body;
|
||||
response.send({ success: true, message: "Регистрация прошла успешно!" });
|
||||
});
|
||||
|
||||
router.post('/submit-record', (request, response) => {
|
||||
const formData = request.body;
|
||||
response.send({ success: true, message: "Record submitted successfully" });
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"dates":
|
||||
[
|
||||
{ "date": "2024-01-06T18:00:00"},
|
||||
{ "date": "2024-01-05T16:00:00"},
|
||||
{ "date": "2024-01-07T12:00:00"}
|
||||
]
|
||||
}
|
||||
17
server/routers/dhs-testing/json/results-data/results.json
Normal file
17
server/routers/dhs-testing/json/results-data/results.json
Normal file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"titles":
|
||||
[
|
||||
{ "id": 1, "name": "Тест на самооценку", "flag":1 },
|
||||
{ "id": 2, "name": "Какой у Вас тип мышления?", "flag":1 },
|
||||
{ "id": 3, "name": "Экспресс IQ-тест", "flag":1 },
|
||||
{ "id": 4, "name": "Определение уровня депрессии", "flag":0},
|
||||
{ "id": 5, "name": "Есть ли у Вас РПП?", "flag":0 },
|
||||
{ "id": 6, "name": "Тест на скрытый нарциссизм", "flag":0 },
|
||||
{ "id": 7, "name": "Диагностика выгорания", "flag":0 },
|
||||
{ "id": 8, "name": "Тест на уверенность в себе", "flag":0 },
|
||||
{ "id": 9, "name": "Диагностика ОКР", "flag":0 },
|
||||
{ "id": 10, "name": "Насколько Вы тревожны?", "flag":0 },
|
||||
{ "id": 11, "name": "Тест на СДВГ", "flag":0 },
|
||||
{ "id": 12, "name": "Ваш тип привязанности", "flag":0 }
|
||||
]
|
||||
}
|
||||
18
server/routers/dhs-testing/json/submit-record/submit.json
Normal file
18
server/routers/dhs-testing/json/submit-record/submit.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"formData":[
|
||||
{
|
||||
"name": "Имя1",
|
||||
"phone": "89997776655",
|
||||
"date": "2024-01-06",
|
||||
"time": "12:00",
|
||||
"specialist": "Иванов"
|
||||
},
|
||||
{
|
||||
"name": "Имя2",
|
||||
"phone": "89997776654",
|
||||
"date": "2024-01-06",
|
||||
"time": "15:00",
|
||||
"specialist": "Иванов"
|
||||
}
|
||||
]
|
||||
}
|
||||
249
server/routers/dhs-testing/json/tests-data/success.json
Normal file
249
server/routers/dhs-testing/json/tests-data/success.json
Normal file
@@ -0,0 +1,249 @@
|
||||
{ "options": [
|
||||
{"text": "Совершенно верно", "count": 4},
|
||||
{"text": "Верно", "count": 3},
|
||||
{"text": "Затрудняюсь ответить", "count": 2},
|
||||
{"text": "Скорее неверно", "count": 1},
|
||||
{"text": "Совершенно неверно", "count": 0}
|
||||
],
|
||||
|
||||
"tests":
|
||||
[
|
||||
{
|
||||
"questions":
|
||||
["Мне кажется, что другие выглядят лучше, чем я",
|
||||
"Я боюсь выступать перед большой аудиторией",
|
||||
"Я чувствую себя неловко, находясь в центре внимания",
|
||||
"Я часто чувствую себя напряженным",
|
||||
"Я хочу, чтобы мои действия одобрялись другими людьми",
|
||||
"Мне не хочется выглядеть глупым",
|
||||
"Я прихожу к мысли, что моя жизнь бессмысленна",
|
||||
"Я думаю о том, чего ждут от меня другие люди"
|
||||
],
|
||||
"results": [{
|
||||
"title":"Ваш результат - заниженная самооценка",
|
||||
"description":"Если в детстве критика и похвала родителей были нечеткими, пространными, ребенок не понимает, что конкретно означает быть хорошим или плохим. Так бывает, когда мы слышим от взрослых что-то вроде: «Что за негодный ребенок мне достался!» или «У Петровых дочь умница, не то что ты» вместо конструктивной критики за конкретный поступок. Тогда в будущем мы можем стать зависимыми от чужого одобрения, постоянно доказывать, что мы нужны — точно так же, как в детстве пытались заслужить признание взрослого. Человек, у которого не было достаточного опыта любви со стороны родителей, не может «просто полюбить» себя. Он будет искать «повод» для этой любви вовне, пристально наблюдая, как к нему относятся окружающие: уважают ли они его? Считают ли «достаточно хорошим»? Вечные спутники такого человека — болезненное восприятие критики, беспричинная ревность к партнеру, отношение к любой неудаче как к тотальному провалу. Если это про вас, попробуйте взглянуть на себя с сочувствием — не как строгий учитель, а как заботливый и внимательный взрослый смотрит на своего ребенка. Признавайте реальность и ее ограничения — не требуйте от себя делать работу в нереалистичные сроки, а от партнера — брать трубку в ту же секунду, как вы набираете его номер. Лучше всего опереться в этом на помощь профессионального психолога. Он научит отслеживать критикующий голос внутри, осознавать свои возможности и принимать ограничения, не сравнивать себя с другими и двигаться навстречу к тому, что для вас по-настоящему важно."
|
||||
},
|
||||
{ "title":"Ваша результат - средняя самооценка",
|
||||
"description":"Люди со средней самооценкой обычно имеют здоровое чувство уверенности в себе, но при этом они не склонны к высокомерию или недооценке своих способностей. Они могут быть целеустремленными, умеющими принимать критику и стремящимися к самосовершенствованию. Такие люди часто открыты новым идеям и опытам, готовы рисковать и пробовать что-то новое, но при этом они сохраняют здравый рассудок и реалистичные ожидания от себя и окружающих."
|
||||
|
||||
},
|
||||
{"title":"Ваш результат - высокая самооценка",
|
||||
"description":"Люди с высокой самооценкой обычно имеют сильное чувство уверенности в себе и своих способностях. Они часто стремятся к достижению высоких целей, уверены в своих решениях и способны принимать ответственность за свои действия. Люди с высокой самооценкой часто проявляют лидерские качества, умеют влиять на окружающих и эффективно решать проблемы. Они обычно отличаются открытостью к новым идеям, готовностью к риску и стремлением к саморазвитию. В то же время, люди с высокой самооценкой могут быть склонны к высокомерию, недостаточно внимательны к мнению других и не всегда готовы принимать критику. Высокая самооценка - это уверенность в своих способностях и ценности как личности. Люди с высокой самооценкой обычно имеют позитивное отношение к себе, верят в свои собственные силы и способны принимать жизненные вызовы с оптимизмом. Они обладают уверенностью в собственных решениях и способны эффективно справляться с трудностями. Однако важно отметить, что высокая самооценка не должна переходить в высокомерие или недостаток уважения к другим. Здоровая самооценка сочетает в себе уверенность в себе с уважением к другим людям и способностью слушать их мнение. Поддерживать здоровую самооценку можно через развитие личных качеств, укрепление позитивного мышления, осознанное принятие своих эмоций и стремление к личностному росту."}
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
"questions":
|
||||
["Я часто использую символические метафоры для выражения мыслей",
|
||||
"Мне кажется, что работа сценаристаили писателя очень интересна",
|
||||
"Я очень увлечен, когда читаю стихи и рассказы вслух",
|
||||
"Я без труда излагаю свои мысли в устной и письменной форме.",
|
||||
"В школе мне не очень нравились уроки по технологии труда",
|
||||
"Меня абсолютно не интересуют языки программирования",
|
||||
"Одной из самых любимых игрушек в детстве у меня был конструктор",
|
||||
"Я всегда был увлечен изучением иностранных языков"
|
||||
],
|
||||
"results": [{
|
||||
"title":"Ваш результат - образное мышление",
|
||||
"description":"Отделено от предмета в пространстве и времени. Преобразование информации осуществляется с помощью действий с образами. Нет физических ограниченийна преобразование. Операции можно осуществлять последовательно и одновременно. Результатом является мысль, воплощенная в новом образе. Этим мышлением обладают люди с художественным складом ума."},
|
||||
{ "title":"Ваш результат - знаковое мышление",
|
||||
"description":"Преобразование информации осуществляется с помощью умозаключений. Знаки объединяются в более крупные единицы по правилам единой грамматики. Результатом является мысль в форме понятия или высказывания, фиксирующего существенные отношения между обозначаемыми предметами. Этим мышлением обладают люди с гуманитарным складом ума."
|
||||
},
|
||||
{"title":"Ваш результат - символическое мышление",
|
||||
"description":"Преобразование информации осуществляется с помощью правил вывода (в частности, алгебраических правил или арифметических знаков и операций). Результатом является мысль, выраженная в виде структур и формул, фиксирующих существенные отношения между символами. Этим мышлением обладают люди с математическим складом ума."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"questions":
|
||||
["Мой сон не хуже, чем в обычное время",
|
||||
"Сейчас мое настроение не хуже обычного",
|
||||
"За свое будущее я абсолютно спокоен(на)",
|
||||
"Мой аппетит в последнее время не менялся",
|
||||
"Обычно я не чувствую к себе ненависти",
|
||||
"У меня никогда не бывает желания умереть",
|
||||
"Я с легкостью могу принимать решения",
|
||||
"Хорошие события меня радуют не меньше, чем обычно"
|
||||
],
|
||||
"results": [{
|
||||
"title":"Ваш результат - депрессия отсутствует",
|
||||
"description":"Депрессия отсутствует, либо незначительна. Смена настроения, самочувствия часто наблюдается при сезонной депрессии или кратковременных стрессах. В первом случае это следствие недостатка солнечного света, витамина D и дефицита аминов (серотонина, дофамина, норадреналина). А во втором случае — это ощущение эмоциональных и физических перегрузок. Не стоит переживать, это вполне нормальная защитная реакция организма."},
|
||||
{"title":"Ваш результат - умеренная депрессия",
|
||||
"description":"Легкая депрессия — это расстройство, возникающее в результате перегрузки организма, конфликта с окружающими или просто сильного стресса. Она характеризуется продолжительным плохим настроением (несколько дней и более), периодической раздражительностью или даже агрессией. В последнее время все чаще вы проявляете равнодушие и апатию к окружающему, к тому, что раньше часто приносило положительные эмоции. Чувство усталости даже от нетрудной и не длительной работы. Она проходит, когда человек решает свои проблемы, но если вам не удается самостоятельно справиться с ними, то стоит обратиться за помощью к психотерапевту."
|
||||
},
|
||||
{ "title":"Ваш результат - выраженная депрессия ",
|
||||
"description":"Вы стали малообщительным человеком, стараетесь избегать контактов даже с близкими людьми. Вероятно, подолгу не выходите из своей комнаты или из дома. Происходящее вокруг теперь не вызывает такого интереса как ранее, а жизнь кажется серой. Скорее всего, вы не следите за собой, за питанием и внешним видом. В вашем случае крайне необходима помощь со стороны специалиста, не стоит тянуть время."
|
||||
}
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
"questions":
|
||||
["Я испытываю ужас при мысли об избыточном весе",
|
||||
"Я избегаю приема пищи, когда чувствую голод",
|
||||
"Я разрезаю свою еду на маленькие кусочки",
|
||||
"Я знаю о количестве калорий в пище, которую я ем",
|
||||
"Я избегаю пищу с большим содержанием углеводов",
|
||||
"Чувствую, что другие хотели бы, чтобы я ел(а) больше",
|
||||
"У меня бывает рвота после того, как поем",
|
||||
"Я испытываю чрезмерную вину после еды"
|
||||
],
|
||||
"results": [{
|
||||
"title":"Ваш результат - похоже у вас РПП",
|
||||
"description":"Вы набрали высокие баллы по показателям анорексии и булимии. Это момент для серьезного разговора и поддержки. Анорексия и булимия – это не просто «диеты» или «плохие привычки». Это глубокие психологические трудности, которые могут иметь опасные и даже смертельные последствия. При анорексии люди могут потерять контакт с реальностью, столкнуться с критическим истощением, нарушением работы внутренних органов. И, да, это может привести к летальному исходу… Булимия тоже чревата серьезными последствиями: электролитный дисбаланс, проблемы с пищеварением, повреждение зубов и даже сердечные нарушения."},
|
||||
{"title":"Ваш результат - ограничительное пищевое поведение",
|
||||
"description":"Ограничительное пищевое поведение является следствием самолечения от ожирения или дистрофии.Ограничительное пищевое поведение может возникнуть на фоне диетотерапии. Крайняя степень выражения ограничительного поведения – так называемая «диетическая депрессия».Профилактикой ограничительного пищевого поведения может послужить постепенное, а не одномоментное исключение из рациона любимых блюд."
|
||||
},
|
||||
{ "title":"Ваш результат - у вас нет РПП ",
|
||||
"description":"Поздравляем! У вас отличные отношения с едой. Кажется, ваше детство прошло без лишнего давления или критики по поводу фигуры и пищевых привычек. Вас, вероятно, не заставляли есть против вашей воли, и вы выросли в атмосфере поддержки и позитивного отношения к своему телу. Будьте здоровы!"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"questions":
|
||||
["Другие люди недостаточно ценят мои хорошие качества",
|
||||
"Люди часто видятся мне либо величественными, либо ужасными",
|
||||
"Я особенно чувствительно реагирую на успех и неудачи",
|
||||
"Я завидую тем, у кого есть то, чего нет у меня",
|
||||
"Я завидую людям, которые красивее, чем я",
|
||||
"В отношениях я то обожаю, то презираю другого человека",
|
||||
"Я стараюсь избегать отвержения любой ценой",
|
||||
"Когда меня критикуют, я чувствую унижение"
|
||||
],
|
||||
"results": [{
|
||||
"title":"Ваш результат - тайный поклонник себя",
|
||||
"description":"Ваш результат указывает на высокий уровень скрытого нарциссизма. Это означает, что ваша самооценка и самоуважение во многом зависят от внешнего одобрения и восхищения со стороны окружающих. Вы особенно чувствительны к критике и склонны скрывать свое негодование, вызванное критическими замечаниями, из страха перед еще большим осуждением. Вы частенько «уходите в себя», пытаясь защитить свою уязвимую сторону от враждебного мира, и оставляете участников коммуникации и партнеров в недоумении.Вероятно, вам приходится постоянно ранжировать свои мысли, эмоции, чувства и действия, чтобы продемонстрировать те, которые «подходят» ситуации. Этот процесс может отнимать колоссальное количество ресурса — и вы постоянно чувствуете усталость и истощение. Истинные чувства и мотивы приходится скрывать. Из-за этого ваше поведение может выглядеть загадочным и непоследовательным для окружающих. "},
|
||||
{"title":"Ваш результат - легкая тень нарциссизма",
|
||||
"description":"Вы набрали средний балл по шкале нарциссической уязвимости. Вероятно, вы периодически ищете подтверждения своей значимости со стороны других. Вы чувствительны к критике и беспокоитесь о том, что о вас подумают другие. Иногда вы переживаете моменты неуверенности в себе, которые компенсируете внешним одобрением и вниманием окружающих. Несмотря на то, что ваш результат находится в рамках нормы, эти нарциссические черты все-таки могут вызывать некоторую неудовлетворенность. Кроме того, ваш результат может отражать определенную степень интроверсии, которая не обязательно связана с нарциссическими чертами. Это может означать, что вы предпочитаете делиться своими мыслями и мотивами поступков только с ограниченным кругом близких, и в целом проявляете избирательность в коммуникациях."
|
||||
},
|
||||
{ "title":"Ваша результат - ваш Эго в порядке ",
|
||||
"description":"У вас нет или очень мало деструктивных нарциссических черт. Вы вряд ли находитесь в постоянном поиске внешней валидации, внимания или восхищения. Вы склонны подходить к критике с открытым умом, и не слишком огорчаетесь, если вам отказывают в просьбах. Ваши дружеские и романтические связи, скорее всего, строятся на взаимном уважении и эмпатии, а ваша самооценка стабильна и не зависит от постоянного одобрения окружающих. Это замечательно!"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"questions":
|
||||
["Я чувствую себя эмоционально опустошенным/-ой",
|
||||
"После работы я чувствую себя, как выжатый лимон",
|
||||
"Утром я чувствую усталость и не хочу идти на работу",
|
||||
"Я редко чувствую энергию и эмоциональный подъем",
|
||||
"Я часто чувствую угнетенность и апатию",
|
||||
"Я замечаю, что моя работа ожесточает меня",
|
||||
"Моя работа все больше меня разочаровывает",
|
||||
"Мне глубоко безразлично, как живут мои знакомые"
|
||||
],
|
||||
"results": [{
|
||||
"title":"Ваш результат - выгорание",
|
||||
"description":"Эмоциональное выгорание случается, когда мы работаем до истощения ресурсов, игнорируем усталость и не умеем ее отслеживать. Нервное напряжение становится обычным фоном — и скоро желание что-то делать и вообще вставать с кровати приближается к нулю. Человек в таком состоянии недоволен не только работой, но и собой в целом, падает иммунитет, коллеги и задачи раздражают или даже вызывают ненависть. Частый спутник выгорания — зависимость. Сначала бокал вина кажется неплохим способом справиться со стрессом, затем бокал перерастает в бутылку, а последствия употребления алкоголя лишают сил окончательно. На последних стадиях выгорания мы уже не помним, что значит чувствовать вдохновение от работы, становимся апатичными, выполняем задачи по минимально допустимой планке качества — лишь бы не уволили. "},
|
||||
{"title":"Ваш результат - на пороге выгорания",
|
||||
"description":"Еще недавно вы были влюблены в свое дело и энергичны — теперь же редко можете выполнить больше необходимого минимума задач. Вы мотивируете себя — «надо поднажать, выпить еще кофе», — но результата почти нет. Утром вы никак не можете проснуться, а вечером тянетесь к алкоголю, вредной еде, сериалам. Так бывает, когда фокус внимания «застревает» на работе: вы считаете, что дела надо делать лучше, а жизнь за пределами офиса или рабочего ноутбука может пока подождать. Сказываются и сами условия работы: например, когда задач и требований слишком много, а внутри команды зреют конфликты и токсичная конкуренция"
|
||||
},
|
||||
{ "title":"Ваша результат - нет выгорания ",
|
||||
"description":"Похоже, работа вам в радость. В понедельник утром вы бодры и настроены на продуктивную неделю: новые задачи вызывают любопытство, брейнштормы с командой — вдохновение, вычеркнутые из списка дела — гордость. Команда вас ценит: вы проявляете инициативу, не подводите с дедлайнами и готовы в перерывах поболтать за чашкой кофе. Большинство людей именно так представляют себе идеальные отношения с работой. В чем же ваш секрет? Чаще всего устойчивость к выгоранию наращивается за пределами рабочего места: в отношениях с близкими, интересных хобби, умении слышать себя. Вы отдыхаете качественно и регулярно (а не когда сил уже нет совсем), поддерживаете себя, если что-то не получается, не принимаете рабочие конфликты близко к сердцу."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"questions":
|
||||
["Я чувствую беспокойство, если не знаю, чего от меня ждут",
|
||||
"Я очень критично отношусь к себе и к другим",
|
||||
"Я боюсь выглядеть глупо и беспокоюсь о своей внешности",
|
||||
"Я преувеличиваю свои ошибки и преуменьшаю успехи",
|
||||
"Я чувствую опустошенность или подавленность",
|
||||
"Большую часть времени я о чем-то тревожусь",
|
||||
"Я чувствую, что не знаю, что нужно сделать или сказать",
|
||||
"Я боюсь сделать ошибку, которую заметят другие"
|
||||
],
|
||||
"results": [{
|
||||
"title":"Ваш результат - неуверенны в себе",
|
||||
"description":"Вы привыкли быть безжалостным критиком самому себе. Похоже, в детстве эту роль выполняли ваши родители — их похвала, если и была, то звучала абстрактно; зато упреки попадали прямо в цель. «Что за негодный ребенок мне достался!», «От тебя — одни беды», «За что мне такое наказание?» — такие послания говорят не о наших поступках, а о нас целиком. Они фиксируют в психике уверенность ребенка в том, что сам по себе он ничтожен, не достоин внимания и любви. Когда мы вырастаем, желание заслужить эту любовь становится ведущим, а критикующий голос «поселяется» внутри, превращается в преследователя и экзекутора, который следит за каждым нашим шагом. Следуя ему, мы начинаем себя оценивать еще до того, как нас оценили другие."},
|
||||
{"title":"Ваш результат - средняя уверенность",
|
||||
"description":"Ваши результаты теста на уверенность в себе указывают на то, что у вас сбалансированный уровень самоуверенности. Возможно, у вас бывают моменты колебаний и сомнений в своих способностях, но в целом вы обладаете здоровой долей уверенности. Вы можете иногда испытывать неуверенность в своих действиях или решениях, но это не мешает вам двигаться вперед и принимать вызовы. Вы готовы учиться на своих ошибках и стремитесь к личному развитию."
|
||||
},
|
||||
{ "title":"Ваша результат - уверенны в себе ",
|
||||
"description":"Ваши результаты теста на уверенность в себе свидетельствуют о том, что вы обладаете здоровой самоуверенностью и позитивным отношением к себе. Вероятно, у вас была поддерживающая и позитивная среда в детстве, где вас поощряли и высоко ценили. Вы умеете видеть свои сильные стороны и цените себя как личность. Ваши достижения и качества не остаются незамеченными, и вы умеете радоваться своим успехам. Ваше отношение к себе положительное, и вы не склонны к самокритике или излишнему самообвинению. "
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"questions":
|
||||
["Я испытываю напряженность, мне не по себе",
|
||||
"Я испытываю внутреннее напряжение или дрожь",
|
||||
"Я часто испытываю сильный страх и ужас",
|
||||
"Я неусидчивый, мне постоянно нужно двигаться",
|
||||
"Беспокойные мысли крутятся у меня в голове",
|
||||
"У меня бывает внезапное чувство паники",
|
||||
"Мне бывает трудно сесть и расслабиться",
|
||||
"Я боюсь сделать ошибку, которую заметят другие"
|
||||
],
|
||||
"results": [{
|
||||
"title":"Ваш результат - выраженная тревога",
|
||||
"description":"Возможно, вы часто ощущаете беспокойство, нервозность и неспокойство по поводу различных ситуаций в вашей жизни. Тревога может влиять на ваше поведение, эмоциональное состояние и даже физическое здоровье. Важно обратить внимание на свои ощущения и найти способы справляться с тревожностью. Помните, что тревога — это естественная реакция организма на стрессовые ситуации, но если она начинает мешать вашей повседневной жизни, важно обратиться за помощью к специалисту. "},
|
||||
{"title":"Ваш результат - умеренный уровень",
|
||||
"description":"У вас наблюдается определенная степень тревожности. Время от времени вы ощущаете беспокойство или нервозность, но это не преобладает в вашей повседневной жизни. Средний уровень тревоги может быть обусловлен стрессом, изменениями в жизни или другими факторами. Важно обращать внимание на свои эмоции и уметь справляться с ними. Регулярные методы релаксации могут помочь снизить уровень тревоги."
|
||||
},
|
||||
{ "title":"Ваша результат - нет тревоги ",
|
||||
"description":"Поздравляем! Результаты вашего теста на тревогу показывают, что у вас низкий уровень тревожности. Это означает, что вы обычно спокойны и уверены в себе, не испытываете значительной тревоги или беспокойства. Низкий уровень тревоги свидетельствует о том, что вы хорошо справляетесь с повседневными стрессовыми ситуациями и не даете негативным эмоциям влиять на ваше благополучие. "
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"questions":
|
||||
["Помнить обо всех назначенных встречах и обязательствах — для меня проблема",
|
||||
"Когда мне нужно долго сидеть на месте, я ерзаю, делаю лишние движения",
|
||||
"Я совершаю ошибки по невнимательности — особенно выполняя скучную или сложную работу",
|
||||
"У меня часто бывает такое, что я теряю и потом с трудом нахожу вещи",
|
||||
"Мне сложно удержать внимание, когда я делаю скучную однообразную работу",
|
||||
"Я отвлекаюсь на события или шум вокруг во время работы или важного дела",
|
||||
"Мне трудно расслабиться и отдохнуть, даже когда у меня есть свободное время",
|
||||
"Я ловлю себя на том, что заканчиваю предложения за других, не давая им договорить"
|
||||
],
|
||||
"results": [{
|
||||
"title":"Ваш результат - похоже у вас СДВГ",
|
||||
"description":"Результаты теста говорят о том, что вы — и скорее всего, уже давно — замечаете за собой невнимательность к деталям, ошибки из-за небрежности, проблемы с планированием и организацией дел, склонность терять вещи и опаздывать. Это признаки так называемого «невнимательного» типа СДВГ, которые часто дополняются признаками «гиперактивного» типа: суетливостью, беспокойством, склонностью делать что-то импульсивно и не оценивая последствия. Жить с СДВГ правда тяжело — во многом еще и потому, что общество, ориентированное на «отличников», которые всего достигают и не делают глупостей, часто призывает людей с таким диагнозом «взять себя в руки», «перестать лениться», жить и работать по распорядку, держать дела «по полочкам»."},
|
||||
{"title":"Ваш результат - симптомы СДВГ",
|
||||
"description":"Синдром дефицита внимания и гиперактивности — это особенность нейроразвития, которая серьезно влияет на поведение человека. О его проявлениях сегодня говорят много — это неусидчивость, невнимательность, неспособность замедлиться и расслабиться, будто внутри работает заведенный мотор. Обычно симптомы проявляются с детства, и если у ребенка их можно объяснить особенностями темперамента или возрастным кризисом (кто из нас не отвлекался на уроках и не забывал сменку?), то взрослым СДВГ сильно мешает жить."
|
||||
},
|
||||
{ "title":"Ваша результат - нет СДВГ ",
|
||||
"description":"Поздравляем! Ваши ответы на вопросы теста говорят о том, что с внимательностью и усидчивостью у вас все в порядке. У вас также нет проблем с концентрацией и памятью, вы можете работать последовательно — без вспышек активности и апатии. Похоже, вы не склонны действовать импульсивно, не оценивая последствий, и можете контролировать «неприятные» импульсы, вроде желания перебить собеседника, отвлечься на суету за окном, бросить дело на полпути. "
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"questions":
|
||||
[" Навязчивые мысли влияют на вашу повседневную жизнь",
|
||||
"Вас сильно беспокоят эти навязчивые мысли",
|
||||
"Вам сложно сопротивляться навязчивым мыслям",
|
||||
"Вам сложно контролировать навязчивые мысли",
|
||||
"Вы часто совершаете навязчивые действия",
|
||||
"Навязчивые действия приносят дискомфорт",
|
||||
"Вы не в состоянии сопротивляться обсессиям",
|
||||
"Продолжительность обсессий в течении суток значительна"
|
||||
],
|
||||
"results": [{
|
||||
"title":"Ваш результат - сильное ОКР",
|
||||
"description":"Похоже, ваша жизнь наполнена всепоглощающей тревогой. Иногда вы можете на время заглушать ее, выполняя весьма затейливые ритуалы. Может казаться, что вы временами теряете контакт с реальным миром, и магическое мышление начинает доминировать над логическим и рациональным. Например, вам кажется, что если вы выполните определенное действие несколько раз, то это каким-то образом улучшит ваше состояние, даже если это противоречит здравому смыслу. Вам чрезвычайно сложно контролировать и останавливать повторяющееся поведение. Если другие люди пытаются изменить «заведенный порядок», это может вызывать раздражение и гнев. "},
|
||||
{"title":"Ваш результат - средне-выраженное ОКР",
|
||||
"description":"Вы отмечаете некоторые странности в своем поведении и мыслях. Возможно, вас давно беспокоит какая-то идея, но в целом жить это не мешает. Подумаешь, странности есть у всех! Иногда хочется часто мыть руки после встречи с неприятным человеком или проверять, все ли в порядке в доме, в документах, в новостях. Но это ситуативные случаи, и в целом вы можете противостоять этим состояниям так, чтобы они не нарушали ваш привычный ритм. Если вы понимаете, что в последнее время навязчивое поведение повторяется слишком часто, и вы хотите от него избавиться — проконсультируйтесь со специалистом"
|
||||
},
|
||||
{ "title":"Ваша результат - нет ОКР ",
|
||||
"description":"Поздравляем! Это означает, что у вас нет характерных симптомов этого психического расстройства, таких как навязчивые мысли и компульсивные действия. Отсутствие ОКР является позитивным результатом, поскольку обсессивно-компульсивное расстройство может серьезно повлиять на качество жизни человека, вызывая тревожность, стресс и нарушения в поведении."
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
|
||||
|
||||
"titles":
|
||||
[
|
||||
{ "id": 0, "name": "Тест на самооценку", "executionTime": 3, "filter": "На тип личности"},
|
||||
{ "id": 1, "name": "Какой у Вас тип мышления?", "executionTime": 2, "filter": "Интеллектуальные" },
|
||||
{ "id": 2, "name": "Определение уровня депрессии", "executionTime": 4, "filter": "Диагностика расстройств"},
|
||||
{ "id": 3, "name": "Есть ли у Вас РПП?", "executionTime": 1, "filter": "Быстрые" },
|
||||
{ "id": 4, "name": "Тест на скрытый нарциссизм", "executionTime": 4, "filter": "На тип личности" },
|
||||
{ "id": 5, "name": "Диагностика выгорания", "executionTime": 3, "filter": "Диагностика расстройств" },
|
||||
{ "id": 6, "name": "Тест на уверенность в себе", "executionTime": 2, "filter": "Быстрые" },
|
||||
{ "id": 7, "name": "Насколько Вы тревожны?", "executionTime": 5, "filter": "Диагностика расстройств" },
|
||||
{ "id": 8, "name": "Тест на СДВГ", "executionTime": 1, "filter": "Быстрые" },
|
||||
{ "id": 9, "name": "Диагностика ОКР", "executionTime": 2, "filter": "Диагностика расстройств" }
|
||||
]}
|
||||
14
server/routers/dhs-testing/json/users-data/success.json
Normal file
14
server/routers/dhs-testing/json/users-data/success.json
Normal file
@@ -0,0 +1,14 @@
|
||||
[
|
||||
{
|
||||
"eMail": "dashakhan3009@mail.ru",
|
||||
"first_name": "Дарья",
|
||||
"second_name": "Ханаева",
|
||||
"password": "qwerty123"
|
||||
},
|
||||
{
|
||||
"eMail": "alexandraaa.ha@gmail.com",
|
||||
"first_name": "Александра",
|
||||
"second_name": "Харитонова",
|
||||
"password": "12345"
|
||||
}
|
||||
]
|
||||
9
server/routers/dogsitters-finder/index.js
Normal file
9
server/routers/dogsitters-finder/index.js
Normal file
@@ -0,0 +1,9 @@
|
||||
const { response } = require('express');
|
||||
|
||||
const router = require('express').Router();
|
||||
|
||||
router.get("/users", (request, response) => {
|
||||
response.send(require("./json/users.json"))
|
||||
})
|
||||
|
||||
module.exports = router;
|
||||
43
server/routers/dogsitters-finder/json/users.json
Normal file
43
server/routers/dogsitters-finder/json/users.json
Normal file
@@ -0,0 +1,43 @@
|
||||
[
|
||||
{
|
||||
"id": 1,
|
||||
"phone_number": 89283244141,
|
||||
"password": "1234",
|
||||
"first_name": "Вася",
|
||||
"second_name": "Пупкин",
|
||||
"role": "dogsitter",
|
||||
"location": "Россия, республика Татарстан, Казань, улица Пушкина, 12",
|
||||
"price": 1500,
|
||||
"about_me": "Я люблю собак"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"phone_number": 89272844541,
|
||||
"password": "1234",
|
||||
"first_name": "Ваня",
|
||||
"second_name": "Пуськин",
|
||||
"role": "dogsitter",
|
||||
"location": "Россия, республика Татарстан, Казань, улица Абсалямова, 19",
|
||||
"price": 1000000,
|
||||
"about_me": "Я не люблю собак. И вообще я котоман."
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"phone_number": 89872855893,
|
||||
"password": "12345",
|
||||
"first_name": "Гадий",
|
||||
"second_name": "Петрович",
|
||||
"role": "owner"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"phone_number": 89872844591,
|
||||
"password": "12345",
|
||||
"first_name": "Галкин",
|
||||
"second_name": "Максим",
|
||||
"role": ["owner", "dogsitter"],
|
||||
"location": "Россия, республика Татарстан, Казань, проспект Ямашева, 83",
|
||||
"price": 1000000,
|
||||
"about_me": "Миллион алых роз"
|
||||
}
|
||||
]
|
||||
36
server/routers/edateam/auth.js
Normal file
36
server/routers/edateam/auth.js
Normal file
@@ -0,0 +1,36 @@
|
||||
const router = require('express').Router();
|
||||
const checkPassword = require('pbkdf2-password')();
|
||||
const jwt = require('jsonwebtoken');
|
||||
const {EDATEAM_JWT_TOKEN} = require('./key');
|
||||
|
||||
const {getUser, _idToId, getResponse, requiredFields, signUp} = require('./controllers');
|
||||
|
||||
router.post('/sign-in', requiredFields(['email','password']), async (req, res)=>{
|
||||
try{
|
||||
const user = await getUser(req.body);
|
||||
|
||||
checkPassword({password:req.body.password, salt:user.salt},async(err, pass, salt, hash )=>{
|
||||
if(err){
|
||||
throw new Error(err);
|
||||
}
|
||||
|
||||
if(user.password === hash){
|
||||
const {password, salt:_salt, ...rest} = user;
|
||||
const token = jwt.sign(_idToId(rest), EDATEAM_JWT_TOKEN);
|
||||
return res.send(getResponse(null, token));
|
||||
}
|
||||
return res.status(400).send(getResponse('Wrong email or password!'));
|
||||
} )
|
||||
}
|
||||
catch(error){
|
||||
res.status(400).send(getResponse(error.message));
|
||||
}
|
||||
});
|
||||
|
||||
router.post('/sign-up', requiredFields(['email', 'login', 'password']), async (req, res) => {
|
||||
let error = null
|
||||
const data = await signUp(req.body).catch((e) => error = e.message)
|
||||
return res.status(error ? 400 : 200).send(getResponse(error, data))
|
||||
})
|
||||
|
||||
module.exports = router;
|
||||
217
server/routers/edateam/controllers.js
Normal file
217
server/routers/edateam/controllers.js
Normal file
@@ -0,0 +1,217 @@
|
||||
const ObjectId = require('mongodb').ObjectId;
|
||||
const getHash = require('pbkdf2-password')();
|
||||
const { getDB } = require('../../utils/mongo');
|
||||
|
||||
const USERS_COLLECTION = 'users';
|
||||
const RECIPES_COLLECTION = 'recipes_collection';
|
||||
const FAVORITES_USER = 'favorites_user'
|
||||
let db =null;
|
||||
|
||||
const connect = async () => {
|
||||
db = await getDB('edateam');
|
||||
};
|
||||
|
||||
const init = async () => {
|
||||
await connect();
|
||||
};
|
||||
|
||||
init();
|
||||
|
||||
const _idToId = (data) => {
|
||||
const { _id, ...rest } = data;
|
||||
return {
|
||||
id: _id,
|
||||
...rest
|
||||
};
|
||||
}
|
||||
|
||||
const _idToArray = (data) => {
|
||||
const _idToMap = data.map((item) => _idToId(item));
|
||||
return _idToMap;
|
||||
}
|
||||
|
||||
const getResponse = (error, data, success = true) => {
|
||||
if (error) {
|
||||
return {
|
||||
success: false,
|
||||
error,
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
success,
|
||||
data,
|
||||
}
|
||||
}
|
||||
|
||||
const signUp = async ({ email, login, password }) => {
|
||||
try {
|
||||
db = await getDB('edateam');
|
||||
const userCollection = db.collection(USERS_COLLECTION);
|
||||
|
||||
const userData = await userCollection.findOne({
|
||||
$or: [
|
||||
{ login },
|
||||
{ email }
|
||||
]
|
||||
})
|
||||
|
||||
if (userData?.login === login) {
|
||||
throw new Error('This login already in db!\nPlease come up with another login!');
|
||||
}
|
||||
|
||||
if (userData?.email === email) {
|
||||
throw new Error('This email already in db!\nPlease come up with another email!');
|
||||
}
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
getHash({ password }, async (err, pass, salt, hash) => {
|
||||
if (err) {
|
||||
return reject(err);
|
||||
}
|
||||
const insertedCount = await userCollection.insertOne({ email, login, password: hash, salt });
|
||||
|
||||
if (!insertedCount) {
|
||||
return reject(new Error('Insert error!'));
|
||||
}
|
||||
resolve({});
|
||||
});
|
||||
});
|
||||
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
const getUser = async ({ email }) => {
|
||||
if (db === null) {
|
||||
throw new Error('no db connection :((');
|
||||
}
|
||||
|
||||
try {
|
||||
const userCollection = db.collection(USERS_COLLECTION);
|
||||
const userData = await userCollection.findOne({ email });
|
||||
if (userData) {
|
||||
return userData;
|
||||
}
|
||||
throw new Error('Wrong email or password!');
|
||||
} catch (error) {
|
||||
throw new Error(error);
|
||||
}
|
||||
}
|
||||
|
||||
const getListRecipes = async () => {
|
||||
try {
|
||||
db = await getDB('edateam');
|
||||
const recipesCollection = db.collection(RECIPES_COLLECTION);
|
||||
const recipesData = await recipesCollection.find().toArray();
|
||||
|
||||
if (recipesData.length > 0) {
|
||||
return _idToArray(recipesData);
|
||||
} else {
|
||||
throw new Error('No recipes found in the database!');
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error in getListRecipes:', error.message);
|
||||
throw new Error(error.message);
|
||||
}
|
||||
};
|
||||
|
||||
const getRecipe = async (dishId ) => {
|
||||
try {
|
||||
db = await getDB('edateam');
|
||||
const recipesCollection = db.collection(RECIPES_COLLECTION);
|
||||
const id = dishId.id;
|
||||
const recipeData = await recipesCollection.findOne({ _id :new ObjectId(id) } );
|
||||
if (recipeData!=null) {
|
||||
return _idToId(recipeData);
|
||||
}
|
||||
|
||||
throw new Error('Not found recipe');
|
||||
} catch (error) {
|
||||
throw new Error(error);
|
||||
}
|
||||
}
|
||||
|
||||
const addRecipe = async (recipe) => {
|
||||
try {
|
||||
db = await getDB('edateam');
|
||||
const recipesCollection = db.collection(RECIPES_COLLECTION);
|
||||
const result = await recipesCollection.insertOne(recipe);
|
||||
|
||||
if (!result.insertedId) {
|
||||
throw new Error('Recipe insertion failed');
|
||||
}
|
||||
|
||||
return {
|
||||
success: true,
|
||||
id: result.insertedId
|
||||
};
|
||||
} catch (error) {
|
||||
console.error('Error in addRecipe:', error.message);
|
||||
throw new Error(error.message);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
const requiredFields = (fields) => (req, res, next) => {
|
||||
// eslint-disable-next-line no-restricted-syntax
|
||||
for (const fieldName of fields) {
|
||||
if (!req.body[fieldName]) {
|
||||
throw new Error(`Параметр ${fieldName} не установлен`)
|
||||
}
|
||||
}
|
||||
|
||||
next()
|
||||
}
|
||||
|
||||
const addFavorite = async (userId, recipeId) => {
|
||||
|
||||
try {
|
||||
db = await getDB('edateam');
|
||||
const favoritesCollection = db.collection(FAVORITES_USER);
|
||||
const result = await favoritesCollection.updateOne(
|
||||
{ userId: new ObjectId(userId) },
|
||||
{ $addToSet: { favorites: new ObjectId(recipeId) } },
|
||||
{ upsert: true }
|
||||
);
|
||||
return result;
|
||||
} catch (error) {
|
||||
throw new Error('Error adding favorite: ' + error.message);
|
||||
}
|
||||
};
|
||||
|
||||
const getFavorites = async (userId) => {
|
||||
try {
|
||||
db = await getDB('edateam');
|
||||
const favoritesCollection = db.collection(FAVORITES_USER);
|
||||
const userFavorites = await favoritesCollection.findOne({ userId: new ObjectId(userId) });
|
||||
|
||||
if (!userFavorites || !userFavorites.favorites || userFavorites.favorites.length === 0) {
|
||||
return [];
|
||||
}
|
||||
|
||||
const recipesCollection = db.collection(RECIPES_COLLECTION);
|
||||
const favoriteRecipes = await recipesCollection.find({ _id: { $in: userFavorites.favorites } }).toArray();
|
||||
|
||||
return favoriteRecipes;
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
throw new Error("Failed to get user favorites with recipes");
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
getUser,
|
||||
signUp,
|
||||
getResponse,
|
||||
_idToId,
|
||||
_idToArray,
|
||||
getListRecipes,
|
||||
getRecipe,
|
||||
addRecipe,
|
||||
requiredFields,
|
||||
getFavorites,
|
||||
addFavorite
|
||||
};
|
||||
25
server/routers/edateam/index.js
Normal file
25
server/routers/edateam/index.js
Normal file
@@ -0,0 +1,25 @@
|
||||
const router = require('express').Router();
|
||||
|
||||
router.get('/recipe-data', (request, response) => {
|
||||
response.send(require('../json/recipe-data/success.json'));
|
||||
});
|
||||
|
||||
router.get('/userpage-data', (req, res) => {
|
||||
res.send(require('../json/userpage-data/success.json'));
|
||||
});
|
||||
|
||||
router.post('/userpage-data', (req, res) => {
|
||||
res.send(require('../json/userpage-data/success.json'));
|
||||
});
|
||||
|
||||
router.get('/homepage-data', (req, res) => {
|
||||
res.send(require('../json/homepage-data/success.json'));
|
||||
});
|
||||
|
||||
router.use('/auth', require('./auth'));
|
||||
|
||||
router.use('/recipe', require('./user'));
|
||||
|
||||
router.use('/main', require('./main'));
|
||||
|
||||
module.exports = router;
|
||||
76
server/routers/edateam/json/homepage-data/success.json
Normal file
76
server/routers/edateam/json/homepage-data/success.json
Normal file
@@ -0,0 +1,76 @@
|
||||
{
|
||||
"data": [
|
||||
{
|
||||
"src": "pancakes_meat",
|
||||
"alt": "Фотография блинчиков с мясом, сыром и луком",
|
||||
"href": "?=dish01",
|
||||
"name": "Блинчики с мясом, сыром и лучком"
|
||||
},
|
||||
{
|
||||
"src": "cheesecakes",
|
||||
"alt": "Фотография сырников из творога",
|
||||
"href": "?=dish02",
|
||||
"name": "Сырники из творога"
|
||||
},
|
||||
{
|
||||
"src": "borsch",
|
||||
"alt": "Фотография борща",
|
||||
"href": "?=dish03",
|
||||
"name": "Борщ"
|
||||
},
|
||||
{
|
||||
"src": "vareniki",
|
||||
"alt": "Фотография вареников",
|
||||
"href": "?=dish04",
|
||||
"name": "Ленивые вареники"
|
||||
},
|
||||
{
|
||||
"src": "rice_porridge",
|
||||
"alt": "Фотография рисовой каши",
|
||||
"href": "?=dish05",
|
||||
"name": "Рисовая каша"
|
||||
},
|
||||
{
|
||||
"src": "cutlets",
|
||||
"alt": "Фотография котлет по-киевски",
|
||||
"href": "?=dish06",
|
||||
"name": "Котлеты по-киевски"
|
||||
},
|
||||
{
|
||||
"src": "draniki",
|
||||
"alt": "Фотография драников",
|
||||
"href": "?=dish07",
|
||||
"name": "Драники"
|
||||
},
|
||||
{
|
||||
"src": "meringue",
|
||||
"alt": "Фотография безе",
|
||||
"href": "?=dish08",
|
||||
"name": "Безе"
|
||||
},
|
||||
{
|
||||
"src": "goulash",
|
||||
"alt": "Фотография гуляша",
|
||||
"href": "?=dish09",
|
||||
"name": "Гуляш"
|
||||
},
|
||||
{
|
||||
"src": "pancakes_cherries",
|
||||
"alt": "Фотография блинчиков с вишней и творожным сыром",
|
||||
"href": "?=dish10",
|
||||
"name": "Блинчики с вишней и творожным сыром"
|
||||
},
|
||||
{
|
||||
"src": "canned_soup",
|
||||
"alt": "Фотография супа из рыбных консервов",
|
||||
"href": "?=dish11",
|
||||
"name": "Суп из рыбных консервов"
|
||||
},
|
||||
{
|
||||
"src": "salad",
|
||||
"alt": "Фотография салата",
|
||||
"href": "?=dish12",
|
||||
"name": "Салат \"Весенний\""
|
||||
}
|
||||
]
|
||||
}
|
||||
58
server/routers/edateam/json/recipe-data/success.json
Normal file
58
server/routers/edateam/json/recipe-data/success.json
Normal file
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"name":"Блинчики с вишней и творожным сыром",
|
||||
|
||||
"stages":
|
||||
[
|
||||
"Смешать муку, молоко, яйца, сахар и соль в миске",
|
||||
"Добавить вишню в тесто и перемешать",
|
||||
"Вылить тесто на разогретую сковороду и обжарить с двух сторон до золотистого цвета",
|
||||
"Подавать блинчики, украсив творожным сыром сверху"
|
||||
],
|
||||
|
||||
"table":
|
||||
[
|
||||
{ "ingredient": "1",
|
||||
"weight": "500 гр",
|
||||
"price1": "500р.",
|
||||
"price2": "439р.",
|
||||
"price3": "600р." },
|
||||
|
||||
{ "ingredient": "Ингредиент 2",
|
||||
"weight": "2 шт",
|
||||
"price1": "120р.",
|
||||
"price2": "150р.",
|
||||
"price3": "130р." },
|
||||
|
||||
{ "ingredient": "Ингредиент 3",
|
||||
"weight": "500 гр",
|
||||
"price1": "12р.",
|
||||
"price2": "12.99р.",
|
||||
"price3": "10р." },
|
||||
|
||||
{ "ingredient": "Ингредиент 4",
|
||||
"weight": "500 гр",
|
||||
"price1": "500р.",
|
||||
"price2": "439р.",
|
||||
"price3": "600р." },
|
||||
|
||||
{ "ingredient": "Ингредиент 5",
|
||||
"weight": "500 гр",
|
||||
"price1": "500р.",
|
||||
"price2": "439р.",
|
||||
"price3": "600р." },
|
||||
|
||||
{ "ingredient": "Ингредиент 6",
|
||||
"weight": "500 гр",
|
||||
"price1": "500р.",
|
||||
"price2": "439р.",
|
||||
"price3": "600р." }
|
||||
],
|
||||
|
||||
"tags":
|
||||
[
|
||||
{ "name": "#блины", "href": "#01" },
|
||||
{ "name": "#вишня", "href": "#02" },
|
||||
{ "name": "#молоко"," href": "#03" }
|
||||
]
|
||||
|
||||
}
|
||||
30
server/routers/edateam/json/userpage-data/success.json
Normal file
30
server/routers/edateam/json/userpage-data/success.json
Normal file
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"data":{
|
||||
"id":1,
|
||||
"loginname":"Логин пользователя",
|
||||
"datesignin":"2024/05/18",
|
||||
"favoritedishes":
|
||||
[
|
||||
{"id":1,
|
||||
"dishlink":"?=dish1",
|
||||
"dishname":"Блюдо1"
|
||||
},
|
||||
{"id":2,
|
||||
"dishlink":"?=dish2",
|
||||
"dishname":"Блюдо2"
|
||||
},
|
||||
{"id":3,
|
||||
"dishlink":"?=dish3",
|
||||
"dishname":"Блюдо3"
|
||||
},
|
||||
{"id":4,
|
||||
"dishlink":"?=dish4",
|
||||
"dishname":"Блюдо4"
|
||||
},
|
||||
{"id":5,
|
||||
"dishlink":"?=dish5",
|
||||
"dishname":"Блюдо5"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
3
server/routers/edateam/key.js
Normal file
3
server/routers/edateam/key.js
Normal file
@@ -0,0 +1,3 @@
|
||||
const EDATEAM_JWT_TOKEN = 'secretyk token';
|
||||
|
||||
module.exports = {EDATEAM_JWT_TOKEN};
|
||||
51
server/routers/edateam/main.js
Normal file
51
server/routers/edateam/main.js
Normal file
@@ -0,0 +1,51 @@
|
||||
const { getListRecipes , getRecipe, addFavorite , getFavorites} = require('./controllers');
|
||||
|
||||
const router = require('express').Router();
|
||||
|
||||
router.get('/recipes', async (req, res) => {
|
||||
try {
|
||||
const result = await getListRecipes();
|
||||
return res.status(200).json({ success: true, data: result });
|
||||
} catch (error) {
|
||||
console.error('Error in GET /recipes:', error.message);
|
||||
return res.status(500).json({ success: false, message: error.message });
|
||||
}
|
||||
});
|
||||
|
||||
router.post('/recipe', async(req,res)=>{
|
||||
try{
|
||||
const result = await getRecipe(req.body);
|
||||
|
||||
return res.status(200).json({success:true, data: result});
|
||||
}
|
||||
catch(error){
|
||||
console.error('Error in GET /recipes:', error.message);
|
||||
return res.status(500).json({ success: false, message: error.message });
|
||||
}
|
||||
})
|
||||
|
||||
router.post('/favorites', async (req, res) => {
|
||||
try {
|
||||
|
||||
const { userId, recipeId } = req.body;
|
||||
const result = await addFavorite(userId, recipeId);
|
||||
return res.status(200).json({ success: true, data: result });
|
||||
} catch (error) {
|
||||
console.error('Error in POST /favorites:', error.message);
|
||||
return res.status(500).json({ success: false, message: error.message });
|
||||
}
|
||||
});
|
||||
|
||||
router.post('/get-favorites', async(req,res) =>{
|
||||
try {
|
||||
const { userId } = req.body;
|
||||
const result = await getFavorites(userId);
|
||||
console.log(result)
|
||||
return res.status(200).json({ success: true, data: result });
|
||||
} catch (error) {
|
||||
console.error('Error in POST /get-favorites:', error.message);
|
||||
return res.status(500).json({ success: false, message: error.message });
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
35
server/routers/edateam/user.js
Normal file
35
server/routers/edateam/user.js
Normal file
@@ -0,0 +1,35 @@
|
||||
const { requiredFields , getFavorites, addRecipe} = require('./controllers');
|
||||
|
||||
const router = require('express').Router();
|
||||
|
||||
router.post('/favorites', requiredFields('id'), async(req,res)=>{
|
||||
try{
|
||||
const recipes = await getFavorites(req.body);
|
||||
res.status(200).send(getResponse(recipes));
|
||||
}
|
||||
catch(error){
|
||||
res.status(400).send(getResponse(error.message));
|
||||
}
|
||||
})
|
||||
|
||||
router.post('/add-recept', async (req, res) => {
|
||||
let error = null;
|
||||
let result = null;
|
||||
|
||||
try {
|
||||
result = await addRecipe(req.body);
|
||||
} catch (e) {
|
||||
error = e.message;
|
||||
}
|
||||
|
||||
if (error) {
|
||||
console.error(`Error in POST /add-recept: ${error}`);
|
||||
}
|
||||
|
||||
return res.status(error ? 500 : 201).json({
|
||||
message: error ? error : 'Recipe added successfully',
|
||||
id: result?.id
|
||||
});
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
30
server/routers/my/index.js
Normal file
30
server/routers/my/index.js
Normal file
@@ -0,0 +1,30 @@
|
||||
const router = require('express').Router();
|
||||
|
||||
router.get('/catalog-data', (request, response) => {
|
||||
response.send(require('./stubs/json/catalog-data/success.json'))
|
||||
})
|
||||
|
||||
router.get('/item-data', (request, response) => {
|
||||
response.send(require('./stubs/json/catalog-data/newsuccess.json'))
|
||||
})
|
||||
router.post('/search', (request, response) => {
|
||||
const searchTerm = request.body.search.toLowerCase();
|
||||
|
||||
try {
|
||||
const itemsData = require('./stubs/json/catalog-data/newsuccess.json');
|
||||
const itemData = itemsData.data.find(item => item.name.toLowerCase().includes(searchTerm));
|
||||
|
||||
if (itemData) {
|
||||
return response.json({ data: itemData });
|
||||
} else {
|
||||
console.log('Item not found');
|
||||
return response.status(404).send('Item not found');
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error reading file:', error);
|
||||
return response.status(500).send('Internal server error');
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
module.exports = router;
|
||||
52
server/routers/my/json/catalog-data/success.json
Normal file
52
server/routers/my/json/catalog-data/success.json
Normal file
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"data":[
|
||||
[{
|
||||
"id": 1,
|
||||
"photo": "shirt7_1x",
|
||||
"alt" :"ФУТБОЛКА 'ЧЕРНОЕ МОРЕ'",
|
||||
"name": "ФУТБОЛКА 'ЧЕРНОЕ МОРЕ'",
|
||||
"price": "1500 руб.",
|
||||
"setphoto": ["shirt7_1x","shirt7_2x","shirt7_4x"]
|
||||
},
|
||||
{
|
||||
"id":2,
|
||||
"photo": "shirt8_1x",
|
||||
"alt" :"ЗИП МУЖСКОЙ",
|
||||
"name": "ЗИП МУЖСКОЙ",
|
||||
"price": "1500 руб.",
|
||||
"setphoto": ["shirt8_1x","shirt8_2x","shirt8_4x"]
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"photo": "shirt1_1x",
|
||||
"alt" :"Фотография футболки белого цвета с цитатой из К/ф Кавказская пленница",
|
||||
"name": "ФУТБОЛКА С ПРИНТОМ МОСФИЛЬМ",
|
||||
"price": "1500 руб.",
|
||||
"setphoto": ["shirt1_1x","shirt1_2x","shirt1_4x"]
|
||||
}],
|
||||
[{
|
||||
"id": 4,
|
||||
"photo": "shirt9_1x",
|
||||
"alt" :"ЛАВАНДОВОЕ ХУДИ",
|
||||
"name": "ЛАВАНДОВОЕ ХУДИ",
|
||||
"price": "1500 руб.",
|
||||
"setphoto": ["shirt9_1x","shirt9_2x","shirt9_4x"]
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"photo": "shirt10_1x",
|
||||
"alt" :"ФУТБОЛКА АНИМЕ",
|
||||
"name": "ФУТБОЛКА АНИМЕ",
|
||||
"price": "1500 руб.",
|
||||
"setphoto": ["shirt10_1x","shirt10_2x","shirt10_4x"]
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"photo":"shirt11_1x",
|
||||
"alt" :"ФУТБОЛКА ОВЕРСАЙЗ С ПРИНТОМ ЭРАРТА",
|
||||
"name": "ФУТБОЛКА ОВЕРСАЙЗ С ПРИНТОМ ЭРАРТА",
|
||||
"price": "1500 руб.",
|
||||
"setphoto": ["shirt11_1x","shirt11_2x", "shirt11_4x"]
|
||||
}]
|
||||
]
|
||||
}
|
||||
179
server/routers/my/json/item-data/newsuccess.json
Normal file
179
server/routers/my/json/item-data/newsuccess.json
Normal file
@@ -0,0 +1,179 @@
|
||||
{
|
||||
"data":[
|
||||
{
|
||||
"id": 1,
|
||||
"photo": ["shirt7_1x", "shirt7_1_1x"],
|
||||
"alt" :"ФУТБОЛКА 'ЧЕРНОЕ МОРЕ'",
|
||||
"name": "ФУТБОЛКА 'ЧЕРНОЕ МОРЕ'",
|
||||
"price": "1500 руб.",
|
||||
"color" : "Серый",
|
||||
"colorid" : 7,
|
||||
"colorcss": ["#606060","#FFFFFF"],
|
||||
"setphoto": ["shirt7_1x","shirt7_1_1x","shirt7_2x","shirt7_1_2x", "shirt7_4x", "shirt7_1_4x"],
|
||||
"size": ["XS/S","M/L","XL/XLL"],
|
||||
"body": ["79653",
|
||||
"Весна-Лето 2023",
|
||||
"Черное море",
|
||||
"без застежки",
|
||||
"светло-серый",
|
||||
"100% Хлопок",
|
||||
"свободный",
|
||||
"картина",
|
||||
"удлиненная",
|
||||
"101-78-96",
|
||||
"178",
|
||||
"M (48)",
|
||||
"без карманов",
|
||||
"160",
|
||||
"Женский"]
|
||||
},
|
||||
{
|
||||
"id":2,
|
||||
"photo": ["shirt8_1x", "shirt8_1_1x"],
|
||||
"alt" :"ЗИП МУЖСКОЙ",
|
||||
"name": "ЗИП МУЖСКОЙ",
|
||||
"price": "1500 руб.",
|
||||
"setphoto": ["shirt8_1x","shirt8_1_1x","shirt8_2x","shirt8_1_2x", "shirt8_4x", "shirt8_1_4x"],
|
||||
"size": ["XS/S","M/L","XL/XLL"],
|
||||
"body": ["7934",
|
||||
"Весна-Осень 2023",
|
||||
"Третьяковская галерея",
|
||||
"с застежкой",
|
||||
"черный",
|
||||
"100% Хлопок",
|
||||
"свободный",
|
||||
"надпись",
|
||||
"удлиненная",
|
||||
"90-80-96",
|
||||
"182",
|
||||
"L (50)",
|
||||
"с карманами",
|
||||
"160",
|
||||
"Мужской"]
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"photo": ["shirt1_1x", "shirt1_1_1x"],
|
||||
"alt" :"Фотография футболки белого цвета с цитатой из К/ф Кавказская пленница",
|
||||
"name": "Футболка с принтом Мосфильм",
|
||||
"price": "1500 руб.",
|
||||
"setphoto": ["shirt1_1x","shirt1_1_1x","shirt1_2x","shirt1_1_2x", "shirt1_4x", "shirt1_1_4x"],
|
||||
"size": ["XS/S","M/L","XL/XLL"],
|
||||
"body": ["79776",
|
||||
"Весна-Лето 2021",
|
||||
"Третьяковская галерея",
|
||||
"без застежки",
|
||||
"темно-серый",
|
||||
"100% Хлопок",
|
||||
"свободный",
|
||||
"надписи",
|
||||
"удлиненная",
|
||||
"101-78-96",
|
||||
"189",
|
||||
"L (50)",
|
||||
"без карманов",
|
||||
"160",
|
||||
"Женский"]
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"photo": ["shirt9_1x", "shirt9.1_1x"],
|
||||
"alt" :"ЛАВАНДОВОЕ ХУДИ",
|
||||
"name": "ЛАВАНДОВОЕ ХУДИ",
|
||||
"price": "1500 руб.",
|
||||
"setphoto": ["shirt9_1x","shirt9.1_1x","shirt9_2x","shirt9.1_2x", "shirt9_4x", "shirt9.1_4x"],
|
||||
"size": ["XS/S","M/L","XL/XLL"],
|
||||
"body": ["79276",
|
||||
"Весна-Лето 2021",
|
||||
"Третьяковская галерея",
|
||||
"без застежки",
|
||||
"лавандовы",
|
||||
"100% Хлопок",
|
||||
"свободный",
|
||||
"надписи",
|
||||
"удлиненная",
|
||||
"101-78-96",
|
||||
"184",
|
||||
"L (50)",
|
||||
"с карманами",
|
||||
"160",
|
||||
"Женский"]
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"photo": ["shirt10_1x", "shirt10.1_1x"],
|
||||
"alt" :"ФУТБОЛКА АНИМЕ",
|
||||
"name": "ФУТБОЛКА АНИМА",
|
||||
"price": "1500 руб.",
|
||||
"setphoto": ["shirt10_1x","shirt10.1_1x","shirt10_2x","shirt10.1_2x", "shirt10_4x", "shirt10.1_4x"],
|
||||
"size": ["XS/S","M/L","XL/XLL"],
|
||||
"body": ["79276",
|
||||
"Лето 2024",
|
||||
"Третьяковская галерея",
|
||||
"без застежки",
|
||||
"фистошковый",
|
||||
"100% Хлопок",
|
||||
"свободный",
|
||||
"картина",
|
||||
"удлиненная",
|
||||
"101-78-96",
|
||||
"189",
|
||||
"L (50)",
|
||||
"без карманов",
|
||||
"160",
|
||||
"Мужской"]
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"photo": ["shirt11_1x", "shirt11.1_1x"],
|
||||
"alt" :"ФУТБОЛКА ОВЕРСАЙЗ С ПРИНТОМ ЭРАРТА",
|
||||
"name": "ФУТБОЛКА ОВЕРСАЙЗ С ПРИНТОМ ЭРАРТА",
|
||||
"price": "1500 руб.",
|
||||
"setphoto": ["shirt11_1x","shirt11.1_1x","shirt11_2x","shirt11.1_2x", "shirt11_4x", "shirt11.1_4x"],
|
||||
"size": ["XS/S","M/L","XL/XLL"],
|
||||
"body": ["79276",
|
||||
"Лето 2024",
|
||||
"Третьяковская галерея",
|
||||
"без застежки",
|
||||
"черный",
|
||||
"100% Хлопок",
|
||||
"свободный",
|
||||
"картина",
|
||||
"удлиненная",
|
||||
"101-78-96",
|
||||
"189",
|
||||
"L (50)",
|
||||
"без карманов",
|
||||
"160",
|
||||
"Женский"]
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"photo": ["shirt7_1x", "shirt7_1_1x"],
|
||||
"alt" :"ФУТБОЛКА 'ЧЕРНОЕ МОРЕ'",
|
||||
"name": "ФУТБОЛКА 'ЧЕРНОЕ МОРЕ'",
|
||||
"price": "1500 руб.",
|
||||
"color" : "Белый",
|
||||
"colorid" : 1,
|
||||
"colorcss": ["#606060","#FFFFFF"],
|
||||
"setphoto": ["shirt7_1x","shirt7_1_1x","shirt7_2x","shirt7_1_2x", "shirt7_4x", "shirt7_1_4x"],
|
||||
"size": ["XS/S","M/L","XL/XLL"],
|
||||
"body": ["79653",
|
||||
"Весна-Лето 2023",
|
||||
"Черное море",
|
||||
"без застежки",
|
||||
"светло-серый",
|
||||
"100% Хлопок",
|
||||
"свободный",
|
||||
"картина",
|
||||
"удлиненная",
|
||||
"101-78-96",
|
||||
"178",
|
||||
"M (48)",
|
||||
"без карманов",
|
||||
"160",
|
||||
"Женский"]
|
||||
}
|
||||
]
|
||||
|
||||
}
|
||||
17
server/routers/r-and-m/index.js
Normal file
17
server/routers/r-and-m/index.js
Normal file
@@ -0,0 +1,17 @@
|
||||
const router = require('express').Router();
|
||||
|
||||
router.get('/landing-data', (request, response) => {
|
||||
response.send(require('./json/landing-data/success.json'));
|
||||
});
|
||||
|
||||
router.post('/search', (req, res) => {
|
||||
const { search } = req.body;
|
||||
|
||||
if (search === 'Morty') {
|
||||
return res.send(require('./json/seach/alive.success.json'));
|
||||
}
|
||||
|
||||
res.send(require('./json/seach/success.json'));
|
||||
})
|
||||
|
||||
module.exports = router;
|
||||
3
server/routers/r-and-m/json/landing-data/error.json
Normal file
3
server/routers/r-and-m/json/landing-data/error.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"error": "not found"
|
||||
}
|
||||
40
server/routers/r-and-m/json/landing-data/success.json
Normal file
40
server/routers/r-and-m/json/landing-data/success.json
Normal file
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"data": [
|
||||
{
|
||||
"id": "0.9212559272707432",
|
||||
"title": "Рик Санчез",
|
||||
"subTitle": "Главный герой",
|
||||
"body": "Он ученый-изобретатель, который путешествует по разным мирам и измерениям, используя свою уникальную машину для путешествий. Рик обладает острым умом и нестандартным мышлением, что позволяет ему решать самые сложные проблемы. Он также известен своим цинизмом и сарказмом, что делает его персонажем с ярким характером.",
|
||||
"image": "rick",
|
||||
"link": "https://en.wikipedia.org/wiki/Rick_Sanchez"
|
||||
},
|
||||
{
|
||||
"id": "0.44732992281434125",
|
||||
"title": "Морти Смит",
|
||||
"subTitle": "Внук Рика",
|
||||
"body": "Обычный подросток, который часто оказывается втянутым в приключения своего дедушки. Морти часто испытывает трудности с принятием решений и не всегда понимает, что происходит вокруг него. Однако, несмотря на свою неопытность, Морти часто оказывается ключевым элементом в решении сложных ситуаций.",
|
||||
"image": "morty",
|
||||
"link": "https://en.wikipedia.org/wiki/morty"
|
||||
},
|
||||
{
|
||||
"id": "0.9858955616085823",
|
||||
"title": "Бет Смит",
|
||||
"subTitle": "Мать Морти",
|
||||
"body": "Бет Смит также является мамой Морти. Она врач и мать-одиночка, которая старается поддерживать свою семью. Бет часто оказывается в конфликте с Риком из-за его безответственного поведения и постоянных приключений. Однако, несмотря на все трудности, Бет всегда готова прийти на помощь своей семье.",
|
||||
"image": "beth",
|
||||
"link": "https://en.wikipedia.org/wiki/beth"
|
||||
},
|
||||
{
|
||||
"id": "0.1590784370756242",
|
||||
"title": "Джерри Смит",
|
||||
"subTitle": "Отец Морти",
|
||||
"body": "Джерри Смит - муж Бет. Он обычный человек, который старается справиться с жизнью в семье, полной необычных персонажей. Джерри часто оказывается в тени Рика и Морти, но он всегда готов поддержать свою семью в трудные моменты.",
|
||||
"image": "jerry",
|
||||
"link": "https://en.wikipedia.org/wiki/beth"
|
||||
},
|
||||
{
|
||||
"id": "0.29021795027285324",
|
||||
"body": "Семья Смитов - это только часть персонажей, представленных в сериале \"Rick and Morty\". В сериале также присутствуют множество других интересных и запоминающихся персонажей, каждый из которых имеет свою уникальную историю и характер. На этой странице вы сможете узнать больше о каждом персонаже, его истории и роли в сериале. Мы также предлагаем вам возможность ознакомиться с интересными фактами о создании сериала и его персонажах. Присоединяйтесь к нам и погрузитесь в увлекательный мир \"Rick and Morty\"!"
|
||||
}
|
||||
]
|
||||
}
|
||||
24
server/routers/r-and-m/json/seach/alive.success.json
Normal file
24
server/routers/r-and-m/json/seach/alive.success.json
Normal file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"data": [
|
||||
{
|
||||
"id": 14,
|
||||
"name": "Morty",
|
||||
"status": "alive",
|
||||
"species": "Alien",
|
||||
"type": "",
|
||||
"gender": "Male",
|
||||
"origin": {
|
||||
"name": "unknown",
|
||||
"url": ""
|
||||
},
|
||||
"location": {
|
||||
"name": "Citadel of Ricks",
|
||||
"url": "https://rickandmortyapi.com/api/location/3"
|
||||
},
|
||||
"image": "https://rickandmortyapi.com/api/character/avatar/14.jpeg",
|
||||
"episode": ["https://rickandmortyapi.com/api/episode/10"],
|
||||
"url": "https://rickandmortyapi.com/api/character/14",
|
||||
"created": "2017-11-04T20:51:31.373Z"
|
||||
}
|
||||
]
|
||||
}
|
||||
24
server/routers/r-and-m/json/seach/success.json
Normal file
24
server/routers/r-and-m/json/seach/success.json
Normal file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"data": [
|
||||
{
|
||||
"id": 14,
|
||||
"name": "Alien Morty",
|
||||
"status": "unknown",
|
||||
"species": "Alien",
|
||||
"type": "",
|
||||
"gender": "Male",
|
||||
"origin": {
|
||||
"name": "unknown",
|
||||
"url": ""
|
||||
},
|
||||
"location": {
|
||||
"name": "Citadel of Ricks",
|
||||
"url": "https://rickandmortyapi.com/api/location/3"
|
||||
},
|
||||
"image": "https://rickandmortyapi.com/api/character/avatar/14.jpeg",
|
||||
"episode": ["https://rickandmortyapi.com/api/episode/10"],
|
||||
"url": "https://rickandmortyapi.com/api/character/14",
|
||||
"created": "2017-11-04T20:51:31.373Z"
|
||||
}
|
||||
]
|
||||
}
|
||||
14
server/routers/school-stage/index.js
Normal file
14
server/routers/school-stage/index.js
Normal file
@@ -0,0 +1,14 @@
|
||||
const router = require('express').Router();
|
||||
|
||||
router.get('/teachers', (request, response) => {
|
||||
response.send(require('./json/teachers/success.json'))
|
||||
})
|
||||
|
||||
router.get('/account', (request, response) => {
|
||||
response.send(require('./json/account/account.json'))
|
||||
})
|
||||
router.post('/login', (request, response) => {
|
||||
response.send(require('./json/login/success.json'))
|
||||
})
|
||||
|
||||
module.exports = router;
|
||||
28
server/routers/school-stage/json/account/account.json
Normal file
28
server/routers/school-stage/json/account/account.json
Normal file
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"data": [
|
||||
{
|
||||
"login": "user1",
|
||||
"password": "123",
|
||||
"photo": "boy",
|
||||
"surname": "Иванов",
|
||||
"name": "Иван",
|
||||
"class": "2",
|
||||
"group": "1",
|
||||
"number": "+7 927 030 13 00",
|
||||
"teacher": "Иванова Валерия Константиновна",
|
||||
"lessons": ["02.05", "07.05", "14.05", "17.05", "21.05", "24.05", "28.05"]
|
||||
},
|
||||
{
|
||||
"login": "user2",
|
||||
"password": "123",
|
||||
"photo": "boy",
|
||||
"surname": "Александров",
|
||||
"name": "Александр",
|
||||
"class": "3",
|
||||
"group": "2",
|
||||
"number": "+7 927 030 13 00",
|
||||
"teacher": "Иванова Валерия Константиновна",
|
||||
"lessons": ["02.05", "07.05", "14.05", "17.05", "21.05", "24.05", "28.05"]
|
||||
}
|
||||
]
|
||||
}
|
||||
16
server/routers/school-stage/json/login/success.json
Normal file
16
server/routers/school-stage/json/login/success.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"data":
|
||||
{
|
||||
"login": "user1",
|
||||
"password": "123",
|
||||
"photo": "boy",
|
||||
"surname": "Иванов",
|
||||
"name": "Иван",
|
||||
"class": "2",
|
||||
"group": "1",
|
||||
"number": "+7 927 030 13 00",
|
||||
"teacher": "Иванова Валерия Константиновна",
|
||||
"lessons": ["02.05", "07.05", "14.05", "17.05", "21.05", "24.05", "28.05"]
|
||||
}
|
||||
|
||||
}
|
||||
10
server/routers/school-stage/json/teachers/success.json
Normal file
10
server/routers/school-stage/json/teachers/success.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"data": [
|
||||
{
|
||||
"imageUrl": "teacher1"
|
||||
},
|
||||
{
|
||||
"imageUrl": "teacher2"
|
||||
}
|
||||
]
|
||||
}
|
||||
136
server/routers/webstar-project/index.js
Normal file
136
server/routers/webstar-project/index.js
Normal file
@@ -0,0 +1,136 @@
|
||||
const router = require('express').Router();
|
||||
const authMiddleware = require('./middleware/auth-middleware');
|
||||
|
||||
router.get('/cards-data', (request, response) => {
|
||||
response.send(require('./json/cards-data/success.json'))
|
||||
})
|
||||
|
||||
router.get('/messages', (request, response) => {
|
||||
response.send(require('./json/messages/success.json'))
|
||||
})
|
||||
|
||||
router.get('/user', authMiddleware, (request, response) => {
|
||||
const email = request.userEmail;
|
||||
|
||||
try {
|
||||
const usersData = require('./json/users-data/success.json');
|
||||
const userData = usersData.data.find(user => user.email === email);
|
||||
|
||||
if (userData) {
|
||||
return response.json(userData.favourites);
|
||||
}
|
||||
response.status(404).send('User not found');
|
||||
|
||||
} catch (error) {
|
||||
console.error('Error reading file:', error);
|
||||
response.status(500).send('Internal server error');
|
||||
}
|
||||
})
|
||||
|
||||
router.get('/cards-data/:id', (request, response) => {
|
||||
const cardId = request.params.id;
|
||||
|
||||
try {
|
||||
const cardsData = require('./json/cards-data/success.json');
|
||||
const cardData = cardsData.data.find(card => card.id === cardId);
|
||||
|
||||
if (cardData) {
|
||||
return response.json(cardData);
|
||||
}
|
||||
response.status(404).send('Card not found');
|
||||
|
||||
} catch (error) {
|
||||
console.error('Error reading file:', error);
|
||||
response.status(500).send('Internal server error');
|
||||
}
|
||||
})
|
||||
|
||||
router.get('/messages/:id', (request, response) => {
|
||||
const cardId = request.params.id;
|
||||
|
||||
try {
|
||||
const cardsData = require('./json/messages/success.json');
|
||||
const cardData = cardsData.data.find(card => card.id === cardId);
|
||||
|
||||
if (cardData) {
|
||||
return response.json(cardData);
|
||||
}
|
||||
response.status(404).send('Card not found');
|
||||
|
||||
} catch (error) {
|
||||
console.error('Error reading file:', error);
|
||||
response.status(500).send('Internal server error');
|
||||
}
|
||||
})
|
||||
|
||||
router.post('/login', (request, response) => {
|
||||
const { email, password } = request.body.loginData;
|
||||
|
||||
try {
|
||||
const users = require('./json/users-data/success.json');
|
||||
const user = users.data.find(user => user.email === email && user.password === password);
|
||||
|
||||
if (!user) {
|
||||
return response.status(401).send('Invalid credentials');
|
||||
}
|
||||
|
||||
const responseObject = {
|
||||
email: user.email,
|
||||
}
|
||||
|
||||
if (user.cardId){
|
||||
responseObject.cardId = user.cardId || "";
|
||||
}
|
||||
return response.json(responseObject);
|
||||
} catch (error) {
|
||||
console.error('Error reading file:', error);
|
||||
response.status(500).send('Internal server error');
|
||||
}
|
||||
})
|
||||
|
||||
router.post('/register', async (request, response) => {
|
||||
const { _name, email, password, confirmPassword } = request.body.registerData;
|
||||
|
||||
try {
|
||||
if (password !== confirmPassword) {
|
||||
return response.status(400).send('Passwords do not match');
|
||||
}
|
||||
const users = require('./json/users-data/success.json');
|
||||
|
||||
const existingUser = users.data.find(user => user.email === email);
|
||||
|
||||
if (existingUser) {
|
||||
return response.status(400).send('User with this email already exists');
|
||||
}
|
||||
|
||||
return response.json({ email: email});
|
||||
} catch (error) {
|
||||
console.error('Error registering user:', error);
|
||||
response.status(500).send('Internal server error');
|
||||
}
|
||||
});
|
||||
|
||||
router.post('/favourite', async (request, response) => {
|
||||
const { cardId, email } = request.body;
|
||||
|
||||
try {
|
||||
const users = require('./json/users-data/success.json');
|
||||
const user = users.data.find(user => user.email === email);
|
||||
|
||||
if (!user) {
|
||||
return response.status(404).send('User not found');
|
||||
}
|
||||
|
||||
const index = user.favourites.indexOf(cardId);
|
||||
if (index !== -1) {
|
||||
return response.status(200).send('Card removed from favourites successfully');
|
||||
}
|
||||
|
||||
response.status(200).send('Card added to favourites successfully');
|
||||
} catch (error) {
|
||||
console.error('Error adding card to favourites:', error);
|
||||
response.status(500).send('Internal server error');
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
172
server/routers/webstar-project/json/cards-data/success.json
Normal file
172
server/routers/webstar-project/json/cards-data/success.json
Normal file
@@ -0,0 +1,172 @@
|
||||
{
|
||||
"data": [
|
||||
{
|
||||
"id": "1",
|
||||
"ownerId": "user1@gmail.com",
|
||||
"sliderImages": ["site1", "site2", "site3"],
|
||||
"title": "Верстка сайтов любой сложности. Мобильная разработка",
|
||||
"tags": ["Сайты", "Под ключ", "Десктоп"],
|
||||
"profileData": {
|
||||
"name": "Yuji Itadori",
|
||||
"geolocation": "г. Казань",
|
||||
"description": "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Expedita nemo cumque, magni doloremque aspernatur illo nisi magnam! Perspiciatis, aspernatur excepturi dolores autem, ut sequi dolore vitae doloremque ratione expedita velit molestias quidem hic quod culpa corrupti vel ad.",
|
||||
"profilePicture": "site1",
|
||||
"backgroundImage": "backgroundImage1"
|
||||
},
|
||||
"articles": [
|
||||
{
|
||||
"id": "1",
|
||||
"label": "Верстка статичного сайта",
|
||||
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
|
||||
"imageUrl": "site1"
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"label": "Разработка простого мобильного приложения",
|
||||
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
|
||||
"imageUrl": "site2"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"ownerId": "admin@admin.ru",
|
||||
"sliderImages": ["site2", "site1", "site3"],
|
||||
"title": "Дизайн сайтов. Разработка сайтов под ключ",
|
||||
"tags": ["Сайты", "Под ключ", "Десктоп"],
|
||||
"profileData": {
|
||||
"name": "Admin",
|
||||
"geolocation": "г. Казань",
|
||||
"description": "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Expedita nemo cumque, magni doloremque aspernatur illo nisi magnam! Perspiciatis, aspernatur excepturi dolores autem, ut sequi dolore vitae doloremque ratione expedita velit molestias quidem hic quod culpa corrupti vel ad.",
|
||||
"profilePicture": "site2",
|
||||
"backgroundImage": "backgroundImage1"
|
||||
},
|
||||
"articles": [
|
||||
{
|
||||
"id": "1",
|
||||
"label": "Верстка статичного сайта",
|
||||
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
|
||||
"imageUrl": "site1"
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"label": "Разработка простого мобильного приложения",
|
||||
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
|
||||
"imageUrl": "site2"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "3",
|
||||
"ownerId": "user2@gmail.com",
|
||||
"sliderImages": ["site3", "site1", "site3"],
|
||||
"title": "FullStack разработка приложений на React",
|
||||
"tags": ["Сайты", "Под ключ", "Десктоп"],
|
||||
"profileData": {
|
||||
"name": "Secret Guest",
|
||||
"geolocation": "г. Казань",
|
||||
"description": "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Expedita nemo cumque, magni doloremque aspernatur illo nisi magnam! Perspiciatis, aspernatur excepturi dolores autem, ut sequi dolore vitae doloremque ratione expedita velit molestias quidem hic quod culpa corrupti vel ad.",
|
||||
"profilePicture": "site3",
|
||||
"backgroundImage": "backgroundImage1"
|
||||
},
|
||||
"articles": [
|
||||
{
|
||||
"id": "1",
|
||||
"label": "Верстка статичного сайта",
|
||||
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
|
||||
"imageUrl": "site1"
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"label": "Разработка простого мобильного приложения",
|
||||
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
|
||||
"imageUrl": "site2"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "4",
|
||||
"ownerId": "super@star.ru",
|
||||
"sliderImages": ["site1", "site1", "site3"],
|
||||
"title": "Верстка сайтов любой сложности. Мобильная разработка",
|
||||
"tags": ["Сайты", "Под ключ", "Десктоп"],
|
||||
"profileData": {
|
||||
"name": "Hatsune Miku",
|
||||
"geolocation": "г. Казань",
|
||||
"description": "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Expedita nemo cumque, magni doloremque aspernatur illo nisi magnam! Perspiciatis, aspernatur excepturi dolores autem, ut sequi dolore vitae doloremque ratione expedita velit molestias quidem hic quod culpa corrupti vel ad.",
|
||||
"profilePicture": "site3",
|
||||
"backgroundImage": "backgroundImage1"
|
||||
},
|
||||
"articles": [
|
||||
{
|
||||
"id": "1",
|
||||
"label": "Верстка статичного сайта",
|
||||
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
|
||||
"imageUrl": "site1"
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"label": "Разработка простого мобильного приложения",
|
||||
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
|
||||
"imageUrl": "site2"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "5",
|
||||
"ownerId": "sb@sb.ru",
|
||||
"sliderImages": ["site2", "site1", "site3"],
|
||||
"title": "Дизайн сайтов. Разработка сайтов под ключ",
|
||||
"tags": ["Дизайн", "Под ключ"],
|
||||
"profileData": {
|
||||
"name": "СберТян",
|
||||
"geolocation": "г. Казань",
|
||||
"description": "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Expedita nemo cumque, magni doloremque aspernatur illo nisi magnam! Perspiciatis, aspernatur excepturi dolores autem, ut sequi dolore vitae doloremque ratione expedita velit molestias quidem hic quod culpa corrupti vel ad.",
|
||||
"profilePicture": "site3",
|
||||
"backgroundImage": "backgroundImage1"
|
||||
},
|
||||
"articles": [
|
||||
{
|
||||
"id": "1",
|
||||
"label": "Верстка статичного сайта",
|
||||
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
|
||||
"imageUrl": "site1"
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"label": "Разработка простого мобильного приложения",
|
||||
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
|
||||
"imageUrl": "site2"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "6",
|
||||
"ownerId": "tin@tin.ru",
|
||||
"sliderImages": ["site3", "site1", "site3"],
|
||||
"title": "FullStack разработка приложений на React",
|
||||
"tags": ["Сайты", "Под ключ", "Мобильные устройства"],
|
||||
"profileData": {
|
||||
"name": "Помощник Олег",
|
||||
"geolocation": "г. Казань",
|
||||
"description": "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Expedita nemo cumque, magni doloremque aspernatur illo nisi magnam! Perspiciatis, aspernatur excepturi dolores autem, ut sequi dolore vitae doloremque ratione expedita velit molestias quidem hic quod culpa corrupti vel ad.",
|
||||
"profilePicture": "site3",
|
||||
"backgroundImage": "backgroundImage1"
|
||||
},
|
||||
"articles": [
|
||||
{
|
||||
"id": "1",
|
||||
"label": "Верстка статичного сайта",
|
||||
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
|
||||
"imageUrl": "site1"
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"label": "Разработка простого мобильного приложения",
|
||||
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
|
||||
"imageUrl": "site2"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
149
server/routers/webstar-project/json/messages/success.json
Normal file
149
server/routers/webstar-project/json/messages/success.json
Normal file
@@ -0,0 +1,149 @@
|
||||
{
|
||||
"data": [
|
||||
{
|
||||
"id": "1",
|
||||
"ownerId": "user1@gmail.ru",
|
||||
"onModerating": true,
|
||||
"sliderImages": ["site1", "site2", "site3"],
|
||||
"title": "Верстка сайтов любой сложности. Мобильная разработка",
|
||||
"tags": ["Сайты", "Под ключ", "Десктоп"],
|
||||
"profileData": {
|
||||
"name": "Yuji Itadori",
|
||||
"geolocation": "г. Казань",
|
||||
"description": "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Expedita nemo cumque, magni doloremque aspernatur illo nisi magnam! Perspiciatis, aspernatur excepturi dolores autem, ut sequi dolore vitae doloremque ratione expedita velit molestias quidem hic quod culpa corrupti vel ad.",
|
||||
"profilePicture": "site2",
|
||||
"backgroundImage": "backgroundImage1"
|
||||
},
|
||||
"articles": [
|
||||
{
|
||||
"id": "1",
|
||||
"label": "Верстка статичного сайта",
|
||||
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
|
||||
"imageUrl": "site1"
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"label": "Разработка простого мобильного приложения",
|
||||
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
|
||||
"imageUrl": "site2"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"ownerId": "admin@admin.ru",
|
||||
"onModerating": true,
|
||||
"sliderImages": ["site2", "site1", "site3"],
|
||||
"title": "Дизайн сайтов. Разработка сайтов под ключ",
|
||||
"tags": ["Сайты", "Под ключ", "Десктоп"],
|
||||
"profileData": {
|
||||
"name": "Admin",
|
||||
"geolocation": "г. Казань",
|
||||
"description": "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Expedita nemo cumque, magni doloremque aspernatur illo nisi magnam! Perspiciatis, aspernatur excepturi dolores autem, ut sequi dolore vitae doloremque ratione expedita velit molestias quidem hic quod culpa corrupti vel ad.",
|
||||
"profilePicture": "profilePicture1",
|
||||
"backgroundImage": "backgroundImage1"
|
||||
},
|
||||
"articles": [
|
||||
{
|
||||
"id": "1",
|
||||
"label": "Верстка статичного сайта",
|
||||
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
|
||||
"imageUrl": "site1"
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"label": "Разработка простого мобильного приложения",
|
||||
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
|
||||
"imageUrl": "site2"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "3",
|
||||
"ownerId": "user2@gmail.com",
|
||||
"onModerating": true,
|
||||
"sliderImages": ["site3", "site1", "site3"],
|
||||
"title": "FullStack разработка приложений на React",
|
||||
"tags": ["Сайты", "Под ключ", "Десктоп"],
|
||||
"profileData": {
|
||||
"name": "Secret Guest",
|
||||
"geolocation": "г. Казань",
|
||||
"description": "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Expedita nemo cumque, magni doloremque aspernatur illo nisi magnam! Perspiciatis, aspernatur excepturi dolores autem, ut sequi dolore vitae doloremque ratione expedita velit molestias quidem hic quod culpa corrupti vel ad.",
|
||||
"profilePicture": "profilePicture1",
|
||||
"backgroundImage": "backgroundImage1"
|
||||
},
|
||||
"articles": [
|
||||
{
|
||||
"id": "1",
|
||||
"label": "Верстка статичного сайта",
|
||||
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
|
||||
"imageUrl": "site1"
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"label": "Разработка простого мобильного приложения",
|
||||
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
|
||||
"imageUrl": "site2"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "4",
|
||||
"ownerId": "super@star.ru",
|
||||
"onModerating": true,
|
||||
"sliderImages": ["site1", "site1", "site3"],
|
||||
"title": "Верстка сайтов любой сложности. Мобильная разработка",
|
||||
"tags": ["Сайты", "Под ключ", "Десктоп"],
|
||||
"profileData": {
|
||||
"name": "Hatsune Miku",
|
||||
"geolocation": "г. Казань",
|
||||
"description": "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Expedita nemo cumque, magni doloremque aspernatur illo nisi magnam! Perspiciatis, aspernatur excepturi dolores autem, ut sequi dolore vitae doloremque ratione expedita velit molestias quidem hic quod culpa corrupti vel ad.",
|
||||
"profilePicture": "profilePicture1",
|
||||
"backgroundImage": "backgroundImage1"
|
||||
},
|
||||
"articles": [
|
||||
{
|
||||
"id": "1",
|
||||
"label": "Верстка статичного сайта",
|
||||
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
|
||||
"imageUrl": "site1"
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"label": "Разработка простого мобильного приложения",
|
||||
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
|
||||
"imageUrl": "site2"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "5",
|
||||
"ownerId": "sb@sb.ru",
|
||||
"onModerating": false,
|
||||
"sliderImages": ["site2", "site1", "site3"],
|
||||
"title": "Дизайн сайтов. Разработка сайтов под ключ",
|
||||
"tags": ["Дизайн", "Под ключ"],
|
||||
"profileData": {
|
||||
"name": "СберТян",
|
||||
"geolocation": "г. Казань",
|
||||
"description": "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Expedita nemo cumque, magni doloremque aspernatur illo nisi magnam! Perspiciatis, aspernatur excepturi dolores autem, ut sequi dolore vitae doloremque ratione expedita velit molestias quidem hic quod culpa corrupti vel ad.",
|
||||
"profilePicture": "profilePicture1",
|
||||
"backgroundImage": "backgroundImage1"
|
||||
},
|
||||
"articles": [
|
||||
{
|
||||
"id": "1",
|
||||
"label": "Верстка статичного сайта",
|
||||
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
|
||||
"imageUrl": "site1"
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"label": "Разработка простого мобильного приложения",
|
||||
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
|
||||
"imageUrl": "site2"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
50
server/routers/webstar-project/json/users-data/success.json
Normal file
50
server/routers/webstar-project/json/users-data/success.json
Normal file
@@ -0,0 +1,50 @@
|
||||
{
|
||||
"data": [
|
||||
{
|
||||
"name": "Yuji Itadori",
|
||||
"email": "user1@gmail.com",
|
||||
"password": "12345",
|
||||
"cardId": "1",
|
||||
"favourites": [
|
||||
"1",
|
||||
"2",
|
||||
"6"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Admin",
|
||||
"email": "admin@admin.ru",
|
||||
"password": "*****",
|
||||
"cardId": "2",
|
||||
"favourites": []
|
||||
},
|
||||
{
|
||||
"name": "Secret Guest",
|
||||
"email": "user2@gmail.com",
|
||||
"password": "qwer",
|
||||
"cardId": "3",
|
||||
"favourites": []
|
||||
},
|
||||
{
|
||||
"name": "Hatsune Miku",
|
||||
"email": "super@star.ru",
|
||||
"password": "12345",
|
||||
"cardId": "4",
|
||||
"favourites": []
|
||||
},
|
||||
{
|
||||
"name": "СберТян",
|
||||
"email": "sb@sb.ru",
|
||||
"password": "12345",
|
||||
"cardId": "5",
|
||||
"favourites": []
|
||||
},
|
||||
{
|
||||
"name": "Помощник Олег",
|
||||
"email": "tin@tin.ru",
|
||||
"password": "12345",
|
||||
"cardId": "6",
|
||||
"favourites": []
|
||||
}
|
||||
]
|
||||
}
|
||||
14
server/routers/webstar-project/middleware/auth-middleware.js
Normal file
14
server/routers/webstar-project/middleware/auth-middleware.js
Normal file
@@ -0,0 +1,14 @@
|
||||
const authMiddleware = (req, res, next) => {
|
||||
const email = (req.headers.authorization || "").replace("Bearer ", "");
|
||||
|
||||
if (email) {
|
||||
req.userEmail = email;
|
||||
next();
|
||||
} else {
|
||||
return res.status(403).json({
|
||||
message: "Access Denied",
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = authMiddleware
|
||||
Reference in New Issue
Block a user